C语言课程设计报告 01_c语言课程设计报告书

2020-02-27 其他范文 下载本文

C语言课程设计报告 01由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言课程设计报告书”。

第1章 分支与循环

1.1 算法与范例

1.递推算法

递推算法是循环程序设计的精华之一,在很多情况下使用递推算法能使程序简练,同时还能节省计算时间。

递推算法的基本思想:利用前一项的值来推算出当前项的值,即利用前一项的值乘以(或加上)某一系数得到当前项的值。使用递推算法的前提是必须有一项的值(一般是最前项)是已知的。使用递推算法的关键是如何根据多项式推出递推公式。【示范】求)的程序 n!(即1!+2!+3!+„+20!n120【编程提示】若多项式第1项为t1,第2项为t2,„„, 第20项为t20, 则

第1项t1=1!第2项t2=2!=1!*2= t1*2 第3项t3=3!=2!*3=t2*3,„„

第20项t20=20!=19!*20=t19*20 可以推出多项式后一项等于前一项乘以某一系数这一规律,故求某一项的递推公式为:ti=ti-1*n(n=1 to 20)。因此知道了多项式第1项1!,就可以利用递推公式求出后面的每一项,每求一项累加求和。【参考程序】

#include int main()

{double sum=0,t=1;int n;for(n=1;n

2.测试法

在实际应用中,有许多问题是无法用解释方法实现的,这时采用测试法来求解是一种很有效的方法。

测试法的基本思想是假设各种可能的解,让计算机进行测试,如果测试结果满足条件,则假设的解就是所要求的解。如果所要求的解是多值的,则假设的解也应是多值的,在程序设计中,实现多值解的假设往往使用多重循环进行组合。

测试法求解的程序设计有两个要点:

⑴通过循环列出所有可能的解。

⑵对所有列出的可能的解进行条件测试。【示范】百钱买百鸡问题

已知公鸡每只5元,母鸡每只3元,小鸡1元买3只。要求用100元钱正好买100只鸡,问公鸡、母鸡、小鸡各多少只?

【编程提示】设公鸡、母鸡、小鸡分别为a、b、c只,依据题目能列出下列两个方程:

a+b+c=100 5a+3b+c/3=100 三个未知数,只有两个方程,故是个多解问题。可采用多重循环组合出各种可能的a、b、c的值。通过循环列出公鸡、母鸡和小鸡可能的只数,再对可能的只数进行条件测试。

100元钱,全部买公鸡最多只能买20只,即公鸡的只数a的范围是:a=0 to 20 100元钱,全部买母鸡最多只能买33只,即母鸡的只数b的范围是:b=0 to 33 100元钱,全部买小鸡最多只能买100只,即小鸡的只数c的范围是:c=0 to 100 【参考程序】:

#include int main(){ int a,b,c;printf(“公鸡 母鸡 小鸡n”);for(a=0;a

1.若一个口袋中放有12个球,其中有3个红色球,3个白色球和6个黑色球,从中任取8个球,问共有多少不同的颜色搭配。

2.输入年月日,求它是该年的第几天。注:闰年的2月有29天,平年的2月有28天。3.简单计算器。请编写一个程序计算表达式:data1 op data2的值。其中op为运算符+、-、*、/。

4.猜数游戏。由计算机“想”一个数请人猜,如果猜对了,则游戏结束,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到猜对为止。计算机记录人猜的次数,以此可以反映出猜数者“猜”的水平。1.3 实现过程

1.3.1设计任务1的实现过程

【算法分析】(用文字或流程图进行描述)

设任取得红球个数为i,白球个数为j,黑球个数为k,根据题意,红、白、黑球个数的取值范围分别问:0=

【源程序代码】 #include int main(){ int i,j,k,s=0;printf(“红球 白球 黑球”); for(i=0;i

【运行结果示图】

1.3.2 设计任务2的实现过程

【算法分析】(用文字或流程图进行描述)

输入年月日,求它是该年的第几天,数据类型为整形,年月日由用户输入则。需要知道该日期是该年的第几天,需要对月份进行判断,这里就可以用switch语句。需要注意闰年的2月有29天,平年的2月有28天,因此,需要对年份判断这里我选择if语句。【源程序代码】 #include int main(){ int month,year,day,sum,i=0;printf(“输入 the year, the month and the day:n”);scanf(“%d %d %d”,&year,&month,&day);switch(month){ case 12: i=i+30;case 11: i=i+31;case 10: i=i+30;case 9: i=i+31;case 8: i=i+31;case 7: i=i+30;case 6: i=i+31;case 5: i=i+30;case 4: i=i+31;case 3: i=i+28;case 2: i=i+31;case 1:;} sum=i+day;if(((year%4==0&&year%100!=0)||(year%400==0))&&(month>2))sum=sum+1;printf(“the day is the %d day in %d yearn”,sum,year);return 0;} 【编译示图】(示图中要有0 error,0 warning的提示)

【运行结果示图】

1.3.3 设计任务3的实现过程

【算法分析】(用文字或流程图进行描述)

计算data1 op data2。首先data1、data2的数据类型是double,因为在计算除法时结果必然出现小数。op是+、-、*、/ 这些字符类型。每次变换的是op.所以用switch来进行选择,并得出结果。再输入op时,不是这些+、-、*、/,选择再次输入。【源程序代码】 #include “stdio.h” int main(){ double x,y,z;char op;scanf(“%lf %c %lf”,&x,&op,&y);switch(op){ case '+': z=x+y;break;case '-': z=x-y;break;case '*': z=x*y;break;case '/': z=x/y;break;default: printf(“输入错误!”);} printf(“The result is: %.2fn”,z);return 0;} 【编译示图】(示图中要有0 error,0 warning的提示)

【运行结果示图】

第2章 数组与函数

2.1 启示与范例

【示范1】输入n个学生的成绩,并求出其中高于平均分的人数。【编程提示】用程序来实现本题的要求,首先有两个值得思考的问题:一是数据结构的选择;二是数组的长度。

① 数据结构的选择:n个学生的成绩是否有必要开辟数组来存放还是定义变量来存放?从任务要求分析知,两次用学生成绩,一次是求平均分;另一次是将每个学生的成绩与平均分比较,高于平均分要输出。因此有必要将其定义数组。

② 数组的长度定义:学生个数n的具体数值一般表示在编写程序时是未知的,而在程序执行时由使用者随意确定。即n是一个变量,其值需要用输入来确定。这样一来,存放n个分数的数组a,其长度的定义就必须注意,既不能定义为int a[n];因为数组长度要求是常量,而n是一个变量,又不能将n定义成符号常量,因为n的具体值是未知的。对于这种情况的处理方法一般是:将数组的长度定义较大,让使用者在此范围内随意使用,当然这个长度的定义有其原则,那就是既不让使用者感到长度不够,又不至于定义过大而浪费内存,这种情况视应用情况而定。【参考程序】

#include int main(){ int i,a[1000],num=0,n;float aver=0;printf(“输入学生个数nn”);scanf(“%d”,&n);printf(“输入学生的成绩存放到数组a中n”);for(i=0;i

scanf(“%d”,&a[i]);

aver=aver+a[i];} aver=aver/n;for(i=0;i

if(a[i]>=aver)

num++;printf(“高于平均分的人数是:%dn”,num);return 0;} 【示范2】输入任意个学生的学号及成绩,然后按顺序输出高分的前十名。【编程提示】依据设计任务的要求需要考虑几个问题:初始数据的数据结构选择;采用的算法如何实现及相关的数据结构;任意个数据的实现问题。

① 初始数据的数据结构选择问题:所谓任意个学生,应该是个数不限,因此,对于存放初始数据的数据结构不宜选择为数组。并且,从算法实现的角度考虑,每个学生的数据输入后只需使用一次,没有再保留的必要,因此可选择简单变量作数据结构来存放一个学生的数据,而且每个学生的初始数据都用同一个数据结构存放,即对一个学生的数据使用完后就将该数据结构让给下一个学生的数据使用。

② 算法的实现及相关的数据结构:本题核心的算法是排序,由设计任务可知只要求前十名的排序结果,因此算法上不需考虑对所有学生数据进行排序,只考虑对前十名排序即可。因此,应选择合适的数据结构来存放前十名排序结果的数据,显然,选择数组是最合适的。关于算法的实现可采用插入排序法最为合适。即存放排序结果的数组始终是存放当前已插入数据的前十名的排序结果,而后每输入一个学生的数据就进行一次插入排序更新这一排序结果。

③ 任意个的实现:对于本题的程序来说,总体结构还是一个循环结构,每次循环的任务是输入一个学生的数据并进行插入排序。问题是何时结束循环?循环结束的条件是什么?对用户输入的有用数据,循环继续;对用户输入的无用数据即输入数据为负数时,循环结束。

④ 为了使程序更加清晰。主程序只提供输入学生的学号、成绩,并且输出前十名的学号及成绩;子函数实现插入排序的过程。【参考程序】

#include void insertsort(int num[],int a[],int n,int number,int score){ int i,j;for(i=0;i

if(score>a[i])

break;

if(i>=n)

return;

for(j=n-2;j>=i;j--)

{

num[j]=num[j-1];

a[j]=a[j-1];

}

num[i]=number;

a[i]=score;} int main(){ int i,num[10],a[10],number,score;for(i=0;i

a[i]=0;

num[i]=0;} while(1){

printf(“输入学生的学号及学生成绩:n”);

scanf(“%d%d”,&number,&score);

if(number

break;

insertsort(num,a,10,number,score);} for(i=0;i

printf(“前十名学生学号%d 成绩是%dn”,num[i],a[i]);return 0;} 2.2 设计任务

1.有一个一维数组score[],内存放10个学生的成绩,要求编写三个函数分别求学生的平均成绩,求10个学生的最高分,求10个学生的最低分。

2.编写一个函数,将输入的一串字符中的小写字母转变成大写字母,并输出所有的大写字母。

3.输入10个学生姓名,按字典顺序将排在最前面的学生姓名输出。即在字符数组中求最小字符串。

4.用函数法求N*N的对角线的和。其中的N是用户通过键盘输入的任意值。

2.3实现过程

2.3.2设计任务2实现过程

【算法分析】(用文字或流程图进行描述)

依据设计任务的要求需要考虑几个问题:初始数据的数据结构选择;采用的算法如何实现及相关的数据结构;任意个数据的实现问题。由于是将输入的一串字符中的小写字母转变成大写字母,并输出所有的大写字母。所以,在输入时选择用数组进行输入。在算法是。有大写变为小写ASCII值相差32或者写‘a’-‘A’,所以数组中的一串字符需要逐个扫描并进行大写改为小写的函数调用。【源程序代码】

#include #include char *fun(char tt[]){int i;for(i=0;tt[i];i++){if((tt[i]>='A')&&(tt[i]

【运行结果示图】

2.3.4 设计任务4实现过程

【算法分析】(用文字或流程图进行描述)

用函数法求N*N的对角线的和。其中的N是用户通过键盘输入的任意值。据题意要得出N*N的对角线的和。需要定义一个二位数组,且列与列均为N,由用户输入。对角线上的元素特点是行标与列表相等,需要用for循环对元素逐个扫描,将这些元素进行累加即可。【源程序代码】 #include #define N 4 /*改变N的值可以改变数组的大小*/ int main(){ int a[N][N];int i,j,sum=0;printf(“请输入一个4*4矩阵:”);for(i=0;i

【运行结果示图】

第3章 指针

3.1 启示与范例

指针变量作为函数参数最常见有以下两种用法:① 用于接受实参变量的地址,从而可以在函数中通过访问指针变量所指向的内存单元来达到间接地访问实参变量。这样,函数中既可引用实参变量原来的值,也可将结果存入实参变量所在的单元,达到双向传递的效果。② 用于接受实参数组的首地址,从而可以在函数中通过访问指针变量所指向的内存单元来达到间接访问实参数组的各元素,这样,函数中既可以引用实参数组各元素的值,也可以将结果存入实参数组的各元素中。

【示范】通过改变指针的指向来引用不同元素法:编写输入100名学生的成绩,输出其中高于平均分的人数。【参考程序】

#include int over_aver_number(int *a,int n){ int i,number=0;float aver=0;for(i=0;i

aver+=*a++;/*a++的作用是每执行一次循环就让指针变量a指向下一个元素,使以后的访问就直接访问a所指向的内存单元,不需再作地址计算。*/ aver/=n;a-=n;// a-=n的作用是使a恢复其初始指向。

for(i=0;i

if(*a++>=aver)

number++;return number;} int main(){ int i,number,a[100];//a是数组名,是指针常量。

printf(“n Enter a:”);for(i=0;i

scanf(“%d”,&a[i]);number=over_aver_number(a,100);printf(“n输出高于平均分的人数number=%d”,number);return 0;} 3.2 设计任务

1.已知一个整型数组a[5],其各元素值为4,6,8,10,12。使用指针法求该数组元素之积。2.100个围成一圈,从第1个人开始,每数到3的人出圈。问最后一个出圈的人是哪一个。3.编写两个排序函数,要求一个函数完成从小到大排序,一个函数完成从大到小排序,并编写主函数完成:

① 输入n个数;

② 组织调用排序函数对n个数按从大到小排序并输出; ③ 组织调用排序函数对n个数按从小到大排序并输出;

3.3实现过程

3.3.1 设计任务1实现过程

【算法分析】(用文字或流程图进行描述)

使用指针法求该数组元素之积,为题目要求。用指针对每一个元素扫描,并进行相乘。用指针间接引用数据。

【源程序代码】 #include int main(){int i=0;int a[5] = {4,6,8,10,12};int s = 1;int *p = a;for(i=0;i

【运行结果示图】

3.3.2设计任务2实现过程

【算法分析】(用文字或流程图进行描述)

100个围成一圈,从第1个人开始,每数到3的人出圈。问最后一个出圈的人是哪一个。则需要定义一个一维数组,并用指针对每一个元素进行扫描,第一轮完成后,在进行第二轮时人数减少接着重复类似第一轮的扫描。记下在第一次时元素的位置。【源程序代码】 #include int main(){int a[100],i,n=100,k,*p=a;/* n为未出圈人数 */ for(i=0;i1){if(*(p+i)!=0)k++;/* 未出圈的人报数 */ if(k==3)

{*(p+i)=0;n--;k=0;} /* 退出人置为0 */ i++;if(i==100)i=0;/* 到最后一个人再恢复为第1个人 */ } while(*p==0)p++;printf(“The last person is %d.n”,*p);return 0;} 【编译示图】(示图中要有0 error,0 warning的提示)

【运行结果示图】

第4章 综合设计题

4.1 设计任务

运用C语言开发一个“比赛评分系统”。评委打分原则:满分10分,评委打分后,去掉一个最高分和一个最低分,最后的平均分为参赛选手的最后得分(精确到小数点后两位)。要求该系统实现以下功能:

① 假设参赛人数为20人,评委为10人。(有兴趣的同学可拓展为参赛人数为n人,评委为m人)。并对参赛选手和评委分别编号,序号从1开始,顺序编号。

② 选手按编号顺序依次参加比赛,统计最后得分。

③ 比赛结束,按从高分到低分每行5人依次打印选手的得分情况。④ 公布选手获奖。取一等奖1名,二等奖2名,三等奖3名。

4.2 设计过程

【算法分析】(用文字或流程图进行描述)

1.本程序共用了3个函数,分别是函数sort、函数average和函数arran,下面分别对他们进行阐述:

①函数sort

主要用于对每位参赛选手的成绩进行排序,从大到小排列,此函数用了两个for语句for(i=0;i

{k=i;

for(j=i+1;j

if(array[j]

k=j;

t=array[k];array[k]=array[i];array[i]=t;}} 第一个for语句主要用于外层循环即从第一位选手到第20位选手的循环,第二个for语句主要适用于由10位评委产生的循环;一个if语句和一个换值语句。if语句用于数据的比较,如果满足要求,换值语句用于把它们的值交换一下,依次进行下去,从而对每位选手的成绩进行排序。②函数average

用了一个数组array、调用了sort函数、用了一个for循环语句,调用了sort函数,每位选手产生的六组数据,成绩放在数组中,用for语句循环从而实现对每位选手的分数进行处理,处理时从第二个加到第五个数,然后除以四,从而实现了去掉一个最高分,去掉一个最低分,求剩余评委的平均分,即是每位选手的最终得分,用此函数实现了对分数的处理。

③函数arran

主要是用于对每位参赛选手的分数进行排序,其姓名也随之调整。此函数用了一维数组num和二维数组name、用了两个for语句、一个if语句和复制函数strcpy,两个for语句形成了内外两层循环,if语句用于选手成绩的比较,从大到小进行排序,复制函数strcpy把分数和选手的姓名放在一起,当分数在排序的过程中调整的时候,其姓名也随之进行调整。

2.程序引用了一维数组array、b、num和二维数组name、a。

3.程序使用了三个符号常量 #define N 20 #define M 10 #define P 1,在下面的程序中多次使用这些常数,在调整选手数、评委数和评委打分项数时,需要改动很多处的数据,不仅麻烦而且很容易出错,使用了符号常量后只需改动一项即可,方便、简单。

4.程序还引用了变量n、i、j、k。

5.程序多次使用for循环语句,如 for(i=0;i

用于循环提示输入第k+1位选手的成绩。

【源程序代码】 #include #include #define N 20 #define M 10 #define P 1

int main(){ int sort(float array[],int n);float average(float array[M]);int arran(float num[],char name[N][8]);float b[M];int i,j,k;float a[M][P],num[N];char name[N][8];

for(k=0;k

printf(“请输入第%d位参赛选手的成绩:”,k+1);

for(i=0;i

{ for(j=0;j

{scanf(“%f”,&a[i][j]);

b[i]=b[i]+a[i][j];}

}

sort(b,M);

num[k]=average(b);} printf(“n请输入参赛选手的姓名:n ”);for(k=0;k

scanf(“%s”,name[k]);arran(num,name);printf(“nnn参赛选手成绩如下:nn”);for(i=0;i

printf(“nn 三等奖:n ”);for(k=3;k

printf(“%10s %.2f分 ”,name[k],num[k]);printf(“n”);return 0;}

int sort(float array[],int n){

int i,j,k;float t;for(i=0;i

for(j=i+1;j

if(array[j]

k=j;

t=array[k];array[k]=array[i];array[i]=t;} }

int arran(float num[],char name[N][8]){ int i,j,max;float temp1;char temp2[8];for(i=0;i

for(j=i;j

{ if(num[max]

max=j;

}

temp1=num[i];

strcpy(temp2,name[i]);

num[i]=num[max];

strcpy(name[i],name[max]);

num[max]=temp1;

strcpy(name[max],temp2);} }

float average(float array[M])

{ int sort(float array[],int n);int i;float aver,sum;sort(array,M);sum=array[1];

for(i=2;i

sum=sum+array[i];aver=sum/(M-2);return(aver);} 【编译示图】(示图中要有0 error,0 warning的提示)

【运行结果示图】

课程设计小结

几周的C课程设计已经结束了。回想学习C语言的过程中,既有快乐又有烦恼。

从领到书的那一刻,我就很有兴趣,《C 语言程序设计》到底事学什么的,有什么用。刚开始上课时,还在迷茫这门课程是用来做什么的。不过,这些感受都是在对这门课程不了解的情况下产生的。后来慢慢的接触多了,听老师讲的多了,了解多了,渐渐的产生了兴趣。尤其是学到语句和函数时,上机操作程序,经过编译,调试和运行后,出现界面,当时觉得很好奇,想真正的学好这门课程。通过半个学期的学习,我掌握了基本知识。

开始编写修改和删除时,很头疼,去向老师寻求帮助,在老师的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。困难之时,老师帮助了我,完成了修改和删除。

虽然设计时完成了,但是我觉得其中还是由一些不足之处:

1.警告句。程序中缺少一些警告句,例如:“是否真的删除(y/n)?”。2.重名的情况。在综合设计题上由于考虑的不周全,没有设计遇到重名的情况该怎么处理。3.选择单一。在综合设计的程序中,只设计了按名字选择,进行操作,忽略了重名的情况。4.在综合设计的程序中我的源程序中由于未对评委的评分,给出的分数做出判断。

整个《C语言课程设计》完成了,还有很多不完善的地方,希望自己以后办事的时候要认真,仔细,考虑周全。

几周课程设计结束了,但是这段时间里,我又学到了更多C 知识,如:对象数组,string类,文件流等,同时我也被提醒以后办事的时候要认真,仔细,考虑周全。

C语言课程设计报告

C语言课程设计报告班级:10电子本1学号:10303033122姓名:指导老师:方文森完成日期:温州大学城市学院课程设计目 录1、课程设计目的和要求 .......................................

C语言课程设计报告

目录 1前言 ..............................................................1 2正文 ..............................................................1 2.1设计目的 .........

C语言课程设计报告

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

C语言课程设计报告

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

C语言课程设计报告

C语言课程设计报告Experiment Designing reporter课程名称 : C语言课程设计 英文名称 : C Program Experiment Designing 专 业 : 学 号 : 姓 名 :指导教师 :日 期: 2011年7月18......

《C语言课程设计报告 01.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
C语言课程设计报告 01
点击下载文档
相关专题 c语言课程设计报告书 报告 课程设计 语言 c语言课程设计报告书 报告 课程设计 语言
[其他范文]相关推荐
[其他范文]热门文章
下载全文