C语言程序设计第五次作业——循环结构(1)

(一)改错题:
错误信息一:

错误原因:

if语句后面加了分号,if后面不能有分号。
改正方法:去掉if语句后面的分号。

错误信息二:

错误原因:

if括号中出现了逗号,括号中不能有逗号,应该用分号。
改正方法:把逗号改成分号。

改正这两个错误后编译无错误,然后运行发现错误。

错误信息三:

错误原因:

if后面没有加花括号,是导致运行错误的原因之一。
改正方法:在if后面加花括号。正确如图:

错误信息四:

错误原因:与题中给出的公式不一样。
改正方法:

按照题中给出的公式改正。

错误信息五:

错误原因:

fahr定义的是整型,但是输出时用的是%3.0f,celsius 输出时用的是%6.1f,celsius输出时应保留了一位小数,
改正方法:

把%3.0f改成%d %6.1f改成%.1f。

错误信息六:

错误原因:fahr每次增加2℉,而fahr++是每次增加的是1℉。
改正方法:把fahr++改成fahr=fahr+2,如图:

正确源程序:

#include <stdio.h>
# include <math.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=fahr+2)
 {
	celsius = 5*(fahr - 32.0)/9; 
    printf("%d %.1f\n", fahr, celsius); 
 }
    return 0; 
}

经过以上错误改正,进行运行。如图所示:

(二)学习总结:
1.详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么。

程序的执行过程:
(1)先定义i,num,odd,even位整型。
(2)将0赋值给odd。
(3)将0赋值给even。
(4)进行循环语句for括号里的第一条语句i=1,i=1语句只执行一次后面不再循环。进行循环语句中的第二条,i<=10.i=1,复符合判断语句i<10.继续进行循环体,输入num,如果num为偶数even加一。否则奇数odd加一。
(5)进行循环体,输入num,如果num为偶数even加一。否则奇数odd加一。
(6)回到i++语句,i=2,复符合判断语句i<=10.继续进行循环体,输入num,如果num为偶数even加一。否则奇数odd加一。
(7)回到i++语句,i=3,复符合判断语句i<=10.继续进行循环体,输入num,如果num为偶数even加一。否则奇数odd加一。
.
.
.
之后一直进行循环,直到i=11时,不符合判断语句i<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; 
}

运行以上程序,结果如下:

此代码中增量运算符在单独使用时,结果都是将其加1,前缀和后缀形式并没有明显的区别。

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

运行以上程序,结果如下:

执行过程:
(1)先定义ij为整型。
(2)将2赋值给i,将2赋值给j。
(3)最后输出有后缀的i,输出有前缀的j。
i++,后缀的执行顺序是先输出原有的值然后在进行加运算。
++j,前缀的执行顺序是先进行加的运算然后输出运算后得到结果。
说明前缀和后缀还是有区别的,这两条输出语句执行完后,i和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; 
 }

此程序运行结果:

运行结果有什么不同?
(1)(2)(4)的运行结果都是横向的*****而(3)是竖向的。
循环体的认定与缩格形式是否有关?
(1)(2)的代码中的缩格形式不同但是运行结果都一样,所以可以得出循环体的认定与缩格形式无关。
与{}是否有关?
可以从(3)(4)对比中看出,运行结过得不同于{}是有关的。(3)(4)中花括号里的内容不一样导致运行结果不一样,
如何正确判断一个循环语句中的循环体?
循环体语句下一行花括号中的语句就是一个循环体,一个分号就代表一条语句的结束所以没有花括号的 的情况小就找离循环语句最近的一个分号,在这个分号之前就是的语句就是一个循环体。
哪几种格式是正确的缩进格式?
我认为(3)(4)种是正确的缩进格式。

4.对其他你认为需要进行总结的内容进行总结。
自我总结:
(1)循环体语句可以说单条语句也可以是复合语句,无论循环体有几条语句,最好都加大括号。
(2)增值运算符单独使用时,前缀和后缀形式运算结果都是一样的,前缀++i(先执行i+1,再使用I值)后缀i++(先使用I值再执行i+1)再一行语句中,一个变量只出现一次增量或减量运算符。
(3)for语句中表达式中的分号不能省略,缺少表达式2时会形成无限循环,表达式2只要其值为非零,就执行循环
体。
(4)如果每次循环完后,循环变量的值加1,可以有两种表达方式:i=i+1,i++.

