#include<stdio.h>
#include<math.h>
struct student{
char number[5];
char name[5];
int score[3];
int average;
};
int main ()
{
struct student person[100];
char t;//t为菜单数
void score(struct student person[100]);
printf(" 主菜单 \n");
printf("-------------------------------------------------------------------------------\n");
printf("------------------| 1输入输出学生成绩 | | 2验证哥德巴赫猜想 | | 3退出 |-----------------\n");
while(t!='3')
{
printf("请输入主菜单中的一个数字:\n");
scanf("%c",&t);
switch(t)
{
case '1': score(person); break;
case '2': Goldbach(); break;
default: printf("数据错误!\n");break;
}
}
if(t=='3')
printf("按回车键结束:\n");
scanf("%c",&t);
return 0;
}
void score(struct student person[100])
{
int k,m;//k为子菜单数字,m为学生数量
void input(struct student person[100],int m);
void output(struct student person[100],int m);
void sort(struct student person[100],int m);
printf("下面是输入输出学生成绩:\n");
printf(" 子菜单1 \n");
printf("---------------------------------------------------------------------------\n");
printf("| 1输入学生信息 | | 2输出学生成绩 | | 3平均成绩排序 | | 4搜索学生成绩 | | 5修改学生成绩 | | 6退出 |\n");
printf("请先输入学生数量:\n");
scanf("%d",&m);
printf("请输入子菜单1中的一个数字:\n");
scanf("%d",&k);
while(k!=6)
{
switch(k)
{
case 1:input(person,m);break;
case 2:output(person,m);break;
case 3:printf("1\n");
}
}
}
void input(struct student person[100],int m)
{
int i;
for(i=0;i<m;i++)
{
printf("请输入第%d位学生的学号、姓名、成绩1、成绩2、成绩3\n",i+1);
scanf("%s%s%d%d%d",&person[i].number,&person[i].name,&person[i].score[0],&person[i].score[1],&person[i].score[2]);
}
printf("按回车键返回\n");
}
void output(struct student person[100],int m)
{
int i;
int average(int i,struct student person[100]);
printf("学号 | 姓名 | 成绩1 | 成绩2 | 成绩3 | 平均成绩 \n");
printf("-------------------------------------------------------\n");
for(i=0;i<m;i++)
{
person[i].average=average(i,person);
printf("%s %s %d %d %d %d \n",person[i].number,person[i].name,person[i].score[0],person[i].score[1],person[i].score[2],person[i].average);
}
}
int average(int i,struct student person[100])
{
int j,sum=0;
for(j=0;j<3;j++)
{
sum+=person[i].score[j];
}
person[i].average=sum/3;
return person[i].average;
}
void sort(struct student person[100],int m)
{
int i,j;
struct student *temp,*p=person;
for(i=0;i<m;i++)
for(j=0;j<m-i-1;j++)
{
p++;
if(person[i].average<person[i+1].average)
{
*temp=*p;
p=(p+1);
*(p+1)=*temp;
}
}
for(i=0;i<m;i++)
printf("1\n");
}
int Goldbach()
{
char q;//子菜单2数
int i;
long int n;//哥德巴赫猜想的数字
int prime(long int p);
printf("下面是验证哥德巴赫猜想:\n");
printf("----------------------------------子菜单2------------------------------------\n");
printf(" | 1输入数字并验证 | | 2继续验证 | | 3退出 | \n");
printf("请输入子菜单2中的一个数字:\n");
scanf("%c",&q);
while(q!='3')
{
switch(q)
{
case '1':
{
printf("请输入要验证的正整数:\n");
scanf("%ld",&n);
if(n%2!=0||n<=2||n>2000000000)//规定n的范围
printf("输入错误!\n");
else
{
for(i=2;i<n;i++)
{
if(prime(i)&&prime(n-i)&&i<(n-i))
{
printf("%d=%d+%d\n",n,i,n-i);break;
}
}
}
};break;
case '2':break;
default:printf("数据错误!\n");break;
printf("请选择退出或者再次验证:\n");
scanf("%c",&q);
}
if(q=='3')
{
printf("按回车键返回\n");
}
scanf("%c",&q);
return 0;
}
int prime(long int p)
{
int i;
for(i=2;i<sqrt(p);i++)
{
if(p%i==0)
return 0;
}
return 1;
}
一直报错咋办,调试了一上午了越改错误越多,请各位大佬指点,错误的地方就是在prime那个函数开始的地方