C语言程序设计第五次作业——循环结构(1)
(一)实验总结
**(一)改错题 (一) **
输出华氏摄氏温度转换表:输入两个整数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 <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;
}
错误信息一:
错误原因:
for里面的语句应该用分号隔开而不是逗号
改正方法:
将逗号改为分号
错误信息二:
输出结果错误。
错误原因:
for后面的是两条语句,应该用大括号括起来
改正方法:
将在for后面的语句括起来
错误原因二:
在开始 fahr 被定义为 int类型函数,但输出是使用了%3.0f,
改正方法:把%3.0f改为%3.0d
错误原因三:
温度的计算公式错误
改正方法:
将celsius = 5 /9 * (fahr - 32.0)改为celsius = 5 /9 * (fahr - 32.0)
错误原因四:
for循环的条件有问题
改正方法:
fahr应该每次加2而不是加1
**(二)学习总结 **
#include <stdio.h>
int main()
{
int i,num,odd,even; /* 定义函数类型 */
odd = 0;
even = 0; /*设置函数初始值*/
for(i = 1; i <= 10;i++) /* 设置for循环(若i小于等于10则执行循环,每次结束后i的值加一)*/
{
scanf("%d",&num); /* 输出一个值,将其存在num中*/
if(num % 2 == 0) /* 设置条件 若是偶数则 even的值加一 否则odd的值加一/
{
even++;
}
else
{
odd++;
}
}
printf("%d %d",even,odd); /* 分别输出函数even odd的值*/
return 0;
}
第一步:定义函数类型
第二步:将odd,even的值设置为一
第三部:设置for循环:若i小于等于10则执行循环,每次结束后i的值加一
第四步:若输入的若是偶数则 even的值加一 否则odd的值加一
第五步:依次输出even,odd的值
(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++表示先加上1在输出,而++j则表示先输出再加一
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.4的运行结果相同。对比1和2循环体的认定与缩格形式无关.对比2和3得知与{}有关。循环体中若没有加括号则只会执行第一条语句。一个循环语句中的循环体必须全部用大括号括起来才会被正确识别,除非循环体中只有一条语句
我认为3.4是正确的
4.对其他你认为需要进行总结的内容进行总结。
(1)设置for循环是要仔细检查大括号,分号,逗号的位置,for里面的语句不管有没有省略的都要用分号隔开。而且末尾不要加分号。循环体中的语句一定要括起来,不然不会完整的执行下来。
(2)在i++和++i的区别上,若都是单独使用则没有区别,但是一旦和其他语句连用是则要考虑一个顺序问题,i++表示先加一,++i表示先进行其他语句再加一
**(三)(实验总结) **
(1) 统计学生平均成绩与及格人数
(2)流程图
(3)源代码
#include<stdio.h>
int main()
{
int a,b,i,count = 0;
double average,sum;
scanf("%d",&a);
if(i=0)
{
printf("average = 0\n");
printf("count = 0\n");
}
else
{
for(i=1;i<=a;i++)
{
scanf("%d",&b);
sum = sum + b;
average = sum/i;
if(b>=60)
{
count = count+1;
}
else
{
count = count+0;
}
}
printf("average = %0.1f\n",average);
printf("count = %d\n",count);
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析
因为这个程序涉及到多个判断以及for循环,所以一定要注意用大括号做区别,不然很容易做懵了。
还要注意int,double的区分,哪个变量是int类型,哪个是double以及输出是主要是%d还是%lf
(6)本题PTA提交列表
(1) 到底是不是太胖了
(2)流程图
(3)源代码
#include <stdio.h>
#include <math.h>
int main ()
{int i,a,b,n;
float p,x;
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d%d",&a,&b);
p=(a-100)*1.8;
x=b/p-1;
if(fabs(x)<=0.1)
printf("You are wan mei!\n");
else if(b>p)
printf("You are tai pang le!\n");
else printf
("You are tai shou le!\n");
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析
这道题先要明确,是每输入一个数值,就输出一个数值不是全输入再全输出。
一定要多次检查公式是否错误,给的是市斤,而公式要求是公斤
还要注意各个判断条件的区分
(6)本题PTA提交列表
(1) 统计学生成绩
(2)流程图
(3)源代码
#include<stdio.h>
int main()
{
int grade,s,i,a=0,b=0,c=0,d=0,e=0;
scanf("%d",&s);
for(i=1;i<=s;i++)
{
scanf("%d",&grade);
if(grade>=90)
{
a=a+1;
}
else if(grade>=80)
{
b=b+1;
}
else if(grade>=70)
{
c=c+1;
}
else if(grade>=60)
{
d=d+1;
}
else
{
e=e+1;
}
}
printf("%d %d %d %d %d",a,b,c,d,e);
return 0;
}
(4)测试数据及运行结果
(5)实验分析
这道题相对比较简单,设置多个判断时注意分号和括号的使用
(6)本题PTA提交列表
(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)测试数据及运行结果
(5)实验分析
这道题建议先设置最大的数定义为min,这样方便之后的比较和输入
(6)本题PTA提交列表
(四)博客互评
李仁正
何强
杨若飞