1 / 34

C 语言程序设计

C 语言程序设计. 主讲教师:陈荣钦 QQ : 241881888. C 语言学习方式. 借助平台(请记录网址): http://acm.tzc.edu.cn QQ 群交流,教师和计算机专业同学解答 数学、给排水、材料请加入: 116137045 机械、土木请加入: 323434401. 考核方式. 平时: 20% ,考勤 + 平时练习情况 做题数 积分 上机: 30% ,实验、过关测试情况 循环过关测试 数组过关测试 期末: 50% ,卷面考查. 郑重声明. 系统有一套 代码抄袭检测系统 ,将严格审核投机取巧行为,包括: 拷贝他人代码

meghan
Download Presentation

C 语言程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C语言程序设计 主讲教师:陈荣钦 QQ:241881888

  2. C语言学习方式 • 借助平台(请记录网址): • http://acm.tzc.edu.cn • QQ群交流,教师和计算机专业同学解答 • 数学、给排水、材料请加入:116137045 • 机械、土木请加入:323434401

  3. 考核方式 • 平时:20%,考勤+平时练习情况 • 做题数 • 积分 • 上机:30%,实验、过关测试情况 • 循环过关测试 • 数组过关测试 • 期末:50%,卷面考查

  4. 郑重声明 • 系统有一套代码抄袭检测系统,将严格审核投机取巧行为,包括: • 拷贝他人代码 • 在比赛中拷贝自己的代码 • 检测不定时进行,见“活动->抄袭检测” • 若有抄袭,管理员或任课教师随意扣积分或平时成绩,见“活动->积分奖罚” 台院良好的学习氛围有你的功劳!有问题请QQ群交流

  5. 实验平台(简称TOJ)准备工作 • (1)注册用户:登录->用户注册,认真填写个人信息。 • (2)加入班级:排名->班级列表,找到相应班级+课程后,点击“加盟”,由任课教师审核。 • (3)审核通过后,退出系统重新登录后在用户名菜单下进入“实验”

  6. 第一章、概述 • 理解什么是程序 • 了解C语言 • 掌握C程序基本结构 • 学会在实验平台中做题

  7. 理解“程序” • 程序就是电脑能执行的一系列指令 • 计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成

  8. 计算机语言 • 计算机语言:人和计算机沟通的媒介 • 机器语言:只有0和1 • 符号语言或汇编语言:只有单词和数字 • 如Add AL,10H 表示 AL = AL + 10H • 高级语言:接近自然语言和数学符号。 • C语言就是高级语言

  9. C语言的发展及其特点 • 1972年出现至今一直在语言榜前三名。 • 最简洁适合入门的语言。 • 代码高效,最接近底层硬件,最适合开发系统软件,如: • Windows、Unix、Linux等操作系统。 • 嵌入式、单片机、工控设备开发。 • 游戏、数据处理等。

  10. 第一个简单的任务 • 整数求和(TOJ 1001) • 查看题目:题库->题目列表 题目描述: 求两个整数之和。 输入: 输入数据只包括两个整数A和B。 输出: 两个整数的和。 样例输入: 1 2 样例输出: 3

  11. 解题流程——第1步 • 打开编程软件编写代码 • VC(实验手册1.2节) • CFree(实验手册1.3节) • Code::Blocks(实验手册1.4节) #include <stdio.h> int main() { int a,b; scanf("%d %d",&a, &b); printf("%d\n",a+b); return 0; }

  12. 逐条语句执行 1.scanf和printf是系统函数,在这个文件里,包含它 2. Main是主函数,程序运行入口 #include <stdio.h> int main() {     int a,b;     scanf("%d %d",&a, &b);     printf("%d\n",a+b);     return 0; } 3. 定义两个整型变量,存在内存里 4. 从键盘输入2个整数,空格隔开 5. 结果输出到显示器控制台中 6. 终于运行完了,退出main函数 代码简析

  13. 本机编译、运行、测试 • 写好的代码先在自己电脑上运行测试,以CFree为例。 • 运行程序 • 若能出现控制台界面,表示无编译错误,否则检查程序语法 • 输入测试数据,检查是否正确

  14. 解题流程——第2步 • 将代码提交到实验系统中: • 1、点击题目的下方的“提交”链接 • 2、将刚才写好的代码粘贴到文本框中 • 3、若返回的结果是Accepted,则表示成功 温馨提示:若碰到问题,最好QQ群交流

  15. 常见错误解释 • 本机测试没问题,交到系统里Wrong Answer • 解释:实验平台后台有大量的测试数据,因此在本机正确并不代表提交也能正确。 • 解决办法: • 自己做大量的测试,多找错误数据 • QQ群请教下题目需要注意的问题。

  16. 调试技巧 • 前提:你已经找到了错误数据,可是却不知道哪个语句出错。 • 调试方法(详见实验手册1.2.2或1.3.2或1.4.2),以CFree为例: • (1)设置断点(快捷键F10); • (2)启动调试(快捷键F9); • (3)单步跟踪(快捷键F8); • (4)查看变量,检查是否正确;

  17. 调试技巧——步骤1 1 #include <stdio.h> 2 int main() 3 { 4 int a, b, c; 5 double average; 6 scanf("%d%d%d", &a, &b, &c); 7 average = (a+b+c)/3; 8 printf("%.2f\n", average); 9 return 0; 10 } 找到了错误数据

  18. 调试技巧——步骤2 按F10功能键在scanf语句后,即输入3个整数后设置了一个断点,随后按F9功能键启动调试

  19. 调试技巧——步骤3 先在控制台输入我们测到的错误数据: 1 3 4 随后程序在“断点”处停了下来,蓝色部分的语句是准备运行但还没有运行的语句。

  20. 调试技巧——步骤4 按F8将运行一个语句,图为按了两次F8的结果。我们发现数据错误了,average的结果应该为2.33...。

  21. 调试技巧——步骤5 鼠标选中相应表达式悬停片刻,即出现了计算结果,我们发现了错误的语句 环境(Context)窗口也显示了相关的变量信息 或添加监视

  22. 调试技巧——步骤6 我们已经找到了错误的语句,结束调试,并将错误语句修改成: average = (a+b+c)/3.0; 因为在C语言里,两个整数相除后只保留整数部分。而改成3.0后,结果将保留为double型小数。 继续运行测试程序吧!

  23. 常见错误解释 • 输入和输出的格式与题目要一致 #include <stdio.h> int main() { int a,b; scanf("%d,%d",&a, &b); printf("%d \n",a+b); return 0; } 测试1 测试2 多了空格 多了逗号

  24. 常见错误解释 • 不要有多余的输出文字 #include <stdio.h> int main() { int a,b; printf("please input a,b\n"); scanf("%d %d",&a, &b); printf(“sum: %d\n",a+b); return 0; } printf语句里的都是输出,因此可能与题目不符,实验系统会报:Wrong Answer

  25. 再来一个简单任务 • Hello World(TOJ 1452) 题目描述: 输出Hello, World! 代码: #include<stdio.h> int main() { printf(“Hello, World!\n”);//逗号后有空格,W大写 return 0; }

  26. 代码中可以有注释语句 • //:单行注释 • 可单独占一行 • 可出现在一行中其他内容的右侧 • /*……*/:块式注释 • 可包含多行 注释语句只用来帮助理解程序,不会运行

  27. 更复杂的C语言代码结构 自己编写的max函数,用来求两个数的最大值 #include<stdio.h> int max(int x, int y){//函数,第7章 if(x>y)//选择结构,第4章 return x; else return y; } int main() { int a, b, m; scanf("%d %d", &a, &b); m = max(a, b); printf("%d\n", m); return 0; } 调用max函数,传递a给x,b给y,返回的结果给m

  28. 单组数据or多组数据 • 实验系统中的题目有些是单组数据,有些是多组数据,会在输入描述中给出。 • 例: • TOJ 1001为单组数据 • TOJ 1076为多组数据

  29. 如何处理多组数据 • TOJ 1076, 每组两个数,以EOF结尾 #include<stdio.h> int main() { int a,b; while(scanf(“%d%d”,&a,&b)!=EOF)//循环第5章 { printf("%d\n",a+b); } return 0; } Scanf函数正常情况下返回读到的变量个数,不正常时返回-1,EOF的值也是-1

  30. 如何处理多组数据 • TOJ 1077, 已知测试数据组数 #include<stdio.h> int main() { int a, b, n; scanf("%d", &n); while(n--) { scanf("%d %d", &a, &b); printf("%d\n", a + b); } return 0; } n不断减1,当n==0时,循环就结束了

  31. 如何处理多组数据 • TOJ 1078, 以0 0结束。 a或b有一个不等于0,就继续循环 #include<stdio.h> int main() { int a,b; while(scanf("%d %d", &a, &b), a || b) { printf("%d\n", a + b); } return 0; }

  32. 如何处理特殊的输出 • TOJ 1079, 两组数据之间有空行。 没有空行 #include<stdio.h> int main() { int a,b,flag=0; while(scanf("%d%d",&a,&b),a||b) { if(flag)printf(“\n”); printf("%d\n",a+b); flag = 1; } return 0; } 3 7 11 空行 空行 没有空行 空行数比数据组数少1个。flag一开始为0,因此第一组数据前无空行,后面改为1,因此每组数据之前都有空行

  33. 练习 • 1001 整数求和 • 1452 Hello World • 1467 C语言实验题——两个数最大 • 1002 语言实验题——两个数比较 • 1165 C语言实验题——三个整数 • 1076 输入入门(1) • 1077 输入入门(2) • 1078 输入入门(3) • 1079 输出入门

  34. 实验任务 • 查看方法: • 进入你的用户名菜单->实验 • 实验需要完成: • 指定的实验题目列表 • 实验报告,需认真填写: • 实验分析 • 实验步骤 • 实验总结

More Related