c语言函数中设定原始成绩 c语言设置初始值

编写C语言程序:给定学生成绩,调用相关函数#include stdio.h
#define N 1000
void get_score(int a[]);
void put_score(int a[]);
float average(int a[]);
void bubble_sort(int a[]);
int max_score(int a[]);
int min_score(int a[]);
int main()
{
int a[N];
get_score(a);
put_score(a);
printf("average score: %.4f\n",average(a));
bubble_sort(a);
put_score(a);
printf("max score: %d\n",max_score(a));
printf("min score: %d\n",min_score(a));
return 0;
}
void get_score(int a[])
{
int i = 0;
int x;
while (1)
{
scanf("%d",x);
a[i] = x;
if (x == -1)//输入为-1时标志输入结束
break;
i;
}
}
void put_score(int a[])
{
int i = 0;
while (a[i] != -1)
{
printf("=",a[i]);
i;
}
printf("\n");
}
float average(int a[])
{
int i = 0;
int sum = 0;
float aver;
while (a[i] != -1)
{
sum= a[i];
i;
}
aver = (float)sum/(float)i;
return aver;
}
void bubble_sort(int a[])
{
int i, j, n, flag;
int temp;
i = 0;
while (a[i] != -1)
i;
n = i;
flag = 1;
for (i = 0; in-1flag == 1; i)
{
flag = 0;
for (j = 0; jn-i; j)
{
if (a[j]a[j 1])
{
flag = 1;
temp = a[j];
a[j] = a[j 1];
a[j 1] = temp;
}
}
if (flag == 0)
return;
}
}
int max_score(int a[])
{
int max = a[0];
int i = 1;
for (; a[i] != -1; i)
{
if (a[i]max)
max = a[i];
}
return max;
}
int min_score(int a[])
{
int min = a[0];
int i = 1;
for (; a[i] != -1; i)
{
if (a[i]min)
min = a[i];
}
return min;
}
c语言,谢谢好心人又是你
#includestdio.h
#define N 100//定义成绩数目的最大值
void inp(int *a,int *x)
{ int i;
for(i=0;i*x;i)//循环判断
scanf("%d",a[i]); }//输入成绩
void sorta(int *a,int *x)//冒泡排序
{ int i,j,k;
for ( i=0;i(*x)-1;i)
for ( j=i 1;j(*x);j)
if ( a[i]a[j] )//条件判断
{ k=a[i];
a[i]=a[j];
a[j]=k; }//交换a[i] , a[j]顺序
}
void insert(int *a,int *x,int k)
{ int i,j;
for ( i=0;i*x;i)
if ( a[i]k )
break;
for (j=(*x);ji;j--)
a[j]=a[j-1];
a[i]=k;
(*x);
}
void disp(int *a,int *x)
{ int i;
for ( i=0;i*x;i)
printf("%d ",a[i]);
printf("\n"); }
void main()
{ int s[N],n,k;
printf("请输入学生成绩数目:");
scanf("%d",n); //输入成绩数目
if (nN ) n=N;//N是允许输入的最大成绩数目
inp(s,n); //调用inp 输入成绩
printf("原始成绩列表:");
disp(s,n);//调用disp 输出原始成绩
sorta(s,n); //调用sorta 对原始成绩进行排序
printf("排序成绩列表:");
disp(s,n);//再次调用disp 输出排序后的成绩
printf("请输入插入成绩:");
scanf("%d",k);//插入成绩
insert(s,n,k);//调用insert
printf("新的成绩列表:");
disp(s,n);//调用disp
}
c语言成绩管理系统/*11.3.2 源程序*/
/***********xuesheng.c***********/
/******头文件(.h)***********/
#include "stdio.h"/*I/O函数*/
#include "stdlib.h"/*其它说明*/
#include "string.h"/*字符串函数*/
#include "mem.h"/*内存操作函数*/
#include "ctype.h"/*字符操作函数*/
#include "alloc.h"/*动态地址分配函数*/
#define N 3/*定义常数*/
typedef struct z1/*定义数据结构*/
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函数原型*/
STUDENT*init();/*初始化函数*/
STUDENT *create();/*创建链表*/
STUDENT *delete(STUDENT *h);/*删除记录*/
void print(STUDENT *h);/* 显示所有记录*/
void search(STUDENT *h);/*查找*/
void save(STUDENT *h);/*保存*/
STUDENT *load();/*读入记录*/
void computer(STUDENT *h);/*计算总分和均分*/
STUDENT *insert(STUDENT *h);/*插入记录*/
void append();/*追加记录*/
void copy();/*复制文件*/
STUDENT *sort(STUDENT *h);/*排序*/
STUDENT *index(STUDENT *h);/*索引*/
void total(STUDENT *h);/*分类合计*/
int menu_select();/*菜单函数*/
/******主函数开始*******/
main()
{
int i;
STUDENT *head;/*链表定义头指针*/
clrscr();/*清屏*/
for(;;)/*无限循环*/
{
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
{/*值不同,执行的函数不同 , break 不能省略*/
case 0:head=init();break;/*执行初始化*/
case 1:head=create();break; /*创建链表*/
case 2:head=delete(head);break; /*删除记录*/
case 3:print(head);break;/*显示全部记录*/
case 4:search(head);break;/*查找记录*/
case 5:save(head);break;/*保存文件*/
case 6:head=load(); break;/*读文件*/
case 7:computer(head);break;/*计算总分和均分*/
case 8:head=insert(head);break; /*插入记录*/
case 9:copy();break;/*复制文件*/
case 10:head=sort(head);break;/*排序*/
case 11:append();break;/*追加记录*/
case 12:head=index(head);break;/*索引*/
case 13:total(head);break;/*分类合计*/
case 14:exit(0);/*如菜单返回值为14程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
char *menu[]={"***************MENU***************",/*定义菜单字符串数组*/
" 0. init list",/*初始化*/
" 1. Enter list",/*输入记录*/
" 2. Delete a record from list",/*从表中删除记录*/
" 3. print list ",/*显示单链表中所有记录*/
" 4. Search record on name",/*按照姓名查找记录*/
" 5. Save the file",/*将单链表中记录保存到文件中*/
" 6. Load the file",/*从文件中读入记录*/
" 7. compute the score",/*计算所有学生的总分和均分*/
" 8. insert record to list ",/*插入记录到表中*/
" 9. copy the file to new file",/*复制文件*/
" 10. sort to make new file",/*排序*/
" 11. appendrecord to file",/*追加记录到文件中*/
" 12. index on nomber",/*索引*/
" 13. total on nomber",/*分类合计*/
" 14. Quit"};/*退出*/
char s[3];/*以字符形式保存选择号*/
int c,i;/*定义整形变量*/
gotoxy(1,25);/*移动光标*/
printf("press any key enter menu......\n");/*压任一键进入主菜单*/
getch();/*输入任一键*/
clrscr();/*清屏幕*/
gotoxy(1,1);/*移动光标*/
textcolor(YELLOW);/*设置文本显示颜色为黄色*/
textbackground(BLUE);/*设置背景颜色为蓝色*/
gotoxy(10,2);/*移动光标*/
putch(0xc9);/*输出左上角边框┏*/
for(i=1;i44;i)
putch(0xcd);/*输出上边框水平线*/
putch(0xbb);/*输出右上角边框┓*/
for(i=3;i20;i)
{
gotoxy(10,i);putch(0xba);/*输出左垂直线*/
gotoxy(54,i);putch(0xba);
}/*输出右垂直线*/
gotoxy(10,20);putch(0xc8);/*输出左上角边框┗*/
for(i=1;i44;i)
putch(0xcd);/*输出下边框水平线*/
putch(0xbc);/*输出右下角边框┛*/
window(11,3,53,19);/* 制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr();/*清屏*/
for(i=0;i16;i)/*输出主菜单数组*/
{
gotoxy(10,i 1);
cprintf("%s",menu[i]);
}
textbackground(BLACK);/*设置背景颜色为黑色*/
window(1,1,80,25);/*恢复原窗口大小*/
gotoxy(10,21);/*移动光标*/
do{
printf("\nEnter you choice(0~14):");/*在菜单窗口外显示提示信息*/
scanf("%s",s);/*输入选择项*/
c=atoi(s);/*将输入的字符串转化为整形数*/
}while(c0||c14);/*选择项不在0~14之间重输*/
return c;/*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT *init()
{
return NULL;
}
/*创建链表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info;/* STUDENT指向结构体的指针*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT));/*申请空间*/
if(!info)/*如果指针info为空*/
{
printf("\nout of memory");/*输出内存溢出*/
}
inputs("enter no:",info-no,11);/*输入学号并校验*/
if(info-no[0]=='@') break;/*如果学号首字符为@则结束输入*/
inputs("enter name:",info-name,15); /*输入姓名 , 并进行校验*/
printf("please input %d score \n",N);/*提示开始输入成绩*/
s=0;/*计算每个学生的总分,初值为0*/
for(i=0;iN;i)/*N门课程循环N次*/
{
do{
printf("score%d:",i 1);/*提示输入第几门课程*/
scanf("%d",info-score[i]);/*输入成绩*/
if(info-score[i]100||info-score[i]0) /*确保成绩在0~100之间*/
printf("bad data,repeat input\n");/*出错提示信息*/
}while(info-score[i]100||info-score[i]0);
s=s info-score[i];/*累加各门课程成绩*/
}
info-average=(float)s/N;/*求出平均值*/
info-order=0;/*未排序前此值为0*/
info-next=h;/*将头结点做为新输入结点的后继结点*/
h=info;/*新输入结点为新的头结点*/
}
}
/*输入字符串,并进行长度验证*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt);/*显示提示信息*/
scanf("%s",p);/*输入字符串*/
if(strlen(p)count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/
}while(strlen(p)count);
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
}
/*输出链表中结点信息*/
void print(STUDENT *h)
{
int i=0;/* 统计记录条数*/
STUDENT *p;/*移动指针*/
clrscr();/*清屏*/
p=h;/*初值为头指针*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO|name| sc1| sc2| sc3|sum|ave|order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i;
【c语言函数中设定原始成绩 c语言设置初始值】printf("|= |%-10s|%-15s|M|M|M| %4.2f | %4.2f | = |\n", i, p-no,p-name,p-score[0],p-score[1],
p-score[2],p-sum,p-average,p-order);
p=p-next;
}
printf("**********************************end*********************************\n");
}
/*删除记录*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q;/*p为查找到要删除的结点指针,q为其前驱指针*/
char s[11];/*存放学号*/
clrscr();/*清屏*/
printf("please deleted no\n");/*显示提示信息*/
scanf("%s",s);/*输入要删除记录的学号*/
q=p=h;/*给q和p赋初值头指针*/
while(strcmp(p-no,s)p!=NULL)/*当记录的学号不是要找的,或指针不为空时*/
{
q=p;/*将p指针值赋给q作为p的前驱指针*/
}
if(p==NULL)/*如果p为空,说明链表中没有该结点*/
printf("\nlist no %s student\n",s);
else/*p不为空 , 显示找到的记录信息*/
{
printf("*****************************have found***************************\n");
printf("|no|name| sc1| sc2| sc3|sum|ave|order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|M|M|M| %4.2f | %4.2f | = |\n", p-no,
p-name,p-score[0],p-score[1],p-score[2],p-sum,
p-average,);
printf("********************************end*******************************\n");
getch();/*压任一键后 , 开始删除*/
if(p==h)/*如果p==h,说明被删结点是头结点*/
h=p-next;/*修改头指针指向下一条记录*/
else
q-next=p-next; /*不是头指针,将p的后继结点作为q的后继结点*/
free(p);/*释放p所指结点空间*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/
}
return(h);/*返回头指针*/
}
/*查找记录*/
void search(STUDENT *h)
{
STUDENT *p;/*移动指针*/
char s[15];/*存放姓名的字符数组*/
clrscr();/*清屏幕*/
printf("please enter name for search\n");
scanf("%s",s);/*输入姓名*/
p=h;/*将头指针赋给p*/
while(strcmp(p-name,s)p!=NULL)/*当记录的姓名不是要找的 , 或指针不为空时*/
if(p==NULL)/*如果指针为空*/
printf("\nlist no %s student\n",s);/*显示没有该学生*/
else/*显示找到的记录信息*/
{
printf("\n\n*****************************havefound***************************\n");
printf("|nO|name| sc1| sc2| sc3|sum|ave|order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|M|M|M| %4.2f | %4.2f | = |\n", p-no,
p-name,p-score[0],p-score[1],p-score[2],p-sum,p-average,p-order);
printf("********************************end*******************************\n");
}
}
/*插入记录*/
STUDENT*insert(STUDENT *h)
{
STUDENT *p,*q,*info; /*p指向插入位置,q是其前驱 , info指新插入记录*/
char s[11];/*保存插入点位置的学号*/
int s1,i;
printf("please enter locationbefore the no\n");
scanf("%s",s);/*输入插入点学号*/
printf("\nplease new record\n");/*提示输入记录信息*/
info=(STUDENT *)malloc(sizeof(STUDENT));/*申请空间*/
if(!info)
{
printf("\nout of memory");/*如没有申请到 , 内存溢出*/
}
inputs("enter no:",info-no,11); /*输入学号*/
inputs("enter name:",info-name,15); /*输入姓名*/
printf("please input %d score \n",N);/*提示输入分数*/
s1=0;/*保存新记录的总分 , 初值为0*/
for(i=0;iN;i)/*N门课程循环N次输入成绩*/
{
do{/*对数据进行验证,保证在0~100之间*/
printf("score%d:",i 1);
scanf("%d",info-score[i]);
if(info-score[i]100||info-score[i]0)
printf("bad data,repeat input\n");
}while(info-score[i]100||info-score[i]0);
s1=s1 info-score[i];/*计算总分*/
}
info-sum=s1;/*将总分存入新记录中*/
info-average=(float)s1/N;/*计算均分*/
info-order=0;/*名次赋值0*/
info-next=NULL;/*设后继指针为空*/
p=h;/*将指针赋值给p*/
q=h;/*将指针赋值给q*/
while(strcmp(p-no,s)p!=NULL)/*查找插入位置*/
{
q=p;/*保存指针p,作为下一个p的前驱*/
}
if(p==NULL)/*如果p指针为空,说明没有指定结点*/
if(p==h)/*同时p等于h,说明链表为空*/
h=info;/*新记录则为头结点*/
else
q-next=info;/*p为空,但p不等于h,将新结点插在表尾*/
else
if(p==h)/*p不为空,则找到了指定结点*/
{
info-next=p; /*如果p等于h,则新结点插入在第一个结点之前*/
h=info;/*新结点为新的头结点*/
}
else
{
info-next=p;/*不是头结点,则是中间某个位置,新结点的后继为p*/
q-next=info;/*新结点作为q的后继结点*/
}
printf("\n ----have inserted %s student----\n",info-name);printf("---Don't forget save---\n");/*提示存盘*/
return(h);/*返回头指针*/
}
/*保存数据到文件*/
void save(STUDENT *h)
{
STUDENT *p;/* 定义移动指针*/
char outfile[10];/*保存输出文件名*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,如没有则建立*/
{
printf("can not open file\n");
exit(1);
}
printf("\nSaving file......\n");/*打开文件,提示正在保存*/
p=h;/*移动指针从头指针开始*/
while(p!=NULL)/*如p不为空*/
{
fwrite(p,sizeof(STUDENT),1,fp);/*写入一条记录*/
}
fclose(fp);/*关闭文件*/
printf("-----save success!!-----\n");/*显示保存成功*/
}
/* 从文件读数据*/
STUDENT *load()
{
STUDENT *p,*q,*h=NULL;/*定义记录指针变量*/
FILE *fp;/* 定义指向文件的指针*/
char infile[10];/*保存文件名*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");scanf("%s",infile);/*输入文件名*/
if((fp=fopen(infile,"rb"))==NULL)/*打开一个二进制文件,为读方式*/
{
printf("can not open file\n");/*如不能打开,则结束程序*/
exit(1);
}
printf("\n -----Loading file!-----\n");
if(!p)
{
printf("out of memory!\n");/*如没有申请到,则内存溢出*/
return h;/*返回空头指针*/
}
h=p;/*申请到空间 , 将其作为头指针*/
while(!feof(fp))/*循环读数据直到文件尾结束*/
{
if(1!=fread(p,sizeof(STUDENT),1,fp))
break;/*如果没读到数据,跳出循环*/
p-next=(STUDENT *)malloc(sizeof(STUDENT));/*为下一个结点申请空间*/
if(!p-next)
{
printf("out of memory!\n");/*如没有申请到,则内存溢出*/
return h;
}
p=p-next;/*指针后移,新读入数据链到当前表尾*/
}
q-next=NULL;/*最后一个结点的后继指针为空*/
fclose(fp);/*关闭文件*/
printf("---You have success read data from file!!!---\n");
return h;/*返回头指针*/
}
/*追加记录到文件*/
void append()
{
FILE *fp;/*定义指向文件的指针*/
STUDENT *info;/*新记录指针*/
int s1,i;
char infile[10];/*保存文件名*/
printf("\nplease new record\n");
info=(STUDENT *)malloc(sizeof(STUDENT));/*申请空间*/
if(!info)
{
printf("\nout of memory");/*没有申请到,内存溢出本函数结束*/
return ;
}
inputs("enter no:",info-no,11);/*调用inputs输入学号*/
inputs("enter name:",info-name,15); /*调用inputs输入姓名*/
printf("please input %d score \n",N);/*提示输入成绩*/
s1=0;
for(i=0;iN;i)
{
do{
printf("score%d:",i 1);
scanf("%d",info-score[i]);/*输入成绩*/
if(info-score[i]100||info-score[i]0)printf("bad data,repeat input\n");
}while(info-score[i]100||info-score[i]0); /*成绩数据验证*/
s1=s1 info-score[i];/*求总分*/
}
info-sum=s1;/*保存总分*/
info-average=(float)s1/N;/*求均分*/
info-order=0;/*名次初始值为0*/
info-next=NULL;/*将新记录后继指针赋值为空*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");scanf("%s",infile);/*输入文件名*/
if((fp=fopen(infile,"ab"))==NULL)/*向二进制文件尾增加数据方式打开文件*/
{
printf("can not open file\n");/*显示不能打开*/
exit(1);/*退出程序*/
}
printf("\n -----Appending record!-----\n");
if(1!=fwrite(info,sizeof(STUDENT),1,fp))/*写文件操作*/
{
printf("-----file write error!-----\n");
return;/*返回*/
}
printf("-----appendsucess!!----\n");
fclose(fp);/*关闭文件*/
}
/*文件拷贝*/
void copy()
{
char outfile[10],infile[10];
FILE *sfp,*tfp;/*源和目标文件指针*/
STUDENT *p=NULL;/*移动指针*/
clrscr();/*清屏*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");
scanf("%s",infile);/*输入源文件名*/
if((sfp=fopen(infile,"rb"))==NULL)/*二进制读方式打开源文件*/
{
printf("can not open input file\n");
exit(0);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n");/*提示输入目标文件名*/
scanf("%s",outfile);/*输入目标文件名*/
if((tfp=fopen(outfile,"wb"))==NULL)/*二进制写方式打开目标文件*/
{
printf("can not open output file \n");
exit(0);
}
while(!feof(sfp))/*读文件直到文件尾*/
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break; /*块读*/
fwrite(p,sizeof(STUDENT),1,tfp);/*块写*/
}
fclose(sfp);/*关闭源文件*/
fclose(tfp);/*关闭目标文件*/
printf("you have success copyfile!!!\n");/*显示成功拷贝*/
}
/*排序*/
STUDENT *sort(STUDENT *h)
{
int i=0;/*保存名次*/
STUDENT *p,*q,*t,*h1;/*定义临时指针*/
h1=h-next;/*将原表的头指针所指的下一个结点作头指针*/
h-next=NULL;/*第一个结点为新表的头结点*/
while(h1!=NULL)/*当原表不为空时 , 进行排序*/
{
t=h1;/*取原表的头结点*/
h1=h1-next;/*原表头结点指针后移*/
p=h;/*设定移动指针p,从头指针开始*/
q=h;/*设定移动指针q做为p的前驱,初值为头指针*/
while(t-sump-sump!=NULL)/*作总分比较*/
{
q=p;/*待排序点值?。蛐卤碇刚牒笠?/
p=p-next;
}
if(p==q)/*p==q,说明待排序点值大,应排在首位*/
{
t-next=p;/*待排序点的后继为p*/
h=t;/*新头结点为待排序点*/
}
else/*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/
{
t-next=p;/*t的后继是p*/
q-next=t;/*q的后继是t*/
}
}
p=h;/*已排好序的头指针赋给p,准备填写名次*/
while(p!=NULL)/*当p不为空时,进行下列操作*/
{
i;/*结点序号*/
p-order=i;/*将名次赋值*/
p=p-next;/*指针后移*/
}
printf("sort sucess!!!\n");/*排序成功*/
return h;/*返回头指针*/
}
/*计算总分和均值*/
void computer(STUDENT *h)
{
STUDENT *p;/*定义移动指针*/
int i=0;/*保存记录条数初值为0*/
long s=0;/*总分初值为0*/
float average=0;/*均分初值为0*/
p=h;/*从头指针开始*/
while(p!=NULL)/*当p不为空时处理*/
{
s =p-sum;/*累加总分*/
i;/*统计记录条数*/
p=p-next;/*指针后移*/
}
average=(float)s/i;/* 求均分,均分为浮点数,总分为整数 , 所以做类型转换*/
printf("\n--All students sum score is:%ldaverage is %5.2f\n",s,average);
}
/*索引*/
STUDENT *index(STUDENT *h)
{
STUDENT *p,*q,*t,*h1;/*定义临时指针*/
h1=h-next;/*将原表的头指针所指的下一个结点作头指针*/
h-next=NULL;/*第一个结点为新表的头结点*/
while(h1!=NULL)/*当原表不为空时,进行排序*/
{
t=h1;/*取原表的头结点*/
h1=h1-next;/*原表头结点指针后移*/
p=h;/*设定移动指针p,从头指针开始*/
q=h;/*设定移动指针q做为p的前驱,初值为头指针*/
while(strcmp(t-no,p-no)0p!=NULL)/*作学号比较*/
{
q=p;/*待排序点值大,应往后插,所以新表指针后移*/
p=p-next;
}
if(p==q)/*p==q,说明待排序点值?。ε旁谑孜?/
{
t-next=p;/*待排序点的后继为p*/
h=t;/*新头结点为待排序点*/
}
else/*待排序点应插入在中间某个位置q和p之间 , 如p为空则是尾部*/
{
t-next=p;/*t的后继是p*/
q-next=t;/*q的后继是t*/
}
}
printf("index sucess!!!\n");/*索引排序成功*/
return h;/*返回头指针*/
}
/*分类合计*/
void total(STUDENT *h)
{
STUDENT *p,*q;/*定义临时指针变量*/
char sno[9],qno[9],*ptr;/*保存班级号的*/
float s1,ave;/*保存总分和均分*/
int i;/*保存班级人数*/
C语言 指正函数 学生成绩少用loop吧!我把你程序改了一下.
#includestdio.h/*输出不及格学生的成绩,平均成绩(假设只有一个同学一门成绩不及格),*/
void fail(int (*p)[4],int n);
void main()
{
intsore[3][4]={{60,65,70,75},{65,55,90,100},{60,75,80,90}} ;
fail(sore,3);
}
void fail(int (*p)[4],int n)
{
int i,j,sum=0,flag=0;
for(i=0;in;i)/*i指向[3] , j指向[4]*/
{ for(j=0;j4;j)
if(*(*(p i) j)60)/*逐个队每行每列数字进行检测 , 小于60跳出循环*/
{
for(j=0;j4;j)/*依次输出成绩*/
{
sum=*(*(p i) j) sum;/*求这几个成绩的总*/
printf("%d\t",*(*(p i) j));/*输出这几门成绩*/
printf("\n");
}
sum=sum/4;/*求平均*/
printf("%d\n",sum);
break;
}
}
printf("\n");
}
学生成绩管理程序设计(C语言)测试过了
/*头文件*/
#include stdio.h
#includedos.h
#includestdlib.h /*其它说明*/
#includestring.h /*字符串函数*/
#includememory.h /*内存操作函数*/
#includectype.h /*字符操作函数*/
#include "conio.h"
#define LEN sizeof(STUDENT)
typedef struct stu /*定义结构体数组用于缓存数据*/
{char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
/*函数原型*/
STUDENT *init(); /*初始化函数*/
int menu_select(); /*菜单函数*/
STUDENT *create(); /*创建链表*/
void print(STUDENT *head); /* 显示全部记录*/
void search(STUDENT *head); /*查找记录*/
STUDENT *mydelete(STUDENT *head); /*删除记录*/
STUDENT *sort(STUDENT *head); /*排序*/
STUDENT *insert(STUDENT *head,STUDENT *mynew); /*插入记录*/
void save(STUDENT *head); /*保存文件*/
STUDENT *load(); /*读文件*/
/*主函数界面*/
void main()
{STUDENT *head,mynew;
head=init(); /*链表初始化,使head的值为NULL*/
for(;;) /*循环无限次*/
{switch(menu_select())
{
case 1:head=create();break;
case 2:print(head);break;
case 3:search(head);break;
case 4:head=mydelete(head);break;
case 5:head=sort(head);break;
case 6:head=insert(head,mynew);break; /*mynew表示返回地址*/
case 7:save(head);break;
case 8:head=load(); break;
case 9:exit(0); /*如菜单返回值为9则程序结束*/
}
}
}
/*初始化函数*/
STUDENT *init()
{
return NULL; /*返回空指针*/
}
/*菜单选择函数*/
menu_select()
{int n;
printf("\n按任一键进入主菜单...... \npress any key to enter the menu......"); /*按任一键进入主菜单*/
getch(); /*从键盘读取一个字符,但不显示于屏幕*/
system("cls");
printf("********************************************************************************\n");
printf("\t\t 欢迎 Welcome to\n");
printf("\n\t\t\t 使用学生管理系统1.0\n\n\t\t\t\t\t\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. 输入学生成绩记录 Enter the record\n"); /*输入学生成绩记录*/
printf("\t\t\t2. 显示 Print the record\n"); /*显示*/
printf("\t\t\t3. 寻找 Search record on name\n"); /*寻找*/
printf("\t\t\t4. 删除 mydelete a record\n"); /*删除*/
printf("\t\t\t5. 排序 Sort to make mynew a file\n"); /*排序*/
printf("\t\t\t6. 插入 Insert record to list\n"); /*插入*/
printf("\t\t\t7. 保存 Save the file\n"); /*保存*/
printf("\t\t\t8. 读取 Load the file\n"); /*读取*/
printf("\t\t\t9. 退出 Quit\n"); /*退出*/
printf("********************************************************************************\n");
do{
printf("\n\t\t\t输入你的选择Enter your choice(1~9):");
scanf("%d",n);
}while(n1||n9); /*如果选择项不在1~9之间则重输*/
return(n); /*返回选择项 , 主函数根据该数调用相应的函数*/
}
/*输入函数*/
STUDENT *create()
{int i,s;
STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/
system("cls");
for(;;)
{p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/
if(!p) /*如果指针p为空*/
{printf("\n输出内存溢出. Out of memory."); /*输出内存溢出*/
return (head); /*返回头指针,下同*/
}
printf("输入学号Enter the num(0:list end):");
scanf("%s",p-num);
if(p-num[0]=='0') break; /*如果学号首字符为0则结束输入*/
printf("输入名字Enter the name:");
scanf("%s",p-name);
printf("请输入3门成绩Please enter the %d scores\n",3); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i3;i) /*3门课程循环3次*/
{
do{
printf("成绩score%d:",i 1);
scanf("%d",p-score[i]);
if(p-score[i]0 || p-score[i]100) /*确保成绩在0~100之间*/
printf("数据错误,请重新输入 Data error,please enter again.\n");
}while(p-score[i]0 || p-score[i]100);
s=s p-score[i]; /*累加各门成绩*/
}
p-sum=s; /*将总分保存*/
p-average=(float)s/3; /*先用强制类型转换将s转换成float型,再求平均值*/
p-order=0; /*未排序前此值为0*/
p-next=head; /*将头结点做为新输入结点的后继结点*/
head=p; /*新输入结点为新的头结点*/
}
return(head);
}
/* 显示全部记录函数*/
void print(STUDENT *head)
{int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
system("cls");
p=head; /*初值为头指针*/
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
i;
printf("| = | %4s | %-4s | = | = | = | = | %4.2f | %-5d|\n",
i, p-num,p-name,p-score[0],p-score[1],p-score[2],p-sum,p-average,p-order);
p=p-next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}
/*查找记录函数*/
void search(STUDENT *head)
{STUDENT *p; /* 移动指针*/
char s[5]; /*存放姓名用的字符数组*/
system("cls");
printf("请输入个姓名来查找. Please enter name for searching.\n");
scanf("%s",s);
p=head; /*将头指针赋给p*/
while(strcmp(p-name,s)p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/
p=p-next; /*移动指针,指向下一结点*/
if(p!=NULL) /*如果指针不为空*/
{printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | = | = | = | = | %4.2f | %-5d|\n",
p-num,p-name,p-score[0],p-score[1],p-score[2],p-sum,p-average,p-order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\n没有该学生 There is no num %s student on the list.\n",s); /*显示没有该学生*/
}
/*删除记录函数*/
STUDENT *mydelete(STUDENT *head)
{int n;
STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/
char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/
system("cls");
printf("请输入要删除的学号 Please enter the mydeleted num: ");
scanf("%s",s);
p1=p2=head; /*给p1和p2赋初值头指针*/
while(strcmp(p1-num,s)p1 != NULL) /*当记录的学号不是要找的 , 或指针不为空时*/
{p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/
p1=p1-next; /*将p1指针指向下一条记录*/
}
if(strcmp(p1-num,s)==0) /*学号找到了*/
{printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | = | = | = | = | %4.2f | %-5d|\n",
p1-num,p1-name,p1-score[0],p1-score[1],p1-score[2],p1-sum,p1-average,p1-order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
printf("\n是否要删除,输入Y删除,N则退出\nAre you sure to mydelete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/
for(;;)
{scanf("%c",c);
if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/
if(c=='y'||c=='Y')
{
if(p1==head) /*若p1==head , 说明被删结点是首结点*/
head=p1-next; /*把第二个结点地址赋予head*/
else
p2-next=p1-next; /*否则将一下结点地址赋给前一结点地址*/
n=n-1;
printf("\n学号为(Num): %s 学生以被删除(student have been mydeleted.)\n",s);
printf("别忘了保存. Don't forget to save.\n");break; /*删除后就跳出循环*/
}
}
}
else
printf("\n没有这个学生在表上\nThere is no num %s student on the list.\n",s); /*找不到该结点*/
return(head);
}
/*排序函数*/
STUDENT *sort(STUDENT *head)
{int i=0; /*保存名次*/
STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/
temp=head-next; /*将原表的头指针所指的下一个结点作头指针*/
head-next=NULL; /*第一个结点为新表的头结点*/
while(temp!=NULL) /*当原表不为空时,进行排序*/
{
t=temp; /*取原表的头结点*/
temp=temp-next; /*原表头结点指针后移*/
p1=head; /*设定移动指针p1,从头指针开始*/
p2=head; /*设定移动指针p2做为p1的前驱 , 初值为头指针*/
while(t-averagep1-averagep1!=NULL) /*作成绩平均分比较*/
{
p2=p1; /*待排序点值小,则新表指针后移*/
p1=p1-next;
}
if(p1==p2) /*p1==p2 , 说明待排序点值大,应排在首位*/
{
t-next=p1; /*待排序点的后继为p*/
head=t; /*新头结点为待排序点*/
}
else /*待排序点应插入在中间某个位置p2和p1之间 , 如p为空则是尾部*/
{
t-next=p1; /*t的后继是p1*/
p2-next=t; /*p2的后继是t*/
}
}
p1=head; /*已排好序的头指针赋给p1,准备填写名次*/
while(p1!=NULL) /*当p1不为空时,进行下列操作*/
{
i; /*结点序号*/
p1-order=i; /*将结点序号赋值给名次*/
p1=p1-next; /*指针后移*/
}
printf("排序成功 Sorting is sucessful.\n"); /*排序成功*/
return (head);
}
/*插入记录函数*/
STUDENT *insert(STUDENT *head,STUDENT *mynew)
{STUDENT *p0,*p1,*p2;
int n,sum1,i;
p1=head; /*使p1指向第一个结点*/
p0=mynew; /*p0指向要插入的结点*/
printf("\nPlease enter a mynew record.\n"); /*提示输入记录信息*/
printf("输入学号Enter the num:");
scanf("%s",mynew-num);
printf("输入名字Enter the name:");
scanf("%s",mynew-name);
printf("Please enter the %d scores.\n",3);
sum1=0; /*保存新记录的总分 , 初值为0*/
for(i=0;i3;i)
{
do{
printf("成绩score%d:",i 1);
scanf("%d",mynew-score[i]);
if(mynew-score[i]100||mynew-score[i]0)
printf("数据错误Data error,please enter again.\n");
}while(mynew-score[i]100||mynew-score[i]0);
sum1=sum1 mynew-score[i]; /*累加各门成绩*/
}
mynew-sum=sum1; /*将总分存入新记录中*/
mynew-average=(float)sum1/3;
mynew-order=0;
if(head==NULL) /*原来的链表是空表*/
{head=p0;p0-next=NULL;} /*使p0指向的结点作为头结点*/
else
{while((p0-averagep1-average)(p1-next!=NULL))
{p2=p1; /*使p2指向刚才p1指向的结点*/
p1=p1-next; /*p1后移一个结点*/
}
if(p0-average=p1-average)
{if(head==p1)head=p0; /*插到原来第一个结点之前*/
else p2-next=p0; /*插到p2指向的结点之后*/
p0-next=p1;}
else
{p1-next=p0;p0-next=NULL;} /*插到最后的结点之后*/
}
n=n 1; /*结点数加1*/
head=sort(head); /*调用排序的函数,将学生成绩重新排序*/
printf("\n学生Student %s 已被更新have been inserted.\n",mynew-name);
printf("不要忘了保存Don't forget to save the mynew file.\n");
return(head);
}
/*保存数据到文件函数*/
void save(STUDENT *head)
{FILE *fp; /*定义指向文件的指针*/
STUDENT *p; /* 定义移动指针*/
char outfile[10];
printf("输出文件例如:c:\\score Enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL) /*为输出打开一个二进制文件,为只写方式*/
{
printf("打不开文件Cannot open the file\n");
return; /*若打不开则返回菜单*/
}
printf("\n保存中...Saving the file......\n");
p=head; /*移动指针从头指针开始*/
while(p!=NULL) /*如p不为空*/
{
fwrite(p,LEN,1,fp); /*写入一条记录*/
p=p-next; /*指针后移*/
}
fclose(fp); /*关闭文件*/
printf("保存成功....Save the file successfully!\n");
}
/* 从文件读数据函数*/
STUDENT *load()
{STUDENT *p1,*p2,*head=NULL; /*定义记录指针变量*/
FILE *fp; /* 定义指向文件的指针*/
char infile[10];
printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL) /*打开一个二进制文件,为只读方式*/
{
printf("打不开文件Can not open the file.\n");
return(head);
}
printf("\n寻找文件...Loading the file!\n");
p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/
if(!p1)
{
printf("内存溢出!Out of memory!\n");
return(head);
}
head=p1; /*申请到空间,将其作为头指针*/
while(!feof(fp)) /*循环读数据直到文件尾结束*/
{
if(fread(p1,LEN,1,fp)!=1) break; /*如果没读到数据,跳出循环*/
p1-next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/
if(!p1-next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1; /*使p2指向刚才p1指向的结点*/
p1=p1-next; /*指针后移,新读入数据链到当前表尾*/
}
p2-next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp);
printf("\n你成功的从文件中读取了数据!\nYou have success to read data from the file!\n");
return (head);
}
关于c语言函数中设定原始成绩和c语言设置初始值的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读