第三次作业

作业要求:【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

2.https://www.cnblogs.com/wafx/p/9998306.html

3.https://www.cnblogs.com/abcdsjjs/p/10029383.html

posted @ 2018-11-28 22:17  s_silence  阅读(1448)  评论(7编辑  收藏  举报