C语言作业 题目:学生成绩最好采用二维数组来表示,数组的行代表学生,列代表各门课的成绩

问题中涉及若干个学生,每个学生又涉及三门课。因此学生成绩最好采用二维数组来表示,数组的行代表学生,列代表各门课的成绩,这样问题就转化为对二维数组的处理。为解决此问题,程序... 问题中涉及若干个学生,每个学生又涉及三门课。因此学生成绩最好采用二维数组来表示,数组的行代表学生,列代表各门课的成绩,这样问题就转化为对二维数组的处理。为解决此问题,程序中设计了三个函数:输入函数input()用来输入学生的学号和三门课的成绩:统计函数total()用来计算每个学生三门课的总成绩和平均成绩:输出函数print()以表格的形式输出计算结果

要求就是按照实际情况再添加一点东西,我的想法是:平均分在90以上的是一等奖学金,80到90 之间的是二等,70到80的是三等,60到70 的是四等,剩下的就是不及格
展开
 我来答
魔法师00可可
2010-06-02 · TA获得超过1660个赞
知道大有可为答主
回答量:726
采纳率:100%
帮助的人:960万
展开全部
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
void init(struct student * std);
void insert(struct student * std);
void del(struct student * std);
void sort(struct student * std);
void show(struct student * std);
void deal(int choose,struct student *std);
#define MAX 10 //学生数据最大个数,由于要插入数据,故一般输入要小于10个
static int n=0; //全局变量,记录学生的总数
struct student
{
char name[10]; //学生姓名
float score; //学生成绩
};

void init(struct student * std) //数据的初始化
{
char k;
struct student temp; //临时接受读入的数据
do
{
printf("请输入学生的信息:\n");
printf("姓名:");
fflush(stdin);
scanf("%s",&temp.name);
printf("成绩:");
scanf("%f",&temp.score); // (成绩的读入类型写错了,)
printf("请问是否继续:y 是,n否\n");
fflush(stdin);
scanf("%c",&k);
if(temp.score>=0) //输入成绩不小于0,则认为是正常数据,记录一下
{
strcpy(std[n].name,temp.name);
std[n].score=temp.score;
n++;
}
}while(k=='y'||k=='Y');
}

void insert(struct student * std) //插入一个学生数据,在最后
{
int i,j,num=n;
char k;
struct student temp; //临时,接受读入的数据

do{

printf("您想插入到什么位置:");
printf("\n请输入小于 %d的数字 :",num+1);
scanf("%d",&i); //记录所要插入的位数
if(i>num+1)
{//如果输入的数超过最后一位,那就将这个数放在最后一个
i=num+1;
}
printf("\n输入您想要插入的\n学生姓名:");
fflush(stdin);
scanf("%s",&temp.name);
printf("成绩:");

scanf("%f",&temp.score);
if(temp.score>=0) //同上,判断数据是否有效
{
for(j=num;j>=i;j--) //数据依次前移
{
strcpy(std[j].name,std[j-1].name);
std[j].score=std[j-1].score;
}
strcpy(std[i-1].name,temp.name); //拷贝姓名
std[i-1].score=temp.score; //拷贝成绩
num++;
}

printf("请问是否继续:y 是,n否\n");
fflush(stdin);
scanf("%c",&k);
}while(k=='y'||k=='Y');
n=num;
show(std);
}

void del(struct student * std)
{
int i,j;
char del_name[10];
printf("输入您想要删除的学生姓名\n");
scanf("%s",&del_name); //读入要删除的学生的姓名
for(i=0;i<n;i++)
{
if(!(strcmp(std[i].name,del_name))) //逐个比较是否有要删除的学生,strcmp函数满足条件时返回0,所以加非号
{
for(j=i;j<n;j++) //后面的数据逐个前移一个,覆盖要删除的数据
{
strcpy(std[j].name,std[j+1].name);
std[j].score=std[j+1].score;
}
--n; //学生的总人数减一
printf("%s 已经删除!\n",del_name);

}
}
show(std);
}

void sort(struct student * std)
{
int i,j;
struct student temp;
for(i=0;i<n;i++)
{ //学生的成绩按照降序排列
for(j=0;j<n-1;j++)
{
if(std[j].score<std[j+1].score)
{
strcpy(temp.name,std[j].name);temp.score=std[j].score;
strcpy(std[j].name,std[j+1].name);std[j].score=std[j+1].score;
strcpy(std[j+1].name,temp.name);std[j+1].score=temp.score;
}
}
}
}

void show(struct student * std) //输出全部的学生
{
int i;
char k;
do
{
printf(" 姓名 | 成绩 \n");
for(i=0;i<n;i++)
{
printf("%10s\t%10.2f\n",std[i].name,std[i].score);
}
//(一般来说 显示同样的成绩 不会在同一时刻显示 两次的 建议将while()改为system("pause");
printf("请问是否继续:y 是,n否\n");
fflush(stdin);
scanf("%c",&k);
}while(k=='y'||k=='Y');
}

void deal(int choose,struct student *std) //判断,所输入的选项
{

switch(choose)
{
case 1:
init(std);
break;
case 2:
insert(std);
break;
case 3:
del(std);
break;
case 4:
sort(std);
break;
case 5:
show(std);
break;
case 6:
break;
default:
printf("please enter a right number\n"); //不符合条件则,输出提示信息
}
}

int main()
{
struct student std[MAX];
int choose;
int i;
char code[10];
char usename[20];
printf("-------------------------------------------------\n");
printf("--- ---\n");
printf("--- 欢迎使用本系统 ---\n");
printf("--- ---\n");
printf("--- 用户名或密码输入错误3次系统将会自动退出 ---\n");
printf("--- ---\n");
printf("-------------------------------------------------\n");
for(i=0;i<3;i++)
{
printf("请输入您的用户名:\n");
scanf("%s",usename);
printf("请输入您的密码:\n");
scanf("%s",code);

if(strcmp(usename,"123") == 0 && strcmp(code,"123") == 0)
{
printf("恭喜你,登陆成功!\n");
break;
}
else
{
printf("您的用户名或密码错误,请核对!\n");
}
}
if(i==3)
{
printf("\n\t对不起,错误输入已达3次,程序将退出!\n");
}
else
{
do{
system("cls");//清屏 (显示菜单前最好先清一下屏)
printf("********************************************\n");
printf("* 欢迎使用本系统 *\n");
printf("* 1 输入 *\n");
printf("* 2 插入 *\n");
printf("* 3 删除 *\n");
printf("* 4 排序 *\n");
printf("* 5 显示 *\n");
printf("* 6 退出程序 *\n");
printf("********************************************\n");
printf("请输入您的选择:\n");
scanf("%d",&choose);
deal(choose,std);
}while(choose!=6);
return 0;
system("cls");//清屏 (程序已经运行结束,这句没有运行到,可以删除)
}
}
TableDI
2024-07-18 广告
当我们谈到Python与Excel的拆分时,通常指的是使用Python的库来读取Excel文件中的数据,然后根据某种逻辑(如按行、按列、按特定值等)将数据拆分成多个部分或输出到新的Excel文件中。上海悉息信息科技有限公司在处理这类任务时,... 点击进入详情页
本回答由TableDI提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式