求c语言大神救急,周一就要交了

2025-04-28 18:44:22
推荐回答(3个)
回答1:

同学,我解决掉你大部分问题了。循环可以退出了,你运行下试试!
剩下的有一个前五名的那个,你自己加把劲儿弄一下,因为我都帮你做了怕你不思考啦!如果不会我再帮你看哈!
排版不好还请见谅!
代码如下:
#include
#include
#include

typedef struct student
{
char id[10];
double grade[4];
double gradeall;
double average;
}std;

void menu();
int menu1(std pa[],int n);
void jisuan(std pa[],int n); //
void Bubble(std st[],int n);
void menu2 (std pa[],int n);

void main( )
{
std sa[35];
int n=0, choice = 1;
while( choice ){
menu( );
printf("请输入选项:\n");
scanf("%d",&choice);
if( (choice >= 0) && (choice < 3) ){
switch(choice){
case 1:{
n=menu1(sa,35);
jisuan(sa,n);
Bubble(sa,n);
break;
}
case 2:{
menu2(sa,n);
break;
}
case 0:
break;
}
}
}
}

void menu( )
{
printf("\n********1.输入最多35名学生学号和四门学科成绩********\n");
printf("********2.按总分高低显示学生的各项成绩********\n");
printf("********3.显示某课程成绩在90分以上的前五名同学********\n\n");
}

int menu1(std pa[],int n)
{
int i, m = 1, k = 1;
int ifBreak = 0;
float tmp;
while( k == 1 ){
if ( ifBreak == 1 ){
printf("跳出外层循环");
break;
}
for( i = 0; i < n; i++){
printf("请输入:\n");
printf("学号:");
scanf( "%s",pa[i].id ); //id本身就是个指针
pa[i].gradeall = 0;
pa[i].average = 0;
for( k = 0; k < 4; k++){
printf("学生成绩%d:",k+1);
scanf( "%f",&tmp);
pa[i].grade[k]= tmp;
//printf("您刚才输入了: %f\n", pa[i].grade[k]);
}
m = i + 1;
printf("若继续请按1,否则输入停止:\n");
scanf( "%d",&k );
if ( k != 1 ){
break;
ifBreak = 1;
}
}
}
printf("您输入了%d个学生的成绩记录\n",m);
return m; //有m个学生记录
}

void jisuan(std pa[], int n)
{
int i, k;
for( i=0; i< n; i++){
for( k = 0; k < 4; k++){
pa[i].gradeall += pa[i].grade[k];
pa[i].average = (pa[i].gradeall)/4;
//pa[i].gradeall = pa[i].gradeall + pa[i].grade[k];
//pa[i].grade=(double)(pa[i].gradeall/4); //这个地方你有错误
}
}
}

void Bubble(std pa[],int n)
{
int i, j, biaoji; //标记
std temp;
for( i=0; i biaoji = 1;
for( j = n-1; j > i; j-- )
if( pa[j].gradeall> pa[j-1].gradeall){
temp= pa[j-1];
pa[j-1]= pa[j];
pa[j]=temp;
biaoji=0;
}
if( biaoji == 1 )
break;
}
}

void menu2 (std pa[],int n)
{
int i,k;
for( i = 0; i < n; i++){
printf("学生学号:%s\n",pa[i].id);
for( k = 0; k < 4; k++){
printf("学生成绩%d: %f\n",k+1,pa[i].grade[k]);
}
printf("学生总分:%f\n",pa[i].gradeall);
printf("学生平均成绩:%f\n",pa[i].average);
}
}

回答2:

/*改好了,不过你的第三个模块还没有哦*/
#include
#include
#include
void menu()
{
printf("********1.输入最多35名学生学号和四门学科成绩********\n");
printf("********2.按总分高低显示学生的各项成绩********\n");
printf("********3.显示某课程成绩在90分以上的前五名同学********\n");
}
struct student
{
char id[10];
double grade[4];
double gradeall;
double average;
};
typedef struct student Std;
Std sa[35];
int menu1(Std* pa,int n);
void jisuan(Std* pa,int n);
void Bubble(Std* st,int n);
void menu2 (Std* pa,int n);

