C语言越到后面部分同学觉得越来越难了,但是万变不离其中。只要你了解他的原理和基本的语法就没有什么问题了,我把我自己理解的写在里程序里面。希望对同学们有所帮助!

程序

更新内容

  1. 以前定义的多个成绩以及科目,如今改用了数组来定义。简化了程序缩小了代码行数
  2. 采用了for语句循环
  3. ........................

代码

#include<stdio.h>
#define M 3
//采用了define 定义一个标识符来表示一个常量(学生数) 
#define N 5   
//采用了define 定义一个标识符来表示一个常量(课程数) 
void main(){
    char kc[N][5]={"语文","数学","英语","物理","化学"};
    /*char定义字符串,因为语文,数学,英语,物理,化学 
    这些科目属于字符串,所以采用字符串来定义他们。kc这个是拼音中
    的kecheng的首个字母来定义的,这里可以更换。[N]是对应
    上面的标识符,[5]这里面的5是代表后面的5个科目。而这里也采用了
    二维数组*/ 
    float a[M][N]={0,0,0,0,0},tol[M+1],ktol[N+1];
    /*这里的[M]和[N]对应上面的学生数和课程数后面的{0,0,0,0,0}
    分别为他们赋一个初始值这个值为0。tol[M+1]和ktol[N+1]分别代表
    下一个学生和下一个科目。因为在程序中的[5]这里面代表有5个数,这个五
    个数分别是0,1,2,3,4并不包含5在里面*/ 
    int i,j;
    /*定义两个整型数,这两个量分别表示人数和科目*/ 
    //输入功能
    for(i=0;i<M;i++){
        /* 这里采用了for循环 括号里面的i=0;i<M;i++分别表示
        第一个同学;i<M规定了这个程序只能记录52个人的成绩,i++表示
        执行完第一个同学之后自动跳转到第二个同学*/ 
    printf("请输入A%d同学五门成绩:\n",i+1);
    //提示成绩输入 
    tol[i]=0;
    //表示i是从第一个同学开始 
    for(j=0;j<N;j++){
        //j=0表示是从第一个科目进行录入 
        while(1){
            //这里采用了while循环 
        printf("%s:",kc[j]);
        //输出提示输入的科目 
        scanf("%f",&a[i][j]);
        //输入录入的成绩 
        if(a[i][j]>=0&&a[i][j]<=100){
            /*对成绩进行判断,这里采用了&&的逻辑运算符
             逻辑运行符一共有三种分别是与,或,非,即&&,||,!*/ 
            printf("%s输入正确,请继续\n",kc[j]);
            //提示成绩输入正确 
            tol[i]=tol[i]+a[i][j];
            //把以上输入正确的成绩相加起来 
            break;//如果以上的成绩输入正确跳到下一个科目 
        }
        else{
            printf("%s输入错误,请重新输入\n",kc[j]);
            //提示成绩输入错误,并要求重新输入成绩 
            fflush(stdin);//清除键盘缓冲区 
        }
        }
    }
    printf("A%d同学成绩录入成功,请继续录入A%d同学!\n\n",i+1,i+2);
    //表示上一个同学录入完毕,提示下一个同学 
    }

    printf("%d名同学成绩已全部录入完毕",i);
    //表示全部同学录入完毕 
    ktol[N]=0;   //初始化数组里的每个值为0 
    //存放课程总成绩
    for(j=0;j<N;j++){
        ktol[j]=0;
        for(i=0;i<M;i++)
          ktol[j]=ktol[j]+a[i][j];   //生成把前面存在a[][]里面的值取出来相加赋值给Ktol[]用来存放总成绩 
        ktol[N]=ktol[N]+ktol[j];     //把成绩移动到另外一个数组 
    }
    //输出功能
    printf("\n\n\t\t\t学生成绩信息表\n");
    printf("\t-----------------------------------------------------------------\n");
    printf("\t|姓名\t");
    for(j=0;j<N;j++){ 
        printf("|%s\t",kc[j]);
    }
    printf("|总分\t|平均分|\n");
    printf("\t-----------------------------------------------------------------\n");
    for(i=0;i<M;i++){
        printf("\t|A%d\t",i+1);
        for(j=0;j<N;j++){
            printf("|%5.1f\t",a[i][j]);
        }
        printf("|%5.1f\t|%5.1f\t|\n",tol[i],tol[i]/N);
        //以上的总分和平均分分别是求每名同学的总分和平均分 
        printf("\t-----------------------------------------------------------------\n");
    }
    printf("\t|总分\t|");
    for(j=0;j<=N;j++)
      printf("%5.1f\t|",ktol[j]);
    printf("%5.1f\t|",ktol[N]/N);
    printf("\n\t-----------------------------------------------------------------\n");
    printf("\t|平均分\t|");
    for(j=0;j<=N;j++)
      printf("%5.1f\t|",ktol[j]/M);
    printf("%5.1f\t|",ktol[N]/N/M);
    //以上的总分和平均分分别是求全部同学的总分和平均分
    printf("\n\t-----------------------------------------------------------------\n");

   getchar();
   getchar();
   getchar();

}

预览

预览1预览2

Last modification:November 15th, 2019 at 11:49 pm
如果觉得我的文章对你有用,请随意赞赏