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):

1242361-20171111191410888-1885440688.png

错误原因:for后面不加分号;

改正方法:把for()后面的分号去掉。

错误信息(2):

1242361-20171111191827200-1604991522.png

错误原因:for括号里面的符号错误。

改正方法:把for括号里面的逗号改为分号。

错误信息(3):

1242361-20171111195247169-1555548570.png

1242361-20171111195230419-255157644.png

1242361-20171111200350528-1306335087.png

错误原因:编译没错误,但是运行结果出错,检查后发现for下面没有花括号,并且循环条件也有误,应该是加2,而不是加1

改正方法:for下面的语句用花括号括起来,把for++改为for+2,如图:

1242361-20171111202137997-640795071.png

1242361-20171111202125028-1981741033.png

错误信息(5)

1242361-20171111200949263-504322629.png

错误原因:公式错误,

改正方法:

1242361-20171111202028544-1299532905.png

错误信息:

1242361-20171111202241294-466399233.png

错误原因:输出与定义的类型不符,

改正方法:把第十六行括号里边的%f改为%d,如图:

1242361-20171111202832841-685554570.png

运行后结果无误,如图:

1242361-20171111202921841-1986582098.png

1242361-20171111202950513-593814564.png

改后程序:

1242361-20171111202818841-904487022.png

(二)学习总结

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;
}

答:运行结果:

1242361-20171111205114341-1947405360.png

增量运算符在单独使用时没区别,运行结果都一样。

(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;
}

结果:

1242361-20171111205443559-1669744340.png

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)

1242361-20171111210021013-126583403.png

(2)

1242361-20171111210053153-2100986501.png

(3)

1242361-20171111210121606-630146194.png

(4)

1242361-20171111210151903-1685626769.png

答: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)流程图

1242361-20171112194022653-1077215274.png

(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)测试数据及运行结果

1242361-20171112194202434-33412287.png

(5)实验分析

本题条件语句较多,要注意花括号是否正确,其余没有什么太大的问题。

(6)本题PTA提交列表

1242361-20171112195233872-1333969218.png

2.到底是不是太胖了

(1)题目
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
(2)流程图

1242361-20171112195337825-788087927.png

(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提交列表

1242361-20171112200004638-431082664.png

3.统计学生成绩

(1)题目
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
(2)流程图

1242361-20171112200121028-523103785.png

(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提交列表

1242361-20171112200243075-384362591.png

4.找出最小值

(1)题目
本题要求编写程序,找出给定一系列整数中的最小值。
(2)流程图

1242361-20171112200605888-628441284.png

(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提交列表

1242361-20171112200901888-799927287.png

(四)博客互评
吴晗:http://www.cnblogs.com/moying456/p/7820181.html
何强:http://www.cnblogs.com/jjjj1234/p/7821160.html
李仁正:http://www.cnblogs.com/lrxlrz/p/7809529.html

转载于:https://www.cnblogs.com/panjiupeng/p/7819984.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值