C语言程序设计第五次作业
(一)改错题
输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:
c = 5×(f-32)/9
其中,c表示摄氏温度,f表示华氏温度。
源程序(有错误的程序)
include <stdio.h>
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;
}
错误信息(1):
错误原因:for后面不加分号;
改正方法:把for()后面的分号去掉。
错误信息(2):
错误原因:for括号里面的符号错误。
改正方法:把for括号里面的逗号改为分号。
错误信息(3):
错误原因:编译没错误,但是运行结果出错,检查后发现for下面没有花括号,并且循环条件也有误,应该是加2,而不是加1
改正方法:for下面的语句用花括号括起来,把for++改为for+2,如图:
错误信息(5)
错误原因:公式错误,
改正方法:
错误信息:
错误原因:输出与定义的类型不符,
改正方法:把第十六行括号里边的%f改为%d,如图:
运行后结果无误,如图:
改后程序:
(二)学习总结
1.有如下程序:
include <stdio.h>
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、定义整形变量(int类型),i、num、odd、even;
2、给odd赋值为零,
3、给even赋值为零。
4、定义i=1
5、判断i是否小于等于10,如果i《=10成立进行下一步,否则结束
6、如果成立,输入num的值
7、如果num对2取余为0,令even=even+1
8、如果num对2取余不为0,则令odd=odd+1
9、然后执行i=i+1
10、继续判断条件i<=10
11、如此循环,直到i>10
12、结束循环,输出even和ood的值。
功能:判断输入的十个数中奇数和偶数的个数。
2.增量运算符
(1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?
include <stdio.h>
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 <stdio.h>
int main()
{
int i,j;
i = 2;
j = 2;
printf("%d\n",i++);
printf("%d\n",++j);
return 0;
}
结果:
i++为后缀的形式,先执行的是输出i=2,然后再执行i ++,所以输出的是i=2;++j为前缀,先执行j=2,j+1,然后再执行输出,所以输出的结果是j=3。所以说明增量运算符在语句中使用时不同,前缀形式的增量,先对被赋予增量的变量的值执行增/减量操作再执行后续运算;而后缀则相反,先执行其他运算,再将变量的值执行增/量操作。因此,在编程序等实际应用中,要注意变量的增量运算符的使用方法。
3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。
(1)
include <stdio.h>
int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
(2)
include <stdio.h>
int main()
{
int i;
for(i = 1;i <= 5;i++)
printf("*");
printf("\n");
return 0;
}
(3)
include <stdio.h>
int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
printf("\n");
}
return 0;
}
(4)
include <stdio.h>
int main()
{
int i;
for(i = 1;i <= 5;i++)
{
printf("*");
}
printf("\n");
return 0;
}
运行结果:
(1)
(2)
(3)
(4)
答:1,2,4输出的一行5,而3输出的是一列5。1和2程序就只有两个printf这个语句有区别,第二个有缩格,但是输出的结果是一样的,所以循环体的认定与缩格形式无关。 2和3程序,区别在于多了一个花括号{},但是输出结果不同,在比较一下3和4程序都有花括号{}但是括号的范围不同,结果不同,当printf("\n")在花括号外面时,就不参与循环,结果就不会换行,所以输出结果与{}有关,因此在我们判断的时候我们要看for后面有没有大括号在进行运行。
4.对其他你认为需要进行总结的内容进行总结。
本章我们学的主要是循环语句,内容比较繁琐,一定要细心,还要知道循环语句的控制条件是break和continue;break只能终止并跳出最近一层的结构。break只能用于循环语句和switch语句中。在循环语句中,break语句一般都是与if语句一起使用,continue语句只结束本次循环,而不是终止整个循环的执行。
(三)实验总结
1.统计学生平均成绩与及格人数
(1)题目
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
(2)流程图
(3)源代码
include<stdio.h>
int main()
{
int n,count=0,i,a;
double average=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);
average=average+a;
if(a>=60)
{
count=count+1;
}
else
{
count=count;
}
}
average=average/(double)n;
printf("average = %.1f\n",average);
printf("count = %d",count);
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析
本题条件语句较多,要注意花括号是否正确,其余没有什么太大的问题。
(6)本题PTA提交列表
2.到底是不是太胖了
(1)题目
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
(2)流程图
(3)源代码
include<stdio.h>
include<math.h>
int main()
{
int n,h,w,i;
double x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d %d",&h,&w);
if(h<=120&& h>=200 ||w<=50&& w>300)
{
printf("chao chu fan wei!");
}
else
{
x=w-(h-100)0.92;
y=fabs(x);
if(y<(h-100)0.920.1)
{
printf("You are wan mei!\n");
}
else if(x>(h-100)0.920.1)
{
printf("You are tai pang le!\n") ;
}
else
{
printf("You are tai shou le!\n");
}
}
}
return 0;
}
(4)实验分析
对于完美身材的的判定有误差,总是不符合条件的也会判定为完美身材。原因是运用公式的时候有错误,绝对值被忽略,要加入fabs函数。
(5)本题PTA提交列表
3.统计学生成绩
(1)题目
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图
(3)源代码
include<stdio.h>
int main()
{
int i=1,n,mark,A=0,B=0,C=0,D=0,E=0;
scanf("%d\n",&n);
for(;i<=n;i++)
{
scanf("%d",&mark);
if(mark>100)
{
printf("mark is error");
}
else if(mark>=90)
{
A=A+1;
}
else if(mark>=80)
{
B=B+1;
}
else if(mark>=70)
{
C=C+1;
}
else if(mark>=60)
{
D=D+1;
}
else
{
E=E+1;
}
}
printf("%d ",A);
printf("%d ",B);
printf("%d ",C);
printf("%d ",D);
printf("%d",E);
return 0;
}
(4)实验分析
本题比较容易,只要注意每个判断时的条件运用正确就好。
(5)本题PTA提交列表
4.找出最小值
(1)题目
本题要求编写程序,找出给定一系列整数中的最小值。
(2)流程图
(3)源代码
include<stdio.h>
int main()
{
int a,n,i,min=32767;
scanf("%d",&a);
for(i=1;i<=a;i++)
{
scanf("%d",&n);
if(n<=min)
min = n;
else
min = min;
}
printf("min = %d",min);
return 0;
}
(4)实验分析
做本题时一定要注意min在一开始的赋值不是一,而是应该是一个超出变量范围的最大数。
(5)本题PTA提交列表
(四)博客互评
吴晗:http://www.cnblogs.com/moying456/p/7820181.html
何强:http://www.cnblogs.com/jjjj1234/p/7821160.html
李仁正:http://www.cnblogs.com/lrxlrz/p/7809529.html