(一)改错题
输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:
c = 5×(f-32)/9 其中,c表示摄氏温度,f表示华氏温度。 输入输出样例1: Enter lower:32 Enter upper:35 fahr celsius 32 0.0 34 1.1 输入输出样例2: Enter lower:40 Enter upper:30 fahr celsius 源程序(有错误的程序)#includeint main(void){ int fahr , lower, upper; /* fahr表示华氏度 */ double celsius; /* celsius表示摄氏度 */ printf("Enter lower:"); scanf("%d",&lower); printf("Enter upper:"); scanf("%d",&upper); printf("fahr celsius\n"); /* 显示表头 */ /* 温度转换 */ for (fahr = lower , fahr <= upper, fahr ++) ; celsius = 5 /9 * (fahr - 32.0); printf("%3.0f %6.1f\n", fahr, celsius); return 0; }
错误1:
原因1:在for循环中,分号写成了逗号,而且在括号后加了分号,格式错误
改正1:将逗号改成分号,去掉括号后的分号 进行编译之后有错 错误2:原因2:经检查代码发现输出类型有错,源代码fahr是整型,应用%d,结果用成了%f
改正2:将%f改为%d 编译发现错误3 错误3:原因3:观察发现公式写错了,原公式c = 5×(f-32)/9,而在此处公式 celsius = 5 /9 * (fahr - 32.0);
改正3:将公式改正确 编译出现错误4 错误4:原因4:开始没有观察出什么错误,但是在看了半天之后发现for后边有多条语句,没有加大括号
改正4:在for语句后加上大括号 编译出现错误5 错误5:原因5:
在for循环中,每次都增加,而在输出的情况中,不是每次都输出改正5:将原题目中的fahr++改为fahr+=2
编译出现正确结果正确代码
#includeint main(void) { int fahr , lower, upper; /* fahr表示华氏度 */ double celsius; /* celsius表示摄氏度 */ printf("Enter lower:"); scanf("%d",&lower); printf("Enter upper:"); scanf("%d",&upper); printf("fahr celsius\n"); /* 显示表头 */ /* 温度转换 */ for (fahr = lower ;fahr <= upper; fahr +=2) { celsius =5*(fahr-32.0)/9; printf("%d %6.1f\n", fahr, celsius); } return 0; }
(二)学习总结
1.有如下程序:
#includeint main(){ int i,num,odd,even;odd = 0;even = 0; for(i = 1; i <= 10;i++){ scanf("%d",&num); if(num % 2 == 0) { even++; } else { odd++; } } printf("%d %d",even,odd); return 0; }
第一步:定义整形变量i,num,odd,even
第二步:给整形变量赋值 第三步:执行for循环,给变量i赋值为1,给定循环次数为10,i执行完加1 第四步:输入数据num 第五步:执行if语句,判断输入数据是否能被2整除,若能整除even+1,若不能odd+1 第六步:输出数据even和odd 此程序执行功能是判断输入的数据奇数和偶数的个数 2.增量运算符 (1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?#includeint main(){ int i,j;i = 2;j = 2;i++;++j;printf("i = %d\n",i);printf("j = %d\n",j); return 0; }
运行结果是i=3,j =3
增量运算符在单独使用时前缀与后缀形式是没有区别的,只有在混合表达式中才有区别 (2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?#includeint main(){ int i,j;i = 2;j = 2; printf("%d\n",i++);printf("%d\n",++j); return 0; }
运行结果
第一条输出语句是先输出i的值,然后执行i++ 第二条语句是先把j的值加1,然后输出,说明在表达式计算中,前缀与后缀的计算结果是不一样的 执行完结果是i =2,j=3 3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。 (1)#includeint main(){ int i;for(i = 1;i <= 5;i++) printf("*");printf("\n"); return 0; }
(2)
#includeint main(){ int i;for(i = 1;i <= 5;i++) printf("*"); printf("\n"); return 0; }
(3)
#includeint main(){ int i;for(i = 1;i <= 5;i++){ printf("*"); printf("\n");}return 0; }
(4)
#includeint main(){ int i;for(i = 1;i <= 5;i++){ printf("*");} printf("\n");return 0; }
由以上的运行结果可知循环体的认定与缩格形式无关但是与{}有关,{}里边的是循环体,外边的则不进入循环,(3)(4)缩进是正确的
(三)实验分析
一:(1)题目 本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。 输入格式: 输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。 输出格式: 按照以下格式输出: average = 成绩均值 count = 及格人数 其中平均值精确到小数点后一位。 (2)流程图(3)源代码
#includeint main(){int n,count,i,sum,score;float average=0;sum=0,count=0,score=0;scanf("%d",&n);for(i=1;i<=n;i++) { scanf("%d",&score); sum=sum+score; if(score>=60) count+=1; } if(n>0) { average=(float)sum/n;printf("average = %.1f\n",average);printf("count = %d\n",count);} else {printf("average = %.1f\n",average);printf("count = %d\n",count); }return 0; }
(4)实验分析
错误1:不知道强制转换怎么弄,输入整形如何转换成浮点型,输出显示总是0,研究了很久 改正1:查了资料,又试了几次,才将结果弄正确(5)提交列表
二:
(1):题目 据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。 输入格式: 输入第一行给出一个正整数N(≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。 输出格式: 为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!。 (2)流程图(3)源程序
#includeint main(){int i,N,x;double a,b,y;scanf("%d",&N);for(i=0;i =(a+b)) { printf("You are tai pang le!\n"); } else if(y<=(a-b)) { printf("You are tai shou le!\n"); } else { printf("You are wan mei!\n"); }}return 0;}
(4)实验分析
首先没有读懂题目的意思,不知道怎么做,研究了很久,和同学交流才做对的 (5)提交列表三:(1)题目
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则: 大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于等于60为D; 小于60为E。 输入格式: 输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。 输出格式: 在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。 (2)流程图(3)源程序
#includeint main(){int n,i,score,y=0,l=0,j=0,h=0,c=0;scanf("%d",&n);for(i=1;i<=n;i++){ scanf("%d",&score); if(score>=90) y=y+1; else if(score>=80) j=j+1; else if(score>=70) h=h+1; else if(score>=60) l=l+1; else c=c+1;}printf("%d %d %d %d %d",y,j,h,l,c);return 0; }
(4)实验分析
此题没有什么太大难度,比较简单 (5)提交列表四:(1)题目
本题要求编写程序,找出给定一系列整数中的最小值。 输入格式: 输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。 输出格式: 在一行中按照“min = 最小值”的格式输出n个整数中的最小值。 (2)流程图(3)源程序
#includeint main(){int n,i,min,number;scanf("%d",&n);scanf("%d",&number);min=number;for(i=2;i<=n;i++){scanf("%d",&number);if(min>number){min=number;}}printf("min = %d",min);return 0; }
(4)实验分析
不知道先与哪个数比较,没有一个值在内容中可以与之比较,得先输入一个值记录 (5)提交列表 四:博客互评 (1)陈魔: (2)vahalla: (3)曲儿说: