C语言课程设计实践报告5篇

时间:2019-05-12 11:25:17下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言课程设计实践报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言课程设计实践报告》。

第一篇:C语言课程设计实践报告

北京理工大学珠海学院 C语言程序设计实践报告

2014—2015学年第1学期

学 院: 计算机学院 专业班级: 软件工程5班 学 号: ***6 学生姓名: 陈洪阳 指导教师: 戴俊雅

成 绩:

时 间:

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间猜一个数n”);scanf(“%d”,&input);do{

if(input==num){

} else if(input>num){

} else if(input

}

}

} printf(“你猜的数太小了,请再猜一个n”);scanf(“%d”,&input);times++;}while(times<9);if(times>=9)printf(“你已经猜了10次都猜不中,你输了n”);printf(“继续下一轮新的猜数请按1,退出请按0n”);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(“请输入你要查询学生的学号:n”);scanf(“%d”,&number);for(int i=0;i

if(number==s[i].num)

{

printf(“学号t姓名t数学t英语t物理t总分t平均分t排名n”);

printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,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(“请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩n”);for(int i=0;i

printf(“第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩n”,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(“ 学生成绩表n”);

printf(“-----------------------------n”);

printf(“学号t姓名t数学t英语t物理t总分t平均分t排名n”);

printf(“-----------------------------n”);}

void list(student s[]){ //n表示人数

int i;//rank=1;for(i=0;i

printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,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(“-----------------------------n”);} }

运行结果示例:

确定录入人数之后,依次输入每个学生的信息

打印出名次表:

输入学生的学号,查询学生信息:

心得体会:

懂得了用结构体将不同的数据类型结合在一起,然后定义结构体数组,使得每个数组中的成员都具有不同的数据类型变量。而且同属于一个数据类型,也可以定义数组来表示相同的类型但是有多个不同值,比如成绩这个变量。也懂得了用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条件语句来判断输入的成绩处于哪个分数阶段,定义n1、n2、等整形变量来存储各个分数段的总人数,变量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个学生的姓名和成绩n”,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(“学生信息录入完毕nnn”);} void getnotpass(stu s[]){ printf(“不及格人数为:%dn”,n1);printf(“不及格人员名单如下:n”);for(i=0;i

if(s[i].score>=0&&s[i].score<60)

printf(“%st”,s[i].name);} printf(“n”);ave=sum/num;} void getavg(stu s[]){ for(i=0;i

if(s[i].score>=ave)count++;} printf(“成绩在全班平均分及平均分之上的学生人数为:%dn”,count);printf(“成绩在全班平均分及平均分之上的学生名单如下:n”);for(i=0;i

if(s[i].score>=ave)

printf(“%st”,s[i].name);} printf(“nnn”);} void percent(stu s[]){ printf(“各分数段的学生人数及所占的百分比如下:n”);printf(“分段t 人数t 图形n”);printf(“<60t%d(%.0f%%)t ”,n1,(float)n1/(float)num*100);for(i=0;i=90t%d(%.0f%%)t ”,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(“请输入你要查询学生的学号:n”);scanf(“%d”,&number);for(int i=0;i

if(number==s[i].num)

{

printf(“学号t姓名t数学t英语tC语言t总分t平均分t排名n”);

printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,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(“请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩n”);

for(int i=0;i

printf(“第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩n”,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!n”);

exit(1);} char c[]=“学号t 数学t 物理t 英语t 排名n”;fputs(c,fp);for(int i=0;i

fprintf(fp,“%ut %dt %dt %dt %dn”,s[i].num,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].rank);} fclose(fp);} void title(){

printf(“ 学生成绩表n”);

printf(“-----------------------------n”);

printf(“学号t姓名t数学t英语t物理t总分t平均分t排名n”);

printf(“-----------------------------n”);}

void list(student s[]){ int i;for(i=0;i

printf(“%ut%st%dt%dt%dt%dt%5.2ft%dn”,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(“-----------------------------n”);} }

运行结果示例:

首先输入准备录入的学生人数,然后依次输入每个学生的信息:

打印出按总成绩排序后的学生信息表,以及根据学号查询:

在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(“ 学生信息统计n”);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(“n”);} }

运行结果示例:

心得体会:

懂得了从文件中输入信息到定义的数据中。就是要先构造与文件信息中相对应的结构体数组,然后用打开文件,需要知道文件的具体位置还有文件名,”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.显示学生信息n”);

printf(“2.姓名升序排序n”);

printf(“3.平均成绩降序n”);

printf(“4.学号查询学生信息n”);

printf(“0.退出n”);

printf(“n输入需要查询的序号:”);

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(“ 学生信息统计n”);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(“n”);} } void search(struct student *stu,int n){ int m,col=0;printf(“请输入你要查询学生的学号:n”);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(“不存在该名学生信息n”);} 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(“按姓名的升序排序如下!n”);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(“n”);} } 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循环输出即可。

参考文献:

[1] 张克军:《程序设计基础》,科学出版社。

第二篇:C语言课程设计报告

C语言课程设计报告

级:

10电子本1

号:

10303033122

名:

指导老师:

方文森

完成日期:

温州大学城市学院课程设计

目 录

1、课程设计目的和要求.....................................................................................................2

2、课程设计任务内容.........................................................................................................2

3、详细设计说明.................................................................................................................3

3.1分析.........................................................................................................................3 3.2软件设计.................................................................................................................3 3.3软件调试(对编程中的错误进行记录,并给出你的解决办法).....................3

4、软件使用说明.................................................................................................................4

5、课程设计心得与体会.....................................................................................................4 附录1:参考文献................................................................................................................5 附录2:部分程序清单(带有较详细的注释)................................................................5

温州大学城市学院课程设计

C语言课程设计报告

1、课程设计目的和要求

目的:(1)巩固和加深学生对C语言课程的基本知识的理解和掌握(2)掌握C语言编程和程序调试的基本技能(3)利用C语言进行基本的软件设计(4)掌握书写程序设计说明文档的能力(5)提高运用C语言解决实际问题的能力 要求:(1)分析课程设计题目的要求(2)写出详细设计说明

(3)编写程序代码,调试程序使其能正确运行(4)设计完成的软件要便于操作和使用(5)设计完成后提交课程设计报告

2、课程设计任务内容

1)一个班级有4个学生,共学习5门课程(大学英语、高等数学、C语言程序设计、VB程序设计、大学语文)。要求编写程序完成相应功能。2)

输入并保存]5门课程名称;

3)

输入并保存]4个学生的学号及其[个人相关信息]; 4)

输入并保存]每个学生对应的每门课程成绩; 5)求出每门功课的平均分;

6)找出有两门以上功课不及格的学生,输出他们的学号和全部课程成绩及该学生5门课程的平均成绩;

7)找出平均成绩在90分以上或者全部课程成绩在85分以上的学生,输出他们的学号和全部课程成绩及该学生5门课程的平均成绩;

8)计算每位学生的总分,并按总分进行排名,按由高到低输出他们的学号及总成绩; 9)对前面问题进行优化,即在一维数驵的基础上,考虑采用二维数组、函数及其参数传递的方式来解决相关问题;

10)对前面问题进行优化,在学号的基础上,增加学生的其它个人信息,包括:学号、姓名、年龄、性别,并采用结构体形式加以表示; 11)利用文件实现对输入及分析输出数据的存取操作。

12)参照教材P27页,3-11题引入选择功能,输入功能编号可以实现以上功能(考虑清屏函数,自查)。

温州大学城市学院课程设计

3、详细设计说明

3.1分析

3.2软件设计

开始菜单(功能选择)Key=?Key=1Key=2Key=3Key=4Key=5Key=0Key=99Key=6Key=7Key=8Key=9Key=10写入课程名读取课程名输入学生信息读取学生信息建立了学生信息及课程名称?退出程序读取课程、学生、成绩读取课程成绩输出功课的平均分两门以上功课不及格的学生输出高分的学生总分由高到低排序No保存保存Yes输入课程成绩(提示)必须输入课程名称、学生信息才能建立成绩保存清屏

3.3软件调试(对编程中的错误进行记录,并给出你的解决办法)

取地址。

温州大学城市学院课程设计

4、软件使用说明

1.2.3.4.5.6.7.8.9.10.11.12.[99]读取课程、学生、成绩 [1]输入课程名称.[2]读取课程名称.[3]输入学生信息.[4]读取学生信息.[5]输入课程成绩.[6]读取课程成绩.[7]功课的平均分.[8]两门以上功课不及格的学生 [9]-高分的学生-.[10]学生总分排序.[0]退出应用程序.5、课程设计心得与体会

在大家的共同努力下,忙碌了两个星期,我们顺利完成了对此程序的编译及试运行。在设计程序的过程中,我们了解到要设计一个完整的程序,其中最难的可能就属设计整个程序的框架,其中可能会需要经过很多次的修改与调试,所以必须要有耐心,直至最后设计出自己想要的程序。

另外平时学习c语言的基础也很关键,因为如果平时学得就不怎么样,那么你面对这么一个比较有难度的程序,可能会望而却步,看懂他人的程序都是个难点,更别说让自己去设计。为了解决此类问题,最好就是多向同学,老师请教,查找资料。

设计一个程序的过程就是解决一个实际问题的过程,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;在次我们必须捋清思路,逐一的解决问题的各个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。

感谢这次的课程设计,它使我更加深刻地体会到c语言程序编写过程的严谨与细致,还有就是无论做任何事都要有耐心。当然团队合作也是非常重要的一个环节,这会使你在学习过程中倍感轻松

总的来说,这次程序设计让我获益匪浅,对C语言也有了进一步的认识:C语言功能高、表达能力强、使用灵活方便、目标程序效率高等等。C语言是在国内外广泛使用的一种计算机语言,相信除了以上优点,还有许多我们还未发现,希望能在以后的学习中有更深入的认

温州大学城市学院课程设计

识。

附录1:参考文献

《C语言程序设计与实践教程》

附录2:部分程序清单(带有较详细的注释)

#include #include

#define N 4 #define M 5 #define Debug 1

typedef struct { char SNo[5];char SName[10];}Student;

