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);
}
(4)实验分析
问题:部分正确
原因:第二个判断语句,x与a比
解决办法:if(x<=a)改为if(x<=min)
(5)本题PTA提交列表


1.http://www.cnblogs.com/Reloaded/p/7795161.html
1.条理清晰,语言准确。
2.图片标注清晰,让读者一看就明白。
3.格式规范,完美!!

2.http://www.cnblogs.com/GX201701-/p/7795757.html
1.格式看着不错,不过存在缺陷。源代码有的格式不规范
2.标注明确,可以给看得人一个思路。
3.仔细阅读,有的有一些瑕疵,字的大小观看有点不舒服。

3.http://www.cnblogs.com/liumiaomiao520/p/7795587.html
1.格式不太规范。
2.标注虽然明确但是观感很不舒服。
3.字的大小不太规范,看着比较乱,但总体上确实很好。
posted @ 2017-11-08 13:59  孤寂一粒沙  阅读(537)  评论(6编辑  收藏  举报