基础C语言课程设计,1.求整数因子之和,2.求数组每列平均值,3.做学生成绩统计程序

1  求整数因子之和

1.1 题目内容

编写函数fun(int n),其功能是:计算整数n所有因子(指除1和n之外,能整除n的数)之和作为函数值返回。主函数输入n,调用函数,并输出结果。例如:若输入120,则输出239。

1.2算法框图

图1.1 求整数因子之和流程图

1.3   源程序及注释

#include<stdio.h>               

int fun(int n)                     /*定义一个调用函数fun()*/

{

int sum=0;                     /*定义整型变量sum,i */

int i;                          

for(i=2;i<n;i++)                 /*统计能整除n的数*/

{

if(n%i==0)

{

sum+=i;                /*求因数之和*/

}

}

return sum;               /*把sum作为返回值*/

}

int main()

{

int n;

printf("输入一个整数n:");

scanf("%d",&n);                 /*键盘输入n*/

int num=fun(n);                 /*主函数中调用外部函数fun()*/

printf("因子之和为:%d",num);

return 0;

}

1.4   运行结果

                    图1.2求整数因子之和运行结果截图

2  数组每列平均值

2.1   题目内容

用函数调用的方法编程,输入二维数组a[4][5]的元素值,然后调用函数计算每列的平均值,放到一个一维数组中传回主函数,主函数中输出原始数组,调用函数后,输出结果。

2.2  算法框图   

图2.1求数组每列平均值流程图

2.3   源程序及注释

#include <stdio.h>

#include <stdlib.h>

void fun(float a[4][5])          /*定义一个对数组的函数*/

{

int i=0;

    int j=0;

    float sum=0.0;

    float aver;               /*定义整型i,j;浮点型sun,aver*/

while(j<5)              /*循环,目的求sum*/

{

for(i=0;i<4;i++)          /*保持列不变,对每行循环,四行截至*/

sum+=a[i][j];            /*求一列数组元素之和*/

aver=sum/4.0;            /*求一列的平均值,并输出*/

printf("%f\t",aver);          

sum=0.0;              /*避免重复累加*/

j++;                  /*列数循环自加*/

}

}

main()

{

    int i=0;

    int j=0;

    float a[4][5];

    for(i=0;i<4;i++)        /*循环满足输入四行才能输出*/

{

    for(j=0;j<5;j++)       /*循环满足输入五列才能输出*/

    scanf("%f",&a[i][j]);

}

    fun(a);                /*调用外部函数fun()*/

}

2.4   运行结果

   

             图2.2数组每列平均值流程图运行结果

3  学生成绩统计程序的设计

3.1   题目内容

学生成绩统计程序设计

设计结构体数组,结构中包含学生数据为:学号、姓名、物理分数、数学分数、外语分数、计算机分数。设计各个函数,分别实现以下功能:

(1)录入:输入学生数据  

(2)显示:所有学生信息  

(3)统计:统计每科的最高分、最低分;输出不及格人数、不及格学数据。

设计菜单,通过选择菜单调用以上各函数。

3.2  算法框图

图3.1  学生成绩统计程序的设计的流程图

3.3   源程序及注释

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct student/*定义结构体数组1,目的:记载学生不同类型的数据*/

{

int num;/*学号*/

char name[10];/*姓名*/

int phys;/*物理分数*/

int math;/*数学分数*/

int eng;/*英语分数*/

int com;/*计算机分数*/

}

stu[50];

int k = 0;/*记录已创建的学生人数*/

int pmax,mmax,emax,cmax;/*定义每一科目最高分*/

int pmin,mmin,emin,cmin;/*定义每一科目最低分*/

int pbu[50],mbu[50],ebu[50],cbu[50];/*记录每一科目不及格学生所对应的学*/

void creat()/*定义外部函数2,目的:创建输入学生信息*/

{

printf("输入学号\n");

scanf("%d",&stu[k].num);

printf("输入姓名\n");

scanf("%s",stu[k].name);

printf("依次输入物理、数学、外语、计算机成绩\n");

scanf("%d%d%d%d",&stu[k].phys,&stu[k].math,&stu[k].eng,&stu[k].com);

k++;

/*每录入一个学生信息,k值加一,记录录入学生总人数*/

}

void print()/*定义外部函数3,目的:创建输出所有学生的基础数据*/

{

for(int i = 0;i < k;i++)

{

printf("学号:%d\t ",stu[i].num);

printf("姓名:%s\n",stu[i].name);

printf("物理:%d\t数学:%d\t英语:%d\t计算机:%d\n",stu[i].phys,stu[i].math,stu[i].eng,stu[i].com);

}

printf("\n\n");

}

int statistics(int q,int w,int e,int r,int pnopass = 0,int mnopass = 0,int enopass = 0,int cnopass = 0)

 /*定义外部函数4,统计每科的最高分、最低分、不及格人数、不及格学生的数据*/

