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

(四)博客互评
李仁正
何强
杨若飞

posted @ 2017-11-12 17:34  WH吴晗  阅读(275)  评论(3编辑  收藏  举报