(三)实验总结:
1.统计学生平均成绩与及格人数
(1)题目:
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内
(2)流程图:

(3)源代码:

# include <stdio.h>
int main(void)
{
 int i,N,count,g,sum;
 double average;5
 54
 77
 773

 scanf("%d",&N);
 count = 0;
 sum = 0;
 for(i=1;i<=N;i++)
 {
	 scanf("%d",&g);
	 sum=sum+g;
	 average=(double)sum/N;
	 if(g>=60)
	 { 
	     count++;
	 } 
 } 
	 printf("average = %.1f\n",average);
	 printf("count = %d",count);
	 return 0;
}

(4)实验分析:
问题1:

输不出结果。
原因:

i=i++,格式错误。
改正方法:
把i=i++改成i++,或是i=i+1

问题2:

与正确答案不一样小数点后面的数为0
原因:

average没有double装换
改正方法:

在sum/N前加上(double)

问题3:

原因:没有考虑当学生人数为0时

改正方法:

把计算average的公式放到for循环体中。
(5)本题PTA提交列表:

2.到底是不是太胖了
(1)题目:
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。输入第一行给出一个正整数N(≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!。
(2)流程图:

(3)源代码:

#include<stdio.h>
#include<math.h>
int main (void)
{
     int N,H,W,i,standard,a;
     scanf("%d",&N);
     standard=0;
     a=0;
     for(i=1;i<=N;i++)
{
     scanf("%d %d",&H,&W);
     standard = (H-100)*0.9*2;

     a = W-standard;
     if(a<standard*0.1&&a>-standard*0.1)
     {
          printf("You are wan mei!\n");
     }
          else if (a>=standard*0.1)
    {
    printf("You are tai pang le!\n");
    }
    else
   {
    printf("You are tai shou le!\n");
   }
 
   }
      return 0 ;
   }

(4)实验分析:

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

(3)源代码:

# include <stdio.h> 
int main(void)
{
int i,N,g,A,B,C,D,E;
scanf("%d",&N);
A = 0;
B = 0;
C = 0;
D = 0;
E = 0;
for(i = 1;i<=N;i++)
{
	scanf("%d",&g);
	if(g>=90)
	{
		A++;
	}
	else if(g<90 && g>=80)
	{
		B++;
	}
	else if(g<80 && g>=70)
	{
		C++;
	}
	else if(g<70 && g>=60)
	{
		D++;
	}
	else if(g<60) 
	{
		E++;
	}
}
printf("%d %d %d %d %d",A,B,C,D,E);
return 0;
}

(4)实验分析:
问题1:

做流程图的时候E不能被赋值。
原因:在raptor中e不能被赋值。
解决办法:用F代替E。
(5)本题PTA提交列表:

4.找出最小值:
(1)题目:
输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。在一行中按照“min = 最小值”的格式输出n个整数中的最小值。
(2)流程图:

(3)源代码:

# include <stdio.h>
int main(void)
{
    int i,min,n,k;
scanf("%d",&n);
scanf("%d",&k);
min=k;
for(i = 1;i<=n;i++)
{
	scanf("%d",&k);
	if(k<min)
	{
		min = k;
	}
}
printf("min = %d",min);
return 0;

 }

(4)实验分析:
问题一:

原因:
没有给min赋初值。
解决方法:

在for循环之前输入一个数,并把这个数赋值给min.

(5)本题PTA提交列表:

(四)博客互评:
(1)http://www.cnblogs.com/yiqiekaoziji/p/7821155.html
(2)http://www.cnblogs.com/luyu0322-/
(3)http://www.cnblogs.com/ying-7/p/7818967.html

posted @ 2017-11-12 15:13  氧气wq  阅读(733)  评论(2编辑  收藏  举报