
正文
c语言函数与结构体实验 c 结构体函数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言结构体及函数问题
没分啊,我就不具体看了,给你个慢慢看吧
#includestdio.h
#includestring.h
#includestdlib.h
struct stu
{
int num;
int wuli;
int huaxue;
int math;
};
FILE *fp;
//添加学生信息,可以排除与已存的冲突;
void add()
{
int a,b,c,d,n=0;
struct stu student;
fp=fopen("score.txt","r+");
printf("请输入要添加学生的学号、物理成绩、化学成绩及数学成绩\n");
scanf("%d%d%d%d",student.num,student.wuli,student.huaxue,student.math);
while(!feof(fp))
{
fscanf(fp,"%d%d%d%d",a,b,c,d);
if(student.num==a)
{
printf("该学生信息已存在,不需要添加\n");
fclose(fp);
n=1;
break;
}
}
if(n==0)
{
printf("信息库中没有该学生信息,可以添加\n");
fseek(fp,0,2);//文件末尾添加;
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
fclose(fp);
}
}
//修改学生信息;
void modify()
{
int n=0,number,a,b,c,d,offset;
struct stu student;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("请输入要修改学生的学号\n");
scanf("%d",number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",a,b,c,d);
if(number==a)
{
printf("该学生信息为:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("请输入要修改的信息\n");
scanf("%d%d%d%d",student.num,student.wuli,student.huaxue,student.math);
fseek(fp,offset,0);
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
n=1;
break;
}
}
if(n==0)
{
printf("该学生信息不存在\n");
}
fclose(fp);
}
//删除学生信息;
void del()
{
int n=0,number,a,b,c,d,m,offset;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("请输入删除学生的学号\n");
scanf("%d",number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",a,b,c,d);
if(number==a)
{
printf("该学生信息为:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("是否要删除该学生信息,是:1 ;否:0\n");
scanf("%d",m);
if(m)
{
fseek(fp,offset,0);
fprintf(fp,"%s\t%s\t%s\t%s"," "," "," "," ");
printf("\n");
printf("该学生信息已删除\n");
}
else printf("您已放弃删除该学生信息\n");
n=1;
break;
}
}
if(n==0)
{
printf("该学生信息不存在\n");
}
fclose(fp);
}
//查找学生信息;
void search()
{
int n=0,number,a,b,c,d,m;
char s[10];
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("请选择查找方式:1--按学号查找;0--按学科查找\n");
scanf("%d",m);
if(m)
{
printf("请输入要查找学生的学号\n");
scanf("%d",number);
while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)
{
if(number==a)
{
printf("已找到,该学生信息为:\n");
printf("%s %s %s %s\n","学号","物理成绩","化学成绩","数学成绩");
printf("%d\t %d\t %d\t %d\n",a,b,c,d);
n=1;
break;
}
}
if(n==0)
{
printf("该学生信息不存在\n");
}
fclose(fp);
}
else
{
printf("请输入要查找的学科\n");
scanf("%s",s);
if(strcmp(s,"wuli")==0)
{
printf("学号\t物理成绩\n");
while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)
printf("%d\t%d\n",a,b);
fclose(fp);
}
if(strcmp(s,"huaxue")==0)
{
printf("学号\t化学成绩\n");
while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)
printf("%d\t%d\n",a,c);
fclose(fp);
}
if(strcmp(s,"math")==0)
{
printf("学号\t数学成绩\n");
while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)
printf("%d\t%d\n",a,d);
fclose(fp);
}
if(strcmp(s,"wuli")strcmp(s,"huaxue")strcmp(s,"math") )
{
printf("错误,要查找的学科不存在\n");
fclose(fp);
}
}
}
//统计学生信息;
void tongji()
{
int n=0,a,b,c,d,m,k,x[100],i,j,l=1;
float sum=0,h[100],k1;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息库为空\n");
exit(0);
}
printf("0--统计单科平均成绩\n");
printf("1--统计单个学生的平均成绩和总成绩,对学生排名\n");
printf("请选择统计类型\n");
scanf("%d",m);
if(!m)
{
printf("1--统计物理的平均成绩\n");
printf("2--统计化学的平均成绩\n");
printf("3--统计数学的平均成绩\n");
printf("请选择要统计的学科\n");
scanf("%d",m);
if(m==1)
{
while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)
{
sum=sum+b;
n++;
}
printf("物理的平均成绩为 %2.2f\n",sum/n);
fclose(fp);
}
if(m==2)
{
while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)
{
sum=sum+c;
n++;
}
printf("化学的平均成绩为 %.2f\n",sum/n);
fclose(fp);
}
if(m==3)
{
while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)
{
sum=sum+d;
n++;
}
printf("数学的平均成绩为 %.2f\n",sum/n);
fclose(fp);
}
}
else
{
while(fscanf(fp,"%d%d%d%d",a,b,c,d)!=-1)
{
h[n]=(float)(b+c+d);
x[n]=a;
n++;
}
for(i=0;l==1in-1;i++)
{
l=0;
for(j=0;jn-1-i;j++)
{
if(h[j]h[j+1])
{
k1=h[j];
h[j]=h[j+1];
h[j+1]=k1;
k=x[j];
x[j]=x[j+1];
x[j+1]=k;
l=1;
}
}
}
printf("排序后\n");
printf("学号\t总成绩\t平均成绩\n");
for(i=0;in;i++)
printf("%d\t%3.0f\t%.2f\n",x[i],h[i],h[i]/3.0);
}
fclose(fp);
}
void main()
{
int m;
/*fp=fopen("score.txt","w");
fprintf(fp,"%s\t%s\t%s\t%s\n","学号","物理成绩","化学成绩","数学成绩");
fclose(fp);*/
while(1)
{
printf("\n\t\t*********欢迎使用学生信息管理系统*********\n\n");
printf("\n\t\t添加,请按1");
printf("\n\t\t修改,请按2");
printf("\n\t\t删除,请按3");
printf("\n\t\t查询,请按4");
printf("\n\t\t统计,请按5");
printf("\n\t\t退出,请按0\n");
printf("\n\t\t********************************************\n\n");
printf("Please select(0--5):");
scanf("%d",m);
if(m=0m=5)
{
switch(m)
{
case 1: add();
break;
case 2: modify();
break;
case 3: del();
break;
case 4: search();
break;
case 5: tongji();
break;
case 0: exit(0);
}
printf("\n\n操作完毕,请再次选择!");
}
else
printf("\n\n选择错误,请再次选择!");
}
}
相关问答
Q1: C语言结构体函数
STU f (STU a)
{ STU b={"Zhao"c语言函数与结构体实验, 'm', 85, 90}c语言函数与结构体实验;
int ic语言函数与结构体实验;
strcpy( a.name, b.name );
a.sex = b.sex;
for ( i=0; i2; i++ ) a.score[i] = b.score[i];
以上是将b中c语言函数与结构体实验的数据赋值给a,相当于a=b;这样的一个操作
return a;
}
main()
{ STU c= { "Qian", 'f', 95, 92 }, d;
d = f(c);//这里传的c是个复制品(传递的不是结构体指针),所以c不会变,d接收f()函数的返回值,因为返回值的内容是f()中的b的值,所以,d与c不同
printf ("%s,%c,%d,%d, ", d.name, d.sex, d.score[0], d.score[1]);
printf ("%s,%c,%d,%d\n", c.name, c.sex, c.score[0], c.score[1]);
}
输出结果为:A) Zhao,m,85,90, Qian,f,95,92
Q2: C语言实验 结构体与文件程序设计
//main.c文件
#includestdio.h
#includestdlib.h
#define BufLen 20
#define KeChengCount 3
typedef struct tagStuInfor
{
char xh[BufLen]; //学号
char xm[BufLen]; //姓名
char kchm[KeChengCount][BufLen]; //课程名
float pshchj[KeChengCount]; //平时成绩
float kshchj[KeChengCount]; //考试成绩
float zpchj[KeChengCount]; //总评成绩
float zf;
}StudentInformation;
typedef struct tagBookInfor
{
char shm[BufLen]; //书名
float dj; //单价
}BookInformation;
void shurustu();
void zongfen();
void shuchumaxmin();
void sortbook();
void freeall();
//学生数,书数
int xshsh,shsh;
StudentInformation *ptstu=NULL;
BookInformation *ptbook=NULL;
int main()
{
char in[]="data.txt",out[]="T_data.txt";
int i;
float chjs[6],zf;
FILE *fin,*fout;
printf("250这个数字太不好c语言函数与结构体实验了,能换成350吗c语言函数与结构体实验?\n\n");
shurustu();
zongfen();
shuchumaxmin();
printf("请输入书数:");
scanf("%d",shsh);
ptbook=(BookInformation*)calloc(shsh,sizeof(BookInformation));
for(i=0;ishsh;i++)
{
printf("请输入第%d本书c语言函数与结构体实验的书名:",i+1);
scanf("%s",ptbook[i].shm);
printf("请输入第%d本书c语言函数与结构体实验的单价:",i+1);
scanf("%f",ptbook[i].dj);
}
printf("\n");
sortbook();
printf("按书的单价升序排序后的结果:\n书名\t单价\n");
for(i=0;ishsh;i++)
{
printf("%s\t%.2f\n",ptbook[i].shm,ptbook[i].dj);
}
fin=fopen(in,"r");
fout=fopen(out,"w");
while(!feof(fin))
{
for(i=0;i6;i++)
{
fscanf(fin,"%f",chjs[i]);
}
zf=0.2*(chjs[0]+chjs[1]+chjs[2])+0.8*(chjs[3]+chjs[4]+chjs[5]);
printf("%.2f\n",zf);
fprintf(fout,"%.2f\r\n",zf);
}
printf("\n");
fclose(fin);
fclose(fout);
freeall();
system("PAUSE");
return EXIT_SUCCESS;
}
void shurustu()
{
int i;
printf("请输入学生的个数:");
scanf("%d",xshsh);
ptstu=(StudentInformation*)calloc(xshsh,sizeof(StudentInformation));
for(i=0;ixshsh;i++)
{
strcpy(ptstu[i].kchm[0],"C语言");
strcpy(ptstu[i].kchm[1],"高等数学");
strcpy(ptstu[i].kchm[2],"英语");
printf("请输入第%d个学生的学号:",i+1);
scanf("%s",ptstu[i].xh);
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",ptstu[i].xm);
printf("请输入第%d个学生的C语言课程的平时成绩和考试成绩:",i+1);
scanf("%f %f",ptstu[i].pshchj[0],ptstu[i].kshchj[0]);
printf("请输入第%d个学生的高等数学课程的平时成绩和考试成绩:",i+1);
scanf("%f %f",ptstu[i].pshchj[1],ptstu[i].kshchj[1]);
printf("请输入第%d个学生的英语课程的平时成绩和考试成绩:",i+1);
scanf("%f %f",ptstu[i].pshchj[2],ptstu[i].kshchj[2]);
}
printf("\n");
}
void zongfen()
{
int i;
for(i=0;ixshsh;i++)
{
ptstu[i].zpchj[0]=0.2*ptstu[i].pshchj[0]+0.8*ptstu[i].kshchj[0];
ptstu[i].zpchj[1]=0.2*ptstu[i].pshchj[1]+0.8*ptstu[i].kshchj[1];
ptstu[i].zpchj[2]=0.2*ptstu[i].pshchj[2]+0.8*ptstu[i].kshchj[2];
ptstu[i].zf=ptstu[i].zpchj[0]+ptstu[i].zpchj[1]+ptstu[i].zpchj[2];
printf("%s的%s,%s,%s的总评成绩是:",ptstu[i].xm,ptstu[i].kchm[0],ptstu[i].kchm[1],ptstu[i].kchm[2]);
printf("%.2f,%.2f,%.2f\n",ptstu[i].zpchj[0],ptstu[i].zpchj[1],ptstu[i].zpchj[2]);
printf("%s的总分是:%.2f\n",ptstu[i].xm,ptstu[i].zf);
}
printf("\n");
}
void shuchumaxmin()
{
int i,min,max;
min=max=0;
for(i=1;ixshsh;i++)
{
if(ptstu[i].zfptstu[min].zf)
{
min=i;
}
if(ptstu[i].zfptstu[max].zf)
{
max=i;
}
}
printf("总分最高的学生的信息:\n学号\t姓名\t");
printf("%s(平时)\t%s(平时)\t%s(平时)",ptstu[max].kchm[0],ptstu[max].kchm[1],ptstu[max].kchm[2]);
printf("\t%s(考试)\t%s(考试)\t%s(考试)\t总分\n",ptstu[max].kchm[0],ptstu[max].kchm[1],ptstu[max].kchm[2]);
printf("%s\t%s\t",ptstu[max].xh,ptstu[max].xm);
printf("%.2f\t%.2f\t%.2f\t",ptstu[max].pshchj[0],ptstu[max].pshchj[1],ptstu[max].pshchj[2]);
printf("%.2f\t%.2f\t%.2f\t%.2f\n\n",ptstu[max].kshchj[0],ptstu[max].kshchj[1],ptstu[max].kshchj[2],ptstu[max].zf);
printf("总分最低的学生的信息:\n学号\t姓名\t");
printf("%s(平时)\t%s(平时)\t%s(平时)",ptstu[min].kchm[0],ptstu[min].kchm[1],ptstu[min].kchm[2]);
printf("\t%s(考试)\t%s(考试)\t%s(考试)\t总分\n",ptstu[min].kchm[0],ptstu[min].kchm[1],ptstu[min].kchm[2]);
printf("%s\t%s\t",ptstu[min].xh,ptstu[min].xm);
printf("%.2f\t%.2f\t%.2f\t",ptstu[min].pshchj[0],ptstu[min].pshchj[1],ptstu[min].pshchj[2]);
printf("%.2f\t%.2f\t%.2f\t%.2f\n\n",ptstu[min].kshchj[0],ptstu[min].kshchj[1],ptstu[min].kshchj[2],ptstu[min].zf);
}
void sortbook()
{
int i,j,min;
BookInformation t;
for(i=0;ishsh-1;i++)
{
min=i;
for(j=i+1;jshsh;j++)
{
if(ptbook[j].djptbook[min].dj)
{
min=j;
}
}
t=ptbook[i];
ptbook[i]=ptbook[min];
ptbook[min]=t;
}
}
void freeall()
{
if(NULL!=ptstu)
{
free(ptstu);
}
if(NULL!=ptbook)
{
free(ptbook);
}
}
//data.txt文件
50 65 70 88 97 80
66 87 95 46 88 97
77 82 65 58 91 58
78 87 91 48 66 70
Q3: C语言gets()函数和结构体的使用
请不要使用getch();,这是非标准库里的函数,通常定义在conio.h里,部分老的编译器只用stdio.h也能通过。conio.h里包括的putch(),ungetch()等函数有时定义不同会造成许多麻烦。你的程序无法正常运行就与getch()有关。getch();可以吸收字符,但是有时吸收回车字符之后又把字符给了下面的输入函数。把getch()改成getchar()就可以了,两者视觉上的区别是getch()吸收的字符不会打印在屏幕上,而getchar()吸收的字符会。功能上的区别是只要用户输入了字符,getch就会返回用户键入字符的ASCII码,出错会返回-1。而getchar会一直等到用户输入回车才把字符(带着回车)一块儿扔进缓冲区里。
Q4: c语言中如何用子函数调用结构体中的变量实现数据的输入与输出。
用子函数实现结构体数据的输入与输出:对于多数子函数的输入与输出,有一定规律性可言。
方法1:void型不传值传址调用与声明。main中声明void date_in(),void date_pout()。函数定义前一定在main()前先定义结构体变量(全局变量),然后定义输入或输出程序段。此时再main()调用即可。
如下:
struct student
{
char name[20];
int old;
char sex;
}stu;
void date_in();
void main()
{ date_in();
}
void date_in()
{ scanf("%s%d/c,"stu.name,stu.old,stu.sex);
}时间问题程序有点简洁,有问题请追问,很乐意与你分享。
c语言函数与结构体实验的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c 结构体函数、c语言函数与结构体实验的信息别忘了在本站进行查找喔。







