C语言程序设计课程设计专业:电气工程及其自动化班级:电气1203姓名:朱开聪学号:201209847指导教师:王果兰州交通大学自动化与电气工程学院2013年7月16日评语:考勤(10)纪律(10)过程(40)设计报告(30)答辩(10)总成绩(100)C语言程序设计课程设计报告11、基础题1.1题目用指向指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。N个整数在主函数中输入。最后在主函数中输出。1.2解题分析在主函数上输入输出整数,在调用函数里冒泡法排序。实参数组,形参指针。1.3流程图主函数流程图如图1.1所示。结束int*p=arrayp++输入一个整数Parray+10换行,p=array调用sort函数排序输出排序后整数NY开始图1.1主函数流程图C语言程序设计课程设计报告2调用函数流程图如图1.2所示。int*i,int*j,temp用冒泡法排序结束开始图1.2调用函数流程图1.4源程序#includestdio.hvoidmain(){voidsort(int*x,intn);intarray[10],*p=array;printf(输入一组整数:\n);for(;parray+10;p++)scanf(%d,p);printf(\n);p=array;sort(array,10);printf(排序后的一组整数:\n);for(;parray+10;p++)printf(%d,,*p);printf(\n);return0;}voidsort(int*x,intn){int*i,*j,temp;for(i=x;ix+n-1;i++){for(j=i+1;jx+n;j++){if(*i*j){temp=*i;*i=*j;*j=temp;C语言程序设计课程设计报告3}}}}1.5运行结果2、改错题2.1题目(源程序)程序6:#includeconio.h#includestdio.h;main(){inti,j;clrscr();for(i=0;i10;i++)for(j=0;j10;j++){if(i=j)break;printf(*);}printf(\n);}2.2错误分析主函数类型未定义;Clrscr无法识别;最后未编辑return0;程序不完整。2.3流程图主函数流程图如图2.1所示。C语言程序设计课程设计报告4开始结束i=0,j=0getch()i10换行j10i++输出*j++NYYN图2.1流程图2.4改正后#includeconio.h#includestdio.hintmain(){inti,j;getch();for(i=0;i10;i++){printf(\n);for(j=0;j10;j++){printf(*);}}printf(\n);return0;}C语言程序设计课程设计报告52.5运行结果3、综合题3.1题目3.1.1问题描述:对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。3.1.2功能要求:本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。本系统显示这样的菜单:请选择系统功能项:a、成绩录入b、成绩显示c、成绩保存d、成绩排序e、成绩修改(要求先输入密码)f、成绩统计显示每门课程成绩最高的学生的基本信息,显示每门课程的平均成绩,显示超过某门课程平均成绩的学生人数。g、退出系统执行一个具体的功能之后,程序将重新显示菜单,将学生成绩保存到文件中。3.1.3算法提示:数据结构:结构体类型数组。数据库结构:下表构成该系统的基本数据库。C语言程序设计课程设计报告6表3.1姓名学号课程名称1课程名称2●●●●●●charCharfloatfloat3.1.4测试数据:学生人数N=10,课程门数M=4,课程名:数学、语文、英语、政治。3.1.5其它对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。3.2解题分析通过调用menuDisplay,insert,gradeDisplay,save。Modify。sort。count。countMeauDisplay,highScore,average,highScoreCount函数分别求成绩录入,成绩显示,成绩保存,成绩排序,成绩修改,成绩统计。其中成绩排序按照总成绩大小用冒泡法来求得排序。其中用switch语句控制函数运行,数学,语文,英语,政治成绩分别用stu[i].grade[j]来表示。其中冒泡法用交换元素来处理,求最高分时用选择法来处理。在调用menuDisplay,insert,gradeDisplay,save,modify,sort,count,highScore,average,highScoreCount函数时分别用到for循环,学生个数从0到9,科目从0到3.从而完成了成绩显示,成绩保存,成绩保存,成绩修改,成绩统计的函数。整个程序用调运函数,清晰明了,模块化。3.3流程图调用menuDisplay函数流程图如图3.1所示。开始显示每门课程成绩最高学生的信息显示每门课程的平均成绩显示超过某门课程平均成绩的学生人数返回主菜单结束C语言程序设计课程设计报告7图3.1成绩显示函数流程图主函数流程图如图3.2所示。输入小写字母选择系统功能调用insert函数成绩录入调用menuDisplay函数成绩显示调用sort函数成绩排序调用average函数求平均数结束开始图3.2主函数流程图C语言程序设计课程设计报告8调用sort函数流程图如图3.3所示。开始结束i=0inumbstu[i].sum=stu[i],grade[0]+stu[i].grade[1]+stu[i].grade[2]+stu[i].grade[3]Stu[i].ave=stu[i].sum/4i++YNjnumbj=1k=1k=numb-jstu[j-1].avestu[j].avetemp=stu[j]stu[j]=stu[j-1]Stu[j-1]=tempk++YNYYj++NNmnumbm=0输出学号,姓名,各科平均分Ym++N图3.3成绩排序函数流程图C语言程序设计课程设计报告9调用insert函数流程图如图3.4所示,调用average函数流程图如图3.5所示。开始结束i=0ch!=’n’&&ch!=’N’||iN-1输入学号输入姓名输入数学成绩输入语文成绩输入英语成绩输入政治成绩NY输出“录入完毕”图3.4成绩输入函数流程图开始结束j=0jMsum=0.0i=0inumbi++j++Sum[j]+=stu[i].grade[j]YNYN输出数学,语文,英语,政治平均成绩图3.5平均成绩函数流程图C语言程序设计课程设计报告103.4源程序#includestdio.h#includestdlib.h#includestring.h#defineM4//课程数量#defineN10//学生人数typedefstructgradeInfo{charsno[20];//学号charsname[20];//学生姓名floatgrade[M];//成绩floatave;//平均分}GRADE;GRADEstu[N-1],*p;voidmenuDisplay();//显示菜单voidinsert();//成绩录入voidgradeDisplay();//成绩显示voidsort();//成绩排序voidaverage();//显示每门课程的平均成绩intnumb=0;//已录入学生人数floataverageGrade[M-1];//科目平均成绩intmain(void){charcmd;cmd='\0';printf(\n欢迎来到班级成绩管理系统!\n);while(cmd!='e'){menuDisplay();scanf(%c,&cmd);switch(cmd){case'a':insert();break;case'b':gradeDisplay();break;case'c':sort();break;case'd':average();break;}}printf(再见!\n);return0;}voidmenuDisplay()C语言程序设计课程设计报告11{printf(\n);printf(请输入相应小写字母选择系统功能(a~e):\n);printf(a:成绩录入\n);printf(b:成绩显示\n);printf(c:成绩排序\n);printf(d:求学科平均数\n);printf(e:退出系统\n);printf(请输入:);}voidinsert(){inti=0;charch;do{printf(\t\t\t\t1.录入学生信息\n输入第%d个学生的信息\n,i+1);printf(\n学号:);scanf(%s,stu[i].sno);fflush(stdin);printf(\n姓名:);fflush(stdin);scanf(%s,stu[i].sname);printf(\n数学成绩:);fflush(stdin);scanf(%f,&stu[i].grade[0]);printf(\n语文成绩:);fflush(stdin);scanf(%f,&stu[i].grade[1]);printf(\n英语成绩:);fflush(stdin);scanf(%f,&stu[i].grade[2]);printf(\n政治成绩:);fflush(stdin);scanf(%f,&stu[i].grade[3]);printf(\n\n);i++;numb=i;printf(是否继续输入?(Y/N));fflush(stdin);scanf(%s,&ch);}while((ch!='n'&&ch!='N')||iN-1);printf(录入完毕!\n);}voidgradeDisplay(){inti;for(i=0;inumb;i++){C语言程序设计课程设计报告12printf(学号:%s姓名:%s\n数学:%f语文:%f英语:%f政治:%f\n,stu[i].sno,stu[i].sname,stu[i].grade[0],stu[i].grade[1],stu[i].grade[2],stu[i].grade[3]);}}voidsort(){GRADEtemp;inti,j,k,m;for(j=1;jnumb;j++){for(k=1;k=numb-j;k++){if(stu[j-1].avestu[j].ave){temp=stu[j];stu[j]=stu[j-1];stu[j-1]=temp;}}}printf(按平均成绩由高到低排名为:\n);for(m=0;mnumb;m++){printf(学号:%s姓名:%s\n,stu[m].sno,stu[m].sname);}}voidaverage(){floatsum[M];inti,j;for(j=0;jM;j++){sum[j]=0.0;for(i=0;inumb;i++){sum[j]+=stu[i].grade[j];}}printf(数学平均成绩是:%.2f\n,sum[0]/numb);printf(语文平均成绩是:%.2f\n,sum[1]/numb);printf(英语平均成绩是:%.2f\n,sum[2]/numb);printf(政治平均成绩是:%.2f\n,sum[3]/numb);}3.5运行结果C语言程序设计课程设计报告13图3.6第一次成绩录入运行结果图3.7第二次成绩录入运行结果C语言程序设计课程设计报告14图3.8成绩显示和成绩排序运行结果图3.9求学科平均数和退出系统运行结果C语言程序设计课程设计报告154、总结首先,C语言课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识,再次