课程设计报告c范文第1篇
20142015学年第1学期
学 院: 计算机学院 专业班级: 软件工程5班 学 号: 130202051006 学生姓名: 陈洪阳 指导教师: 戴俊雅
成 绩:
时 间:
2015年 1月5日
实践1.猜数游戏 题目概述:
编程先由计算机“想”一个1~100 之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10 次,如果猜了10 次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。
程序设计概要与分析:
在源程序的开头中包含stdlib和time库函数,这样我们就可以调用srand()和rand()函数,其中调用srand()提供一个种子,它是一个unsigned int类型,取值范围是0~65535,然后调用rand(),根据提供给srand()的种子值返回一个随机数,我们用rand()%100就把随机决定的数值范围确定在1~100之间,然后定义一个num,记录这个随机产生的随机数,定义input,来储存用户输入的猜数值,用times来记录猜的次数,用do while循环来执行用户猜的次数有10次,用if else条件语句来判断用户是否猜中,或猜得太大、太小,用一个while循环来做总嵌套,设置n的值一开始不为零,while循环的条件是当n的值不等于0,最后用户就可以修改n的值来决定是否退出。
程序代码:
#include #include #include
int main() {
int n=1; while(n!=0) {
srand((unsigned)time(NULL)); int num,input; int times=0; num=(rand()%100)+1; printf("在1~100间猜一个数 "); scanf("%d",&input); do{
if(input==num){
} else if(input>num){
} else if(input
}
}
} printf("你猜的数太小了,请再猜一个 "); scanf("%d",&input); times++; }while(times<9); if(times>=9)printf("你已经猜了10次都猜不中,你输了 "); printf("继续下一轮新的猜数请按1,退出请按0 "); scanf("%d",&n); return 0; 运行结果示例:
选择继续下一轮新的猜数,猜了10次都没猜中
心得体会:
要懂得如何生成一个随机数,并且要确定它的范围在1~100之间,同时我们还要用do while循环体把猜数的次数控制在10次,每当我们输入猜想的数时就要做出判断,看看是否猜中,或者猜得太大或太小,输出提示信息。也懂得了通过修改while判断循环里面的条件,使得循环体里面的程序受我们修改的条件控制,可以继续循环执行或者不再继续执行。
实践2.成绩排名次 题目概述:
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30 人参加考 试,学号可以用输入的序号代替。考试后要求: (1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分; (4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
程序设计与概要:
定义存储学生信息的结构体,包括学生编号,姓名,各科成绩,总分,平均分还有名次。该结构体命名为student,然后定义结构体数组student s[],首先输入准备录入学生信息的人数,用amount来记录人数,用一个for循环,从0~amount-1,依次输入每个学生的各种信息,如学号,姓名,数学、英语和物理成绩。用grade[]数组来存这三科的成绩,如grade[0]存储数学成绩,grade[1]存储英语成绩。输入之后,再用一个for循环把每个同学的总分求出来,总分再除去3求出该名同学的平均分。按总分成绩由高到低排出名次,用两个for循环嵌套,第一个循环从0~amount,表示从第一个同学开始拿出来比较,第二个循环从1~amount,表示除了之前取出的同学以外的每一个同学,如果前一位同学的总分小于后一个同学的话,就交换两人的信息,第二个循环比较之后,便会把总分最高的同学的信息储存在第一个,然后我们设置排名rank的值为1,rank++,进行筛选第二名的,之后对应地把rank的值设给学生的总分排名
打印学生信息,输出表格的基本框架后,用一个for循环,依次输出每个学生的信息,最后还有根据学号查询学生信息,用户输入要查询的学生学号,在for循环里面依次比较,如果找到学号与用户输入相同的,便输出该名学生的信息。
程序代码:
#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;
void input(student s[]); void title();
void list(student s[]); int main() { input(s); int i=0; for(i=0;i
//要求1 计算总分 平均分
s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];
s[i].ave=(float)s[i].sum/3; } //要求2 按总成绩排序
int rank=1; student t; for(i=0;i
for(int j=i+1;j
{
if(s[i].sum
{
{t=s[i];
s[i]=s[j];
s[j]=t;
}
}
}
s[i].rank=rank;
rank++; } //要求3 打印名次表
title(); list(s); //要求4 查询
int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i
if(number==s[i].num)
{
printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");
printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);
} } system("pause"); return 0; }
void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 "); for(int i=0;i
printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);
scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } }
void title() {
printf(" 学生成绩表 ");
printf("----------------------------- ");
printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");
printf("----------------------------- "); }
void list(student s[]) { //n表示人数
int i;//rank=1; for(i=0;i
printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);
printf("----------------------------- "); } }
运行结果示例:
确定录入人数之后,依次输入每个学生的信息
打印出名次表:
输入学生的学号,查询学生信息:
心得体会:
懂得了用结构体将不同的数据类型结合在一起,然后定义结构体数组,使得每个数组中的成员都具有不同的数据类型变量。而且同属于一个数据类型,也可以定义数组来表示相同的类型但是有多个不同值,比如成绩这个变量。也懂得了用for循环语句求总分,用for循环语句将数组从头到尾输出。
实践3.单科成绩统计 题目概述:
学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实
现下列功能:(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下: 分段 人数 图形 <60 3(10%)*** 60‐69 8() ******** 70‐79 7() ******* 80‐89 8() ******** >=90 4() ****
程序设计与概要:
定义一个结构体stu,里面有学生的姓名和成绩,然后定义一个s[]数组存放每个学生的姓名和成绩,输入函数中用一个for循环来依次输入每个学生的姓名,还有输入成绩,用if条件语句判断输入的成绩是否为负数,如果是就退出整个输入函数,同时,我们还用if条件语句来判断输入的成绩处于哪个分数阶段,定义n
1、n
2、等整形变量来存储各个分数段的总人数,变量num来存放输入的学生共有多少人,变量sum是将每个学生的成绩都加在一起,最后用sum/num就等于全班该门成绩的平均分,我们用一个for循环语句,判断每个学生的成绩是否小于60分,如果是就输出他的姓名,这样就可以打印出不及格学生的名单了。同样的,用一个for循环语句,判断每个学生的成绩是否大于等于平均分,如果是就变量count+1,用来记录成绩大于或等于平均分的学生人数,同时可将成绩大于平均分的同学姓名输出,这样就打印出了成绩在大于等于平均分的学生名单了。最后是输出分数段,用前面记录各个分数段人数的n值除以总人数再乘以100%就得出比例,每一个分数段都用一句for循环语句,根据n值的大小输入对应数目的*。
程序代码:
#include #include #define M 30 struct stu { char name[20]; int score; }; stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0; int count=0; void input(stu s[]); void getnotpass(stu s[]);
void getavg(stu s[]); void percent(stu s[]); int main() { /*stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0;*/ input(s); getnotpass(s); getavg(s); percent(s); return 0; } void input(stu s[]) { for(i=0;i
printf("请输入第%d个学生的姓名和成绩 ",i+1);
scanf("%s%d",&s[i].name,&s[i].score);
if(s[i].score<0)
break;
if(s[i].score>=0&&s[i].score<60)
n1++;
if(s[i].score>=60&&s[i].score<70)
n2++;
if(s[i].score>=70&&s[i].score<80)
n3++;
if(s[i].score>=80&&s[i].score<90)
n4++;
if(s[i].score>90)
n5++;
num++;
sum+=s[i].score; } printf("学生信息录入完毕 "); } void getnotpass(stu s[]) { printf("不及格人数为:%d ",n1); printf("不及格人员名单如下: "); for(i=0;i
if(s[i].score>=0&&s[i].score<60)
printf("%s ",s[i].name); } printf(" "); ave=sum/num; } void getavg(stu s[]) { for(i=0;i
if(s[i].score>=ave)count++; } printf("成绩在全班平均分及平均分之上的学生人数为:%d ",count); printf("成绩在全班平均分及平均分之上的学生名单如下: "); for(i=0;i
if(s[i].score>=ave)
printf("%s ",s[i].name); } printf(" "); } void percent(stu s[]) { printf("各分数段的学生人数及所占的百分比如下: "); printf("分段 人数 图形 "); printf("<60 %d(%.0f%%) ",n1,(float)n1/(float)num*100); for(i=0;i=90 %d(%.0f%%) ",n5,(float)n5/(float)num*100); for(i=0;i
运行结果示例:
依次输入每个学生的姓名和成绩,当输入成绩为负时,便退出整个输入:
统计不及格人数还有打印不及格学生名单:
统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单:
以直方图方式统计各分数段的学生人数及所占的百分比:
心得体会:
懂得了在for循环体内用if条件判断语句判断输入的值为负值时退出循环体。用变量计数器把符合要求的计数起来,最后可以得出符合要求的值共有多少个,也懂得了用for循环从所有值里进行筛选符合条件的值出来,更懂得了在求百分比时候要强制类型转换,把int类型的计算结果给转换为float单精度类型。
实践4.函数与文件训练 题目概述:
将实践练习2 中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中
包含结构体数组或指针。输出到ASCII 文件的信息包括每个学生的学号、三门成绩和名次,每人一行。
程序设计与概要:由于我的实践2中就已经用了函数,所以我只需要把学生的成绩等信息输出到文件中。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。
程序代码:
#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;
void input(student s[]); void title(); void list(student s[]); int save();//输出到文件中 int main() { input(s); int i=0; for(i=0;i
//要求1 计算总分 平均分
s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];
s[i].ave=(float)s[i].sum/3; }
//要求2 按总成绩排序
int rank=1; student t; for(i=0;i
for(int j=i+1;j
{
if(s[i].sum
{
{t=s[i];
s[i]=s[j];
s[j]=t;
}
}
}
s[i].rank=rank;
rank++; } save(); //要求3 打印名次表
title(); list(s); //要求4 查询
int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i
if(number==s[i].num)
{
printf("学号 姓名 数学 英语 C语言 总分 平均分 排名 ");
printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);
} } system("pause"); return 0; } void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 ");
for(int i=0;i
printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);
scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } } int save() {
FILE *fp; fp=fopen("f:student.txt","w"); if(!fp) {
printf("can not open file! ");
exit(1); } char c[]="学号 数学 物理 英语 排名 "; fputs(c,fp); for(int i=0;i
fprintf(fp,"%u %d %d %d %d ",s[i].num,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].rank); } fclose(fp); } void title() {
printf(" 学生成绩表 ");
printf("----------------------------- ");
printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");
printf("----------------------------- "); }
void list(student s[]) { int i; for(i=0;i
printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);
printf("----------------------------- "); } }
运行结果示例:
首先输入准备录入的学生人数,然后依次输入每个学生的信息:
打印出按总成绩排序后的学生信息表,以及根据学号查询:
在f盘中找到文件并打开:
心得体会:
懂得了用如何运用文件,把向程序中输入的数据全部输出到文件中去。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。
实践5. 实践4(1)(2) 题目概述:
每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:
1. 定义至少包含以上学生信息和学院代码的结构体类型和指针(或数组)变量。 2. 函数实现从文件中输入信息到定义的数据中。
程序设计与概要:
定义一个结构体,名为student,里面的内容有学生的学号,姓名,性别,还有那个学院,以及10门成绩,构造结构体数组,student stu[100],用于存储100名学生的信息。定义读取文件中内容的函数,FILE *fp代表文件,调用fopen函数,通过文件所在位置以及文件名打开特定的文件,r表示只对文件进行读取,接着调用fscanf函数,把第一个位置的数据赋给学生的学号,用while循环体,循环的条件是调用feof判断文件是否读取结束,如果没有则返回0,用!feof()来让没读取结束的文件继续读取,接着再把同一行后面的数据分别赋给学生的姓名,性别代码和所属学院代码,再用一个for循环,把同一行后面10个数据分别赋给学生的10门成绩。一行读取完毕后,意味着已经读取完一个学生的所有个人信息,定义一个I值来存储已经读取学生的人数,每读完一人就i+1,再读取下一行的第一个数据赋给下一个学生作为他的学号。通过while循环把文件中的全部信息读取出来赋给所有学生,函数最后返回的是读取学生的人数i。定义结构体名为sxy,用于存储性别代码和代码对应的性别,可以在后面输出的时候,把对应的性别代码转变为用中文表示性别。定义一个结构体名为scode,用于存储学院代码和代码对应的学院名称,可以在最后输出的时候,把学院代码对应的学院名称输出。再定义一个输出函数,通过for循环,从0~i-1,把i个学生的全部信息输出,所以我们在主函数里面先调用读取文件中内容的函数之后再调用输出函数即可。
程序代码:
#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); struct student { int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; float ave;
}; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k; n=readData("f:StudentInfo.txt",stu); m=readDataxy("f:SexInfo.txt",s1); k=readDataco("f:CodeInfo.txt",s2); if(n==-1||n==0)
return 0; if(m==-1||m==0)
return 0; if(k==-1||k==0)
return 0; printStudent(stu,s1,s2,n,m,k);
system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; fp=fopen(filename,"r"); if(!fp) {
printf("error1");
return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束
{
fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);
for(j=0;j<10;++j)
fscanf(fp,"%d",&stu[i].scores[j]);
++i;
fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {
printf("error2");
return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {
fscanf(fp,"%s",s1[i].sex);
++i;
fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {
printf("error3");
return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {
fscanf(fp,"%s",s2[i].dept);
++i;
fscanf(fp,"%d",&s2[i].id); }
return i; } void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i
for(j=0;j
{
if(stu[i].sexno==s1[j].id)
{
strcpy(stu[i].sex,s1[j].sex);
}
} } for(i=0;i
for(j=0;j
{
if(stu[i].deptno==s2[j].id)
{
strcpy(stu[i].dept,s2[j].dept);
}
} } for(i=0;i
printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);
for(j=0;j<10;++j)
printf("%4d",stu[i].scores[j]);
printf(" "); } }
运行结果示例:
心得体会:
懂得了从文件中输入信息到定义的数据中。就是要先构造与文件信息中相对应的结构体数组,然后用打开文件,需要知道文件的具体位置还有文件名,”r”就是表示只采取读取操作,用while循环,循环条件的判断标准就是用feof来判断文件是否读取到文件尾部,用fscanf把每个数据赋给对应的变量。其中最难解决的就是一开始学生文件里面的信息,学生性别用代号表示,学生所在学院也用代码显示,这样一来我们把文件中的信息赋给定义好的结构体
数组之后,用for循环把结构体数组一个一个输出后,显示的是性别代码和学院代码,我们要把代码都改为相对应的值,所以我们同样定义性别的结构体数组,学院的结构体数据,之后用for循环把性别数组里面的代号和学生数组中的性别代码想比较,用strcpy函数,相同的就把代码对应的性别赋给学生数组里面定义好的性别字符数组。同理的,学院代码相对同的就把代码对应的学院名称赋给学生数组里面定义好的学院字符数组。
实践6.实践4(3)(4)(5) 题目概述:
每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:
3. 函数实现排序(1):学生平均成绩的降序排序,并输出所有信息到显示屏。 4. 函数实现排序(2):学生姓名的升序排序,并输出所有信息到显示器。
5. 函数实现查询(1):根据学号查询学生信息,并输出该生信息,并输出所有信息到显示器。
程序设计与概要:
同上个实践一样构造结构体名为student,用来存储学生的信息,如学生姓名,性别代号,学号,学院代号和成绩等。构造结构体名为sxy用来存储性别代号和性别名称,构造结构体名为scode用来存储学院代号和学院名称。用三个不同的函数来实现读取三个不同文件中的内容,把文件里面的内容放到以上构造的三个结构体里面去,定义输出函数,用for循环把每个学生的性别代号同sxy结构体数组中的代号对应,把代号对应的性别名称赋给每个学生的性别sex属性值中,把每个学生的学院代号同scode结构体数组中的代号对应,把代号对应的学院名称赋给每个学生的学院sdept属性值中,最后再用一个for循环把从第一个学生到最后一个学生的全部信息输出。实现要求3中的根据学生平均成绩的降序排序,要求在从文件中读取成绩之后要计算出总分然后再除以10门成绩得出平均分,然后定义一个函数,用双重for循环,把第一个学生同其他学生比较平均分,如果比下一个同学的平均分低就交换两个的位置,否则就继续与下一个同学比较,直到第一层的for循环结束退出为止。再用for循环把排序后的学生信息从第一位到最后一位输出即可。实现要求4中的根据学生姓名的升序排序,要求也是用双重for循环,用函数strcmp比较两个学生的姓名,把第一个学生的姓名同下一个同学比较,如何比下一个同学大,就交两个学生的位置,否则就继续与下一个同学比较,直到第二层的for循环结束,意味一个同学的位置确定,继续第一层for循环的下一个同学,直到第一个层的for循环结束,就意味所有同学比较完毕,再用for循环语句把从第一个位置的同学到最后一个位置的同学,把他们的信息输出。实现要求5的查询要求,需要我们从键盘上输入要查询的学生的学号,然后用for循环从我们的学生结构体数组中遍历一遍,如果有找到学号同输入的学号相同的学生,便把他的所有信息输出,否则则输出不存在该名学生。
程序代码:
#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); void search(struct student *stu,int n); void sortbyname(struct student *stu,int n); void sortbyave(struct student *stu,int n); struct student
{ int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; double ave; }; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k,b; while(1) {
system("cls");
printf("1.显示学生信息 ");
printf("2.姓名升序排序 ");
printf("3.平均成绩降序 ");
printf("4.学号查询学生信息 ");
printf("0.退出 ");
printf(" 输入需要查询的序号:");
scanf_s("%d",&b);
switch(b)
{
case 1:
n=readData("f:StudentInfo.txt",stu);
m=readDataxy("f:SexInfo.txt",s1);
k=readDataco("f:CodeInfo.txt",s2);
if(n==-1||n==0)
return 0;
if(m==-1||m==0)
return 0;
if(k==-1||k==0)
return 0;
printStudent(stu,s1,s2,n,m,k);
break;
case 2:
sortbyname(stu,n);
break;
case 3:
printf("按平均成绩降序排序如下:");
sortbyave(stu,n);
printStudent(stu,s1,s2,n,m,k);
break;
case 4:
search(stu,n);
break;
case 0:
return 0;
} system("pause"); } system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; double sum; fp=fopen(filename,"r"); if(!fp) {
printf("error");
return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束
{
fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);
for(j=0;j<10;++j)
{
fscanf(fp,"%d",&stu[i].scores[j]);
sum=stu[i].scores[j];
}
stu[i].ave=sum/10;
++i;
fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {
printf("error2");
return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {
fscanf(fp,"%s",s1[i].sex);
++i;
fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {
printf("error3");
return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {
fscanf(fp,"%s",s2[i].dept);
++i;
fscanf(fp,"%d",&s2[i].id); } return i;
} void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i
for(j=0;j
{
if(stu[i].sexno==s1[j].id)
{
strcpy(stu[i].sex,s1[j].sex);
}
} } for(i=0;i
for(j=0;j
{
if(stu[i].deptno==s2[j].id)
{
strcpy(stu[i].dept,s2[j].dept);
}
} } for(i=0;i
printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);
for(j=0;j<10;++j)
printf("%4d",stu[i].scores[j]);
printf(" "); } } void search(struct student *stu,int n) { int m,col=0; printf("请输入你要查询学生的学号: "); scanf("%d",&m); for(int i=0;i
if(stu[i].id==m)
{
col=1;
printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);
for(int j=0;j<10;++j)
{
printf("%4d",stu[i].scores[j]);
}
} } if(col==0) printf("不存在该名学生信息 "); } void sortbyname(struct student *stu,int n) { student temp; for(int i=0;i
for(int j=0;j
{
if(strcmp(stu[i].name,stu[j].name)>0)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
} } printf("按姓名的升序排序如下! "); for(int i=0;i
printf("%8d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);
for(int j=0;j<10;++j)
{
printf("%4d",stu[i].scores[j]);
}
printf(" "); } } void sortbyave(struct student *stu,int n) { int i,j,flag; student s; for (j=0;j
flag=0;
for (i=0;i
{
if (stu[i].ave
{
s=stu[i];
stu[i]=stu[i+1];
stu[i+1]=s;
flag=1;
}
}
if(flag==0) break; } }
运行结果示例: 开始的菜单界面:
输入1便会显示文件中所有学生的信息:
输入2便会实现学生姓名升序排序,且把排序后的学生所有信息输出:
输入3便会实现学生平均成绩降序排序,且把排序后的学生所有信息输出:
输入4便会实现根据学号查询学生信息:
心得体会:
懂得了运用双重for循环比较全体成员,如题目中所要求的姓名升序排序还有平均成绩降序,比较平均成绩可以用值的大小进行比较,但是比较姓名的大小就要用strcmp函数进行比较,如果有需要交换位置的,就定义一个同类型的中间值,作为交换的协助者,帮助完成两个值的交换,完成整个过程之后,把交换完成后的全体成员从头到尾用for循环输出即可。
参考文献:
课程设计报告c范文第2篇
2010春《C语言课程设计》题目
1、职工信息管理系统设计(限最多2人完成)
职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能: 系统以菜单方式工作v 职工信息录入功能(职工信息用文件保存)--输入v 职工信息浏览功能 --输出v 查询和排序功能:(至少一种查询方式) --算法v l 按工资查询 l 按学历查询等
职工信息删除、修改功能(任选项)v
2、图书信息管理系统设计(限最多2人完成)
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能: 系统以菜单方式工作v 图书信息录入功能(图书信息用文件保存)--输入v 图书信息浏览功能--输出v 查询和排序功能:(至少一种查询方式)--算法v l 按书名查询 l 按作者名查询
图书信息的删除与修改(可选项)v
3、学生信息管理系统设计(限最多2人完成)
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能: 系统以菜单方式工作
学生信息录入功能(学生信息用文件保存)---输入 学生信息浏览功能---输出
第 1 页 共 4 页
《C语言课程设计》题目
查询、排序功能---算法 按学号查询 按姓名查询
学生信息的删除与修改(可选项)
4、学生选修课程系统设计(限最多2人完成)
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能: 系统以菜单方式工作v 课程信息录入功能(课程信息用文件保存)--输入v 课程信息浏览功能--输出v 查询功能:(至少一种查询方式)--算法v 按学分查询l 按课程性质查询l 学生选修课程(可选项)v
5、销售管理系统 (限最多2人完成)
某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容: 1)销售员的代号 2)产品的代号
3)这种产品的当天的销售额
每位销售员每天可能上缴0-5张便条。假设,收集到了上个月的所有便条,编写一个处理系统,读取上个月的销售情况(自己设定),进行如下处理。 1)计算上个月每个人每种产品的销售额。
2)按销售额对销售员进行排序,输出排序结果(销售员代号)
第 2 页 共 4 页
《C语言课程设计》题目
3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额) 4)输出统计报表
销售统计报表
产品代号 销售之和 销售员代号 1 2 3 4 5 1 2 3 4 每种产品之和 总和
6、设计一个简单计算器(限最多1人完成)
要求: 在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。
7、编写一万年历系统(限最多1人完成) 要求: 模仿现实生活中的挂历. 当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几). 当系统日期变到下一月时,系统自动翻页到下一月.
8、学生成绩管理(限最多2人完成) 1.主要功能:
(1)能按学期、按班级完成对学生成绩的录入、修改
(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序
(3)能查询学生成绩,不及格科目及学生名单 (4)能按班级输出学生的成绩单
第 3 页 共 4 页
《C语言课程设计》题目
9、通讯录管理(限最多1人完成) 1.主要功能:
(1)能建立、修改和增删学生通讯录 (2)能够按多种方式进行查询 2.要求:界面友好,易于操作
10、一元多项式简单的计算器(限最多1人完成) 1主要功能:
(1)输入并建立多项式; (2)输出多项式;
(3)两个多项式相加,建立并输出和多项式; (4)两个多项式相减,建立并输出差多项式。 (5)算法的时间复杂度、另外可以提出算法的改进方法
实现提示:可选择带头结点的单向循环链表或单链表存储多项式,头结点可存放多项式的参数,如项数等。
2.要求:一元多项式简单计算器的基本功能
11、图书管理系统(限最多2人完成)
1、功能描述
新进图书基本信息的输入。 2. 图书基本信息的查询。 3. 对撤消图书信息的删除。 4. 为借书人办理注册。
5.办理借书手续(非注册会员不能借书)。 6.办理还书手续
信息描述:有关该系统基本信息的描述,如:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等
第 4 页 共 4 页
《C语言课程设计》题目
12、校园导游咨询(限最多1人完成)
1、功能描述:设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示学校各景点,存放景点名称,代号,简介等信息;以边表示路径,存放路径长度等相关信息。
2、为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
3、为来访客人提供图中任意景点相关信息的查询。 测试数据:由读者根据实际情况指定。
实现提示:一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网,顶点和边均含有相关信息。
13、简单的行编缉器(限最多1人完成)
要求:设置一个简单的行编缉器,每行以回车结束。
数据以文件形式存储
编辑器具有查找、替换、修改数据的功能。
14、用栈来设置密码(限最多1人完成)
要求:用栈来做一个密码验证程序,密码验证只有三次机会。
15、双向链表的排序(限最多1人完成)
要求:输入一个双向链表,显示些双向链表并对此双向链表排序
16、成绩记录簿(限最多2人完成)
要求:编制一个C语言成绩记录簿,每个学生信息包括:学号、姓名、C语言成绩。
课程设计报告c范文第3篇
1 C语言程序设计课程教学存在的问题
1.1 教材选用不足、内容陈旧
教材是教学活动的范本,它揭示了教学活动的内容、程序和方法[2]。高职院校采用的教材应该具有它的职业性,实践性,适应性和科学性。目前,大多数高职院校采用的教材是谭浩强教授著的《C语言程序设计(第2版)》,清华大学出版社。此教材出版时间较早,不适用于现在高职的教学。
1.2 经费投入不足、教学手段落后
教学手段是师生教学相互传递信息的工具、媒体或设备。近几年来,教学经费拨款总额虽然逐年有所增加,但增长幅度却远远不能满足高职院校发展的需求[3]。由于建设经费投入不足,造成对教学设施的投入有限,从而导致教学还是沿用传统教学手段的方式一部教科书、一支粉笔、一块黑板。
1.3 理论与实践脱节
在职业教育实践中,实验和实训是将知识转化为学生能力素质的主要途径,将实践教学有机的贯穿于整个教学体系是教学取得成效的关键因素之一,这在以培养劳动技能为主的高职教育中体现的更加明显。C语言程序设计课程是一门独立性较强的课程,需要实验活动。然而,现在多数高职院校由于教学经费紧张,教学设备更新速度较慢,无法满足学生上机实验要求。
1.4 考核机制不健全
课程考核是高校教学活动中的重要环节,它既有反馈功能,即对教师的教学效果和学生的学习结果进行评价和检验:又有导向功能,不同的考核方法会促使教师对教学内容和方法做出不同的安排和选择学生也会根据考核方式调整学习方法。公平合理且科学有效的考核机制不仅会对教学效果做出真实、客观的反馈和评价,而且会调动学生学习的积极性和主动性[4]。现行C语言程序设计课程依据平时作业成绩、期末考试成绩评定,分别占30%、70%,而期末考试方式采用闭卷笔试方式。
2 解决方法探讨
2.1 教学内容现代化
教学内容现代化主要体现在教材上。谭浩强教授著的《C语言程序设计(第2版)》教材出版时间较早,且对象主要面向的是高等学校本科生,而高职院校的学生知识底子薄、自学能力较差,所以此教材不太适用于高职院校。高职院校应该根据自身的特点,编写相应的教材。
2.2 教学手段现代化
教学内容的现代化依托于教学手段的现代化。以传统教学论为基础的传统教学法已经不能适应该课程的教学要求。授课教师可以使用现代化教学手段和传统教学手段相结合的方法,通过创设问题情景并提供解决问题的帮助指导,让学生在解决问题的过程中实现对知识体系的建构,达到培养能力和提高素质的目的。高职院校可以通过建立网上教学系统、制作多媒体CAI光盘、测试评价与操作练习课件、教学VCD等途径改善教学手段。
2.3 考核手段现代化
现行课程考核虽然不再是以往模式单一的考核方法,能够比较合理地进行学生学习效果的评价,但是在教学实践中发现,学生的能力有差别,在这种情况下,若采用同样的方式对学生进行考核,虽然能起到全面、公平地考核的目的,但不能因材施教、甚至会挫伤部分学生的积极性。对于学生成绩的评定,建议采取平时作业成绩+期末考试成绩+实践的考核方式。平时成绩占20%,平时成绩根据学生的到课率、上课布置的作业完成情况组成;期末考试成绩占40%,实践成绩占40%。这种考核方式不仅注重学生实践技能的考核,而且能使学生的学习积极性得到大幅度地提高、能培养学生良好的实践操作和应用开发能力的培养,有利于提高学生的学习学效果。
教学过程是实现人才培养目标的主要途径,高职教育应紧围绕提高学生的实践技能为目的。因此,高职院校应鼓励教师发挥其主观能动性,进行教学改革。
摘要:近几年来我国高等教育事业迅速发展,许多高职院校为提高教学质量加大了专业教学改革建设的力度。本文着重分析了高职C语言课程教学中存在的问题,对如何解决这些问题进行了探讨。
关键词:C语言程序设计,高职教育,课程教学
参考文献
[1] 高宏欣,韩茜.浅谈高职院校《C语言程序设计》教学改革[J].金色年华,2010(11).
[2] 李惠斌.成人高校教材建设中存在的问题及其对策[J].北京市总工会职工大学学报,2003,18(3):22~27.
[3] 粱爽,宋艳华,邹前.浅谈高职院校发展与办学经费筹措途径[J].陶瓷研究与职业教育,2008,6(4):45~47.
课程设计报告c范文第4篇
1、通过课程设计,熟练掌握Visual C++ 6.0 开发环境的使用,提高程序调试能力;
2、通过课程设计,提高学生分析问题、解决问题的能力;
3、通过课程设计,复习巩固C语言的循环结构、指针、数组、结构体、文件等方面的知识,并在实践中加以运用。
4、通过课程设计,提高学生查阅资料、吸收和运用新知识的能力。
二、课程设计要求
每个学生在下列课题中至少选一题,并独立完成。
1、学生成绩管理系统
2、学生档案管理系统
3、同学通信录管理系统
4、职工档案管理系统
5、职工工资信息管理系统
6、小型图书信息管理系统
7、超市商品信息管理系统
8、实验室设备信息管理系统
9、试题(选择题)信息管理系统
10、列车时刻表信息管理系统
每课题均须具有以下功能:
1、信息录入,包括记录的追加和插入;
2、信息删除;
3、信息修改;
4、信息排序和查询;
5、信息的保存和装载;
6、简单的帮助。
三、设计方法及过程
1、问题分析
包括系统所要完成的功能、数据结构分析,如问题处理过程中使用的结构体及包含的成员等,文件的类型、存储的内容等,输入/输出的格式等。
2、系统功能设计及模块(函数)划分
根据分析结果,画出系统结构图,确定系统的功能模块,包括模块的名字、接口(即函数的参数、返回值)及功能,模块间的调用关系。
3、模块的算法设计
设计每个功能模块的算法,可以用伪代码或流程图表示。
4、编码
代码的编写要符合规范,程序中对各个模块的功能、模块主要实现部分都需要加上注释,以增加程序的可读性,便于软件维护。
5、调试
四、设计报告
课程设计报告c范文第5篇
1 系统设计与实现
通过该考试系统, 使有关考试的大部分工作系统化、规范化、自动化, 从而达到提高教学效果的目的: (1) 系统应符合一般考试的需求, 满足教师或监控人员的需要, 并达到操作过程中的直观, 方便, 实用, 安全等要求; (2) 系统采用模块化程序设计方法, 既便于系统功能的各种组合和修改, 又便于未参与开发的技术维护人员补充, 维护; (3) 系统应具备数据库维护功能, 及时根据用户需求进行数据的添加、删除、修改、备份等操作。
1.1 系统总体架构设计
本考试系统主要采用C/S架构进行开发, 由系统前台、系统后台两大部分组成。后台由教师操作区和管理员操作区组成, 主要需求为八大模块, 系统结构如图1所示。
1.2 模块功能设计与实现
以试卷管理模块功能设计为例, 考试系统最常见的问题是试卷生成过程中会出现有些试题使用率太高, 我们在设计时充分考虑到了这点。首先, 在构建试题数据库时预留了试卷生成时的提取特征, 如:用分类号将入库试题按不同知识点区分开来, 例如, 电子类实验的试题按“仪器使用”、“电路分析”、“模拟电路”、“数字逻辑电路”等不同知识点区分, 当需要生成试卷时, 可按手动和自动两种方式。首先定义好试卷包含的题目的类型, 题目的数量以及分值, 选择试题屏蔽功能, 按知识点屏蔽某一课程的试题 (以区分不同课程的试卷) 或个别题目屏蔽, 可最终生成的试卷不仅可以完全避免随机产生的某些试题重复使用率过高的问题, 还可以以此区分不同课程的试卷, 以实现系统的兼容性。数据库表如图2所示。
屏蔽的题目表tb_ShieldSubject。
例如;自动生成“模拟电子线路实验试卷”时, 先按知识点屏蔽“数字逻辑”和“组成原理”实验试题, (避开不属于同一科目的题目) , 生成的试卷只在仪器仪表和模拟电路试题中抽取试题, 生成的试卷就是模拟电路实验课程。
2系统开发工具及运行环境
(1) 开发程序语言:M icr os of t Vi su al C#2 0 0 5;
(2) 开发使用的数据库:Microsoft SQL Server2000;
(3) 系统运行软硬件环境:
软件环境:Microsoft Windows XP Pro32 bit China OS、Microsoft.NET Framwork2.0、Microsoft SQL Server2000。硬件环境:1.6 GHz CPU、内存要求:512MB外存要求:20GB。
3 结语
电子技术实验机考系统经我学院08级学生使用, 很好的解决了仪器设备数量有限对实验考试的制约, 随机抽卷的考试公正的、全面的、客观的反映出学生的知识掌握情况和实际能力, 不仅使学生对实验教学达到了前所未有的重视程度, 也使教师更加注重提高自身的教学水平, 考试系统的自动阅卷和教学数据分析, 直观地评估教师的教学和学生的学习效果。同时利用丰富的计算机软、硬件资源和网络资源, 自动或手动生成不同实验课程试卷、自动随机或定向派发试卷、考场监考以及考生信息管理、自动或流水线阅卷、自动统计和教学数据分析、自动生成成绩报表等功能。大大减轻了实验教师的工作强度, 使教师把精力用于教学改革和提高教学质量上来。
摘要:实验课程的考试历来是实验教学的难点, 在分析传统实验教学考试模式的基础上, 讨论了实验教学考试信息化的模式、定位和设计思想, 结合电子技术实验课程特点, 利用网络信息技术, 开发了电子技术实验教学机考系统, 在实践中取得了良好效果。
关键词:教学质量,实验课程,机考系统,信息化
参考文献
[1] 韩方珍, 俞守华, 曹咏, 等.基于B/S结构的实验教学管理系统设计[J].实验室研究与探索, 2007, 26 (12) :302.
[2] 张正兰, 张明.论高校实验室创新[J].实验室研究与探索, 2006, 25 (11) :1339~1342.
课程设计报告c范文第6篇
利用C语言的编程知识和编程技巧,完成具有一定难度、一定编程量的课程设计题目,从而掌握高级编程语言的知识和编程技术,掌握程序设计的思想和方法,具备利用计算机求解实际问题的能力。为C++等编程技术的学习奠定必要的实践基础。
二、课程目标
1、通过本课程的实践,培养自学、独立思考、分析和解决问题的能力。
2、通过对需求的分析,确立方案,编制程序与调试程序,初步掌握C程序设计的方法。
3、能熟练调试程序,完成课题任务。
4、根据个人的设计调试过程,撰写设计报告。
三、课程内容
设计《职工信息管理系统》软件,满足以下要求:
1. 可以在DOS命令行下完成下列操作:
a) 可录入职工信息:工号、姓名、电话(含0开头号码、13位以内),并显示是否操作成功(若工号已存在则提示);
b) 可删除指定工号的信息,并显示是否操作成功;
c) 可修改指定工号的各项信息,并显示是否操作成功;
d) 可查询指定工号的信息,操作后输出信息到屏幕;
e) 可输出全部职工信息到屏幕;
2. 软件的设计满足以下要求:
a) 使用数组存储职工信息,
b) 所有职工信息按照工号顺序存储到文本文件(自学文本文件读写语句);
c) 软件至少包含.c和.h文件共3个以上;
四、考核
1. 答辩:查看代码(使用多维数组结构)、解释代码(语句功能熟悉)、运行程序(功能正常齐全)