第三次作业
作业要求:【https://www.cnblogs.com/c-programing-language/p/9931659.html】
第七次作业7-3 统计学生平均成绩与及格人数 (15 分)
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
输入格式:输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。
输出格式:按照以下格式输出:average = 成绩均值,
count = 及格人数,
其中平均值精确到小数点后一位。
输入样例:5
77 54 92 73 60
输出样例:average = 71.2
count = 4
一.实验代码
# include<stdio.h> int main() { int count,grade,i,N; double total,average; scanf("%d\n",&N); total=0; count=0; for(i=1;i<=N;i++){ scanf("%d",&grade); total=total+grade; average=total/N; if(grade>=60){ count=count+1;} } printf("average = %.1lf\n",average); printf("count = %d\n",count); return 0; }
二.解题思路
1.步骤
1).先定义整型变量count表示合格的人数,grade表示分数,N表示人的个数,total计算总分。
2).先输入人的个数,然写出for循环,输入五个成绩。
3).最后输出average和count。
运行的结果:
2.流程图
三.调试过程碰到的问题及解决办法
起初在for循环中忘记了写求average的代码,显示average=0.0,然后加上之后结果正确了。
调试过程
第九次作业7-2 输出闰年 (15 分)
输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入格式:输入在一行中给出21世纪的某个截止年份。
输出格式:逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
输入样例1:
2048
输出样例1:
2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048
输入样例2:2000
输出样例2:
Invalid year!
一.实验代码
#include<stdio.h> int main() { int year,i,count; count=0; scanf("%d",&year); if(year<=2000||year>2100) printf("Invalid year!\n"); else{ for(i=2001; i<=year; i++){ if(i%4==0&&i%100!=0||i%400==0){ printf("%d\n",i); count++; } } if(count==0) printf("None\n"); } return 0; }
二.解题思路
1.步骤
1).定义整型变量year表示开始输入的年份,i表示要输出的闰年,count用来统计闰年的个数。
2).一共有三种情况,一个是输入的年份不在2000-2100内,还有在大范围内,但是小范围内没有闰年。
3).另外就是存在闰年,需要用if else来找出闰年最后输出出来。
运行的结果:
2.流程图
三.调试过程碰到的问题及解决办法
开始做的时候整个代码的大概能够想到,就是不知道在表示条件时的“或者”怎么打,所以我在网上查了下"||"表示或者。
然后就遇到了点输出格式上的错误,循环输出时,要有“\n”换行。
调试过程:
输入year=2048
进入循环体,i从2001开始直到2048,在其中输出能被4或100整除或者能被400整除的数,就为闰年,同时count会记录闰年个数。
最后当i=2049时跳出循环输出闰年的结果。
第十次作业7-4 最大公约数和最小公倍数 (15 分)
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:输入在一行中给出两个正整数M和N(≤1000)。
输出格式:在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例: 511 292
输出样例: 73 2044
一.实验代码
#include<stdio.h> int main(){ int M,N,i; scanf("%d %d",&M,&N); for(i=M;i>=1;i--){ if(M%i==0&&N%i==0){ printf("%d ",i); break;} } for(i=N;i<=M*N;i++){ if(i%M==0&&i%N==0){ printf("%d",i); break;} } return 0; }
二解题思路
1.步骤
1).先定义整形变量M N i,输入M N的值。
2).用for的循环和if的条件分别找最大公约数和最小公倍数。
3).最后分别输出i表示最大公约数和最小公倍数。
运行的结果:
2.流程图
三.调试过程碰到的问题及解决办法
开始是因为不知道怎么求最大公约数和最小公倍数想了很长时间,后来知道应该用for循环和if的条件来求。
求最大公约数时,i要等于两个数中比较大的,保证能在约数多的范围内找最大公约数,然后在循环中求M N除以i是否有余数,每次循环i都要减一,直到M N都被i整除时输出i。
求最小公倍数时,i要等于两个数中较小的数,小于最大公倍数M*N,从最小的数开始找起,每次循环i要加一,直到i能同时被M和N整除时,输出i。
调试过程:
输入M和N
开始进入循环
当i等于73时,跳出第一个循环,M和N的最大公约数为73。
开始进入第二次循环
当i等于2044时,第二个循环结束,M和N的最小公倍数为2044。
个人总结
本周学习的重点就是循环语句的运用,平时比较习惯运用的就是for和while的循环语句,但是现在运用的还不够熟练,所以我应该多打一些类似的代码,增加自己的熟练度 ,同时有不会的要多问问别人,自己也要多查查相关的东西,使自己能够把循环语句更清晰熟练的运用。
作业点评:
1.https://www.cnblogs.com/chumengGTRlhz/p/9991154.html