c语言实训总结报告_第1页
c语言实训总结报告_第2页
c语言实训总结报告_第3页
c语言实训总结报告_第4页
c语言实训总结报告_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C课程设计一、课程设计目标《C语言课程设计》是信息类专业关键实践性课程。目标在于学习完《C语言程序设计》课程后进行一次全方面综合练习。经过课程设计,首先能够结合课程教学内容循序渐进地进行设计方面实践训练,其次,在参与一系列子项目标实践过程中,还能提升怎样综合利用所学知识处理实际问题能力,和取得相关项目管理和团体合作等众多方面具体经验。为后续课程:面向对象程序设计、VisualC++,数据结构,软件工程,软件技术基础等奠定必需实践基础。设计目标以下:1、深入培养学生结构化程序设计思想,加深对高级语言基础语言要素和控制结构了解。2、针对C语言中关键和难点内容进行训练,独立完成有一定工作量程序设计任务,同时强调好程序设计风格。3、掌握C语言编程技巧和上机调试程序方法。4、掌握程序设计中常见算法。二、课程设计题目及要求1、基础训练题目1.1基础1.1.1写出下面程序输出结果。1)#include<stdio.h>main(){intx;x=-3+4*5-6;printf(“%d\n”,x);x=3+4%5-6;printf(“%d\n”,x);x=-3*4%4-6/5;printf(“%d\n”,x);x=(7+6)%5/2;printf(“%d\n”,x);}2)#include<stdio.h>main(){ intx=5; inty=6; intz=7; printf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n",x>y,y>x,x!=y,x==z-2,x=x-2,x>=z,x<=z);}3)#include<stdio.h>main(){ intx=0,y=-1,z=1; printf("%d,%d,%d,%d,%d,%d",x&&y,x||y,y&&z,y||z,x&y,x|y);}1.2次序结构1)已知三角形底和高,求三角形面积法一、#include<stdio.h>main(){floata,b;scanf("a=%f,b=%f",&a,&b);printf("MJ=%.2f",(a*b)/2.0);}法二、#include<stdio.h>main(){floata,b,s;scanf("a=%f,b=%f",&a,&b);s=a*b/2;printf("s=%.1f",s);}2)若已知某银行十二个月定时存款年利率,输入存款额,计算三年后本利之和并输出。年利率rate,存款期n,存款本金capital,本利之和deposit。#include<stdio.h>#include<math.h>main(){intn=3;doublerate=0.02;doublecapital;doubledeposit;printf("Pleaseentecapital:");scanf("%lf",&capital);deposit=capital*pow(1+rate,n);printf("deposit=%.2f\n",deposit);}#defineN3改4#defineRATE0.02改0..01#include<stdio.h>#include<math.h>main(){doublecapital;doubledeposit;printf("Pleaseentecapital:");scanf("%lf",&capital);deposit=capital*pow(1+RATE,N);printf("deposit=%.2f\n",deposit);}改1.3选择结构1)输入四个整数,要求按大小次序输出#include<stdio.h>main(){inta,b,c,d,t;printf("pleaseinput四个整数\n");scanf("%d%d%d%d\n",&a,&b,&c,&d);if(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}if(a<d){t=a;a=d;d=t;}if(b<c){t=b;b=c;c=t;}if(b<d){t=b;b=d;d=t;}if(c<d){t=c;c=d;d=t;}printf("%d%d%d%d\n",a,b,c,d);}#include<stdio.h>main(){inta,b,c,d,t;printf("pleaseinput四个整数\n");scanf("%d%d%d%d\n",&a,&b,&c,&d);if(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}if(a<d){t=a;a=d;d=t;}if(b<c){t=b;b=c;c=t;}if(b<d){t=b;b=d;d=t;}if(c<d){t=c;c=d;d=t;}printf("%d%d%d%d\n",a,b,c,d);getch();}2)编写程序实现:输入一个百分制成绩。要求书出成绩等级‘A’‘B’‘C’‘D’‘E’,90分以上为‘A’,81~89分为‘B’,70~79为‘C’,60~69为‘D’,60分一下为‘E’。#include<stdio.h>main(){ intx;printf("Pleasechengji:\n");scanf("%d",&x);if(x>=90){ printf("A\n");}elseif(x>=80){printf("B\n");}elseif(x>=70){printf("C\n");}elseif(x>=60){printf("D\n");}else{printf("E\n");}}3)编写程序实现:给出一个不多于5位正整数,要求:1.求出它是几位数2.分别打印出每一位数3.按逆序打印出各位数字,比如原数为321,应输出123#include<stdio.h>main(){intx,a,b,c,d,e;printf("pleaseinput一个不超于五位整数\n");scanf("%d\n",&x);if(x/10000>=1){a=x/10000;b=(x-a*10000)/1000;c=(x-a*10000-b*1000)/100;d=(x-a*10000-b*1000-c*100)/10;e=(x-a*10000-b*1000-c*100-d*10);printf("每一位数是\t%d\t%d\t%d\t%d\t%d\n",a,b,c,d,e);printf("逆序是\t%d%d%d%d%d\n",e,d,c,b,a);printf("该数是五位数\n");}elseif(x/1000>=1){a=x/1000;b=(x-a*1000)/100;c=(x-a*1000-b*100)/10;d=(x-a*1000-b*100-c*10);printf("每一位数是\t%d\t%d\t%d\t%d\n",a,b,c,d);printf("逆序是\t%d%d%d%d\n",d,c,b,a); printf("该数是四位数\n"); }elseif(x/100>=1) { a=x/100;b=(x-a*100)/10;c=(x-a*100-b*10);printf("每一位数是\t%d\t%d\t%d\n",a,b,c);printf("逆序是\t%d%d%d\n",c,b,a); printf("该数是三位数\n"); }elseif(x/10>=1) { a=x/10;b=(x-a*10);printf("每一位数是\t%d\t%d\n",a,b);printf("逆序是\t%d%d\n",b,a); printf("该数是两位数\n"); }else{printf("每一位数是\t%d\n",x);printf("逆序是\t%d\n",x); printf("该数是一位数\n");}}1.4循环1)已知xyz+yzz=532,其中x、y、z全部是数字(0~9),编写一个程序求出x、y、z分别代表什么数字。#include<stdio.h>main(){intx,y,z;for(x=0;x<=9;x++){ for(y=0;y<=9;y++) { for(z=0;z<=9;z++) { if(x*100+y*10+z*1+y*100+z*10+z*1==532) printf("x=%d,y=%d,z=%d\n",x,y,z); } }}}2)编写一个程序打印以下对称图形(行数由键盘输入1~9范围值),例以下面是输入数字4时情形:4444444333332221222333334444444#include<stdio.h>main(){ inti,j,k,n; scanf("%d",&n); for(i=n;i>=1;i--) { for(j=1;j<=n-i;j++) printf(""); for(k=1;k<=2*i-1;k++) printf("%d",i); printf("\n"); } for(i=2;i<=n;i++) { for(j=1;j<=n-i;j++) printf(""); for(k=1;k<=2*i-1;k++) printf("%d",i);printf("\n"); }}3)学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校学生人数。#include<stdio.h>main(){intn;for(n=800;n<=1000;n++)if(n%7==3&&n%5==2&&n%3==1)printf("n=%d\n",n);}4)猴子吃桃问题,猴子第一天摘下若干个桃子,立即吃了二分之一,还不过瘾,有多吃了一个,第二天早上又将剩下桃子吃掉二分之一,有多吃了一个,以后天天早上全部吃了前一天剩下二分之一零一个,到第10天早上想在吃时,见只剩下一个桃子了。求第一天共摘了多少桃子。#include<stdio.h>main(){intm,t,x;for(t=9,m=1;t>0;t--){x=(m+1)*2;m=x;}printf("共摘了:%d\n",m);}1.5数组1、输入一个字符串,统计其中字母、数字、空格和其它字符各多少个。#include<stdio.h>main(){chars[30];inti,c1=0,c2=0,c3=0,c4=0;printf("pleaseinputazifuchuan:");gets(s);i=0;while(s[i]!='\0'){if(((s[i]>=97)&&(s[i]<=122))||((s[i]>=65)&&(s[i]<=90))){c1++;}elseif(s[i]==''){c2++;}elseif(s[i]>='0'&&s[i]<='9'){c3++;}elsec4++;i++;}printf("其它字符=%d\n字母=%d\n空格=%d\n数字=%d\n",c4,c1,c2,c3);}2)输出杨辉三角形。#include<stdio.h>main(){ inti,j,a[7][7];for(i=0;i<7;i++) {a[i][i]=1;a[i][0]=1; }for(i=2;i<7;i++){for(j=1;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];}for(i=0;i<7;i++){for(j=0;j<=i;j++) printf("%d\t",a[i][j]); printf("\n");} }3)将一个数插入到一个有序数列中,要求插入后仍有序。#include<stdio.h>main(){ inta[6],i,b; printf("pleaseinput五位由小到大数列:\n"); for(i=0;i<5;i++) scanf("%d",&a[i]); printf("\n");printf("pleaseinput一个数b:\n"); scanf("%d",&b); if(a[0]>b) { [5]=a[0];a[0]=b;b=a[5]; }if(a[1]>b) {a[5]=a[1];a[1]=b;b=a[5]; }if(a[2]>b) {a[5]=a[2];a[2]=b;b=a[5]; }if(a[3]>b) {a[5]=a[3];a[3]=b;b=a[5]; }if(a[4]>b) {a[5]=a[4];a[4]=b;b=a[5]; } for(i=0;i<=5;i++)printf("%d\t",a[i]); printf("\n");}4)输入一个4行4列矩阵分别求出主对角元素之和和上三角元素之和。#include<stdio.h>main(){inta[4][4],i,j,s,w;printf("pleaseinput四行四列数:\n");for(i=0;i<4;i++){ for(j=0;j<4;j++) scanf("%d\n",&a[i][j]);}for(i=0;i<4;i++){ for(j=0;j<4;j++) printf("%d\t",a[i][j]); printf("\n");}for(i=0,s=0;i<4;i++){ s=s+a[i][i];}printf("主对角元素和:%d\n",s);for(j=0,w=0;j<4;j++){for(i=0;i<=j;i++) w=w+a[i][j];}printf("上三角之和:%d\n",w);}2.1函数1)一个数假如恰好等于它全部因子之和,这个数就称为“完数”,请编写一个判别m是否为完数函数,并编写主函数,经过调用此函数统计自然数1——100间完数个数。#include"stdio.h"main(){inti,m,sum=0;for(i=2;i<100;i++){sum=0;for(m=1;m<i;m++){if(i%m==0){sum=sum+m;}}if(sum==i){printf("%d\n",i);}}getch();return0;}2)编写一个函数,实现对n个整数进行排序(用起泡法),并编写主函数调用此函数,实现对10个整数排序。#include<stdio.h>main(){inta[10];inti,j,k;printf("input10number:\n");for(i=0;i<=9;i++){scanf("%d",&a[i]);}for(i=0;i<=9;i++){if(a[i]<a[i+1])k=a[i+1];}for(i=0;i<=9;i++){for(j=9;j>=i+1;j--){if(a[j]<a[j-1]){k=a[j];a[j]=a[j-1];a[j-1]=k;}}}for(i=0;i<=9;i++)printf("%d",a[i]);printf("\n");}3)依据以下公式求π近似值,直到最终一项绝对值小于10-5为止#include<stdio.h>#include<math.h>main(){doubleh,w,s,m;intn,i; for(n=1;n<318;n++) { if((1.0/(n*n))<0.00001) printf("%d\n",n); }for(i=1,s=0;i<=n;i++) { m=1.0/(i*i);s=s+m;}w=s*6;h=sqrt(w);printf("h=%lf\n",h);}2.2指针1)写一个函数,求字符串长度。在main函数中输入字符串,并输出其长度。#include<stdio.h>main(){ chars[100],*p=s;printf("字符串:");gets(s);while(*++p);printf("长度%d\n",p-s);}2)编程判定输入一个字符串是否是回文。所谓回文,即顺读和倒读全部是一样。如eye,level,abba等。#include<stdio.h>Voidcolumn(char*str[],intn)intfun(charstr[]){intn,k,f;for(n=0;str[n]!='\0';n++);for(k=0;k<n/2;k++)if(str[k]!=str[n-k-1]){f=0;break;}returnf;}main(){chars[80];printf("\npleaseenterstring:\n");gets(s);if(fun(s)==1)printf("%sisnothuiwen\n",s);elseprintf("%sishuiwen\n",s);getch();}3)用指针优化学生成绩(1)定义一个数组stu[10]存放10个学生成绩,从键盘输入数据,要求用指针实现;(2)将数组stu[10]内容输出到屏幕上,要求用指针实现;(3)将成绩数组根据从高到低进行排序,要求用指针实现;(4)将第三步内容放在函数中实现,在主函数中调用实现排序,用指针实现,输出排序后成绩单#include"stdio.h"#include"string.h"voidcube(int*p){inti,j,t;for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(*(p+j)<*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}}intmain(void){intstu[10],i,*p;printf("Inputtenstudents'score:\n");for(p=stu,i=0;i<10;i++,p++)scanf("%d",p);printf("Outputthescores;\n");for(p=stu,i=0;i<10;i++,p++)printf("%3d",*p);printf("\n");cube(stu);printf("Outthescoresaftersort:\n");for(p=stu,i=0;i<10;i++,p++)printf("%3d",*p);}2.3结构体1)有10个学生,每个学生数据包含学号,姓名,及三门课成绩,总成绩和平均成绩,从键盘输入10个学生数据(包含学号,姓名及3门课成绩),要求打印出每位学生学号,姓名,三门课成绩,总成绩和平均成绩,最终再打印出3门课总平均成绩和最高分学生数据(包含姓名和总成绩)。试验要求:(1)依据学生信息定义一个结构体类型,在说明一个该结构体类型数组;(2)用input函数从键盘上输入10个学生数据;(3)用average函数求出每个学生总成绩、平均成绩和全部学生总平均成绩;(4)用maximum函数找出最高分学生数据;(5)在主函数中输出每位学生学号、姓名、三门课成绩、总成绩和平均成绩和总平均分和最高分学生数据。输出形式以下:NO.namescore1score2score3totalaverage101wang80798124080.00102li91908927090.00Average=85.00Thehighestscore:li,scoretotal:270#include<stdio.h>structstudent{longnum;charname[20];intscore1;intscore2;intscore3;inttotal;doubleaverage;}stu[10];main(){ structstudentstu[10]; inti,w,m,j; doubleh; printf("pleaseinput.score1.score2andscore3\n"); for(i=0;i<10;i++){ scanf("%d%s%d%d%d\n",&stu[i].num,&stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].score3); } printf("num\tname\tscore1\tscore2\tscore3\ttotal\taverage\n"); for(i=0;i<10;i++) { stu[i].total=stu[i].score1+stu[i].score2+stu[i].score3;stu[i].average=stu[i].total/3; printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2lf",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].total,stu[i].average); printf("\n"); } for(i=0,w=0;i<10;i++) { w=w+stu[i].average; } h=w/10; printf("average=%.2lf\n",h); for(i=0;i<10;i++) for(j=0;j<10;j++) if(stu[j-1].total>stu[j].total) {m=stu[j-1].total;stu[j-1].total=stu[j].total;stu[j].total=m; } printf("%s\t%d\n",stu[9].name,stu[9].total); }2)定义一个结构体变量(包含年、月、日)。编写一个函数days,计算该日期在本年中是第几天(注意闰年问题)。由主函数将年月日传输给days函数,计算以后,将结果传回到主函数输出。#include<stdio.h>structdate{intyear;intmonth;intday;};main(){structdatestu1;inta,b,c,m=0;printf("pleaseenteraisyear,bismonth,cisday:\n");scanf("%d%d%d",&stu1.year,&stu1.month,&stu1.day);a=stu1.year;b=stu1.month;c=stu1.day;if(a%400==0||a%4==0&&a%100!=0){printf("theyearisrun\n");switch(b){case1:m=c;break;case2:m=31+c;break;case3:m=31+29+c;break;case4:m=31+29+31+c;break;case5:m=31+29+31+30+c;break;case6:m=31+29+31+30+31+c;break;case7:m=31+29+31+30+31+30+c;break;case8:m=31+29+31+30+31+30+31+c;break;case9:m=31+29+31+30+31+30+31+31+c;break;case10:m=31+29+31+30+31+30+31+31+30+c;break;case11:m=31+29+31+30+31+30+31+31+30+31+c;break;case12:m=31+29+31+30+31+30+31+31+30+31+30+c;break;}printf("%d%d%dis%dthoftheyear\n",stu1.year,stu1.month,stu1.day,m);}else{printf("theyearisping\n");switch(b+12){case13:m=c;break;case14:m=31+c;break;case15:m=31+28+c;break;case16:m=31+28+31+c;break;case17:m=31+28+31+30+c;break;case18:m=31+28+31+30+31+c;break;case19:m=31+28+31+30+31+30+c;break;case20:m=31+28+31+30+31+30+31+c;break;case21:m=31+28+31+30+31+30+31+31+c;break;case22:m=31+28+31+30+31+30+31+31+30+c;break;case23:m=31+28+31+30+31+30+31+31+30+31+c;break;case24:m=31+28+31+30+31+30+31+31+30+31+30+c;break;}printf("%d%d%dis%dthoftheyear\n",stu1.year,stu1.month,stu1.day,m);}getch();}2、读程序学生成绩管理系统源代码#include"stdio.h"/*标准输入输出函数库*/#include"stdlib.h"/*标准函数库*/#include"string.h"/*字符串函数库*/#include"conio.h"/*屏幕操作函数库*/#defineHEADER1"----------------------------STUDENT----------------------------------\n"#defineHEADER2"|number|name|Comp|Math|Eng|sum|ave|mici|\n"#defineHEADER3"|---------------|---------------|----|----|----|--------|-------|-----|"#defineFORMAT"|%-10s|%-15s|%4d|%4d|%4d|%4d|%.2f|%4d|\n"#defineDATAp->data.num,p->,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingci#defineEND"---------------------------------------------------------------------\n"intsaveflag=0;/*是否需要存盘标志变量*//*定义和学生相关数据结构*/typedefstructstudent/*标识为student*/{charnum[10];/*学号*/charname[15];/*姓名*/intcgrade;/*C语言成绩*/intmgrade;/*数学成绩*/integrade;/*英语成绩*/inttotal;/*总分*/floatave;/*平均分*/intmingci;/*名次*/};/*定义每条统计或结点数据结构,标识为:node*/typedefstructnode{structstudentdata;/*数据域*/structnode*next;/*指针域*/}Node,*Link;/*Node为node类型结构变量,*Link为node类型指针变量*/voidmenu()/*主菜单*/{system("cls");/*调用DOS命令,清屏.和clrscr()功效相同*/textcolor(10);/*在文本模式中选择新字符颜色*/gotoxy(10,5);/*在文本窗口中设置光标*/cprintf("TheStudents'GradeManagementSystem\n");gotoxy(10,8);cprintf("*************************Menu********************************\n");gotoxy(10,9);cprintf("*1inputrecord2deleterecord*\n");gotoxy(10,10);cprintf("*3searchrecord4modifyrecord*\n");gotoxy(10,11);cprintf("*5insertrecord6countrecord*\n");gotoxy(10,12);cprintf("*7sortrecord8saverecord*\n");gotoxy(10,13);cprintf("*9displayrecord0quitsystem*\n");gotoxy(10,14);cprintf("*************************************************************\n");/*cprintf()送格式化输出至文本窗口屏幕中*/}voidprintheader()/*格式化输出表头*/{printf(HEADER1);printf(HEADER2);printf(HEADER3);}voidprintdata(Node*pp)/*格式化输出表中数据*/{Node*p;p=pp;printf(FORMAT,DATA);}voidWrong()/*输出按键错误信息*/{printf("\n\n\n\n\n***********Error:inputhaswrong!pressanykeytocontinue**********\n");getchar();}voidNofind()/*输出未查找此学生信息*/{printf("\n=====>Notfindthisstudent!\n");}voidDisp(Linkl)/*显示单链表l中存放学生统计,内容为student结构中定义内容*/{Node*p;p=l->next;/*l存放是单链表中头结点指针,该头结点没有存放学生信息,指针域指向后继结点才有学生信息*/if(!p)/*p==NULL,NUll在stdlib中定义为0*/{printf("\n=====>Notstudentrecord!\n");getchar();return;}printf("\n\n");printheader();/*输出表格头部*/while(p)/*逐条输出链表中存放学生信息*/{printdata(p);p=p->next;/*移动直下一个结点*/printf(HEADER3);}getchar();}/*************************************************************作用:用于定位链表中符合要求节点,并返回指向该节点指针参数:findmess[]保留要查找具体内容;nameornum[]保留按什么查找;在单链表l中查找;**************************************************************/Node*Locate(Linkl,charfindmess[],charnameornum[]){Node*r;if(strcmp(nameornum,"num")==0)/*按学号查询*/{r=l->next;while(r){if(strcmp(r->data.num,findmess)==0)/*若找到findmess值学号*/returnr;r=r->next;}}elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/{r=l->next;while(r){if(strcmp(r->,findmess)==0)/*若找到findmess值学生姓名*/returnr;r=r->next;}}return0;/*若未找到,返回一个空指针*/}/*输入字符串,并进行长度验证(长度<lens)*/voidstringinput(char*t,intlens,char*notice){charn[255];do{printf(notice);/*显示提醒信息*/scanf("%s",n);/*输入字符串*/if(strlen(n)>lens)printf("\nexceedtherequiredlength!\n");/*进行长度校验,超出lens值重新输入*/}while(strlen(n)>lens);strcpy(t,n);/*将输入字符串拷贝到字符串t中*/}/*输入分数,0<=分数<=100)*/intnumberinput(char*notice){intt=0;do{printf(notice);/*显示提醒信息*/scanf("%d",&t);/*输入分数*/if(t>100||t<0)printf("\nscoremustin[0,100]!\n");/*进行分数校验*/}while(t>100||t<0);returnt;}/*增加学生统计*/voidAdd(Linkl){Node*p,*r,*s;/*实现添加操作临时结构体指针变量*/charch,flag=0,num[10];r=l;s=l->next;system("cls");Disp(l);/*先打印出已经有学生信息*/while(r->next!=NULL)r=r->next;/*将指针移至于链表最末尾,准备添加统计*/while(1)/*一次可输入多条统计,直至输入学号为0统计结点添加操作*/{while(1)/*输入学号,确保该学号没有被使用,若输入学号为0,则退出添加统计操作*/{stringinput(num,10,"inputnumber(press'0'returnmenu):");/*格式化输入学号并检验*/flag=0;if(strcmp(num,"0")==0)/*输入为0,则退出添加操作,返回主界面*/{return;}s=l->next;while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用学号*/{if(strcmp(s->data.num,num)==0){flag=1;break;}s=s->next;}if(flag==1)/*提醒用户是否重新输入*/{getchar();printf("=====>Thenumber%sisnotexisting,tryagain?(y/n):",num);scanf("%c",&ch);if(ch=='y'||ch=='Y')continue;elsereturn;}else{break;}}p=(Node*)malloc(sizeof(Node));/*申请内存空间*/if(!p){printf("\nallocatememoryfailure");/*如没有申请到,打印提醒信息*/return;/*返回主界面*/}strcpy(p->data.num,num);/*将字符串num拷贝到p->data.num中*/stringinput(p->,15,"Name:");p->data.cgrade=numberinput("ClanguageScore[0-100]:");/*输入并检验分数,分数必需在0-100之间*/p->data.mgrade=numberinput("MathScore[0-100]:");/*输入并检验分数,分数必需在0-100之间*/p->data.egrade=numberinput("EnglishScore[0-100]:");/*输入并检验分数,分数必需在0-100之间*/p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;/*计算总分*/p->data.ave=(float)(p->data.total/3);/*计算平均分*/p->data.mingci=0;p->next=NULL;/*表明这是链表尾部结点*/r->next=p;/*将新建结点加入链表尾部中*/r=p;saveflag=1;}return;}voidQur(Linkl)/*按学号或姓名,查询学生统计*/{intselect;/*1:按学号查,2:按姓名查,其它:返回主界面(菜单)*/charsearchinput[20];/*保留用户输入查询内容*/Node*p;if(!l->next)/*若链表为空*/{system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");printf("\n=====>1Searchbynumber=====>2Searchbyname\n");printf("pleasechoice[1,2]:");scanf("%d",&select);if(select==1)/*按学号查询*/{stringinput(searchinput,10,"inputtheexistingstudentnumber:");p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值节点,并返回节点指针*/if(p)/*若p!=NULL*/{printheader();printdata(p);printf(END);printf("pressanykeytoreturn");getchar();}elseNofind();getchar();}elseif(select==2)/*按姓名查询*/{stringinput(searchinput,15,"inputtheexistingstudentname:");p=Locate(l,searchinput,"name");if(p){printheader();printdata(p);printf(END);printf("pressanykeytoreturn");getchar();}elseNofind();getchar();}elseWrong();getchar();}/*删除学生统计:先找到保留该学生统计节点,然后删除该节点*/voidDel(Linkl){intsel;Node*p,*r;charfindmess[20];if(!l->next){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");Disp(l);printf("\n=====>1Deletebynumber=====>2Deletebyname\n");printf("pleasechoice[1,2]:");scanf("%d",&sel);if(sel==1){stringinput(findmess,10,"inputtheexistingstudentnumber:");p=Locate(l,findmess,"num");if(p)/*p!=NULL*/{r=l;while(r->next!=p)r=r->next;r->next=p->next;/*将p所指节点从链表中去除*/free(p);/*释放内存空间*/printf("\n=====>deletesuccess!\n");getchar();saveflag=1;}elseNofind();getchar();}elseif(sel==2)/*先按姓名查询到该统计所在节点*/{stringinput(findmess,15,"inputtheexistingstudentname");p=Locate(l,findmess,"name");if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>deletesuccess!\n");getchar();saveflag=1;}elseNofind();getchar();}elseWrong();getchar();}/*修改学生统计。先按输入学号查询到该统计,然后提醒用户修改学号之外值,学号不能修改*/voidModify(Linkl){Node*p;charfindmess[20];if(!l->next){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");printf("modifystudentrecorder");Disp(l);stringinput(findmess,10,"inputtheexistingstudentnumber:");/*输入并检验该学号*/p=Locate(l,findmess,"num");/*查询到该节点*/if(p)/*若p!=NULL,表明已经找到该节点*/{printf("Number:%s,\n",p->data.num);printf("Name:%s,",p->);stringinput(p->,15,"inputnewname:");printf("Clanguagescore:%d,",p->data.cgrade);p->data.cgrade=numberinput("ClanguageScore[0-100]:");printf("Mathscore:%d,",p->data.mgrade);p->data.mgrade=numberinput("MathScore[0-100]:");printf("Englishscore:%d,",p->data.egrade);p->data.egrade=numberinput("EnglishScore[0-100]:");p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;p->data.ave=(float)(p->data.total/3);p->data.mingci=0;printf("\n=====>modifysuccess!\n");Disp(l);saveflag=1;}elseNofind();getchar();}/*插入统计:按学号查询到要插入节点位置,然后在该学号以后插入一个新节点。*/voidInsert(Linkl){Linkp,v,newinfo;/*p指向插入位置,newinfo指新插入统计*/charch,num[10],s[10];/*s[]保留插入点位置之前学号,num[]保留输入新统计学号*/intflag=0;v=l->next;system("cls");Disp(l);while(1){stringinput(s,10,"pleaseinputinsertlocationaftertheNumber:");flag=0;v=l->next;while(v)/*查询该学号是否存在,flag=1表示该学号存在*/{if(strcmp(v->data.num,s)==0){flag=1;break;}v=v->next;}if(flag==1)break;/*若学号存在,则进行插入之前新统计输入操作*/else{getchar();printf("\n=====>Thenumber%sisnotexisting,tryagain?(y/n):",s);scanf("%c",&ch);if(ch=='y'||ch=='Y'){continue;}else{return;}}}/*以下新统计输入操作和Add()相同*/stringinput(num,10,"inputnewstudentNumber:");v=l->next;while(v){if(strcmp(v->data.num,num)==0){printf("=====>Sorry,thenewnumber:'%s'isexisting!\n",num);printheader();printdata(v);printf("\n");getchar();return;}v=v->next;}newinfo=(Node*)malloc(sizeof(Node));if(!newinfo){printf("\nallocatememoryfailure");/*如没有申请到,打印提醒信息*/return;/*返回主界面*/}strcpy(newinfo->data.num,num);stringinput(newinfo->,15,"Name:");newinfo->data.cgrade=numberinput("ClanguageScore[0-100]:");newinfo->data.mgrade=numberinput("MathScore[0-100]:");newinfo->data.egrade=numberinput("EnglishScore[0-100]:");newinfo->data.total=newinfo->data.egrade+newinfo->data.cgrade+newinfo->data.mgrade;newinfo->data.ave=(float)(newinfo->data.total/3);newinfo->data.mingci=0;newinfo->next=NULL;saveflag=1;/*在main()有对该全局变量判定,若为1,则进行存盘操作*//*将指针赋值给p,因为l中头节点下一个节点才实际保留着学生统计*/p=l->next;while(1){if(strcmp(p->data.num,s)==0)/*在链表中插入一个节点*/{newinfo->next=p->next;p->next=newinfo;break;}p=p->next;}Disp(l);printf("\n\n");getchar();}/*统计该班总分第一名和单科第一,和各科不及格人数*/voidTongji(Linkl){Node*pm,*pe,*pc,*pt;/*用于指向分数最高节点*/Node*r=l->next;intcountc=0,countm=0,counte=0;/*保留三门成绩中不及格人数*/if(!r){system("cls");printf("\n=====>Notstudentrecord!\n");getchar();return;}system("cls");Disp(l);pm=pe=pc=pt=r;while(r){if(r->data.cgrade<60)countc++;if(r->data.mgrade<60)countm++;if(r->data.egrade<60)counte++;if(r->data.cgrade>=pc->data.cgrade)pc=r;if(r->data.mgrade>=pm->data.mgrade)pm=r;if(r->data.egrade>=pe->data.egrade)pe=r;if(r->data.total>=pt->data.total)pt=r;r=r->next;}printf("\n------------------------------theTongJiresult--------------------------------\n");printf("CLanguage<60:%d(ren)\n",countc);printf("Math<60:%d(ren)\n",countm);printf("English<60:%d(ren)\n",counte);printf("-------------------------------------------------------------------------------\n");printf("Thehigheststudentbytotalscroename:%stotoalscore:%d\n",pt->,pt->data.total);printf("ThehigheststudentbyEnglishscorename:%stotoalscore:%d\n",pe->,pe->data.egrade);printf("ThehigheststudentbyMathscorename:%stotoalscore:%d\n",pm->,pm->data.mgrade);printf("ThehigheststudentbyCscorename:%stotoalscore:%d\n",pc->,pc->data.cgrade);printf("\n\npressanykeytoreturn");getchar();}/*利用插入排序法实现单链表按总分字段降序排序,从高到低*/voidSort(Linkl){Linkll;Node*p,*rr,*s;inti=0;if(l->next==NULL){system("cls");printf("\n=====>Notstudentrecord!\n");getchar();return;}ll=(Node*)malloc(sizeof(Node));/*用于创建新节点*/if(!ll){printf("\nallocatememoryfailure");/*如没有申请到,打印提醒信息*/return;/*返回主界面*/}ll->next=NULL;system("cls");Disp(l);/*显示排序前全部学生统计*/p=l->next;while(p)/*p!=NULL*/{s=(Node*)malloc(sizeof(Node));/*新建节点用于保留从原链表中取出节点信息*/if(!s)/*s==NULL*/{printf("\nallocatememoryfailure");/*如没有申请到,打印提醒信息*/return;/*返回主界面*/}s->data=p->data;/*填数据域*/s->next=NULL;/*指针域为空*/rr=ll;/*rr链表于存放插入单个节点后保持排序链表,ll是这个链表头指针,每次从头开始查找插入位置*/while(rr->next!=NULL&&rr->next->data.total>=p->data.total){rr=rr->next;}/*指针移至总分比p所指节点总分小节点位置*/if(rr->next==NULL)/*若新链表ll中全部节点总分值全部比p->data.total大时,就将p所指节点加入链表尾部*/rr->next=s;else/*不然将该节点插入至第一个总分字段比它小节点前面*/{s->next=rr->next;rr->next=s;}p=p->next;/*原链表中指针下移一个节点*/}l->next=ll->next;/*ll中存放是已排序链表头指针*/p=l->next;/*已排好序头指针赋给p,准备填写名次*/while(p!=NULL)/*当p不为空时,进行下列操作*/{i++;/*结点序号*/p->data.mingci=i;/*将名次赋值*/p=p->next;/*指针后移*/}Disp(l);saveflag=1;printf("\n=====>sortcomplete!\n");}/*数据存盘,若用户没有专门进行此操作且对数据有修改,在退出系统时,会提醒用户存盘*/voidSave(Linkl){FILE*fp;No

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论