第一篇:C语言学生管理系统综合性实验题目
“学生管理系统的设计与实现”综合性实验
实验名称:学生管理系统的设计与实现
实验类型:综合性实验
一、实验目的强化学生对C语言的基本语法和基本编程技能的熟练掌握,并在此基础上,重点培养学生对实际应用问题进行抽象分析的能力和综合运用C语言知识进行具体实现的编程能力。
二、实验内容
综合应用C语言中讲授的流程控制语句、模块化程序设计方法(函数)和丰富的数据类型(指针、数组、结构体等)完成“学生管理系统”的设计与实现。
三、实验环境
Windows XP系统,C语言开发环境:Win-TC、Turbo C3.0、VC等。
四、实验要求
1、总体要求:系统功能齐全,运行结果正确,用户界面友好,使用简单方便。
2、系统数据要求:学生信息如下:学号、姓名、年龄、所在系、3门课程名称及成绩、总分、平均分。
3、系统功能要求:
⑴输入至少10个学生的自然信息(学号、姓名、年龄、所在系、成绩)。
⑵计算每个学生的总分、平均分,并输出每个学生的学号,姓名,总分,平均分。
⑶根据学生的总分进行排序输出。
⑷针对课程不同科目进行排序输出。
⑸统计输出每门课程的平均分。
⑹实现多种查询功能(例如:根据学号或姓名或所在系等,查询一个或多个学生信息)。
⑺对于已输入的学生信息进行储存。
⑻能实现学生信息的增、删、改操作。
五、实验结果
实验完成要求上交全部源程序代码(包括存盘数据)和完整的综合性实验报告(包括系统设计、实验过程中出现问题的分析与修改、代码打印、运行结果拷屏打印)。
六、考核形式
考查。根据上机出勤、实验报告及完成的程序系统进行评价,分为优、良、中、及格、不及格。
第二篇:C语言实验电话薄管理系统
#include “stdio.h” /*标准输入输出函数库*/ #include “stdlib.h” /*标准函数库*/ #include “string.h” /*字符串函数库*/ #include “conio.h” /*屏幕操作函数库*/ #define HEADER1
“
---------------------------TELEPHONE BOOK---------------------------n” #define HEADER2 “ | num | name | phonenumber | address | n” #define
HEADER3
“ |--------------|------------|-----------------|---------------------| n” #define FORMAT “ | %-10s| %-10s| %-15s |%-20s | n” #define DATA p->num,p->name,p->phonenum,p->address #define
END
“-------n” #define N 100 int saveflag=0;/*是否需要存盘的标志变量*/ /*定义与电话簿有关的数据结构*/ typedef struct telebook /*标记为telebook*/ { char num[4];/*编号*/ char name[10];/*姓名*/ char phonenum[15];/*电话号码*/ char address[20];/*地址*/ }TELEBOOK;
void menu()/*主菜单*/ { system(“cls”);/*调用DOS命令,清屏.与clrscr()功能相同*/ textcolor(13);/*在文本模式中选择新的字符颜色*/ gotoxy(10,5);/*在文本窗口中设置光标*/ cprintf(“ The telephone-book Management System n”);gotoxy(10,8);cprintf(“ *************************Menu********************************n”);gotoxy(10,9);cprintf(“ * 1 input record 2 display record *n”);gotoxy(10,10);cprintf(“ * 3 delete record 4 search record *n”);gotoxy(10,11);cprintf(“ * 5 modify record 6 insert record *n”);gotoxy(10,12);cprintf(“ * 7 sort record 8 save record *n”);gotoxy(10,13);cprintf(“ * 0 quit system *n”);gotoxy(10,14);cprintf(“ *************************************************************n”);/*cprintf()送格式化输出至文本窗口屏幕中*/ } /*格式化输出表头*/ void printheader(){ printf(HEADER1);printf(HEADER2);printf(HEADER3);} /*格式化输出表中数据*/ void printdata(TELEBOOK pp){ TELEBOOK* p;p=&pp;printf(FORMAT,DATA);}
/*显示数组temp[]中存储的电话簿记录,内容为telebook结构中定义的内容*/ void Disp(TELEBOOK temp[],int n){ int i;if(n==0)/*表示没有电话簿记录*/ { printf(“n=====>Not telephone record!n”);getchar();return;}
printf(“nn”);printheader();/*输出表格头部*/ i=0;while(i void Wrong()/*输出按键错误信息*/ { printf(“nnnnn***********Error:input has wrong!press any key to continue**********n”);getchar();} void Nofind()/*输出未查找此记录的信息*/ { printf(“n=====>Not find this telephone record!n”);} /************************************************************* 作用:用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值 参数:findmess[]保存要查找的具体内容;nameorphonenum[]保存按什么在数组中查找;**************************************************************/ int Locate(TELEBOOK temp[],int n,char nameorphonenum[]){ int i=0;if(strcmp(nameorphonenum,“phonenum”)==0)/*按电话号码查询*/ { while(i findmess[],char return i;i++;} } return-1;/*若未找到,返回一个整数-1*/ } /*输入字符串,并进行长度验证(长度 while(1)/*一次可输入多条记录,直至输入编号为0的记录才结束添加操作*/ { while(1)/*输入记录编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/ { stringinput(num,10,“input number(press '0'return menu):”);/*格式化输入编号并检验*/ flag=0;if(strcmp(num,“0”)==0)/*输入为0,则退出添加操作,返回主界面*/ {return n;} i=0;while(i if(flag==1)/*提示用户是否重新输入*/ { getchar();printf(“==>The number %s is existing,try again?(y/n):”,num);scanf(“%c”,&ch);if(ch=='y'||ch=='Y')continue;else return n;} else {break;} } strcpy(temp[n].num,num);/*将字符串numtemp[n].num中*/ stringinput(temp[n].name,15,“Name:”);stringinput(temp[n].phonenum,15,“Telephone:”);stringinput(temp[n].address,15,“Adress:”);saveflag=1;n++;} return n;} /*按编号或姓名,查询电话簿记录*/ void Qur(TELEBOOK temp[],int n){ 拷贝到int select;/*1:按姓名查,2:按电话号码查,其他:返回主界面(菜单)*/ char searchinput[20];/*保存用户输入的查询内容*/ int p=0;if(n<=0)/*若数组为空*/ { system(“cls”);printf(“n=====>No telephone record!n”);getchar();return;} system(“cls”);printf(“n =====>1 Search by name =====>2 Search by telephone numbern”);printf(“ please choice[1,2]:”);scanf(“%d”,&select);if(select==1)/*按姓名查询*/ { stringinput(searchinput,10,“input the existing name:”);p=Locate(temp,n,searchinput,“name”);/*在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/ if(p!=-1)/*若找到该记录*/ { printheader();printdata(temp[p]);printf(END);printf(“press any key to return”);getchar();} else Nofind();getchar();} else if(select==2)/*按电话号码查询*/ { stringinput(searchinput,15,“input the existing number:”);p=Locate(temp,n,searchinput,“phonenum”);if(p!=-1){ printheader();printdata(temp[p]);printf(END);printf(“press any key to return”);getchar();} else Nofind();getchar();} telephone else Wrong();getchar();} /*删除电话簿记录:先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/ int Del(TELEBOOK temp[],int n){ int sel;char findmess[20];int p=0,i=0;if(n<=0){ system(“cls”);printf(“n=====>No telephone record!n”);getchar();return n;} system(“cls”);Disp(temp,n);printf(“n =====>1 Delete by name =====>2 Delete by telephone numbern”);printf(“ please choice[1,2]:”);scanf(“%d”,&sel);if(sel==1){ stringinput(findmess,10,“input the existing name:”);p=Locate(temp,n,findmess,“name”);getchar();if(p!=-1){ for(i=p+1;i strcpy(temp[i-1].num,temp[i].num);strcpy(temp[i-1].name,temp[i].name);strcpy(temp[i-1].phonenum,temp[i].phonenum);strcpy(temp[i-1].address,temp[i].address);} printf(“n==>delete success!n”);n--;getchar();saveflag=1;} else Nofind();getchar();} else if(sel==2)/*先按电话号码查询到该记录所在的数组元素的下标值*/ { stringinput(findmess,15,“input number:”);p=Locate(temp,n,findmess,“phonenum”);getchar();if(p!=-1){ for(i=p+1;i strcpy(temp[i-1].num,temp[i].num);strcpy(temp[i-1].name,temp[i].name);strcpy(temp[i-1].phonenum,temp[i].phonenum);strcpy(temp[i-1].address,temp[i].address);} printf(“n=====>delete success!n”); the existing telephone n--;getchar();saveflag=1;} else Nofind();getchar();} return n;} /*修改电话簿记录。先按输入的联系人姓名查询到该记录,然后提示用户修改该记录编号之外的值,编号不能修改*/ void Modify(TELEBOOK temp[],int n){ char findmess[20];int p=0;if(n<=0){ system(“cls”);printf(“n=====>No telephone number record!n”);getchar();return;} system(“cls”);printf(“modify telephone book recorder”);Disp(temp,n);stringinput(findmess,10,“input the existing name:”);/*输入并检验该姓名*/ p=Locate(temp,n,findmess,“name”);/*查询到该数组元素,并返回下标值*/ if(p!=-1)/*若p!=-1,表明已经找到该数组元素*/ { printf(“Number:%s,n”,temp[p].num);printf(“Name:%s,”,temp[p].name);stringinput(temp[p].name,15,“input new name:”); printf(“Name:%s,”,temp[p].phonenum);stringinput(temp[p].phonenum,15,“input new telephone:”); printf(“Name:%s,”,temp[p].address);stringinput(temp[p].address,30,“input new address:”); printf(“n=====>modify success!n”);getchar();Disp(temp,n);getchar();saveflag=1;} else {Nofind();getchar();} return;} /*插入记录:按编号查询到要插入的数组元素的位置,然后在该记录编号之后插入一个新数组元素。*/ int Insert(TELEBOOK temp[],int n){ char ch,num[10],s[10];/*s[]保存插入点位置之前的记录编号,num[]保存输入的新记录的编号*/ TELEBOOK newinfo;int flag=0,i=0,kkk=0;system(“cls”);Disp(temp,n);while(1){ stringinput(s,10,“please input insert location after the Number:”);flag=0;i=0;while(i number %s is not existing,try while(1){ stringinput(num,10,“input new Number:”);i=0;flag=0;while(i number %s is existing,try } strcpy(newinfo.num,num);/*将字符串numnewinfo.num中*/ stringinput(newinfo.name,15,“Name:”);stringinput(newinfo.phonenum,15,“Telephone:”);stringinput(newinfo.address,15,“Adress:”); saveflag=1;/*在main()有对该全局变量的判断,若为1,则进行存盘操作*/ for(i=n-1;i>kkk;i--)/*从最后一个组织元素开始往向移一个元素位置*/ { strcpy(temp[i+1].num,temp[i].num);strcpy(temp[i+1].name,temp[i].name);strcpy(temp[i+1].phonenum,temp[i].phonenum);strcpy(temp[i+1].address,temp[i].address);} strcpy(temp[kkk+1].num,newinfo.num);/*在kkk的元素位置后插入新记录*/ strcpy(temp[kkk+1].name,newinfo.name); 拷贝到strcpy(temp[kkk+1].phonenum,newinfo.phonenum);strcpy(temp[kkk+1].address,newinfo.address);n++;Disp(temp,n);printf(“nn”);getchar();return n;} /*利用选择排序法实现数组的按记录编号或姓名的升序排序*/ void SelectSort(TELEBOOK temp[],int n){ int i=0,j=0,flag=0,indexmin,select;char charflag[10];TELEBOOK newinfo;if(n<=0){ system(“cls”);printf(“n=====>Not telephone record!n”);getchar();return;} system(“cls”);Disp(temp,n);/*显示排序前的所有记录*/ printf(“ ==>1 SORT BY NUMBER ==>2 SORT BY NAMEn”);printf(“ please choice[1,2]:”);scanf(“%d”,&select);if(select==1)/*按记录编号排序*/ { for(i=0;i strcpy(temp[i].num,temp[indexmin].num);strcpy(temp[i].name,temp[indexmin].name);strcpy(temp[i].phonenum,temp[indexmin].phonenum);strcpy(temp[i].address,temp[indexmin].address); strcpy(temp[indexmin].num,newinfo.num);strcpy(temp[indexmin].name,newinfo.name);strcpy(temp[indexmin].phonenum,newinfo.phonenum);strcpy(temp[indexmin].address,newinfo.address);} Disp(temp,n);/*显示排序后的所有记录*/ saveflag=1;printf(“n =====>sort complete!n”);getchar();return;} else if(select==2){ for(i=0;i strcpy(temp[i].num,temp[indexmin].num);strcpy(temp[i].name,temp[indexmin].name);strcpy(temp[i].phonenum,temp[indexmin].phonenum);strcpy(temp[i].address,temp[indexmin].address); strcpy(temp[indexmin].num,newinfo.num);strcpy(temp[indexmin].name,newinfo.name);strcpy(temp[indexmin].phonenum,newinfo.phonenum);strcpy(temp[indexmin].address,newinfo.address);} Disp(temp,n);/*显示排序后的所有记录*/ saveflag=1;printf(“n =====>sort complete!n”);getchar();return;} else {Wrong();getchar();getchar();return;} } /*数据存盘,若用户没有专门进行此操作且对数据有修改,在退出系统时,会提示用户存盘*/ void Save(TELEBOOK temp[],int n){ FILE* fp;int i=0;fp=fopen(“c: elephon”,“w”);/*以只写方式打开文本文件*/ if(fp==NULL)/*打开文件失败*/ { printf(“n=====>open file error!n”);getchar();return;} for(i=0;i void main(){ TELEBOOK tele[N];/*定义TELEBOOK结构体*/ FILE *fp;/*文件指针*/ int select;/*保存选择结果变量*/ char ch;/*保存(y,Y,n,N)*/ is record int count=0;/*保存文件中的记录条数(或元素个数)*/ fp=fopen(“C: elephon”,“a+”);/*以追加方式打开文本文件c:telephon,可读可写,若此文件不存在,会创建此文件*/ if(fp==NULL){ printf(“n=====>can not open file!n”);exit(0);} while(!feof(fp)){ if(fread(&tele[count],sizeof(TELEBOOK),1,fp)==1)/*一次从文件中读取一条电话簿记录*/ count++;} fclose(fp);/*关闭文件*/ printf(“n==>open file sucess,the total records number is : %d.n”,count);getchar();menu();while(1){ system(“cls”);menu();printf(“n Please Enter your choice(0~8):”);/*显示提示信息*/ scanf(“%d”,&select); if(select==0){ if(saveflag==1)/*若对数组的数据有修改且未进行存盘操作,则此标志为1*/ { getchar();printf(“n==>Whether save the modified record to file?(y/n):”);scanf(“%c”,&ch);if(ch=='y'||ch=='Y')Save(tele,count);} printf(“n===>thank you for useness!”);getchar();break;} switch(select){ case 1:count=Add(tele,count);break;/*增加电话簿记录*/ case 2:system(“cls”);Disp(tele,count);break;/*显示电话簿记录*/ case 3:count=Del(tele,count);break;/*删除电话簿记录*/ case 4:Qur(tele,count);break;/*查询电话簿记录*/ case 5:Modify(tele,count);break;/*修改电话簿记录*/ case 6:count=Insert(tele,count);break;/*插入电话簿记录*/ case 7:SelectSort(tele,count);break;/*排序电话簿记录*/ case 8:Save(tele,count);break;/*保存电话簿记录*/ default: Wrong();getchar();break;/*按键有误,必须为数值0-9*/ } } } 求两个数之和。在两种情况下完成: ①数据在程序内部定义变量时赋初值,或者通过赋值语句赋值。②数据通过scanf()函数输入。静态输入: #include #include 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。要求用scanf 输入数据,输出计算结果。#include l=%6.2fn”,l);printf(“圆的面积为 s=%6.2fn”,s);printf(“圆柱的表面积为 sq=%6.2fn”,sq);printf(“圆柱的体积为 vz=%6.2fn”,vz);} 输入a、b、c三个整数,求出其中最大者,并连同三个源数据一起输出。#include if(x>z) max=x; else max=z;} else { if(y>z) max=y; else max=z;} return(max);} void main(){ int max(int x,int y,int z); int a,b,c,w; printf(“请您输入三个整数:”); scanf(“%d,%d,%d”,&a,&b,&c); printf(“您输入的三个数是:%d,%d,%dn”,a,b,c); w=max(a,b,c); printf(“这三个数中最大的是:%dn”,w);} 给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。要求输入一个成绩并打印出对应的等级制成绩。要求用switch语句完成。#include printf(“您输入了一个错误的成绩!请重新输入n”); scanf(“%d”,&grade);} c=grade/10;switch(c){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default: grade='E';} printf(“您输入的成绩的等级为:%Cn”,grade);} 计算当n为何值时,不等式sum=1 + 1/2 + 1/3 +… + 1/n >limit成立,输出n对应的sum(limit从键盘输入,要求用while、或do...while 语句,limit=10)。#include n++; sum=sum+1/n;} printf(“此时sum的值是:%fn”,sum);printf(“此时n的值为%fn”,n);} 计算M=11+ 22+ 33+…+ NN,直到N等于15为止,输出N和对应的M。(要求用for语句做) #include M=M+(n+10*n);} for(n=10;n<=15;n++){ M=M+(n+100*n);} n--;printf(“当n是%d时,M的值为%fn”,n,M);} 100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马一匹驮0.5担,计算大、中、小马数目并输出。#include for(small=0;small<100;small+=2) for(mid=0;mid<50;mid++) { if(3*big+2*mid+small/2==100&&big+mid+small==100) { printf(“big:%dt,mid:%dt,small:%dn”,big,mid,small); sum++; } } printf(“一共有%d种组合方式n”,sum);} 求 sum=1!+2!+3!+...+10!,并输出结果。#include t=t*n; s=s+t;} printf(“1!+2!+3!+...+10!的和是:%en”,s);} 注意该程序的结果为:1!+2!+3!+...+10!的和是:4.037913e+006 是以科学计数法表示的结果,因为int的定义范围只能以此表示,如果用long int来输出,则可以得到正常表示的结果 #include t=t*n; s=s+t;} printf(“1!+2!+3!+...+10!的和是:%ldn”,s);} 1!+2!+3!+...+10!的和是:4037913 设数列为1,3,5,7,9,11,13,15,17,19,动态输入在数组array中,然后顺序打印输出该数列,再逆序打印输出该数列。#include scanf(“%d”,&array[i]);printf(“您输入的10个整数的顺序排列是:n”);for(i=0;i printf(“%-4d”,array[i]);printf(“n”);printf(“您输入的10个整数的逆序排列是:n”);for(i=N-1;i>=0;i--) printf(“%-4d”,array[i]);printf(“n”);} 将3x3阶二维数组的关于主对角线对称的元素互换。二维数组的第1至3行元素分别为1、2、3、4、5、6、7、8、9。用矩阵形式分别输出互换前、后的数组元素值。#include for(j=0;j<3;j++) printf(“%5d”,array[i][j]); printf(“n”);} for(i=1;i<3;i++) for(j=0;j { t=array[i][j]; array[i][j]=array[j][i]; array[j][i]=t; } printf(“After Exchanged:n”); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(“%5d”,array[i][j]); printf(“n”); } } 定义两个字符数组s1、s2,并用赋初值的方法把两个字符串“Computer”和“Language” 分别存放到s1、s2中,要求不用库函数strcat(),把s2连接到s1的尾部,然后以%s格式输出连接后的字符串s1。#include char s1[80],s2[40]; int i=0,j=0; printf(”input string1:“); scanf(”%s“,&s1); printf(”input string2:“); scanf(”%s“,&s2); while(s1[i]!=' ') i++; s1[i]=' '; i++; while(s2[j]!=' ') s1[i++]=s2[j++]; s1[i] = ' '; printf(”The new string is:%sn“,s1);} 用赋初值的方法把字符串”C is a general purpose, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system.“存放到字符数组s中,编程统计其中的大写字母、小写字母、数字、空格、逗号的个数。#include char s[512] = ”C is a general purpose, procedural, imperative “ ”computer programming language developed in 1972 by Dennis“ ”Ritchie at the Bell Telephone Laboratories for use with “ ”the Unix operating system.“;int upper=0,lower=0,digit=0,space=0,comma=0;int i=0;while(s[i]) { if(s[i]>='A'&&s[i]<='Z')upper++; if(s[i]>='a'&&s[i]<='z')lower++; if(s[i]>='0'&&s[i]<='9')digit++; if(s[i]==' ')space++; if(s[i]==',')comma++; i++; } printf(”这串字符串有大写字母%d个,小写字母%d个,数字%d个,空格%d个,逗号%d个n“,upper,lower,digit,space,comma);} 试从主函数输入10个数据到数组中,编写对偶数项求和的子函数,它将计算结果返回给主函数,由主函数输出。#include int i,s;s=0; for(i=1;i s=s+a[i]; return(s);} void main(){ int a[10];int i,s;printf(”请您在数组内输入10个数:“);for(i=0;i<10;i++) scanf(”%d“,&a[i]);s=oqh(a,10);printf(”这个数组的偶数项的和是:%dn“,s);} 注意:oqh并无其他含义,是本人定义的一个函数名,偶数项求和的缩写。编写一个判断素数的程序,其中主函数用于完成输入一个整数并给出判断结果,单独编写一个函数用于判断其参数是否为素数,其返回值为1表示为素数,为0表示为非素数。#include if(n%i==0) { m=0; break; } if(i>t) m=1; else continue;} return(m);} void main(){ int n;int i;printf(”请输入你要判断的数:n“);scanf(”%d“,&n);while(n<=1){ printf(”您输入了一个错误的数据,请重新输入:n“); scanf(”%d“,&n);} if(prime(n)) printf(”您输入的是一个素数n“);else printf(”您输入的不是一个素数n“); } 输入三个整数,按由小到大的顺序输出。(要求使用指针来排序输出)#include t=*a; *a=*b; *b=t;} if(*a>*c){ t=*a; *a=*c; *c=t;} if(*b>*c){ t=*b; *b=*c; *c=t;} } void main(){ int a,b,c;printf(”请您输入三个整数:“);scanf(”%d %d %d“,&a,&b,&c);sort(&a,&b,&c);printf(”它们由小到大的排列顺序是:%d %d %dn“,a,b,c);} 或者是 #include void swap(int *p1,int *p2); int a,b,c; int *p1,*p2,*p3; printf(”请您输入三个整数:“); scanf(”%d %d %d“,&a,&b,&c); p1=&a; p2=&b; p3=&c; if(a>b)swap(p1,p2); if(a>c)swap(p1,p3); if(b>c)swap(p2,p3); printf(”它们由小到大的排列顺序是:%d %d %dn“,a,b,c);} void swap(int *p1,int *p2){ int p; p=*p1; *p1=*p2; *p2=p;} 输入十个整数,放在数组list中,然后用指针法从后向前输出该数组中的整数。#include int list[10],i,*p=list; printf(”请您输入10个整数:n“); for(i=0;i<10;i++) scanf(”%d“,&list[i]); printf(”这10个整数的逆序序列是:n“); for(i=9;i>=0;i--) printf(”%-4d“,*(p+i));} 如果输入的数字个数不定的情况,下面的代码可行 #include scanf(”%d“,&list[i]);p=&list[0];sort(p,n);printf(”这%d个整数的逆序序列是:n“,n);for(i=0;i printf(”%-4d“,list[i]);printf(”n“);} void sort(char *p,int m){ int i;char t,*p1,*p2;for(i=0;i p1=p+i; p2=p+(m-1-i); t=*p1; *p1=*p2; *p2=t;} } 编写一个函数,它能对一个字符串(“I am a student”)测出长度,要求函数的形参是一个指针变量,函数返回值是字符串的长度。#include n++; p++;} //*p=' ';//n++;return(n);} 若要统计结果包含结束符,则启用*p=' ';n++;两条语句 编一个函数cstrcmp实现两个字符串的比较,具体为: int cstrcmp(char *p1, char *p2)p1,p2分别指向字符串s1,s2;若s1=s2则函数返回0;若s1>s2,则函数返回1;若s1 return 0;} if(strcmp(p1,p2)>0){ return 1;} if(strcmp(p1,p2)<0){ return-1;} } void main(){ char *a;char *b;input();printf(”这两个字符串比较的结果是:%dn“,cstrcmp(a,b));} 如果要求返回的是不相同字母的ASCII码值: #include if(*(p1+i++)==' ')return(0); return(*(p1+i)-*(p2+i));} 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,用赋初值的方法输入5个学生的数据到结构体数组中,输出每个学生3门课的平均成绩。#include { char num[6]; char name[8];int score[3];float avr;}stu[5]={{”101“,”Zhou“,93,89,87},{”102“,”Yang“,85,80,78},{”103“,”Chen“, 77,70,83},{”104“,”Qian“,70,67,60},{”105“,”Li“,72,70,69}};void main(){ int i,j,sum;for(i=0;i<5;i++) { sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/3.0;} printf(”number name score1 score2 score3 averagen“);for(i=0;i<5;i++){ printf(”%3s%10s“,stu[i].num,stu[i].name); for(j=0;j<3;j++) printf(”%7d“,stu[i].score[j]); printf(”%10.2fn“,stu[i].avr);} } 如果按平均成绩由高到低排序后,输出每个学生的成绩 #include { char num[6]; char name[8]; int score[3];float avr; }stu[5]={{”101“,”Zhou“,93,89,87},{”102“,”Yang“,85,80,78},{”103“,”Chen“, 77,70,83},{”104“,”Qian“,70,67,60},{”105“,”Li“,72,70,69}},temp;void main(){ int i,j,sum; for(i=0;i<5;i++){ sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/3.0;} for(i=0;i<4;i++) for(j=i;j<4;j++) if(stu[j].avr { temp=stu[j]; stu[j]=stu[j+1]; stu[j+1]=temp; } printf(”number name score1 score2 score3 averagen“); for(i=0;i<5;i++) { printf(”%3s%10s“,stu[i].num,stu[i].name); for(j=0;j<3;j++) printf(”%7d“,stu[i].score[j]); printf(”%10.2fn",stu[i].avr); } } C语言程序设计的综合性实验——使用菜单选择趣味程序 所属课程名称:C语言程序设计 实验属性:综合实验学时: 4设计一个比较实用的菜单,通过菜单选择不同的程序完成不同的功能。菜单选择部分用SWITCH语句实现。菜单项部分编写四道趣味程序: 1、老鼠咬坏账本,公式中符号□代表是被老鼠咬掉的地方。要想恢复下面的等式,应在□中填上哪能个相同的数字?3□×6237=□3×35642、侦探题。一汽车撞人后开溜。4 个人提供如下线索: 甲:牌照三、四位相同;乙:牌号为31××××; 丙:牌照五、六位相同;丁:三—六位是一个整数的平方。 3、打印一个钻石图案 4、求百钱买百鸡的问题: 中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何? 5、退出菜单 ① 指导思想 通过让学生做一个综合的应用程序设计,让学生掌握三种结构化程序设计的常用语句,结合应用前面所学的知识,提高分析问题、解决问题的能力和学生编程应用能力。同时通过趣味程序的设计来提高学生对本门课程的学习兴趣。 ② 实验目的及要求 通过使用C语言最基本的知识,训练学生结构化程序设计的基本技术。锻炼使用控制语句的能力,提高学生的编程能力。 ③ 涉及到的内容或知识点 本实验涉及到算法分析、顺序程序设计、分支结构程序设计和循环结构程序设计等知识点。④ 采用的教学方法和手段 学生在完成相关课程基础实验教学内容,掌握结构化程序设计基本方法的前提下,由老师指定设计要实现的主要功能和实验的内容,学生查阅资料后,写出实验设计报告。在规定的时间内,由学生独立完成实验内容,并对结果进行分析,按照要求撰写规范的实验报告。 1、课程设计的目的、任务 《汇编语言》课程设计对于巩固汇编语言理论知识,加强学生的实际动手能力和提高学生综合素质十分必要。课程设计的目的主要是通过程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。 2、软件需求分析和设计 2.1学生成绩管理系统是对学生成绩的管理,其中包括以下几个模块:(1).插入一个数据(插入学生学号以及语数外三个成绩)。(2)修改一个数据。(3)删除学生成绩数据。(4)查找学生成绩。(5)查看学生成绩的排名(6)查看学生成绩分布(7)按esc键退出系统 2.2学生成绩管理系统应该包含以下信息:学号,语文成绩,英语成绩,数学成绩。因此,系统应该提供以下功能:(1)输出显示菜单。(2)输入学生的成绩(3)修改学生成绩(4)删除学生成绩(5)查询学生成绩(6)显示学生成绩排名(7)显示成绩分布统计(8)按esc键退出系统 2.3依据程序的功能需求,该系统的功能结构图如下 系统功能结构图 2.4 程序流程图: 主程序流程图 查找学生成绩 插入学生学号及成绩 修改学生的成绩 显示各个学科各分数段的人数 3、程序实现说明 3.1学生管理系统中各子程序如下: (1).输入全部学生学号以及语文,英语,数学三科的成绩。子程序名:insert 子程序描述:该子程序为输入字程序。系统在开始的时候是没有数据的,通过该子程序可以初始化系统,将学生的学号及成绩输入系统。 代码: insert proc near;定义进程子程序:插入学生,学号及 成绩 call input;调用input add n,1 ret insert endp (2).修改输入的成绩。子程序名:modify 子程序描述:通过子程序修改学生的成绩 代码: modify proc near;定义进程子程序:修改学生学号,成绩 md1:output mess1;输出mess1 shuru;调用宏shuru:二位数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si];先查找输入的学生是否存在 je qq1_1;查到的话,就跳转到qq1_1输入修改的值,也就是重新输入。;结果相等则跳转到qq1_1 add si,1 cmp si,bx jbe md;小于等于则跳转到md output mess;输出mess jmp md1;不相等继续输入学号 qq1_1:;转入修改的值重新输入。mov di,si output mess2 output mess4 mov si,0 mov cx,3 qq3_1:shuruu;cmp dx,78h; jbe qq2_1;output ts3;jmp qq1_1;qq2_1:mov buf[si],dl output bg;add si,1 loop qq3_1 mov al,buf[0];mov chi[di],al mov al,buf[1] 分别输入语文,英语,数学成绩,并将其放 在缓冲区buf中 比较输入的成绩是否大于120,如果大于120的 话,那么重 新输入成绩 小于等于则转移到qq2_1 输出ts3 跳转到qq1_1 输出空格 将存入buf中的成绩,分别赋值给存放对应科 目的成绩的数组 mov eng[di],al mov al,buf[2] mov mat[di],al ret modify endp (3).删除学生的成绩。子程序名:delete 子程序描述:通过子程序删除学生的成绩 代码: de proc near;删除某个学生的记录 sc1:output mess1 shuru;调用宏shuru,接受输入的学号 mov bl,n mov bh,0 mov al,dl mov si,0 sc: cmp al,xh[si];查询输入学号的学生信息是否存在,不存在的话,重新输入学号 je sc2;相等则转移到sc2 add si,1 cmp si,bx jbe sc;小于等于则转移到sc output mess;输出mess jmp sc1 sc2: sub bx,si cmp bx,0 je sc3;相等则转移到sc3 mov cx,bx sc4:mov dl,chi[si+1] mov chi[si],dl mov dl,eng[si+1] mov eng[si],dl mov dl,mat[si+1] mov mat[si],dl mov dl,xh[si+1] mov xh[si],dl add si,1 loop sc4;loop循环指令,执行操作(cx)<--(cx)-1.若 cx!=0,跳转到标号sc处循环执行;cx=0,则推出 循环,执行loop的下一条指令 sub n,1 sc3: ret de endp (3).查询学生的成绩。子程序名:find 子程序描述:通过子程序查询学生的成绩 代码: find proc near;定义进程子程序:查找学生成绩 call sum;求学生的总成绩 call ping;求学生的平均成绩 bj1:output mess1;输出mess1 shuru;二位数数据输入 mov bl,n mov bh,0 mov al,dl mov si,0 bj: cmp al,xh[si];将输入的学号与输入的学号相比,je i;存在的话,将此学生的成绩输出。je表示结果相 等则转移。add si,1 cmp si,bx jbe bj;output mess jmp bj1 i: output strr2 shuzi xh[si];shuzi output bg;mov al,chi[si] cbw;shuzii ax;shuzii output bg;mov al,eng[si] cbw;shuzii ax;shuzii output bg mov al,mat[si] cbw shuzii ax output bg; mov al,pj[si] cbw 小于等于则转移到bj 为二位数据输出 输出空格 将字节变为字 为三位数据输出。输出空格 将字节变为字 为三位数据输出 输出空格的字符串,用于与标题栏对齐 shuzii ax output bg mov ax,si mov bl,2 mul bl mov bx,ax shuzii zc[bx];shuzii为三位数据输出 output bg;输出空格的字符串,用于与标题栏对齐 shuzi mc[si];shuzi为二位数据输出 ret find endp (4).显示学生的成绩排名。子程序名:show 子程序描述:通过子程序显示学生的成绩排名 代码: show proc near;定义进程子程序:显示结果排名 call sum;调用宏sum call ping;调用宏ping call rank;调用宏rank call shuchu;调用宏shuchu ret show endp 3.2程序运行抓图: 主菜单 修改学生成绩 删除学生成绩 显示各个学科各分数段的人数 4、程序总结 通过两个星期的学习,努力,终于完成了报告。系统可以很好的运行。这两个多星期的时间,几乎每天不是在敲代码,就是在看代码,查书,上网。系统中用到了很多最近才学习的知识,比如宏,子程序。这些都使得代码的运行效率提高了,代码行数减少了。系统还用到了bios的清屏功能。这些功能如果不是做课程设计,我想我很难会接触到这些知识。 由于自己对知识掌握的不是很牢固,其中也会碰到一些困难。每当遇到问题的时候,我会先上网去查找,看看有没有人提过这方面的问题。互联网是强大的,大部分的问题通过网络都可以解决。部分找不到的问题,我就去请教班里学得好的同学。他们对知识的掌握远超过我。这样下来,很多问题都迎刃而解了。 课程设计是一个很好的掌握书本上知识的过程。平时上课之后,自己都不会想着去敲一些代码联系联系。通过做课程设计,将理论与实践结合了起来,对知识的理解更加深入了。第三篇:C语言实验题目
第四篇:C语言程序设计的综合性实验
第五篇:语言课程设计-学生成绩管理系统