c语言课程设计报告.docx

上传人:b****4 文档编号:5960328 上传时间:2023-05-09 格式:DOCX 页数:20 大小:187.82KB
下载 相关 举报
c语言课程设计报告.docx_第1页
第1页 / 共20页
c语言课程设计报告.docx_第2页
第2页 / 共20页
c语言课程设计报告.docx_第3页
第3页 / 共20页
c语言课程设计报告.docx_第4页
第4页 / 共20页
c语言课程设计报告.docx_第5页
第5页 / 共20页
c语言课程设计报告.docx_第6页
第6页 / 共20页
c语言课程设计报告.docx_第7页
第7页 / 共20页
c语言课程设计报告.docx_第8页
第8页 / 共20页
c语言课程设计报告.docx_第9页
第9页 / 共20页
c语言课程设计报告.docx_第10页
第10页 / 共20页
c语言课程设计报告.docx_第11页
第11页 / 共20页
c语言课程设计报告.docx_第12页
第12页 / 共20页
c语言课程设计报告.docx_第13页
第13页 / 共20页
c语言课程设计报告.docx_第14页
第14页 / 共20页
c语言课程设计报告.docx_第15页
第15页 / 共20页
c语言课程设计报告.docx_第16页
第16页 / 共20页
c语言课程设计报告.docx_第17页
第17页 / 共20页
c语言课程设计报告.docx_第18页
第18页 / 共20页
c语言课程设计报告.docx_第19页
第19页 / 共20页
c语言课程设计报告.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c语言课程设计报告.docx

《c语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告.docx(20页珍藏版)》请在冰点文库上搜索。

c语言课程设计报告.docx

c语言课程设计报告

 

《C程序设计》课程设计

学部:

机械与电子信息

专业:

电子信息工程

班级:

电信本二

学号:

姓名:

曹禹

指导教师:

杜丽芳

2012年6月

 

第1章分支与循环

1.3实现过程

【题目一】王小二自夸刀工不错,有人放一张大地煎饼在砧板上,问他:

“煎饼不许离开砧板,切100刀最多能分成多少块?

【算法分析】初始:

1块t0=1

第一刀:

2块t1=2=t0+1

第二刀:

4块t2=4=t1+2

第三刀:

7块t3=7=t2+3

第四刀:

11块t4=11=t3+4

第五刀:

16块t5=16=t4+5

得:

t(n)=t(n-1)+n(n=1to100)

【源程序代码】

#include

intmain()

{

intt,n;

t=1;

for(n=1;n<=100;n++)//循环相加得出最后结果

t=t+n;

printf("100刀最多可以切出%d块\n",t);

return0;

}

【编译示图】

【运行结果示图】

【题目二】若一个口袋中放有12个球,其中有3个红色球,3个白色球和6个黑色球,从中任取8个球,问共有多少不同的颜色搭配,把每种搭配显示出来。

【算法分析】设红,白,黑分别取x,y,z个,则有:

x+y+z=8;

0=

3;

0=

3;

0=

6;

可通过多重循环得出各种搭配,通过循环可能的只数,得出结果

【源程序代码】

#include

intmain()

{

intx,y,z;

for(x=0;x<=3;x++)

for(y=0;y<=3;y++)

for(z=0;z<=6;z++)

if(x+y+z==8)printf("红%d白%d黑%d\n",x,y,z);

return0;

}

【编译示图】

【运行结果示图】

 

第2章数组与函数

2.3实现过程

【题目一】有一个一维数组score[],内存放10个学生的成绩,要求编写三个函数分别求学生的平均成绩,求10个学生的最高分,求10个学生的最低分,在主函数中调用这三个函数得到结果。

【算法分析】输入10个学生的成绩,平均成绩可以用循环求总和来实现,最高分和最低分也可以利用循环比较来得出最大和最小的数

其中平均成绩为aver=sum/10,

最高分利用循环max=max>score[]?

max:

score[]

最低分利用循环min=min

min:

score[]

【源程序代码】

#include

intmain()