void ScoreRead(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i

温州大学城市学院课程设计

void ScoreWrite(float Score[][M],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i

void CoureseRead(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;char ch;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} i=0;j=0;while(1){ ch = fgetc(fp);if(ch==EOF)break;if(ch=='n'){ Cname[i][j]='';i++;j=0;6

温州大学城市学院课程设计

} else { Cname[i][j]=ch;j++;} } #if(Debug==1)for(i=0;i

void CoureseWrite(char Cname[][20],char FileName[],char FileType[]){ FILE *fp;int i,j;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} for(i=0;i

void StuInfoWrite(Student S[],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL)7

温州大学城市学院课程设计

{ printf(“Errorn”);exit(0);} else { for(i=0;i

void StuInfoRead(Student S[],char FileName[],char FileType[]){ int i,j;FILE *fp;fp=fopen(FileName,FileType);if(fp==NULL){ printf(“Errorn”);exit(0);} else { for(i=0;i

温州大学城市学院课程设计

Student Stu[N];char Cname[M][20];

while(1){ system(“cls”);printf(“ttt=======学生成绩管理应用程序=======n”);printf(“tttt[99]读取课程、学生、成绩.nn”);printf(“tttt[1]输入课程名称.nn”);printf(“tttt[2]读取课程名称.nn”);printf(“tttt[3]输入学生信息.nn”);printf(“tttt[4]读取学生信息.nn”);printf(“tttt[5]输入课程成绩.nn”);printf(“tttt[6]读取课程成绩.nn”);printf(“tttt[7]功课的平均分.nn”);printf(“tttt[8]两门以上功课不及格的学生.nn”);printf(“tttt[9]-高分的学生-.nn”);printf(“tttt[10]学生总分排序.nn”);printf(“tttt[0]t退出应用程序.nn”);printf(“请选择功能:”);scanf(“%d”,&Key);getchar();printf(“n”);if(Key==99){ CoureseRead(Cname,“D:cname.txt”,“r”);StuInfoRead(Stu,“D:stuinfo.db”,“rb”);ScoreRead(CJ,“d:score.db”,“rb”);} else if(Key==1){ for(i=0;i

//输入学生信息 //读取课程名称

//输入课程名称

温州大学城市学院课程设计

{ scanf(“%stt%s”,Stu[i].SNo,Stu[i].SName);} getchar();StuInfoWrite(Stu,“D:stuinfo.db”,“wb”);} else if(Key==4){ StuInfoRead(Stu,“D:stuinfo.db”,“rb”);} else if(Key==5){

char Qu;scanf(“%c”,&Qu);getchar();if(Qu=='Y' || Qu=='y')printf(“您已经建立了学生信息及课程名称了吗?(Y/N)n”);

//输入课程成绩 //读取学生信息

{ CoureseRead(Cname,“D:cname.txt”,“r”);StuInfoRead(Stu,“D:stuinfo.db”,“rb”);for(i=0;i

else { printf(“请输入Y/N!n”);

//读取课程成绩 } }//else if(Key==5)else if(Key==6){ ScoreRead(CJ,“d:score.db”,“rb”);10

温州大学城市学院课程设计

} else if(Key==7){ ScoreRead(CJ,“d:score.db”,“rb”);CoureseRead(Cname,“D:cname.txt”,“r”);for(j=0;j

for(i=0;i2){ s=s/M;printf(“%st %sn平均成绩:%fn”,Stu[i].SNo,Stu[i].SName,s);for(k=0;k

}

}

} } 11

温州大学城市学院课程设计

} else if(Key==9){ int x,k;float c,s;printf(“平均成绩在90分以上或全部课程成绩在85分以上n”);for(i=0;i=90)){ s=s/M;printf(“%st%st平均成绩:%fn”,Stu[i].SNo,Stu[i].SName,s);for(k=0;k=85){ x++;if(x==M){ s=s/M;printf(“%st%st平均成绩:%fn”,Stu[i].SNo,Stu[i].SName,s);for(k=0;k

}

} } else if(Key==10){ float x[i];12

温州大学城市学院课程设计

char XH[N][3];char temp[3];int num;int imax,k;float t;for(i=0;i=1;i--){ for(k=0;k

else if(Key==0){ break;} getchar();} } 13

第三篇:C语言课程设计报告

C语言课程设计报告

Experiment Designing reporter

课程名称 : C语言课程设计

英文名称 : C Program Experiment Designing

专 业 :

学 号 :

姓 名 :

指导教师 :

日 期: 2011年7月18日 至2011年7月22日

《C语言课程设计》报告

C Program Experiment Designing

课程编号:01200308005

学时: 40学时 适用专业:软件工程专业 授课单位:软件学院

一、C语言课程设计目的及要求

目的:

根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。

要求:

1. 熟悉Turbo C 的编程环境、主要菜单功能。

2. 通过上机验证运算符、表达式、运算规则、函数使用。3. 熟练使用C语言的典型语句编写简单程序。4. 调试典型例题或习题。5. 提高上机编程能力

二、实验类型

设计类型

三、实验学时

40学时

四、实验设备

微型计算机、WINDOWS98以上版本的操作系统、Turbo C2.0 软件一套

五、C语言课程参考教材:

1.李瑞 C语言程序基础(第二版)清华大学出版社 2.梁旭 C语言课程设计.电子工业出版社

课程设计(报告)任务书

任务及要求:

1.设计(研究)内容和要求

研究内容:C语言课程设计题目相关内容 任务和要求:

(1).学习C语言基础知识,掌握C语言编程和程序调试的基本技能。(2).对指导教师下达的题目进行系统分析。(3).根据分析结果完成系统设计。

(4).编程:在计算机上实现题目的代码实现。(5).完成对该系统的测试和调试。(6).提交课程设计报告。(7).指标: 要求完成课程设计报告3千字以上(约二、三十页).完成若干综合性程序设计题目,每个综合设计题目的语句行数的和在300行语句以上.2.原始依据

了解C语言的基础知识,有一定的语言编程基础,能够熟练运用C语言进行程序设计。通过用C语言完成的题目,提高用C语言解决实际问题的能力。3.参考文献

[1] 黄明等.C语言程序设计辅导教材.大连理工大学出版社,2006 [2] 马靖善等.C语言程序设计.清华大学出版社,2005 [3] 谭浩强.C语言程序设计(第二版).北京:高等教育出版社,2002

目录

C语言课程设计报告................................................................................错误!未定义书签。

1. 输出杨辉三角.............................................................................................................1 1.1 系统分析..............................................................................................................1 1.2 设计说明..............................................................................................................1 1.3 程序运行截图......................................................................................................2 1.4 源程序代码..........................................................................................................2 2 汉诺塔求解方法.............................................................................................................3 2.1 系统分析..............................................................................................................3 2.2 设计说明..............................................................................................................3 2.3 程序运行截图......................................................................................................4 2.4 源程序代码..........................................................................................................4 3 输出200以内的素数.....................................................................................................5 3.1功能说明...............................................................................................................5 3.2 设计说明..............................................................................................................5 3.3 程序运行截图......................................................................................................5 3.4 源程序代码..........................................................................................................6 4 进制转换计算器.............................................................................................................6 4.1功能说明...............................................................................................................6 4.2 设计说明..............................................................................................................6 4.3程序运行截图.......................................................................................................7 4.4 源程序代码..........................................................................................................7 5 一元稀疏多项式.............................................................................................................8 5.1 功能说明..............................................................................................................8 5.2 设计说明..............................................................................................................8 5.3 程序运行截图....................................................................................................10 5.4 源程序代码........................................................................................................11

1. 输出杨辉三角

1.1 系统分析

以等腰直角三角形输出杨辉三角

1.2 设计说明

1、包含头文件

#include

#include

其中,头文件为使用clrscr()。

2、子函数

函数名:int num(i,j)

函数功能:以递归的方式进行计算,用函数代替二维数组

函数参数:int i;int j;

含义:相当于二维数组的a[i][j] 函数流程

Step1:输出最外行,即三角形两直角边的结果都为 1 ;

Step2:讨论其余情况,相当于数组中的

a[i][j] = a[i-1][j-1] + a[i-1][j]。

3、main()函数

1为保证结果完整输出,先进行清屏; ○2输入要打印的行数,由于一行只能显示80个字符,建议不要超过13行; ○3用循环调用函数int num(int i , int j)○

其中循环为三重循环:i 循环控制行打印

j 循环控制列打印

k 循环控制空格打印

每执行一次i 循环输出一个换行符,直角三角形定点放在第36个字符的位置上。

每个数字占6个字符的格。

1.3 程序运行截图

1.4 源程序代码

#include #include

int num(i,j){

int i,j;

if(I == j ||j == 0)return(1);

else return(num(i-1 , j-1)+num(i-1 , j));}

int main(void){

int n,k,i,j;

clrscr();

puts(“input row n:”);

scanf(“%d”,&n);

for(i = 0;i < n;i++)

{

{

for(k = 0;k < 36-3*i;k++)

putchar(' ');

}

{

for(j = 0;j <= i;j++)

printf(“%6d”,num(i , j));

}

puts(“");

}

getch();

return 0; } 汉诺塔求解方法

2.1 系统分析

汉诺塔求解方法

2.2 设计说明

1、包含头文件:

#include #include

其中,#include 为了应用函数toupper

2、子函数

函数名:void move(int n , char a , char b)

函数功能:打印移动的主子编号

函数参数:int n , char a , char b;

含义:n为移动的序数,a为源柱号,b目的柱号 函数流程

Step1:输出盘子移动情况;

Step2:打印换行。

函数名:void hanoi(int n,char a,char b,char c)

函数功能:以游戏规则求解移动盘子的方法

函数参数:int n,char a,char b,char c;

含义:n移动的序数,a为源柱号,b为目的柱号,c为中间柱号

函数流程

Step1:递归调用函数 hanoi(n-1,a,c,b);

Step2:调用函数move(n-1,a,b);

Step3:继续递归调用函数hanoi(n-1,c,b,a);

3、主函数main()1为了使程序可以重复运行,定义了变量ch,当ch == N 时,退出游戏; ○2使用while()循环使游戏重复运行; ○3输入盘子的数目以调整游戏的难度; ○3调用函数hanoi()○

2.3 程序运行截图

2.4 源程序代码

#include ”stdio.h“ #include ”ctype.h“

//应用函数toupper void move(int n,char a,char b)

//n为移动的序数,a为源柱号,b目的柱号*/ {

printf(”Disc%d move from %c to %c;“,(n+1),a,b);

printf(”n“);}

void hanoi(int n,char a,char b,char c){

//n移动的序数,a为源柱号,b为目的柱号,c为中间柱号

if(n>0)

{

hanoi(n-1,a,c,b);

//递归调用

move(n-1,a,b);

hanoi(n-1,c,b,a);

} } main(){

int n;

char ch ='Y';

printf(”Now let us play the game of hanoitowern“);

while(ch == 'Y')

//通用性设计

{

printf(”n Input the number of disc[2-15]:“);

scanf(”%d“,&n);getchar();

printf(”n The orders of moving %d discs from A to B are:n“,n);

hanoi(n,'A','B','C');

//调用函数

printf(”n Continue(Y/N):“);

ch=getchar();

getchar();

ch=toupper(ch);}

return 0;} 3 输出200以内的素数

3.1功能说明

输出200以内的素数

3.2 设计说明

1、宏定义

#define M 200

//范围,表示输出200以内的素数 #define N((M+1)/2)

//奇数的个数

处理流程:

Step1:第一步筛选掉所有的偶数,将剩余的奇数存放在a[N]中; Step2:第二部筛选掉多有可以被整除的数 Step3:将得到的素数10个一行打印。

3.3 程序运行截图

3.4 源程序代码

#include ”stdio.h“ #define M 200

//范围

#define N((M+1)/2)

//奇数的个数 main(){

int i,j,a[N];

a[0]=2;

for(i=1;i

//初始数组实现第一步筛选

a[i]=2*i+1;

for(i=1;i<(N-1);i++)

//第二步筛选

if(a[i]!=0)

for(j=i+1;j

if((a[j]%a[i]==0))

//倍数时置零筛去

a[j]=0;

printf(”n The primer are[2-%d]:n“,M);

for(i=0,j=0;i

//显示得到素数

{

if(a[i]!=0)

{

printf(”%5d“,a[i]);

if((++j)%10==0)

//十个数换行

printf(”n“);

} }

return 0;} 进制转换计算器

4.1功能说明

进行进制转换。

4.2 设计说明

1、处理流程:

Step1:输入原始数值xa,原始权a,已经希望转换的进制b;Step2:逐位取值,将原始数值转换成10进制 Step3:逐位取值,将原始数值转换成b 进制

4.3程序运行截图

4.4 源程序代码

void main()#include ”stdio.h“ main()

{

int a=0,/*原始进制*/ b=8,/*转换进制,默认为八*/

k=1;

/*位权*/

long xa=0,/*原始数值*/

xb=0,/*转换数值*/

x1=0,x2=0;

/*十进制数值*/

printf(”n Input the number and weight a->b:“);

scanf(”%ld%d%d“,&xa,&a,&b);

x1=xa;

while(x1!=0)

/*转换为十进制数*/

{ x2+=(x1%10)*k;

/*逐位取值*/ x1/=10;k*=a;

}

k=1;

x1=x2;

while(x1!=0)

/*转换为b进制数*/

{ xb+=(x1%b)*k;x1/=b;k*=10;

}

printf(”n %ld(%d)=%ld(%d)=%ld(%d)“,xa,a,x2,10,xb,b);

return;} 一元稀疏多项式

5.1 功能说明

求一元稀疏多项式的运算:

1、求两多项式加法;

2、求两多项式减法;

3、求两多项式乘法;

4、求两多项式导数;

5、求两多项式在x=m处的值。

5.2 设计说明

1、链表结点的定义:

typedef struct polyn {

float coef;

//多项式系数

int expn;

//多项式指数

struct polyn * prior,* next;} polyn, *linkpolyn;

2、子函数,多项式的基本运算。函数名:linkpolyn CREATEPOLYN()函数功能:创建多项式链表,在输入的时候进行升序排列 返回值:return head,即建立的多项式头结点 参数:linkpolyn head,含义:链表头结点 处理流程:

Step1:输入第一个结点,且第一个结点自然有序;

Step2:循环输入其余结点,当输入0 0是表示输入结束;

Step3:输入过程中进行升幂排序,用二分法,找到新结点插入点;

Step4:插入新结点;继续循环,直到输入0 0,循环结束,链表建立成功。Step5:返回建立链表头结点,函数结束。

函数名:linkpolyn DERIVATIONPOLYN(linkpolyn L)函数功能:多项式求导

返回值:return(head),即求导多项式的链表头结点

参数:linkpolyn L,含义:把建立好的链表A和B传递给L 处理流程:

Step1:分别用指针指向L的头结点和求导多项式的头结点head;

Step2:用循环逐个对L链表中的结点求导,一次存放在求导多项式中的新结点中; Step3:循环中考虑,当L链表中的结点仅存放一个常数,则跳过该结点,继续遍历下一结点;

Step4:当循环结束,即L中的各项以被求导,返回求导多项式头结点head。

函数名:linkpolyn INITPOLYN()函数功能:链表初始化

返回值:return(head),即求导多项式生成的链表头结点 参数:无参数 处理流程:

Step1:生成一个新的空间作为新结点;

Step2:将新节点的coef域赋0,expn域赋-1,以区分其他节点; Step3:将头结点的前去指针和后即指针置空,并返回头结点。

函数名:void PRINTLIST(linkpolyn head)函数功能:以类数学表达式的形式打印 返回值:无返回值

参数:linkpolyn head,含义:处理过的链表头结点 处理流程:

Step1:讨论是否链表为空,若为空,则输出0;

Step2:若链表不为空,则输出第一个值,第一个值不用输出符号; Step3:用循环依次输出其余各项,附加符号输出;

函数名:linkpolyn ADDPOLYN(linkpolyn A , linkpolyn B)函数功能:加法运算

返回值:return ptr,即和多项式的头结点

参数:linkpolyn A , linkpolyn B,含义:创建的链表A和B 处理流程:

Step1:分别以两个指针pa和pb遍历链表A和B;

Step2:当A和B两链表都为遍历完毕时,进行加法运算,分配新的空间存放和多项式,并用二分法进行升幂排序; Step3:当A遍历完毕而B未遍历完毕,将B其余各项拷贝到

和多项式链表中;

Step4:当B遍历完毕而A未遍历完毕,将A其余各项拷贝到

和多项式链表中;

函数名:linkpolyn SUBTRACTPOLYN(linkpolyn A , linkpolyn B)函数功能:计算A-B的值

返回值:return ptr,即差多项式的头结点

参数:linkpolyn A , linkpolyn B,含义:创建的链表A和B 处理流程:

Step1:分别以两个指针pa和pb遍历链表A和B;

Step2:当A和B两链表都为遍历完毕时,进行减法运算,分配新的空间存放和多项式,并用二分法进行升幂排序;

Step3:当A遍历完毕而B未遍历完毕,将B其余各项拷贝到

和多项式链表中;

Step4:当B遍历完毕而A未遍历完毕,将A其余各项拷贝到

差多项式链表中; Step5:返回多项式头结点

函数名:float WORK(float x,int e)函数功能:求x的幂

返回值:return t,即计算幂结果

参数:float x,int e,含义:x为输入的x的值,e为x的指数 处理流程:

Step1:分别讨论正指数与负指数的的情况; Step2:若e>0,则累乘e次x; Step3:若e<0,则累除e次x;; Step4:将所求结果返回;

3、主函数main()Step1:依次调用函数进行运算操作; Step2:调用函数创建链表; Step3:调用函数进行运算;

5.3 程序运行截图

5.4 源程序代码

#include ”stdio.h“ #include #include ”math.h“ #define FZ 1e-6

typedef struct polyn { float coef;//多项式系数 int expn;//多项式指数 struct polyn * prior,* next;} polyn, *linkpolyn;

void DESTROYPOLYN(linkpolyn head){ //销毁链表 linkpolyn s,p;p=head;

while(p->next!= NULL){ s = p;

p = p->next;

free(s);} } //DESTROYPOLYN

linkpolyn INITPOLYN(){ //链表初始化

struct polyn * head;head=(linkpolyn)malloc(sizeof(polyn));head->coef=0.0;//假设头结点系数为0 head->expn=-1;//假设头结点指数为-1 head->next=NULL;head->prior=NULL;return head;} //INITPOLYN

void INSERTPOLYN(linkpolyn p,linkpolyn s){ //将结点s插入到p之后

if(NULL!= p->next){

s->next = p->next;

s->next->prior = s;} s->prior = p;p->next = s;

} //INSERPOLYN

linkpolyn CREATEPOLYN(){ //创建多项式链表,在输入的时候进行升序排列 linkpolyn head,s,p,m,r;

int num = 1;//计数器

head = INITPOLYN();//初始化链表 head r = head;//设置为指针

s=(linkpolyn)malloc(sizeof(polyn));

/******************************************/ printf(”请输入第%d项系数和指数:“,num);/**输入第一个结点,并且第一个结点自然有序**/ scanf(”%f%d“,&s->coef,&s->expn);/******************************************/ r->next = s;s->prior = r;r = r->next;//r指向尾结点

r->next = NULL;p = r;//p为s的插入点前一个结点

m = r;//m为拍完结点中间的节点,二分法排序

while(++num)//while # 当将 s->coef 与 s->expn 都赋值为0的时候,认为输入结束

{ s =(linkpolyn)malloc(sizeof(polyn));printf(”请输入第%d项系数和指数:“,num);scanf(”%f%d“,&s->coef,&s->expn);

if((fabs(s->coef)<= FZ)&&(s->expn == 0))//if @

{ free(s);

break;

} //else @ else //else @

{ if(s->expn <= p->expn)//if #

{ while(p->prior!= NULL && p->expn > s->expn)

p = p->prior;//p向前遍历链表,找到插入点

if(s->expn == p->expn)

{

p->coef += s->coef;

free(s);

r=r;

}

else

{

INSERTPOLYN(p,s);//在p后面插入结点s

m = m->prior;

p = m;

}

} // if #

else //else #

{

while(p->next!= NULL && p->next->expn < s->expn)

p = p->next;//p向后遍历链表,找到插入点

if(s->expn == p->expn)

{

p->coef += s->coef;

free(s);

}

else

{

INSERTPOLYN(p,s);

if(s->expn > r->expn)

{ r = r->next;

r->next = NULL;

}

}

} //else #

} //else @ } //while # return head;} //CREATEPOLYN

void PRINTPOLYN(linkpolyn head){ //以类数学表达式的形式打印 linkpolyn p;

p = head->next;if(p == NULL)//链表为空

puts(”0“);else //else @ { //链表不为空,输出第一个结点的值

if(p->expn == 0)printf(”%f“,p->coef);//指数为0时不输出x else

{ if(p->coef==1)printf(”x^%d“,p->expn);/**************************/ else if(p->coef ==-1)printf(”-x^%d“,p->expn);/**第一项前不需要输出符号**/ else printf(”%gx^%d“,p->coef,p->expn);/**************************/

} p = p->next;while(p!= NULL)

{ //依次输出以后各节点 if(p->coef>0)

{ //当系数为正时,讨论输出符号问题

if(p->expn == 0)printf(”+%g“,p->coef);else if(p->coef == 1)printf(”+x^%d“,p->expn);else printf(”+%gx^%d“,p->coef,p->expn);

} else

{ //当系数为负时,讨论输出符号问题

if(p->expn == 0)printf(”%g“,p->coef);else if(p->coef ==-1)printf(”-x^%d“,p->expn);else printf(”%gx^%d“,p->coef,p->expn);

} p = p->next;

} } //else @ } //PRINTPOLYN

linkpolyn ADDPOLYN(linkpolyn A , linkpolyn B){ //加法

linkpolyn qa,qb,q,ptr;float x;qa = A->next;qb = B->next;q = INITPOLYN();//和多项式头结点初始化

ptr = q;//ptr指向和多项式头结点

while((qa!= NULL)&&(qb!= NULL)){ //升幂求和

if(qa->expn == qb->expn)//指数相同的项

{ x = qa->coef + qb->coef;//系数相加

if(x!= 0)//求得系数非0

{ q->next =(linkpolyn)malloc(sizeof(polyn));//

q = q->next;

q->coef = x;

q->expn = qa->expn;

}

生成和多项式的节结点

qa = qa->next;

qb = qb->next;

}

else //指数不同

{

q->next =(linkpolyn)malloc(sizeof(polyn));

q = q->next;

if(qa->expn > qb->expn)//A多项式当前指数大于B

{ q->coef = qb->coef;//B多项式当前的值复制到和多项式中

q->expn = qb->expn;

qb = qb->next;

}

else //B多项式当前指数大于A

{ q->coef = qa->coef;//A多项式当前的值复制到和多项式中

q->expn = qa->expn;

qa = qa->next;

}

} } //A或B中有一个多项式已经处理完毕

while(qa!= NULL)//A未处理完毕,将其余各项复制到和多项式中

{ q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next;

q->coef = qa->coef;

q->expn = qa->expn;

qa = qa->next;} while(qb!= NULL)//B未处理完毕,将其余各项复制到和多项式中

{ q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next;

q->coef = qb->coef;

q->expn = qb->expn;

qb = qb->next;} q->next = NULL;//令和多项式最末的节点指向头结点

return ptr;//返回多项式头指针 } //LINKPOLYN

linkpolyn SUBTRACTPOLYN(linkpolyn A , linkpolyn B){ //减法

linkpolyn qa,qb,q,ptr;float x;qa = A->next;qb = B->next;q = INITPOLYN();//和多项式头结点初始化

ptr = q;//ptr指向和多项式头结点

while((qa!= NULL)&&(qb!= NULL)){ //升幂求差

if(qa->expn == qb->expn)//指数相同的项

{ x = qa->coef-qb->coef;//多项式A的系数减去B的系数

if(x!= 0)//求得系数非0

{ q->next =(linkpolyn)malloc(sizeof(polyn));//生成和多项式的节结点

q = q->next;

q->coef = x;

q->expn = qa->expn;

}

qa = qa->next;

qb = qb->next;

}

else //指数不同

{

q->next =(linkpolyn)malloc(sizeof(polyn));

q=q->next;

if(qa->expn > qb->expn)//A多项式当前指数大于B

{ q->coef =-(qb->coef);//B多项式当前的值复制到和多项式中

q->expn = qb->expn;

qb = qb->next;

}

else //B多项式当前指数大于A

{ q->coef = qa->coef;//A多项式当前的值复制到和多项式中

q->expn = qa->expn;

qa = qa->next;

}

} } //A或B中有一个多项式已经处理完毕

while(qa!= NULL)//A未处理完毕,将其余各项复制到和多项式中

{ q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next;

q->coef = qa->coef;

q->expn = qa->expn;

qa = qa->next;} while(qb!= NULL)//B未处理完毕,将其余各项复制到和多项式中

{ q->next =(linkpolyn)malloc(sizeof(polyn));q = q->next;

q->coef =-(qb->coef);

q->expn = qb->expn;

qb = qb->next;} q->next = NULL;//令和多项式最末的节点指向头结点

return ptr;//返回多项式头指针 } //SUBTRACTPOLYN

linkpolyn MULTIPLYPOLYN(linkpolyn A,linkpolyn B){ //乘法

linkpolyn pa,pb,s,head,m,r,p;pa = A->next;pb = B->next;head = INITPOLYN();r = head;

s=(linkpolyn)malloc(sizeof(polyn));s->coef = pa->coef * pb->coef;//计算第一个结点,并且第一个结点自然有序

s->expn = pa->expn + pb->expn;r->next = s;s->prior = r;r =r->next;r->next = NULL;p=r;//p为插入点前一结点

m=r;//m指向排完结点中间节点

pb=pb->next;// 第一个乘积处理完毕

for(pa= A->next;pa!= NULL;pa=pa->next)//for pa 处理其余乘积

{ //用A的第一个结点分别与B的其余结点相乘

if(pa == A->next)

pb = B->next->next;

else

pb = B->next;

for(;pb!= NULL;pb = pb->next)//for pb

{

s =(linkpolyn)malloc(sizeof(polyn));s->coef = pa->coef * pb->coef;

s->expn = pa->expn + pb->expn;if(s->expn <= p->expn)//if #

{ while(p->prior!=NULL && p->expn > s->expn)p=p->prior;//p向前遍历链表,找到插入点

if(s->expn==p->expn)

{

p->coef+=s->coef;

free(s);

}

else

{

INSERTPOLYN(p,s);//在p后面插入结点s

m=m->prior;

p=m;

}

} // if #

else //else #

{ while(p->next!=NULL && p->next->expn < s->expn)

p=p->next;//p向前遍历链表,找到插入点

if(s->expn==p->expn)

{

p->coef+=s->coef;

free(s);

}

else

{

INSERTPOLYN(p,s);

if(s->expn > r->expn)

{ r=r->next;

r->next=NULL;

}

}

} //else #

} //for pb } //for pa return head;} //MULTIPLYPOLYN

linkpolyn DERIVATIONPOLYN(linkpolyn L){ //多项式求导

linkpolyn head,p,s,r;head = INITPOLYN();//head为求导多项式头结点 r = head;p = L->next;while(p!= NULL){ if(p->expn == 0)

{ p = p->next;continue;} s =(linkpolyn)malloc(sizeof(polyn));s->coef = p->coef * p->expn;s->expn = p->expn-1;s->prior = r;

r->next = s;

r = r->next;

r->next = NULL;

p = p->next;} return(head);} //DERIVATIONPOLYN

float WORK(float x,int e){ //求x的幂 float t = 1;if(e>0){ while(e)

{ t *= x;e--;} } if(e<0){ while(e)

{ t *= 1/x;e++;} }

return(t);} //WORK

float CALCULATEPOLYN(linkpolyn head,float x){ //计算多项式在x处的值 float t = 0;linkpolyn p;p = head->next;while(p){ t = t +((p->coef)*(WORK(x,p->expn)));p = p->next;} return(t);} //CALCULATEPOLYN

int main(void){ linkpolyn A, B,addp,decp,mulp,derp1,derp2;int i;float x;start: system(”cls“);printf(”一元稀疏多项式计算nn“);printf(”1.建立多项式n“);printf(”2.多项式加法n“);printf(”3.多项式减法n“);printf(”4.多项式乘法n“);printf(”5.计算多项式在x处的值n“);printf(”6.对多项式求导n“);printf(”7.清空数据n“);printf(”8.关闭计算器n“);printf(”请输入选项(1~7):“);scanf(”%d“,&i);switch(i){ case(1): system(”cls“);printf(”建立多项式nn“);printf(”建立多项式A,当输入0 0 时表示出入完毕n“);A = CREATEPOLYN();printf(”建立多项式成功n“);printf(”建立多项式B,当输入0 0 时表示出入完毕n“);B = CREATEPOLYN();printf(”建立多项式成功n“);printf(”多项式A:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);

printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(2): system(”cls“);printf(”多项式加法nn“);printf(”多项式A:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n“);addp = ADDPOLYN(A,B);printf(”多项式A+B:“);PRINTPOLYN(addp);printf(”n“);printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(3): system(”cls“);printf(”多项式减法nn“);printf(”多项式B:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n“);decp = SUBTRACTPOLYN(A,B);printf(”多项式A-B:“);PRINTPOLYN(decp);printf(”n“);printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(4): system(”cls“);printf(”多项式乘法nn“);printf(”多项式A:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n“);mulp = MULTIPLYPOLYN(A,B);printf(”多项式AB:“);PRINTPOLYN(mulp);printf(”n“);printf(”nn输入回车返回上一级“);

getchar();getchar();goto start;case(5): system(”cls“);printf(”计算多项式在x处的值n“);printf(”请输入x的值:“);scanf(”%f“,&x);printf(”n多项式A:“);PRINTPOLYN(A);printf(”n值为:%f“,CALCULATEPOLYN(A,x));printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n值为:%f“,CALCULATEPOLYN(B,x));printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(6): system(”cls“);printf(”多项式求导n“);printf(”多项式A:“);PRINTPOLYN(A);printf(”n“);printf(”多项式B:“);PRINTPOLYN(B);printf(”n“);derp1 = DERIVATIONPOLYN(A);printf(”求导后A':“);PRINTPOLYN(derp1);printf(”n“);derp2 = DERIVATIONPOLYN(B);puts(”求导后B':“);PRINTPOLYN(derp2);printf(”nn输入回车返回上一级“);getchar();getchar();goto start;case(7): system(”cls“);DESTROYPOLYN(A);DESTROYPOLYN(B);DESTROYPOLYN(addp);DESTROYPOLYN(decp);DESTROYPOLYN(mulp);DESTROYPOLYN(derp1);DESTROYPOLYN(derp2);printf(”已清空所有数据n“);printf(”nn输入回车返回上一级“);getchar();getchar();

goto start;case(8): printf(”退出");} return(0);}

第四篇:C语言课程设计报告(参考)

C语言课程设计报告

专 业:网络工程 学 号:11102101 姓 名:步乾豪 提交日期:2012-6-21

C语言课程设计报告

【设计目的】 1.教学目的

本课程设计是学生学习完《C语言程序设计》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用C语言进行程序设计的方法,加深对C语言特点和使用C语言进行程序设计开发过程的理解,加强动手能力。其主要目的是:

(1)进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解;

(2)针对C语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。

(3)掌握C语言的编程技巧和上机调试程序的方法。(4)掌握程序设计的常用算法。2.教学要求

(1)要求从所给题目中任选若干个,每个学生必须独立完成课程设计,不能互相抄袭。(2)设计完成后,对所完成的工作进行答辩。(3)要求写出一份详细的课程设计报告。

(4)程序设计题目,须提交相应的程序,并需提供加注释的源程序,能正常运行。……………………………………..【设计内容】

学生信息管理系统 程序说明:

本程序属于非数值计算型算法设计,学生需要设计出学生管理系统所需要的基本功能,并设计简单的界面(无需图形化)。本程序主要考察对自定义函数的熟悉程度,本程序中主要使用到的是数组(链表)的相关操作,包括数组(链表)的输入、输出、查找、插入、删除等操作,需要对数组(链表)有比较深入的掌握。

设计要求:

(1)通过提示菜单选择可以进行的操作。

(2)将学生的信息存入文件中,并命名为StudentInfo.txt。(3)在本系统中可以进行管理系统包含的基本操作,其中包括

a)查看所有学生的信息

b)输入一个学生的学号,从当前学生中进行查找,如果找到则显示该学生的相关信息,如果没有找到则给出提示信息

c)添加一个学生的基本信息,通过输入学号,首先查找是否存在该学号的学生,如果存在则提示重新输入,否则将该学生按照顺序插入到相应位置

d)删除一个学生的基本信息,通过输入学号,首先查找是否存在该学号的学生,如果存在则将该学生删除,否则给出提示信息,提示该学生不存在

(4)学生基本信息包括学号、姓名、性别和专业这些简单信息

C语言课程设计报告

(5)学生信息文件中每一行存放一个学生的信息 ………………………………….【实验环境】 1.硬件环境

开发硬件:Thinkpad E520计算机

因特尔酷睿I5处理器,8GB运存,1GB独立显卡,500G硬盘存储,2.软件环境

开发环境:Windows 7旗舰版操作系统

开发软件:Microsoft Visual 6.0 C++软件

【设计中使用函数说明】

定义并使用的文件: void scanproduct()

【测试结果】

1)创建链表、插入新信息、删除信息、显示信息、修改信息。

2)测试数据

【设计总结】

一.对该设计题目有何更完善的方案

1、对自己完成程序进行自我评价

完成了课程设计的基本要求,同时在此基础上进行了一些创新,使用了多文件,使程序看起来更清晰更有条理。但由于能力有限,以及对C++的认识不深,其中还有不够完善合理的地方。

2、对课题提出更完善的方案

增加按照成绩对链表进行排序的功能,使学生信息能够按照成绩的高低进行显示,能够更清晰地显示学生的学习情况。二.收获及心得体会

1、通过本次课程设计,自己在哪些方面的能力有所提高

加深了对利用C++语言进行程序设计的理解,提高了对函数的运用能力,提高了软件系统分析能力和使用多文件、归纳总结的能力。

2、收获和心得体会

通过自己对单项链表的学习,熟悉了链表的建立、插入、删除等操作方法。通过这次课程设计使我明白了自学的重要性,有了一些自学的学习方法和技巧,并且要积极的与其他同学共同讨论,在讨论中才能找到自己认识的不足,改正自己的错误。【参考文献】 书籍:

1.《C语言程序设计第四版(谭浩强)》 2.《C语言程序设计课程上机指导》 3.《C语言程序设计第三版》

C语言课程设计报告

网站推荐:

http://(TC所有函数功能及使用查询)http://www.xiexiebang.com/(编程爱好者:里面有各种编程资料)

【源程序清单】 系统设计与分析

2.1.1第一模块界面及实现代码 其对应的函数如下: int main(){

int i;wenbenload();do { system(“cls”);printf(“nnnnnn”);printf(“***************************欢迎使用商品订购系统*******************************n”);printf(“ 作者: 网络11102101 步乾豪n”);

printf(“ ┏━━━━━━━━━━━━━━━━━━━┓n”);printf(“ ┃ 1.浏览商品信息 ┃n”);printf(“ ┃ 2.订购商品 ┃n”);printf(“ ┃ 3.订单查询 ┃n”);printf(“ ┃ 4.搜索商品 ┃n”);printf(“ ┃ 5.管理菜单 ┃n”);printf(“ ┃ 0.退出系统 ┃n”);printf(“ ┗━━━━━━━━━━━━━━━━━━━┛n”);printf(“********************************************************************************n”);

printf(“nntt请输入你的操作(0~5): ”);

scanf(“%d”,&i);switch(i){ case 1: system(“cls”);scanproduct();3

C语言课程设计报告

n“);

break;case 2:

system(”cls“);dinggou();break;

case 3: system(”cls“);

lookdinggou();break;searchproduct();break;case 4: case 5: secondmain();break;

case 0: //退出系统的界面

system(”cls“);printf(”nnnnnnnn“);printf(”nnttt欢迎使用本系统nnnnnttt欢迎再次使用

exit(0);//exit用于随时结束程序

}while(1);return 0;

} } 其中的wenbenload()用于从文本中导入商品信息

2.1.2 第二模块的界面及实现代码

如果选择的操作是主界面的1时,而产品文件为建立时会显示下图:

图2.3第二模块界面图

该程序的实现是通过以下代码实现的: void scanproduct(){

int i;system(“cls”);printf(“ttttt商品信息列表n”);for(i = 0;i < inumber;i++)4

C语言课程设计报告

} {

} printf(“nnnnnnttt”);printf(“返回主菜单n”);printf(“ttt”);system(“pause”);return;printf(“名称 : %sn”,a[i].name);printf(“货号 : %dn”,a[i].number);printf(“厂家 : %sn”,a[i].vender);printf(“产地 : %sn”,a[i].filed);printf(“存量 : %dn”,a[i].stock);printf(“单价 : %.2lfnnn”,a[i].unvalent);2.1.3 第三模块的实现及代码 该程序实现代码如下: void dinggou(){ char ch;int i, j, t, c = 1;int n = 1;int m = 0;

do {

switch(n){ case 1: system(“cls”);

printf(“tttt商品信息列表n”);//显示商品的名称、货号信息,以便于订购 printf(“名称t 货号t 库存n”);for(i = 0;i < inumber;i++){

printf(“%st %dt %dnnn”,a[i].name,a[i].number,a[i].stock);

C语言课程设计报告

} printf(“nnn”);printf(“tttt商品订单n”);printf(“nttt请输入你的第%d个订单信息:n”,m + 1);

printf(“nttt货号:”);

fflush(stdin);

scanf(“%d”,&b[ibuy].bgname);

//检测是否含有此商品

j = 1;

for(i = 0;i < inumber;i++)

{

if(a[i].number == b[ibuy].bgname)

{

j = 0;

t = i;

}

}

//若有商品继续购买项目

if(j == 0)

{

printf(“nttt订购量:”);

fflush(stdin);

scanf(“%d”,&b[ibuy].bmany);

if(a[t].stock >= b[ibuy].bmany){

a[t].stock = a[t].stock-b[ibuy].bmany;//买后商品的库存计算

printf(“nttt日期时间:”);

fflush(stdin);

scanf(“%d”,&b[ibuy].btime);

printf(“nttt客户名:”);

fflush(stdin);

gets(b[ibuy].bname);

printf(“nttt客户地址:”);

fflush(stdin);

gets(b[ibuy].baddress);

printf(“nttt客户号:”);

b[ibuy].bnumber = bgnumber;

printf(“%dn”,b[ibuy].bnumber);

bgnumber++;

ibuy++;

m++;6

顾客购C语言课程设计报告

printf(“nnntttt”);

system(“pause”);} else { printf(“nnttt订购数目超出库存n”);

printf(“ttt”);

system(“pause”);

} } //若没有商品的提示及操作

else {

printf(“nnttt查无此货n”);

printf(“ttt”);

system(“pause”);}

case 2: printf(“是否继续输入订购?(Y/N)”);fflush(stdin);scanf(“%c”,&ch);if(ch == 'N' || ch == 'n'){

c = 0;

break;} else if(ch == 'Y' || ch == 'y'){

c = 0;

n = 1;

break;} else if(ch!= 'n' || ch!= 'N' || ch!= 'Y' || ch!= 'y'){

n = 0;

c = 1;

break;} case 0:

C语言课程设计报告

} if(c == 1){ } n = 2;

}while(ch!= 'n' && ch!= 'N');system(“cls”);

return;} 2.1.4 第四模块的实现及代码 该程序实现代码如下: void lookdinggou(){ int i;system(“cls”);printf(“ttttt订单列表n”);for(i = 0;i < ibuy;i++){

printf(“货号 : %dn”,b[i].bgname);printf(“订购量 : %dn”,b[i].bmany);printf(“日期时间 : %dn”,b[i].btime);printf(“客户名 : %sn”,b[i].bname);printf(“客户地址 : %sn”,b[i].baddress);printf(“客户号 : %dnnn”,b[i].bnumber);

} printf(“nnnnnnttt”);printf(“返回主菜单n”);printf(“ttt”);system(“pause”);return;} 该代码中用到了指针,并用到了链表的建立和删除,当然也涉及到了结构体。2.1.5 第五模块的实现及代码 通过以下代码实现: void searchproduct(){

int i;int j;char ch;int n = 1;do

C语言课程设计报告

{

switch(n){ case 1: system(“cls”);

printf(“tttt商品列表n”);//显示商品的名称、货号信息,以便于下部的删除 for(i = 0;i < inumber;i++){

} //商品的搜索

printf(“nnntttt请输入你要搜索商品的ID:”);scanf(“%d”,&j);if(0<=j&&j<=inumber)printf(“名称 : %sn”,a[i].name);printf(“ID : %dn”,i);printf(“库存 : %dnnn”,a[i].stock);

{ printf(“名称 : %sn”,a[j].name);printf(“货号 : %dn”,a[j].number);printf(“厂家 : %sn”,a[j].vender);printf(“产地 : %sn”,a[j].filed);printf(“存量 : %dn”,a[j].stock);printf(“单价 : %.2lfnnn”,a[j].unvalent);}

case 2:

} printf(“是否继续搜索商品?(Y/N)”);fflush(stdin);scanf(“%c”,&ch);if(ch == 'N'|| ch == 'n'){ } if(ch ==' Y'|| ch == 'y'){

} n = 1;break;break;9

C语言课程设计报告

} }while(ch!= 'n' && ch!= 'N');

printf(“nnnnnnttt”);printf(“返回主菜单!n”);printf(“ttt”);system(“pause”);return;2.1.6 第六模块的实现及代码 该代码如下: void secondmain(){

int i;

do {

system(“cls”);printf(“nnnnnnn”);

单printf(“******************************************************************nn”);n“);n”);n“);n”);n“);

printf(” ┏━━━━━━━━━━━━━━━━━━━┓printf(“ ┃ 1.输入全部商品 ┃printf(” ┃ 2.增加商品 ┃printf(“ ┃ 3.删除商品 ┃printf(” ┃ 4.储存商品 ┃printf(“ ┃ 5.储存订单 ┃

C语言课程设计报告

n”);n“);printf(” ┗━━━━━━━━━━━━━━━━━━━┛printf(“ ┃ 0.返回上一级 ┃nnn”);printf(“********************************************************************************nnnnn”);

printf(“nntt请输入你所要选择的功能(0~5): ”);

scanf(“%d”,&i);

switch(i){

case 1:

system(“cls”);jianpanload();break;

case 2:

system(“cls”);addproduct();break;case 3:

system(“cls”);deleteproduct();break;

case 4:

system(“cls”);

C语言课程设计报告

saveproduct();break;case 5:

system(“cls”);savedinggou();break;

} case 0:

system(“cls”);

return;

}while(1);

printf(“tttt”);system(“pause”);system(“cls”);return;}该代码用于商品信息文件的建立生成,存储商品信息和订单。

2.2 软件的数据(结构)设计

先定义全局变量用于控制商品数量和订单数量如下: #include #include #include #include #include

int bgnumber = 023;//客户号

int inumber = 0;//商品量的统计 int ibuy = 0;//订单的统计

C语言课程设计报告

void secondmain();

//管理维护子菜单 void jianpanload();//输入商品 void scanproduct();//浏览商品 void searchproduct();//搜索商品 void dinggou();//订购商品 void lookdinggou();//查询订单 void addproduct();//增加商品 void deleteproduct();//删除商品 void saveproduct();//保存商品 void savedinggou();//保存订单 void wenbenload();//从文本导入商品

struct product {

char name[30];int number;char vender[30];char filed[100];int stock;

double unvalent;

//商品名 //货号 //厂家 //产地 //存量 //单价

};struct product a[100];

struct dinggou {

int bgname;//货号 int bmany;

int btime;

char bname[100];

//订购量 //日期时间 //客户名

char baddress[100];//客户地址 int bnumber;//客户号

};struct dinggou b[100];

第五篇:C语言课程设计报告

目录

1前言..............................................................1 2正文..............................................................1 2.1设计目的........................................................1 2.2设计意义........................................................1 2.3设计方案与内容..................................................2 2.3.1设计内容......................................................2 2.3.2程序调试......................................................4 3致谢..............................................................7 4参考文献..........................................................7 5附录..............................................................8

塔里木大学信息工程学院课程设计

前言

17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具. 1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了

塔里木大学信息工程学院课程设计

其自身的优势,仍然是一种重要的语言,而且它还是通往c++的必由之路。它是融合了控制特性的的现代语言,其设计使得用户可以自然的采用自顶向下的规划、结构化的编程,以及模块化的设计。这种做法使得编写出的程序更可靠、更易懂。它是一种高级语言,在设计上它充分利用了当前计算机在能力上的优点。C程序往往很紧凑且运行速度快,其还表现出通常只有汇编语言才具有的精细控制能力,可以用于电脑cpu的编程控制语言,如果愿意,可以细调程序以获得最大速度或最大内存使用率。其可移植性的特点,可以使其在不经过太大的修改,便可在其它系统上运行,同时,它也是很多大型系统的编程语言,(比如说UNIX的操作系统就是建立在c之上的)。

2.3设计方案与内容

我此次设计的是一个计算器,主要是利用我们所学的知识,做到进一步掌握c语言的奥秘,使这种功能强大的高级语言走近我们的生活。本计算系统主要是作加减乘除运算。

该计算系统程序包括:main()函数、加函数、减函数、乘函数、除函数和显示函数。2.3.1设计内容

1、加运算:

int jia(int a,int b){int c;c=a+b;printf(“c=%d n”,c);}

2、减运算:

int jian(int a,int b){int c;c=a-b;printf(“ c=%d n”,c);}

3、乘运算:

int cheng(int a,int b){int c;c=a*b;printf(“ c=%d n”,c);}

4、除运算:

int chu(int a,int b){int c;c=a/b;printf(“ c=%d n”,c);}

5、显示函数程序:

塔里木大学信息工程学院课程设计

void xian(){ printf(“n”);printf(“n”);printf(“please choose lower level operation sign n”);/*选择提示*/ printf(“***************************n”);/*分隔号*/ printf(“0:apply overn”);/*输入0选项则提示结束,输出0*/ printf(“1:apply is additionn”);/*选择加号*/ printf(“2:apply is subtractionn”);/*选择减号*/ printf(“3: apply is multiplicationn”);/*选择乘号*/ printf(“4:apply is divisionn”);/*选择除号*/ } 显示界面程序图如图2-1所示

图2-1显示界面

程序分析:

1)printf(“please choose lower level operation sign n”);/*选择提示*/这句可以根据需要写成时间,一句鼓励自己的话,或者别的什么,都将不影响改程序的正常运行,只要在规定的“n”里,用户可以根据自己的需要把它用一句英文表达出来。

2)printf(“***************************n”);/*分隔号*/此句无关紧要,可以去掉也可以保留,看个人心情,不过个人建议,还是保留的比较好,它能保持计算器界面的美观特点,还能作为分隔运算程序的作用,让使用者能最快的对运算区进行划区。3)printf(“0:apply overn”);/*输入0选项则提示结束,输出0*/此句在运算界面里出现,当用户使用时,不小心输入了一个字符,非1~4以内,则会提示错误,按‘enter’结束该片段,然后根据提示,选择自己所希望使用的运算符号进行运算。

4)printf(“1:apply is additionn”);/*选择加号*/此句是加法运算提示,当输入‘1’后按‘enter’会得到可以使用加法的提示,然后就可以使用加法运算了,使用空格将数字与要加的数字分开,按‘enter’将得到你要的答案。5)printf(“2:apply is subtractionn”);/*选择减号*/这是加法运算提示。它的使用方法和

塔里木大学信息工程学院课程设计

相同。

2.3.2程序调试

1、加法运算

加法运算运行结果如图2-2所示。

图2-2加法运算运行结果

2、减法运算

减法运算结果如图2-3所示。

图2-3减法运算

3、乘法运算

乘法运算如图2-4所示。

塔里木大学信息工程学院课程设计

图2-4乘法运算

4、除法运算

除法运算如图2-5所示

图2-5除法运算

6、主函数程序: int main(){ int a, b;

塔里木大学信息工程学院课程设计

for(;;){ xian();switch(getchar()){ case '0':printf(“ tui chu: ”);getchar();return 0;case '1': printf(“ apply is '+': n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();jia(a,b);break;case '2':printf(“ apply is '-':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();jian(a,b);break;case '3':printf(“apply is '*':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();cheng(a,b);break;case '4':printf(“ apply is '/':n ”);scanf(“%d”,&a);getchar();scanf(“%d”,&b);getchar();chu(a,b);break;default:printf(“wrong!please push down'enter' go on with ”);/*提示错误*/ getchar();break;

塔里木大学信息工程学院课程设计

} } return 0;/*一轮运算结束后返回符号选择功能选项*/ } 该主函数程序中使用了xian()函数、switch(getchar())语句、getchar()、for、break、return。xian()函数的功能是在程序运行中,具有显示界面的功能。switch(getchar())语句具有多分支选择功能。getchar()是库函数。for循环语句。是break语句是实现跳出循环的功能的语句。Return语句是返回语句,是程序最后一个语句,在int main(void)中int表示main()函数的返回值应该是一个整数。该程序具备的选择功能:

(1)选择提示:该计算器编辑界面有5个提示,它们分别是‘0’、‘1’,‘2’、‘3’、‘4’,当使用者在该界面上输入它们其中一个数字,会得到相对应的提示,其中1~4分别表示加、减、乘、除运算。‘0’表示结束工作框结束。

(2)使用方法:进入选择界面后,要选择加法运算,请输入‘1’,然后按下‘enter’键。会得到提示;然后输入两个数字用空格分开,按回车‘enter’结束,得出答案。结束此轮运算后,该程序又进入到选择提示界面,用户再根据需要选择相应的运算符号。以后的运算方法和前面一样。

致谢

在本次课程设计中,首先我要感谢张老师。是他至始至终的教导让我能够在编程方面迅速的入门。在我们对程序语言的学习过程中,是他不断的给我们讲解语句内容并且纠正我们存在的错误。不断的给我们提供帮助并且给我们分析遇到的问题。老师认真负责的工作态度,严谨治学的精神和深厚的理论水平都使我受益匪浅。他们无论在理论上还是实践中都给了我很大的帮助,使我整体水平得到了提高,对于我以后的学习和工作都有一定的帮助,感谢张兵老师的耐心辅导!

参考文献

[1]孙雄勇.Visual C++ 6.0 实用教程.北京:中国铁道出版社,2004.[2]新电脑课堂编委会.Visual C++ 编程篇.北京:电子工业出版社,2004.[3]陈清华.Visual C++课程设计案例精选与编程指导.北京:北京大学出版社,2005.[4]李东玉.Visual C++.NET实用编程100例.北京:中国铁道出版社,2003.[6]张志清.管理信息系统.南京:东南大学出版社,2003.

塔里木大学信息工程学院课程设计

附录

#include #include int jia(int a,int b){int c;c=a+b;printf(“c=%d n”,c);} int jian(int a,int b){int c;c=a-b;printf(“ c=%d n”,c);} int cheng(int a,int b){int c;c=a*b;printf(“ c=%d n”,c);}

int chu(int a,int b){int c;c=a/b;printf(“ c=%d n”,c);}

void xian(){ printf(“n”);printf(“n”);printf(“please choose lower level operation sign n”);/*选择提示*/ printf(“***************************n”);/*分隔号*/ printf(“0:apply overn”);/*输入0选项则提示结束,输出0*/ printf(“1:apply is additionn”);/*选择加号*/ printf(“2:apply is subtractionn”);/*选择减号*/ printf(“3: apply is multiplicationn”);/*选择乘号*/ printf(“4:apply is divisionn”);/*选择除号*/ }

int main(){

塔里木大学信息工程学院课程设计

int a, b;

for(;;){ xian();

switch(getchar())

{

case '0':printf(“ tui chu: ”);

getchar();

return 0;

case '1': printf(“ apply is '+': n ”);

scanf(“%d”,&a);

getchar();

scanf(“%d”,&b);

getchar();

jia(a,b);

break;

case '2':printf(“ apply is '-':n ”);

scanf(“%d”,&a);

getchar();

scanf(“%d”,&b);

getchar();

jian(a,b);

break;

case '3':printf(“apply is '*':n ”);

scanf(“%d”,&a);

getchar();

scanf(“%d”,&b);

getchar();

cheng(a,b);

break;

case '4':printf(“ apply is '/':n ”);

scanf(“%d”,&a);

getchar();

scanf(“%d”,&b);

getchar();

chu(a,b);

break;

塔里木大学信息工程学院课程设计

default:printf(“wrong!please push down'enter' go on with ”);/*提示错误*/

getchar();

break;

}

}

return 0;/*一轮运算结束后返回符号选择功能选项*/ }

下载C语言课程设计实践报告5篇word格式文档
下载C语言课程设计实践报告5篇.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言课程设计报告

    C语言课程设计报告 1. 实验题目:职员信息管理系统 2. 数据结构:整型int,字符型char,长整型long,结构体及结构体数组 3. 源代码 : #include"stdio.h" #include"string.h" #defin......

    C语言课程设计报告

    C语言课程设计报告--学生成绩管理系 C语言课程设计报告: 学生成绩管理系统 系统需求 一、 当前学生信息:通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和......

    c 课程设计实践报告

    c++课程设计实践报告 班级:83121 姓名:张弛 学号:XX1000491 题目一、 题目描述: 已知银行整存整取存款不同期限的月息利率(采用复利 方式,即利滚利)分别为 % 期限一年 % 期限二年......

    C语言课程设计停车场报告

    C语言上机实习报告 指导老师:吴杰 学生姓名:刘超 班级序号:02305231 学生证号:20051004279 一.题目要求 设有一个可以停放N辆汽车的狭长停车场,它只有1个大门可以供车辆进出。车......

    课程设计报告 C语言[推荐阅读]

    课 程 报 告 课 程 名 称: 专 业 班 级 : 学 生 姓 名 : 学 号 : 程序设计实践 ****** 20104683**** 任 课 教 师 : 学 2010期 :2010-2011 学年第二学期 课程报告任务书 课程报告......

    C语言课程设计报告总结

    课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当......

    五子棋JAVA语言课程设计报告

    《Java语言程序设计》 课程设计报告 学 院: 信息科学技术学院 班 级: 软件技术2班 姓 名: 王更新 学 号: 1108900505 指导教师: 郭韶升 课设时间: 2014-03-17 至2014-03-26 二O......

    C语言课程设计实习报告

    C语言课程设计实习报告 题目一、两个大数相乘问题 题目描述:本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。 设计思路:用数组存储一个大数,数组的每个单元存......