c课程设计分油问题范文
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篇
photoshop视频教程--专
21视频教程网是国内唯一专业的网站开发学习一体化视频教程网站,站内视频教程均为原创,并通过多年的现场培训反馈后而录制的,我们的目标是使朋友通过本站教程学习,就能胜任网站开发人员的工作。视频教程网服务指南1.观看视频卡死解决方法? 2.能否下载视频教程
3.学习中遇到疑问如何交流? 4.注册论坛会员有哪些好处?
c课程设计分油问题范文第3篇
C语言程序设计作为高校计算机专业和部分非计算机专业的必修课程, 目前普遍面临着课时紧, 教师教学压力和学生学习压力大等问题。在实际教学中, 由于缺乏高效的交流平台和丰富的教学资源, 教师难于组织高效的课堂教学和课后辅导教学, 无法及时掌握学生的学习动态。构造与建设C语言程序设计的网络课程, 可以为学生提供一个网络化辅助教学平台, 给学生营造一个良好的自学氛围, 有助于学生根据自身水平和兴趣, 选择适合的学习和实践训练方式, 自主安排学习进程, 从而使学生的学习水平和实践能力得到充分的发展和提高。
1 C语言程序设计网络课程的设计思想
网络课程是集读书、听课、练习、实验、答疑、解惑、测评于一体的学习平台, 是在新的教育思想指导下, 应用现代教育技术方法制作的基于Web的数字教学资源。它不仅要求教学内容的系统性、科学性, 还要重视学生的个性发展以及创新能力的培养、提高学生分析问题和解决问题的能力。所以网络课程必须根据学生的认知方式来设计教学内容的结构和表现知识的形式和方法, 其中包括教学活动的设计、学生自主学习的设计和课程导航技术以及基本教学环境的设计等[1]。另外还要有较强的交互性, 教学资源既提供给学生所需的知识, 又及时对学生的学习活动作出相应的记录和反馈, 提供师生联系和讨论的平台。
根据网络课程的特点以及C语言程序设计的教学经验, 在对C语言程序设计网络课程的建设上要考虑如下几个方面。
(1) 根据C语言程序设计课程的特点, 从问题分析、建立数学模型、算法设计和编码、测试等方面选取教学内容和学习资源, 使得教学设计更加结合业余学习的特点。
(2) 虚拟真实教学环境, 针对学生的学习水平的评估, 为学生提供个性化学习方案, 采用多种媒体技术展现生动画面, 把学生的积极性充分调动起来。
(3) 采用多样化的交互方式, 包括人机互动、师生互动以及生生互动。
(4) 导航系统便捷化, 以使网络课程更适用于自主学习, 导航系统包括:课程结构说明、课程的层次或网络目录结构、学习历史与状态记录、课程和学习单元快速链接、便捷的资源检索、导航帮助等。
(5) 提供课程资源的下载, 为学生提供最大的便利。
(6) 具备较强的适应性。不仅可以在单机环境下运行, 还可以在网络这个异构环境下运行, 这就要求系统具有鲁棒性和知识共享能力。
(7) 具备较强的容错能力。如果用户进行了误操作, 系统应该给出适当的提示等信息, 不应该因为操作错误或失误而死机。
(8) 具有可扩展性。可以扩展用到其他相关的领域中, 并可对其现有的功能进行扩展, 使其更具有人性化的特点。
2 C语言程序设计网络课程的构建
C语言程序设计网络课程作为C语言程序设计教学的辅助工具, 应该带有丰富的教育资源库和方便的教育信息检索工具, 可提供网上备课和网上学习, 还可提供方便易用的网络教育开发工具, 使得不具备很多计算机知识的人也可以方便地把自己的教学心得和知识产权制作成网络教案, 综合C语言程序设计网络课程的设计思想, 利用分布式模块构建的方法, 构建出适合C语言程序设计辅助教学的网络课程。
2.1 自主学习模块
学生需要根据一定的测试来判定自己对某个知识点的学习水平。对学生水平的评估需要根据布鲁姆的教育目标选择不同能力类别的测试题对学生进行评估, 即参照每个知识点对应的目标分别进行测试, 判定学生各个方面的能力, 最终综合得到学习的学习水平级别, 针对每个学生的水平进行因材施教, 对每个知识点进行由易到难的学习, 并通过测试模块进行学习效果的评估。
为达到学生个性化学习的目标, 需要根据学生的学习水平评估为学生建立个性化学生模型, 引导学生对每个知识点进行由易到难的学习, 并通过测试进行学习效果的评估。此外学生可以选择不同的学习方式, 即按照教师做好的教案进行系统的学习。
自主学习模块需要建立两个数据库, 即知识库和学生模型库, 学生可以自由选择学习方式并方便的查询知识库的相关知识点, 并根据自身的学习水平建立适合自己的学习模型, 从而达到辅助教学的目的。
2.2 备课模块
对于教师的备课, 要有专门的模块来保存教案的模板, 用来保存系统原有的模板并且教师做好的教案模板经过评估后也可以保存到教案模板库中, 供其他的教师参考使用。如果教师对于推荐的教案模板不满意, 可以在原有的教案模板上进行修改使用, 也可以通过系统推荐的资源进行重新构建教案模板。这个过程应该有系统智能化的提示, 界面友好简单, 易于教师的使用。
教师的备课需要根据各个知识点的教学目标有针对性地制作教案, 因此需要建立一个目标知识库来指导教师的备课。对于教师备课所需的资源, 系统能够提供一种直观的、简单易用的检索方式, 将待检索的知识点或教学资源分类显示, 这样用户只需要按照知识点或教学资源的组织结构[2,3], 逐步缩小信息检索的范围, 就能最终找到需要的知识点或教学资源, 而不需要准确地输入知识点或教学资源的名称。
2.3 C语言程序设计网络课程的基本架构
C语言程序设计网络课程除了能提供学生个性化学习和教师智能备课的功能外, 还需要提供资源上传模块以供教师共享教学资源, 针对学生的疑难问题, 需要使用在线解答和留言板等方式建立疑难解答系统以方便学生的自主学习。此外, 测试模块除了可以对学生的学习水平进行评估, 还可以针对评估结果为学生建立个性化学习模型, 指导学生有针对性地学习相关的知识点[4]。C语言程序设计网络课程的基本架构如图1所示。
3 结语
应用C语言程序设计网络课程来进行辅助教学, 不仅能提高C语言程序设计的教学效率和教学质量, 而且能够培养学生利用网络进行自主学习和协作学习的学习能力, 对学生日后的学习生活也具有重要的现实意义。因此, 构造与建设C语言程序设计网络课程已成为高校教学研究的一个重要方向。
摘要:构建C语言程序设计网络课程可以为学生提供一个网络化辅助教学平台, 从而有效的缓解目前高校C语言程序设计课程教学中存在的课时紧、压力大等问题。提出针对学生的学习水平建立学生模型, 建立个性化学习方案, 同时为教师提供教学目标的指导, 从而实现智能化的备课平台。C语言程序设计网络课程的构建对于高校的C语言程序的教学具有深远的影响。
关键词:网络课程,个性化学习,智能备课,学生模型
参考文献
[1] 王晓东.基于Ontology知识库系统建模与应用研究[D].上海:华东师范大学, 2005.
[2] 王晓东, 王靖.基于Ontology的Web语料的挖掘[J].河南师范大学学报, 2006, 34 (4) :43~45.
[3] 张霄军, 张凌岚, 刘军.基于web语料挖掘技术及其系统设计[J].上海电力学院学报, 2004, 20 (2) :39~43.
c课程设计分油问题范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