{

inti;

floata[10],aver,imax,imin;

floataverage(floata[10]);

floatmax(floata[10]);

floatmin(floata[10]);

printf("请输入十个学生的成绩:

");

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

scanf("%f",&a[i]);

aver=average(a);

imax=max(a);

imin=min(a);

printf("平均分:

%.2f\n",aver);

printf("最高分:

%.2f\n",imax);

printf("最低分:

%.2f\n",imin);

return0;

}

inti;floata[10];

floataverage(floata[10])

{

floataver,sum=0;

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

sum=sum+a[i];

aver=sum/10.00;

returnaver;

}

floatmax(floata[10])

{

floatimax=a[0];

for(i=1;i<10;i++)

if(imax

returnimax;

}

floatmin(floata[10])

{

floatimin=a[0];

for(i=1;i<10;i++)

if(imin>a[i])imin=a[i];

returnimin;

}

【编译示图】

【运行结果示图】

 

【题目二】编写一个函数,将输入的一串字符中的小写字母转变成大写字母,在主函数中调用这个函数,并输出所有的大写字母。

【算法分析】

利用ASIC码将小写字母转换大写字母即可,设字符串为str,使ASIC值在a到z间的字符满足str=str-32则可将小写字母转换大写字母。

【源程序代码】

#include

voidchange(charstr[100])

{

inti;

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

if(str[i]>='a'&&str[i]<='z')

str[i]=str[i]-32;

}

intmain(void)

{

charstr[100];

printf("请输入字符串:

\n");

gets(str);

change(str);

puts(str);

return0;

}

【编译示图】

【运行结果示图】

第3章指针

3.3实现过程

【题目一】已知一个整型数组a[5],其各元素值为4,6,8,10,12。

使用指针法求该数组元素之积。

【算法分析】利用for循环得出积,其中积s=s*(*p++),p++的作用是每执行一次循环就让指针变量p指向下一个元素,使以后的访问就直接访问p所指向的内存单元,不需再作地址计算。

【源程序代码】

#include

intmain()

{

inta[5]={4,6,8,10,12},i;

int*p=a,s=1;

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

s=s*(*p++);

printf("乘积:

%d\n",s);

return0;

}

【编译示图】

【运行结果示图】

 

【题目二】100个围成一圈,从第1个人开始,每数到3的人出圈。

问最后一个出圈的人是哪一个。

【算法分析】每数到3的人即退出,则使该退出的人的编号变为0,先利用while使圈内人s大于1个人时循环,再使编号不为0的人继续数数,利用for循环,每出一个人s-1,直至最后还剩一个人编号不为0,即为要求的人。

【源程序代码】

#include

#definen100

intmain()

{

int*p,a[n]={0},i,s,j,m;

p=a;

s=n;//记录圈内的人数

j=0;//计数器

printf("输入要循环的数m<%d\n",n);

scanf("%d",&m);

for(i=0;i

a[i]=i+1;/*填空数组,编号是下标加一,注意C语言中的数组下标从0开始*/

printf("退出的人的顺序为:

\n");

while(s>1)

{

for(p=a;p<(a+n);p++)

if(*p!

=0)

{

j++;

if(j==m)//每数到3,该人退出

{

printf("%d",*p);

*p=0;//删除该人

j=0;//计数器归零

s--;

}

}

}printf("\n");

for(p=a;p<(a+n);p++)

if(*p!

=0)printf("最后一个人是第%d个\n",*p);

return0;

}

【编译示图】

【运行结果示图】

 

第4章综合设计题

4.2设计过程

【题目一】运用C语言开发一个“小学生算术四则运算测试系统”。

该系统是让计算机充当一位给小学生布置作业的算术老师,为学生出题并阅卷。

该系统要求实现下列功能:

①为小学生出题(分别进行+、-、*、/等不同运算)。

②学生做题后,进行评阅。

学生每做一题后,评阅给出“答题正确,很好”或“答题错误,重做”等信息。

③加、减、乘、除运算功能可以自由选择实现。

④运算数值可控制在两位数的四则运算范围内。

【算法分析】

定义字符a,输入+,-,*,/来引用加减乘除函数,利用srand(time(0))函数获得随机数种子,time(0)用于获取当前时间,然后用for循环,先取100内的随机数m,n,定义计数器j=0;在加减乘除的子函数中定义数i,输入数i,若i=m+n,则输出“答案正确,很好!

”,j++,反之,输出“答案错误,重做”,循环结束后输出做对的题数j。

在除法函数中,由于有的算式除不尽,所以使b=(int)(1000*m/(float)n)/1000.0,即用去尾法取小数点后三位,若b>0则继续,否则重取,即用“重复除”函数,具体步骤同上。

【源程序代码】

#include

#include//包含rand,srand函数

#include//用于计时

floatagain_chu(intm,intn,intj)/*除法重做函数,当结果小于0.001时重新取数*/

{

floati,b;

m=rand()%100;n=rand()%99+1;//取小于100的随机数,n大于0

b=(int)(1000*m/(float)n)/1000.0;//取结果b小数点后三位

if(b>0)//结果大于零时继续,否则重新执行again函数

{

printf("%d/%d=",m,n);scanf("%f",&i);

if(i==b){printf("答案正确,很好!

\n");j++;}

elseprintf("答案错误,重做\n");

}elseagain_chu(m,n,j);

return0;

}

intjia(intm,intn)//加法函数

{

inti,j=0,k;//j用于记录正确题数

srand(time(0));//获得随机数种子,time(0)用于获取当前时间

for(k=0;k<5;k++)

{

m=rand()%100;n=rand()%100;

printf("%d+%d=",m,n);scanf("%d",&i);

if(i==(m+n)){printf("答案正确,很好!

\n");j++;}

elseprintf("答案错误,重做\n");

}printf("做对了%d个\n",j);

return0;

}

intjian(intm,intn)//减法函数

{

inti,j=0,k;

srand(time(0));

for(k=0;k<5;k++)

{

m=rand()%100;n=rand()%100;

printf("%d-%d=",m,n);scanf("%d",&i);

if(i==(m-n)){printf("答案正确,很好!

\n");j++;}

elseprintf("答案错误,重做\n");

}printf("做对了%d个\n",j);

return0;

}

intcheng(intm,intn)//乘法函数

{

inti,j=0,k;

srand(time(0));

for(k=0;k<5;k++)

{

m=rand()%100;n=rand()%100;

printf("%d*%d=",m,n);scanf("%d",&i);

if(i==(m*n)){printf("答案正确,很好!

\n");j++;}

elseprintf("答案错误,重做\n");

}printf("做对了%d个\n",j);

return0;

}

floatchu(intm,intn)//除法函数

{

intj=0,k;floati,b;

srand(time(0));

printf("用去尾法取小数点后三位:

如1/6=0.166\n");

for(k=0;k<5;k++)

{

m=rand()%100;n=rand()%99+1;

b=(int)(1000*m/(float)n)/1000.0;

if(b>0)

{

printf("%d/%d=",m,n);scanf("%f",&i);

if(i==b){printf("答案正确,很好!

\n");j++;}

elseprintf("答案错误,重做\n");

}

elseagain_chu(m,n,j);

}printf("做对了%d个\n",j);

return0;

}

intmain()

{

intm,n;

chara;

printf("请选择要做的题目类型(+,-,*,/):

");

scanf("%c",&a);

if(a=='+')jia(m,n);

elseif(a=='-')jian(m,n);

elseif(a=='*')cheng(m,n);

elsechu(m,n);

return0;

}

【编译示图】

【运行结果示图】

 

课程设计小结

课程设计是一门培养学生综合运用所学知识,分析和解决实际问题,锻炼实践能力的重要课程。

这次课程设计要交七个程序,这对我来说是一个很大的考验,很多时候我都会想怎么才能让自己的程序更专业,怎样才能既简单,又实用?

在做程序的过程中要很有耐心,有时候仅仅一个错误就需要花两三个小时来查找,而且还不一定能找出来。

回想起整个课程设计的过程,有许多感触。

从第一节课开始到完成所有题目,遇到很多困难,解决困难的过程中不仅巩固了以前学的知识,而且学到了很多书上没有的知识。

同时也明白了只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的操作能力和独立思考的能力。

课程设计终于顺利完成了,在设计中遇到了很多编程问题,通过书本和网络上查找了很多资料,所有问题都迎刃而解。

在设计中,给我印象最为深刻的是“小学生算术四则运算测试系统”的编译过程,首先是我不知道怎样取随机数,经过查找资料后解决了。

然后我的大部分子程序都已编辑成功,只差最后的除法运算程序了,那么这最后的程序就将是我成功的关键。

而老天不会让我太过顺利,他在这最后的时刻设置了障碍。

就是在两数相除时用的去尾法,这都不难,转换成浮点型就行了。

但问题又来了,并不是所有的数相除都能除尽的,我想了很多办法都不行,为这个问题我花了一天时间都没能解决,那时恨不得把电脑都砸了。

后来我去请教了老师,老师也没说出具体的解决办法,但她却给我提供了一个思路,那就是间接的使结果取几位小数,然后再不行的就重新取数。

经过大概半小时的努力,我终于克服了这个问题,并且使程序的功能也得到了一定的完善。

不得不说这是一种胜利,谢谢给我指点迷津的老师。

通过课程设计,我认识到要想写好程序,就必须要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。

另外,写程序时必须要细心,千万不能输错一个字符标点,就连全角半角也得注意。

在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。

课程设计虽然结束了,但它却给我留下了深刻的印象。

它使我掌握了一种系统的研究方法,我们学习的目的就在于运用,我们运用这种研究方法的时候会很多。

最后要感谢课程设计,它的确教会我很多。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2