{

pmax = stu[0].phys;pmin = stu[0].phys;/*查找物理的最高分与最低分*/

for(int i = 1;i < k;i++)

{

if(pmax < stu[i].phys) pmax = stu[i].phys;

if(pmin > stu[i].phys) pmin = stu[i].phys;

}

mmax = stu[0].math;mmin = stu[0].math;/*查找数学的最高分与最低分*/

for(int i = 1;i < k;i++)

{

if(mmax < stu[i].math) mmax = stu[i].math;

if(mmin > stu[i].math) mmin = stu[i].math;

}

emax = stu[0].eng;emin = stu[0].eng;/*查找英语的最高分与最低分*/

for(int i = 1;i < k;i++)

{

if(emax < stu[i].eng) emax = stu[i].eng;

if(emin > stu[i].eng) emin = stu[i].eng;

}

cmax = stu[0].com;cmin = stu[0].com;/*查找计算机的最高分与最低分*/

for(int i = 1;i < k;i++)

{

if(cmax < stu[i].com) cmax = stu[i].com;

if(cmin > stu[i].com) cmin = stu[i].com;

}

for(int i = 0;i < k;i++)/*统计物理不及格的学生人数,以及相应的学生学号

{

if(stu[i].phys < 60)

{

       pnopass++;

       pbu[q++] = i;

}

}

for(int i = 0;i < k;i++)/*统计数学不及格的学生人数,以及相应的学生学号*/

{

if(stu[i].math < 60)

{

mnopass++;

mbu[w++] = i;

}

}

for(int i = 0;i < k;i++)/*统计英语不及格的学生人数,以及相应的学生学号*/

{

if(stu[i].eng < 60)

{

enopass++;

ebu[e++] = i;

}

}

for(int i = 0;i < k;i++)/*统计计算机不及格的学生人数,以及相应的学生学*/

{

if(stu[i].com < 60)

{

cnopass++;

cbu[r++] = i;

}

}

printf("物理最高分:%d  物理最低分:%d\n",pmax,pmin);/*各科最高最低*/

printf("数学最高分:%d  数学最低分:%d\n",mmax,mmin);

printf("英语最高分:%d  英语最低分:%d\n",emax,emin);

printf("计算机最高分:%d  计算机最低分:%d\n",cmax,cmin);

    /*各科不及格人数及信息*/

printf("\n物理不及格总人数:%d 不及格学生如下:\n",pnopass);

for(int i = 0;i < q;i++)/*输出物理不及格的学生人数,以及相应的学生学号*/

{

int v = 0;

printf("(学号:%d  姓名:%s)\t",stu[pbu[i]].num,stu[pbu[i]].name);

v++;

if(v % 6 == 0) printf("\n");

}

printf("\n数学不及格总人数:%d 不及格学生如下:\n",mnopass);

for(int i = 0;i < w;i++)/*输出数学不及格的学生人数,以及相应的学生学号*/

{

int v = 0;

printf("(学号:%d  姓名:%s)\t",stu[mbu[i]].num,stu[mbu[i]].name);

v++;

if(v % 6 == 0) printf("\n");

}

printf("\n英语不及格总人数:%d 不及格学生如下:\n",enopass);

for(int i = 0;i < e;i++)/*输出英语不及格的学生人数,以及相应的学生学号*/

{

int v = 0;

printf("(学号:%d  姓名:%s)\t",stu[ebu[i]].num,stu[ebu[i]].name);

v++;

     if(v % 6 == 0) printf("\n");

}

printf("\n计算机不及格总人数:%d 不及格学生如下:\n",cnopass);

for(int i = 0;i < q;i++)/*输出计算机不及格的学生人数,以及相应的学生学*/

{

int v = 0;

printf("(学号:%d  姓名:%s)\t",stu[cbu[i]].num,stu[cbu[i]].name);

 v++;

  if(v % 6 == 0) printf("\n");

}

printf("\n\n");

}

int main()  /*主函数当菜单栏*/

{

int caidan;

while(1)

{

printf("选择你想要执行的命令序号\n");/*每一项都需要按回车*/

printf("1.输入学生数据\n");

printf("2.显示所有学生的信息\n");

printf("3.统计每科的最高分、最低分、不及格人数、不及格学生的数据\n");

printf("0:退出程序\n");

printf("输入您将进行的操作:");

scanf("%d",&caidan);

switch(caidan)

{

case 1:creat();break;

case 2:print();break;

case 3:statistics(0,0,0,0,0,0,0,0);break;

case 0:printf("程序退出\n");

return 0;

default:printf("未知指令");

}

}

return 0;

}

3.4   运行结果

图3.2输入1时程序运行结果

图3.3输入2时的程序运行结果

图3.4输入3时的程序运行结果

图3.5输入0时的程序运行结果

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值