C语言课程设计.docx
- 文档编号:8634874
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:25
- 大小:302.50KB
C语言课程设计.docx
《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
C语言课程设计
C语言课程设计
学院:
机电学部
专业:
机械设计制造及其自动化
班级:
机械(3)班
学号:
25
姓名:
指导教师:
2011年6月
目录
第一章选择和循环程序设计…………………………………………………………………
第二章数组……………………………………………………………………………………
第三章函数……………………………………………………………………………………
第四章指针……………………………………………………………………………………
第五章课程设计总结…………………………………………………………………………
做文档资料的统一要求:
1、文档中的字体凡标题的均用三号字宋体加粗,正文用五号字。
2、每道程序均要有算法分析、程序代码和上机调试的过程及结果。
3、上机调试过程用贴图方式表示。
4、每章的标题在页的头部。
5、没有按要求做的同学则视为本课程设计不合格。
6、每次上机所做的内容用移动磁盘带走。
例1:
输入任意的三位整数以反向形式输出。
如输入678则输出876。
【算法分析】(用文字或流程图进行描述)
对于三位数n以反向输出要求将构成这三位数的元素进行拆分。
个位上的元素乘100加上十位上的元素乘10加上百位上的元素乘1得到一个新三位数。
将新的三位数输出即可。
如何将三位数进行拆分则需用到表达式中整除和求余运算具体方法如下:
用x1,x2,x3分别存放拆分后的百位、十位个位数
x1=n/100则得到百位数
x2=n/10%10则得到十位数
x3=n%10则得到个位数
y=x3*100+x2*10+x1*1
【源程序代码】
#include
voidmain()
{
intx1,x2,x3,n,y ;
printf(“pleaseinputnumbern :
”);
scanf(“%d”,&n);
x1=n/100 ;
x2=n/10%10 ;
x3=n%10 ;
y=x3*100+x2*10+x1*1 ;
printf(“y= %d”,y) ;
}
【编译示图】(示图中要有0error,0warning的提示)
【运行结果示图】
第一章选择和循环程序设计
1、输入变量x的值,计算y的值。
x+1x<1
x+21= y=x+32= x+4x>=3 【算法分析】(用文字或流程图进行描述) 【源程序代码】 #include voidmain() {intx,y; printf("inputx: "); scanf("%d",&x); if(x<1) {y=x+1; printf("x=%d,y=x+1=%d\n",x,y); } elseif(x<2) {y=x+2; printf("x=%d,y=x+2=%d\n",x,y); } elseif(x<3) {y=x+3; printf("x=%d,y=x+3=%d\n",x,y); } else {y=x+4; printf("x=%d,y=x+4=%d\n",x,y); } } 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 2、猜数游戏。 由计算机“想”一个数请人猜,如果猜对了,则游戏结束,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到猜对为止。 计算机记录人猜的次数,以此可以反映出猜数者“猜”的水平。 【算法分析】(用文字或流程图进行描述) 【源程序代码】 #include #definex500 voidmain() {inti,sum; for(i=0,sum=0;i<10000;i++) {printf("inputadata: \n"); scanf("%d",&i); if(i {printf("你输入的数小了");} elseif(i>x) {printf("你输入的数大了");} elsebreak; sum=sum+1; } printf("你共猜了%d次\n",sum+1); } 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 3、若一个口袋中放有12个球,其中有3个红色球,3个白色球和6个黑色球,从中任取8个球,问共有多少不同的颜色搭配。 【算法分析】(用文字或流程图进行描述) 【源程序代码】 #include voidmain() {intx,y,z; printf("红色白色黑色\n",x,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); } } 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 第二章数组 1、某班有10名学生参加全国计算机等级考试,编写一个程序求该班学生考试成绩的平均分和高于平均分的人数。 【算法分析】(用文字或流程图进行描述) 定义数组,将10名学生的成绩按数组输入。 定义一个算平均值的函数。 一个算高于平均值的人数的函数。 用函数调用的方式运行函数, 【源程序代码】 #include intmain() { inta[10],i; printf("输入10名学生的成绩\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); intb=0;floatc; for(i=0;i<10;i++) b=b+a[i]; c=(b/10.0); printf("平均值是%f\n",c); intd=0; for(i=0;i<10;i++) if(a[i]>c)d++; printf("高于平均值的人数是%d\n",d); return0; } 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 2、定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每5个数求出一个平均值,放在另一数组中并输出。 【算法分析】(用文字或流程图进行描述) 定义数组,找出对应关系,给数组赋值。 定义另一个二维数组,用嵌套循环完成赋值(将一维数组转变成二维数组。 定义一个新的数组 将二维数组每小段求和。 赋值给新定义的数组。 输出新定义的数组。 【源程序代码】 #include intmain() { inta[30],c=0; for(c=0;c<30;c++) a[c]=(c+1)*2; intb[6][5],i,j; for(i=0;i<6;i++) { for(j=0;j<5;j++) b[i][j]=a[i*5+j]; } floatd[6],f[6]={0};inte; for(e=0;e<6;e++) for(j=0;j<5;j++) { f[e]=b[e][j]+f[e]; d[e]=f[e]/5.0; } for(e=0;e<6;e++) printf("%f\n",d[e]); return0; } 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 第三章函数 1、有一个一维数组score[],内存放10个学生的成绩,要求编写三个函数分别求学生的平均成绩,求10个学生的最高分,求10个学生的最低分。 【算法分析】(用文字或流程图进行描述) 定义数组,存放学生成绩。 定义三个功用的函数。 用函数调用完成主函数。 【源程序代码】 #include intmain() { floataver(floatarray[10]); floatmax(floatarray[10]); floatmin(floatarray[10]); floata[10];inti; printf("请输入十名同学的成绩\n"); for(i=0;i<10;i++) scanf("%f",&a[i]); floatb,c,d; b=aver(a); printf("平均值是%f\n",b); c=max(a); printf("最大值是%f\n",c); d=min(a); printf("最小值是%f\n",d); return0; } floataver(floatarray[10]) { floatsum=array[0],n;inti; for(i=1;i<10;i++) sum=array[i]+sum; n=sum/10; returnn; } floatmax(floatarray[10]) { inti; for(i=1;i<10;i++) if(array[i]>array[0])array[0]=array[i]; returnarray[0]; } floatmin(floatarray[10]) { inti; for(i=1;i<10;i++) if(array[i] returnarray[0]; } 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 2、输入年月日,求它是该年的第几天。 注: 闰年的2月有29天,平年的2月有28天。 【算法 分别定义三个变量,通过三次输入确定年,月,日; 判断是否为闰年。 分为闰年和不为闰年。 两种情况分别做。 【源程序代码】分析】(用文字或流程图进行描述) #include intmain() {inta,b,c,i,d; intpan(intx); intsu1(intx,inty); intsu2(intx,inty); printf("请输入年份\n"); scanf("%d",&a); printf("请输入月份\n"); scanf("%d",&b); printf("请输入是几号\n"); scanf("%d",&c); i=pan(a); if(i) d=su1(b,c); else d=su2(b,c); printf("这是该年的第%d天\n",d); return0;} intpan(intx) {inti; if(x%4==0&&x%100! =0||x%100==0)i=1; elsei=0; returni; } intsu1(intx,inty) { inti; switch(x) { case1: i=y;break; case2: i=31+y;break; case3: i=31+29+y;break; case4: i=31+29+31+y;break; case5: i=31+29+31+30+y;break; case6: i=31+29+31+30+31+y;break; case7: i=31+29+31+30+31+30+y;break; case8: i=31+29+31+30+31+30+31+y;break; case9: i=31+29+31+30+31+30+31+31+y;break; case10: i=31+29+31+30+31+30+31+31+30+y;break; case11: i=31+29+31+30+31+30+31+31+30+31+y;break; case12: i=31+29+31+30+31+30+31+31+30+31+30+y;break; } returni; } intsu2(intx,inty) { inti; switch(x) { case1: i=y;break; case2: i=31+y;break; case3: i=31+28+y;break; case4: i=31+28+31+y;break; case5: i=31+28+31+30+y;break; case6: i=31+28+31+30+31+y;break; case7: i=31+28+31+30+31+30+y;break; case8: i=31+28+31+30+31+30+31+y;break; case9: i=31+28+31+30+31+30+31+31+y;break; case10: i=31+28+31+30+31+30+31+31+30+y;break; case11: i=31+28+31+30+31+30+31+31+30+31+y;break; case12: i=31+28+31+30+31+30+31+31+30+31+30+y;break; } returni;} 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 3、用函数法求N*N的对角线的和。 其中的N是用户通过键盘输入的任意值。 【算法分析】(用文字或流程图进行描述) 定义足够大的一介数组。 通过用户输入的值,确定方阵大小。 求和。 【源程序代码】 #include intmain() { inti,sum; inta[100][100]; printf("请输入方阵的大小N\n"); scanf("%d",&i); printf("请输入方阵的值\n"); intx,y; for(x=0;x for(y=0;y scanf("%d",&a[x][y]); sum=a[0][0]; intj; for(j=1;j sum=a[j][j]+sum; printf("对角线上的和%d\n",sum); return0; } 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 第四章指针 1、已知一个整型数组a[5],其各元素值为4,6,8,10,12。 使用指针法求该数组元素之积。 【算法分析】(用文字或流程图进行描述) 用循环,将p分别指向数组里的每一个元素,然后在相乘。 【源程序代码】 #include intmain() { inta[5]={4,6,8,10,12}; int*p; intj=1,i; for(i=0;i<5;i++) {p=&a[i]; j=*p*j;} printf("数组之积是%d\n",j); return0; } 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 2、编写两个排序函数,要求一个函数完成从小到大排序,一个函数完成从大到小排序,并编写主函数完成: ①输入n个数; ②组织调用排序函数对n个数按从大到小排序并输出; ③组织调用排序函数对n个数按从小到大排序并输出; 【算法分析】(用文字或流程图进行描述) 定义一个足够大的数组。 将数组赋值这N个数。 用指针和函数调用编写这两个函数。 调用,并输出。 【源程序代码】 #include intmain() {voida1(floatarray[100],intn); voida2(floatarray[100],intn); floata[100];intN; printf("您将要输入几个数? \n"); scanf("%d",&N); printf("请输入这N个数。 并按Enter结束\n"); inti=0; for(i=0;i scanf("%f",&a[i]); printf("由大到小排序是: \n"); a1(a,N); printf("由小到大排序是: \n"); a2(a,N); return0; } voida1(floatarray[100],intn) { inti,j,k;floatt; for(i=0;i { k=i; for(j=i+1;j if(array[j]>array[i]) k=j; if(k! =i) {t=array[k];array[k]=array[i];array[i]=t;} } for(i=0;i printf("%f",array[i]); printf("\n"); } voida2(floatarray[10],intn) { inti,j,k;floatt; for(i=0;i { k=i; for(j=i+1;j if(array[j] k=j; if(k! =i) {t=array[k];array[k]=array[i];array[i]=t;} } for(i=0;i printf("%f",array[i]); printf("\n"); } 【编译示图】(示图中要有0error,0warning的提示) 【运行结果示图】 第五章课程设计总结 通过这段时间的学习,我是真的收获了不少。 我认为这样的收获是和平时老师的教导分不开的。 当然也和我我的扎实的态度是分不开的。 对于C语言这门课,我的确是用心在听。 每一次习题都独立思考,和完成。 对于做题的总结,我认为,首先应该将大体的思路规划出来。 熟练运用函数调用也可以让思路变得清晰得多。 在做和数组有关的题目时,一定不能忘了用循环。 在做课程设计的过程中遇到了很多障碍,但是都在老师的指导下顺利解决了。 失败是成功的必经路。 通过对走过的弯路的教训总结,我认为自己在基础知识上还有待加强。 以后的日子我将针对自己薄弱点,有针对的强化训练,使自己的水平更上一层楼。 以上就是我的总结。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计