C语言程序设计第五次作业——循环结构(1)
(一)改错题
1、题目
输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:
c = 5×(f-32)/9其中,c表示摄氏温度,f表示华氏温度。
(1)错误信息:
错误原因:for语句中间用分号隔开
改正方法:把for语句中间的逗号换成分号
(2)错误信息:
错误原因:华氏度增加条件与题目不符
改正方法:把fahr ++改成fahr=fahr+2
(3)错误信息:
错误原因:fahr是整型变量,不能用%f
改正方法:把%3.0f改成%d
(4)错误信息:
错误原因:for语句后面没有加大括号
改正方法:在for语句后面加上大括号把后两个语句括上
(5)错误信息:
错误原因:公式题目不符
改正方法:把公式改成celsius = 5×(fahr-32)/9
(6)错误信息:
错误原因:for 语句最后不能加分号
改正方法:把for语句最后的分号去掉
(二)学习总结
1.程序分析
1、定义三个整形变量分别存到num,odd,even里,并初始化odd=0,even=0
2、执行for语句,判定i=1符合i<=10,执行循环体
3、输入一个整型数据,定义为num
4、执行if语句,如果num与2求余等于0,即num为偶数,则执行even=even+1;
如果num与2求余不等于0,即num为奇数,则执行odd=odd+1
5、i=i+1,再次执行for语句,判定i=2符合i<=10,执行循环体
6、重复执行3、4、5步直到i=11
7、执行for语句,判定i=11不符合i<=10,执行printf语句,输出even和odd的值
2.增量运算符
(1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?
结果输出i=3,j=3;
前缀和后缀形式不一样,当条件是i++时,先进行i+1运算,然后再把两数的和赋给i;而当条件是++j时,先进行赋值,再把赋值结果+1
(2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?
输出结果是2和3;
第一条先执行2+1=3,再执行i=3,而第二条先执行j=2,再执行2+1=3;
说明增量运算符在单独使用时,前缀和后缀形式代表的含义不同;
i=3,j=2;
3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。
第一个和第二个循环语句运行结果相同,都为
虽然缩格形式不同但输出结果却完全一样,可见循环体的认定与缩格形式无关,循环体默认为循环语句下面第一条语句
第三个和第四个循环语句运行结果不同,第三个为
第四个为
第三个循环语句运行后{}输出星号和换行符号,而结果也是输出了5个星号和5个换行符,第四个循环语句运行后{}中只有输出星号,换行符号在{}外部,输出结果是5个星号,只有一个换行符,可见循环体的认定与有无{}有关,{}里面的语句才是循环体,可以进行循环运算,否则不能进行循环运算
所以,综上所述,判断循环语句中循环体时应以{}之中的内容为准,{}里的内容才是循环体;
就缩进格式而言,第一个,第三个,第四个循环语句缩进格式均正确
4.对其他你认为需要进行总结的内容进行总结。
do-while语句和while语句不同之处在于:while语句先判断条件,再来执行循环语句;而while语句则是先执行循环语句,再来判断条件。
break语句用于跳出循环语句,不仅适用于while循环,也可以用于for循环。break语句使程序的执行从break语句处中断并继续执行紧跟在所属代码后的那条语句。
continue语句终止执行循环的当前迭代语句,然后继续执行循环的下一迭代语句。
(三)实验总结
2、
(1)题目
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
(2)流程图
(3)源代码
#include<stdio.h>
int main ()
{
int i,a,N,count=0;
double average,sum=0;
scanf("%d",&N);
if(N==0)
{
printf("average = %.1f\n",average);
printf("count = %d",count);
}
else
{
for(i=1;i<=N;i++)
{
scanf("%d",&a);
sum = sum + a;
if(a>=60)
{
count=count+1;
}
}
average=sum/N;
printf("average = %.1f\n",average);
printf("count = %d",count);
}
return 0;
}
(4)实验分析
问题:
原因:忘记了学生人数为0的情况
解决办法:加上if(n=0)语句运行
(5)本题PTA提交列表
4、
(1)题目
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
(2)流程图
(3)源代码
#include <stdio.h>
#include <math.h>
int main()
{
int a=0,i = 0;
double SW = 0.0,H = 0.0,W = 0.0;
scanf("%d",&a);
for(i = 1;i <= a;i++)
{
scanf("%lf%lf",&H,&W);
SW=(H - 100) * 0.9 * 2;
if(fabs(SW - W) < SW * 0.1)
{
printf("You are wan mei!\n");
}
else if(SW - W < SW * 0.1)
{
printf("You are tai pang le!\n");
}
else
{
printf("You are tai shou le!\n");
}
}
return 0;
}
(4)实验分析
问题:输出结果错误
原因:输入时没有初始化导致输入的是随机值
解决办法:把输入的变量初始化
(5)本题PTA提交列表
6、
(1)题目
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图
(3)源代码
{
int N=0,A=0,B=0,C=0,D=0,E=0,i=0,x=0;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&x);
if(x >= 90)
{
A++;
}
else if(x < 90 && x >= 80)
{
B++;
}
else if(x < 80 && x >= 70)
{
C++;
}
else if(x < 70 && x >= 60)
{
D++;
}
else
{
E++;
}
}
printf("%d %d %d %d %d",A,B,C,D,E);
return 0;
}
(4)实验分析
本道题没有问题
(5)本题PTA提交列表
8、
(1)题目
本题要求编写程序,找出给定一系列整数中的最小值。
(2)流程图
(3)源代码
#include <stdio.h>
#include <limits.h>
int main()
{
int n=0,i=0,a=0,min=0;
a=INT_MAX;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&min);
if(min<a)
{
a=min;
}
}
printf("min = %d",a);
return 0;
}
(4)实验分析
问题:输出答案错误
原因:运行a=INT_MAX语句,没有加#include <limits.h>头文件
解决办法:在开头加上头文件
问题:a=INT_MAX语句错误
原因:不知道取最大数的函数怎么写
解决办法:经过询问同学,查阅资料学会了
(5)本题PTA提交列表
(四)博客互评
许天笑:http://www.cnblogs.com/snxtx/p/7812139.html
胡展业:http://www.cnblogs.com/SYDneyHZY/p/7803132.html
永恒破碎:http://www.cnblogs.com/zhaochenyu/p/7810395.html