(一)改错题
输出华氏摄氏温度转换表:输入两个整数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
源程序(有错误的程序)
#include
int 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;
}
错误信息:
错误原因:for语句格式错误,语句中用;连接,语句结束不能加;
改正方法:将原句中,变为;且原句;去掉
再编译:
运行:
运行出现差错
错误原因:for语句循环条件没有加上{ },无法循环
改正方法:将celsius = 5 /9 * (fahr - 32.0);
printf("%3.0f %6.1f\n", fahr, celsius); 用{ }括起来
进行编译:
错误原因::fahr是整型,应用%d,而输出是double类型,并且celsius应保留一位小数
改正方法:将printf("%3.f%6.1f\n")改为printf("%d%.1f\n"),在5/9前加上(double)
在进行编译:
依旧存在错误
错误原因::题中要求每次增加2℉,所以fahr++错误
改正方法:将fahr++改为fahr=fahr+2
进行编译:
结果正确
为确保程序正确,在测试第二组数据
结果正确
改正之后程序代码为:
#include
int 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 = (double)5 /9 * (fahr - 32.0);
printf("%d %.1f\n", fahr, celsius); }
return 0;
}
(二)学习总结
1.有如下程序:
#include
int 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;
}
详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么。
(1)定义整型变量 i,num,odd,even
(2)将0赋值给odd,even
(3)i赋值为1,输入一个数字,将数字放在num里,判断数字和2求余是否等于0,如果等于0,even加1,否则,odd加1
(4)i加1等于2小于10,再次进入循环,重复上面步骤,使再次输入一个数字,放在num里面,判断数字和2求余是否等于0,等于0,even加1,否则,odd加1
(5)一共输入10个数字,放在num里面,重复上面步骤,直到i>10,循环结束,输出even和odd
实现的功能就是将10个数字分为奇数和偶数,最后输出结果是奇数和偶数的个数
2.增量运算符
(1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?
#include
int main()
{
int i,j;
i = 2;
j = 2;
i++;
++j;
printf("i = %d\n",i);
printf("j = %d\n",j);
return 0;
}
增量运算符在单独使用时,前缀和后缀形式没有什么区别。
(2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?
#include
int main()
{
int i,j;
i = 2;
j = 2;
printf("%d\n",i++);
printf("%d\n",++j);
return 0;
}
第一条输出语句时先执行i,再执行i+1,第二条输出语句是先执行j+1,再输出j的值
说明在代码中前缀和后缀是有区别的,前缀是先执行加的命令再输出,而后缀就是先输出再执行加的命令
执行此段代码后,i=2,j=3
3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。
(1)
#include
int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
#include
int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
#include
int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
printf("\n");
}
return 0;
}
(4)
#include
int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
}
printf("\n");
return 0;
}
运行结果:
(4)
#include
int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
}
printf("\n");
return 0;
}
运行结果:
第一三四个程序都是正确的缩进格式。通过前两个程序可以看出缩进语句与未缩进语句输出结果一样。第一第二个程序明显是缩进之后想将两个输出语句都归入循环结构内,但for语句只将第一个分号前的语句纳入循环结构,故第一二个程序都只将第一个输出语句归入了循环结构;所以输出结果都一样。对于{}的判断,比如说第一个而程序所出现的只把分号前的语句纳入循环结构范围内,如果加入{}.,可以使其成为一个代码块,两条语句都可以被纳入for的循环语句中来,这样可以使代码块变得更加完整,我们所学习的循环结构的构建,中间很重要的一步就是嵌套结构,它所包含的代码是否正确对我们来说是非常重要的。
其他总结
(1)使用for语句时注意for后面的括号内有三条语句,所以必须用俩个分号来分隔,即使没有第一条赋值语句也要有分号
(2)循环语句一定要放在大括号里面才能进行循环
(三)实验总结
1.统计学生平均成绩与及格人数
(1)题目
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
(2)流程图
(3)源代码
#include
int main()
{
int N,a,count,sum,i;
float average;
scanf("%d",&N);
sum=0;
count=0;
average=0;
for(i=0;i=60)
{
count++;
}
}
if(N==0)
{
printf("average = 0.0\n");
}
else if(N>0)
{
average=sum/(float)N;
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)源程序
#include
int 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)源程序
#include
int 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)源程序
#include
int main()
{
int i,n,num,min;
scanf("%d", &n);
scanf("%d", &min);
for(i = 1; i < n; i++)
{
scanf("%d", &num);
if(num < min)
min = num;
else
min=min;}
printf("min = %d\n", min);
return 0;
}
(4)实验分析
不知道先与哪个数比较,得先输入一个值,不妨将其先设为最小值,再与输入数比较
(5)提交列表
四:博客互评
1.大写的X:http://www.cnblogs.com/xing--/p/7806535.html
2.杨若彤:http://www.cnblogs.com/ying-7/p/7818967.html
3.王映丹:http://www.cnblogs.com/windsky-1999/p/7810363.html