c语言实训报告.docx
- 文档编号:10658721
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:21
- 大小:111.79KB
c语言实训报告.docx
《c语言实训报告.docx》由会员分享,可在线阅读,更多相关《c语言实训报告.docx(21页珍藏版)》请在冰豆网上搜索。
c语言实训报告
《C程序设计》实训
报告书
课程名称C程序设计实训,
任务书
实训(习)题目:
1.建立链表(链表的结点类型与成员个数等由学生自己定义)
2.杨辉三角形
3.数制转换
4.抓交通肇事犯
5.捕鱼和分鱼
6.求100到1000之间有多少个其数字之和为5的整数。
7.求素数
8.百钱百鸡问题
9.奇数平方的一个有趣性质
10.回文数的形成
实训(习)目的及要求:
1.通过本实训,培养上机动手能力,使学生巩固《C程序设计》课程学习的内容,掌握工程软件设计的基本方法,培养自己独立分析问题与解决问题的能力,强化上机动手能力,闯过编程关。
2.为后续各门计算机课程的学习打下坚实基础。
3.至少完成实训题目中5道题(自选)。
4.实训报告中每个题目必须包括三部分内容:
问题分析与算法设计、源程序代码和运行结果。
5.实训(习)个人总结字数不少于400字。
实训(习)设备:
计算机
实训(习)内容及过程:
1.杨辉三角形
在屏幕上显示杨辉三角形,行数由用户输入确定。
1
11
121
1 3 31
14 64 1
15101051
解:
程序如下:
#include
main()
{inti,j,n=0,a[17][17]={1};
while(n<1||n>16)
{printf("请输入杨辉三角形的行数:
");
scanf("%d",&n);
}
for(i=1;i {a[i][0]=1;/*第一列全置为一*/ for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j];/*每个数是上面两数之和*/ } for(i=0;i {for(j=0;j<=i;j++) printf("%5d",a[i][j]); printf("\n"); } } 运行结果: 结束 N Y Y N i++ break; printf("\n"); i==j printf("%d",a[i][j]); i i=0 N Y Y 开始 inti,j,n,a[N][N]; i=0 i a[i][i]=a[i][0]=1; i++ i=2 N i i++ Y j++ a[i][j]=a[i-1][j]+a[i-1][j-1]; j j=1 N 2.数制转换 将任一整数转换为二进制形式。 输入: 8 输出: 1000 输入: 235 输出: 11101011 开始 结束 N Y Printf("%d",a[x--]); Y N printf("\n"); x>=0 a[x++]=n%2; --x; n intn,x=0,a[100]; 解: 程序如下: 解: 程序如下: #include"stdlib.h" voidmain() { intn,x=0,a[100]; printf("请输入转换的数: \n"); scanf("%d",&n); while(n) { a[x++]=n%2; n/=2; } --x; while(x>=0) printf("%d",a[x--]); printf("\n"); } 运行结果: 3.抓交通肇事犯 一辆卡车违反交通规则,撞人后逃跑。 现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。 甲说: 牌照的前两位数字是相同的;乙说: 牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说: 四位的车号刚好是一个整数的平方。 请根据以上线索求出车号。 答案: 7744 解: 程序如下: #include main() { longi,j; longg,s,b,q,z; for(i=0000;i<=9999;i++) { g=i%10; s=i%100/10; b=i%1000/100; q=i%10000/1000; z=q*1000+b*100+s*10+g; if(q==b&&g==s&&sqrt(z)==(long)(sqrt(z))) printf("thecarnumberis: %ld",i); } } 开始 结束 N N N N Y Y Y Y Princt("Lorry=No.is... ; c*c==k c++ c*c c=31 k=i*1000+i*100+j*10+j; i! =j i++ i<=9 i=1 inti,j,k,c; 运行结果: 4.捕鱼和分鱼 A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。 日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。 B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。 C、D、E依次醒来,也按同样的方法拿走鱼。 问他们合伙至少捕了多少条鱼? 答案: 3121 解: 程序如下: #include voidmain() { intn,i,x,flag=1; for(n=6;flag;n++) { for(x=n,i=1&&flag;i<=5;i++) if((x-1)%5==0)x=4*(x-1)/5; elseflag=0; if(flag)break; elseflag=1; } printf("Totalnumberoffishcatched=%d\n",n); } 运行结果: 开始 Y Y Y N N N 结束 printf("Totalnumberoffishcatched=%d\n",n); break; flag=0; x=4*(x-1)/5; flag=1; flag i++ i<=5 x=n,i=1&&flag n++ flag n=6 intn,i,x,flag=1; 5.求100到1000之间有多少个其数字之和为5的整数。 答案: 104,113,122,131,140,203,212,221,230,302,311,320,401,410,500 开始 Y Y N N printf("%d",i); 结束 (a+b+c)==5 a=i%10; i++ i<1000 i=100 inti,a,b,c; 解: 程序如下: #include intmain() { inti,a,b,c; for(i=100;i<1000;i++) { a=i%10; b=i/10%10; c=i/100; if((a+b+c)==5) printf("%d",i); } } 运行结果: 6.求素数 求素数表中1~1000之间的所有素数 解: 运行程序: #include intmain() { intn1,nm,i,j,flag,count=0; do{ printf("InputSTARTandEND=? "); scanf("%d%d",&n1,&nm); }while(! (n1>0&&n1 printf("………..PRIMETABLE(%d–%d)…………\n",n1,nm); if(n1==1||n1==2) { printf("%4d",2); n1=3;count++; } for(i=n1;i<=nm;i++) { if(! (i%2))continue; for(flag=1,j=3;flag&&j if(! (i%j))flag=0; if(flag)printf(++count%15? "%4d": "%4d\n",i); } } 开始 N Y Y N Y N Y N N Y Y N 结束 i++ i++ Printf(++count%15? .. flag j+=2 flag=0; flag&&j flag=1,j=3 continue; ! (i%2) i<=nm i=n1 printf("%4d",2); n1==1||n1==2 printf("………..PRIMETABLE(%d-%d)…………\n",n1,nm); ! (n1>0&&n1 intn1,nm,i,j,flag,count=0; printf("InputSTARTandEND=? "); 运行结果: 7.百钱百鸡问题 中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”: 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何? 答案: Follwingarepossibleplanstobuy100fowlswith100Yuan. 1: cock=0hen=25chicken=75 2: cock=4hen=18chicken=78 3: cock=8hen=11chicken=81 4: cock=12hen=4chicken=84 解: 程序如下: #include intmain() { intx,y,z,j=0; printf("Folleingarepossibleplanstobuy100fowlswith100Yuan.\n"); for(x=0;x<=20;x++) for(y=0;y<=33;y++) { z=100-x-y; if(z%3==0&&5*x+3*y+z/3==100) printf("%2d: cock=%2dhen=%2dchicken=%2d\n",++j,x,y,z); } } Y Y N N 结束 开始 Printf("%2d: cock=%2 z%3==0&&5*x+3*y+z/3==100 z=100-x-y; x++ x<=20 x=0 intx,y,z,j=0; 运行结果: 8.奇数平方的一个有趣性质 编程验证“大于1000的奇数其平方与1的差是8的倍数”。 (验证到3000即可) 答案: 最后十个数的运算结果如下: longinta; a=1001 开始 N Y 结束 printf("%ld: ",a); a+=2 a<=3000 解: 程序如下: #include intmain() { longinta; for(a=1001;a<=3000;a+=2) { printf("%ld: ",a); printf("(%ld*%ld-1)/8",a,a); printf("=%ld",(a*a-1)/8); printf("+%ld\n",(a*a-1)%8); } } 运行结果: 9.回文数的形成 任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步聚,则最终可得到一个回文数。 请编程验证。 解: 程序如下: #include #defineMAX2147483647 longre(longint); intnonres(longints); intmain() { longintn,m; intcount=0; printf("Pleaseenetranumberoptionaly: "); scanf("%ld",&n); printf("Thegenerationprocessofpalindrome: \n"); while(! nonres((m=re(n))+n)) { if(m+n>=MAX) { printf("inputerror,break.\n"); break; } else { printf("[%d]: %ld+%ld=%ld\n",++count,n,m,m+n); n+=m; } } printf("[%d]: %ld+%ld=%ld\n",++count,n,m,m+n); printf("Herewereachedtheaimatlast! \n"); } longre(longinta) { longintt; for(t=0;a>0;a/=10) t=t*10+a%10; returnt; } intnonres(longints) { if(re(s)==s)return1; elsereturn0; } 开始 结束 Y N N Y break; printf("inputerror,break.\n"); printf("[%d]: %ld+%ld=%ld\n",++count,n,m,m+n); m+n>=MAX printf("[%d]: %ld+%ld=%ld\n",++count,n,m,m+n); ! nonres((m=re(n))+n) longintn,m; 运行结果: 转眼之间,一周的实训时间很快过去了。 一周时间不算长也不算短,你可以虚度也可以踏踏实实地走过来。 而我,选择了后者! 通过一周的实训上机,我学到了很多平时在书本上学不到的知识。 这不仅是知识性的,更多的是在与同学合作完成实训的过程中,我们一起研究,一起调试,一起改正直至最后成功完成每一个程序。 当我们一起按下“Enter”键的瞬间,那是一种激动与喜悦交错在一起的复杂感情。 渐渐地,这种感情在潜移默化中慢慢转化成我们之间的默契。 默契是提高工作效率的催化剂,到后来的几天时间里,我们在编程的时候几乎可以说到了心有灵犀的地步 在学习《C语言程序设计》这门课程的前期,由于接触的东西新而且内容量大。 学起来胡里糊涂的,可以说根本不知道在学些什么,没有针对性和目的性。 可是,这一周的实训时间,正巧填补了我们前段时间上机缺少的空白。 在上机实训期间,老师布置的C课程设计任务书中的每一题都具有很高的针对性和实际性。 让我把一学期下来的内容都熟悉与复习了一遍。 正所谓“温故而知新”,这周的实训安排对我们是如临甘雨,对知识的充分掌握起了促进性的作用。 最后我想说的是,学西C语言的过程是一个系统而长期的过程。 这次实训唤起了我对学习C的热情。 在将来的学习过程中,我会以在这次实训得到的经验为基础,向一个专业程序员的目标进军!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)