我们不一样

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

一改错题:

原题:输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:c = 5×(f-32)/9其中,c表示摄氏温度,f表示华氏温度。

(1)错误信息:


错误原因:for语句括号后面添加了冒号。
改正方法:把括号后面的冒号去掉。
(2)错误信息:


错误原因:for语句括号里面的表达式间用逗号隔开。
改正方法:把括号里面的逗号改成冒号。
(3)错误信息:

错误原因:赋值表达式不正确。

改正方法:

(4)错误信息:

错误原因:fahr定义为int型程序中用了3.0f。
改正方法:将%3.0f改成%3d.
(5)错误信息:

错误原因:程序中fahr循环加1,结果运行不正确。
改正方法:将fahr+1改成fahr+2.
(6)错误信息:

错误原因:没有体现出大括号。
改正方法:在for语句中加入大括号

最后的编译结果如图:

二学习总结:

(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):第一步声明变量i ,num,odd ,even.
第二步赋初值odd=0,even=0;
第三部执行for循环语句的第一次循环i=1
判断i<=10
输入第一个数字num
如果除以二为0则even+1
如果除以二不为0则odd+1
第二次循环i=2
判断i<=10
输入第二个数字num
如果除以二为0则even+1
如果除以二不为0则odd+1
.
.
.
.
for循环最后一次i=11
不符合条件,执行结束。输出结果为这是个数字中奇数和偶数的个数。

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=2,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("\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; 

}
四个运行结果如下:




答:输出的结果各不相同,循环体的认定与缩格形式无关,与大括号有关
首先寻找是for循环还是while或do while语句然后执行大括号里面的循环体。
正确格式是(3)和(4)

4)自己的总结:
答:i++问题的使用中总是忘记每次增加的量,编写程序时不能忘记for循环前的赋值问题,及括号中的符号。应该特别注意缩格,否则対应不齐。

三实验总结:

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

源代码:

#include<stdio.h>
int main()
{
        double average;  
    count=0;
    	sum=0; 
    scanf("%d\n",&N);
    if(N>0)
    {
       for(i=1;i<=N;i++)
       {
           scanf("%d",&grade);
        	     sum=sum+grade;
           if(grade>=60)
            {
             count=count+1;  
            }
            else  
           {
             count=count; 	
            }
        } 
            average=(double)sum/N;
            printf("average = %.1f\n",average);
        printf("count = %d",count);
    }
    else if(N==0)
    {
      average=0;
    	  count=0;
      printf("average = %.1f\n",average);
      	  printf("count = %d",count);
     }
    return 0;
}

实验分析:
问题:

原因:做题时没有熟悉for语句的使用,对于i++开始时书写错误。
解决办法:通过查看课件和书本再次复习for循环语句,然后改正。
PTA提交表:

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

源代码:

#include<stdio.h>
int main()
{
    int N,a,b,i;
    double c;
    scanf("%d",&N);
    	for(i=1;i<=N;i++)
        {
        	scanf("%d %d",&a,&b);
        	c=(a-100)*0.9*2;
                if((b>0.9*c)&&(b<1.1*c))
	    {
	        	printf("You are wan mei!\n");
	    }
	    else if(b>=1.1*c)
	    {
	        	printf("You are tai pang le!\n");
	    }
	    else  
	    {
		    printf("You are tai shou le!\n");
	    }
    } 
    return 0;
  }

实验分析:
问题:体重的判别条件出现错误。
原因:没有读清题
解决方法:同学帮助查找错误。
PTA提交表:

(6)题目
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
流程图:

源代码:

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

    printf("%d %d %d %d %d",A,B,C,D,E);

    return 0;
} 

总结:
此题运用熟练,十分顺利。一次提交成功。
PTA提交表:

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

源代码:

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

    }
    printf("min = %d",min);
    return 0;
}

总结:
问题:此题不会做,向同学请教。
PTA提交表:

博客互评:
(1)http://home.cnblogs.com/u/wangqi1998/

(2)http://home.cnblogs.com/u/LLIU/

(3)http://home.cnblogs.com/u/jjjj1234/

posted on 2017-11-12 11:01  我们不一样  阅读(995)  评论(3编辑  收藏  举报