c语言第五次作业
(一)改错题
错误信息1:
错误原因: for的循环语句中应有两个;然而都成了,无法运行
改正方法: 把,改成;
错误信息2:
错误原因: fahr是整形,输出语句中是double类型,celsius式子中5/9*(....)5和9是整形最后结果是0,
改正方法: %3.0f改成%d。5改成5.0
错误信息3:
错误原因: for循环的条件没加{},无法循环。
改正方法: 将for下面的语句用{}括起来。
错误信息4:
错误原因: 每次增加2℉,所以fahr ++是错误的
改正方法:改为 fahr = fahr + 2
错误信息5:
错误原因: celsius应该保留一位小数
改正方法: %6.1f改为%.1f
(二)学习总结
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;
}
详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么。
首先,赋值给odd和even的值为0,然后运行for语句,赋值给i是1,判断i是否小于等于10,输入一个数存在num中,然后判断与2求余是否等于0,如果是,将even加一再赋给even,否则,将odd加一赋给odd,执行i++,再判断i是否小于等于几10,是,再次输入一个数,再次与2求余是否等于0,是的话even再加一赋给even,否则odd再加一赋给odd,依次重复,最后i=11时,不小于等于10,所以进执行输出语句,even和odd的值。
功能是判断10个数中几个是奇数,几个是偶数。
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;
}
i=3 j=3
单独使用时没有区别。
(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;
}
2 3
第一条输出语句是先输出i的值,再执行i=i+1,第二条输出语句是先执行j=j+1,再输出j的值。
前缀与后缀是有区别的,前缀是先加完再执行语句,后缀是执行完语句后再加。
2和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;
}
循环体的认定与缩格形式无关
与{}有关
缩格有无不重要,一定要将循环体用{}括起来。
第三个和第四个
4.对其他你认为需要进行总结的内容进行总结。
for循环的一般语法:
for(表达式1 ;表达式2;表达式3)
{
语句段 ;
}
1
1.计算机表达式1的值,通常为循环变量赋初值;
2. 计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次,否则跳出循环;
3.计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第2步重复执行。
2
前缀与后缀的区别在于,前缀是先加后运行语句,后缀是先运行语句后再加。
(三)实验总结
7-2 统计学生平均成绩与及格人数(10 分)
(1)题目:本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
(2)流程图
(3)源代码
#include <stdio.h>
int main()
{
int N,i,y=0,count;
double sum,x;
scanf("%d",&N);
if(N>0)
{
for(i=0;i<N;i=i+1)
{
scanf("%lf",&x);
sum=sum+x;
if(x>=60)
{
y=y+1;
count=y;
}
else
{
count=y;
}
}
printf("average = %.1f\n",sum/N);
printf("count = %d",count);
}
else if(N==0)
{
printf("average = 0.0\n");
printf("count = 0");
}
}
(4)实验分析
问题:部分正确
原因: 丢掉x=60的情况
解决办法:if语句后面的(x>60)改为(x>=60)
(5)本题PTA提交列表
7-4 到底是不是太胖了(15 分)
(1)题目:据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
(2)流程图
(3)源代码
#include <stdio.h>
#include <math.h>
int main()
{
int N,i;
double H,W,t,x,y;
scanf("%d",&N);
for(i=0;i<N;i=i+1)
{
scanf("%lf %lf",&H,&W);
y=W/2;
t=(H-100)*0.9;
x=(y-t)/t;
if(x>-0.1&&x<0.1)
{
printf("You are wan mei!\n");
}
else if(x<=-0.1)
{
printf("You are tai shou le!\n");
}
else
{
printf("You are tai pang le!\n");
}
}
}
(4)实验分析
问题:部分正确
原因: 丢掉x=0.1和x=-0.1的情况
解决办法:else if(x<-0.1)改为else if(x<=-0.1)
(5)本题PTA提交列表
7-6 统计学生成绩(10 分)
(1)题目:本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图
(3)源代码
#include <stdio.h>
int main()
{
int i,x,N,a=0,b=0,c=0,d=0,e=0;
scanf("%d",&N);
for(i=0;i<N;i=i+1)
{
scanf("%d",&x);
if(x>=90)
{
a=a+1;
}
else if(x<90&&x>=80)
{
b=b+1;
}
else if(x<80&&x>=70)
{
c=c+1;
}
else if(x<70&&x>=60)
{
d=d+1;
}
else
{
e=e+1;
}
}
printf("%d %d %d %d %d",a,b,c,d,e);
}
(4)实验分析
:没有问题。
(5)本题PTA提交列表
7-8 找出最小值(10 分)
(1)题目:本题要求编写程序,找出给定一系列整数中的最小值。
(2)流程图
(3)源代码
#include <stdio.h>
int main()
{
int n,i,x,min,a;
scanf("%d",&n);
for(i=0;i<n;i=i+1)
{
if(i==0)
{
scanf("%d",&a);
min=a;
}
else
{
scanf("%d",&x);
if(x<=min)
{
min=x;
}
}
}
printf("min = %d",min);
}