int menu1(Std* pa,int n)
{
int i,k;
static int m=0; /*静态记录下标,以便选0退出再选1的情况下再次录入可以接着上次的*/
do
{
for(i=m;i {
printf("请输入:\n");
printf("学号:");
scanf("%s",pa[i].id); /*id就是个地址*/
fflush(stdin);
for(k=0;k<4;k++)
{
printf("学生成绩%d:",k+1);
scanf("%lf",&pa[i].grade[k]);
}
m=i+1; /*m=i+1,要不然pa[0]无法统计*/
printf("若想退出请按0若继续请按1:");
scanf("%d",&k);
if(k==0) break; /*加个判断*/
}
if(i>=n) break; /*如果录完所有的n个则直接跳出*/
}while(k==1);
return m;
}
void jisuan(Std* pa,int n)
{
int i,k;
for(i=0;i {
pa[i].gradeall=0; /*初始化为0*/
for(k=0;k<4;k++)
{
pa[i].gradeall=pa[i].gradeall+pa[i].grade[k];
pa[i].average=(double)(pa[i].gradeall/4.0); /*这粗心了*/
}
}
}
void Bubble(Std* pa,int n)
{
int i,j,biaoji;
Std temp;
for(i=0;i {
biaoji=1;
for(j=n-1;j>i;j--)
if( pa[j].gradeall> pa[j-1].gradeall)
{
temp= pa[j-1];
pa[j-1]= pa[j];
pa[j]=temp;
biaoji=0;
}
if(biaoji==1)
break;
}
}
void menu2 (Std* pa,int n)
{
int i,k;
for(i=0;i {
printf("学生学号:%s\n",pa[i].id); /*这里不是地址哦,下同*/
for(k=0;k<4;k++)
{
printf("学生成绩%d:%.2lf\n",k+1,pa[i].grade[k]); /*注意输出格式*/
}
printf("学生总分:%.2lf\n",pa[i].gradeall);
printf("学生平均成绩:%.2lf\n",pa[i].average);
}
}
void main()
{
int n=0, choice;
do
{
menu();
printf("请输入选项:\n");
scanf("%d",&choice);
if(choice>=0&&choice<3)
{
switch(choice)
{
case 1:
{
n=menu1(sa,35);
jisuan(sa,n);
Bubble(sa,n);
break;
}
case 2:
{
menu2(sa,n);
break;
}
case 0:break;
}
}
}while(choice);
}

回答3:

#include
#include
#include

void menu()
{
printf("********1.输入最多35名学生学号和四门学科成绩********\n");
printf("********2.按总分高低显示学生的各项成绩********\n");
printf("********3.显示某课程成绩在90分以上的前五名同学********\n");
}
typedef struct tagtStudent
{
char id[10];
double grade[4];
double gradeall;
double average;
}tStudent;

tStudent sa[35];
int menu1(tStudent* pa, int n);
void jisuan(tStudent* pa, int n);
void Bubble(tStudent* st, int n);
void menu2 (tStudent* pa, int n);

int menu1(tStudent* pa, int n)
{
int i,m,k;
do
{
for(i=0; i {
printf("请输入:\n");
printf("学号:");
scanf("%s",&pa[i].id);
for(k=0;k<4;k++)
{
printf("学生成绩%d:",&k+1);
scanf("%ld\n",&pa[i].grade[k]);
}
}
m=i;
printf("若想退出请按0若继续请按1:");
scanf("%d\n",&k);
}while(k==1);
return m;
}

void jisuan(tStudent* pa, int n)
{
int i,k;
for(i=0;i {
for(k=0;k<4;k++)
{
pa[i].gradeall = pa[i].gradeall+pa[i].grade[k];
pa[i].grade[k] = (double)pa[i].gradeall/4;
}
}
}
void Bubble(tStudent* pa, int n)
{
int i,j,biaoji;
tStudent temp;
for(i=0;i {
biaoji=1;
for(j=n-1;j>i;j--)
if( pa[j].gradeall> pa[j-1].gradeall)
{
temp= pa[j-1];
pa[j-1]= pa[j];
pa[j]=temp;
biaoji=0;
}
if(biaoji==1)
break;

}
}
void menu2 (tStudent* pa, int n)
{
int i,k;
for(i=0;i {
printf("学生学号:%s\n",&pa[i].id);
for(k=0;k<4;k++)
{
printf("学生成绩%d:%ld\n",&k+1,&pa[i].grade[k]);
}
printf("学生总分:%ld\n",&pa[i].gradeall);
printf("学生平均成绩:%ld\n",&pa[i].average);
}
}
void main()
{
int n=0, choice;
do
{
menu();
printf("请输入选项:\n");
scanf("%d",&choice);
if(choice>=0&&choice<3)
{
switch(choice)
{
case 1:
{
n=menu1(sa,35);
jisuan(sa,n);
Bubble(sa,n);
break;
}
case 2:
{
menu2(sa,n);
break;
}
case 0:break;
}
}
}while(choice);
}
能运行