




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.北方民族大学课 程 报 告课 程 名 称: 程序设计实践 专 业 班 级 : 软件工程(2)班 学 生 姓 名 : 李思良 学 号 : 20152170 任 课 教 师 : 王晓锋 学 期 : 2015-2016学年春季学期 课程报告任务书题 目30个小程序组合成一个大程序主要内容1-已知半径求圆面积 2-已知球半径,求表面积和体积 3-输入两个实数,交换其值输出 4-输入两个整数,求他们的平方和 5-分段计费 6-求一元二次方程的根 7-判断三个整数是否能构成三角形 8-计算11000之间能被三整除的所有自然数之和 9-猴子吃桃问题 10-输入一个正整数,求位数和位数之和 11-输入一行字符,统计大小写字母,数字和其他字符 12-输入一个四位数,将其加密后输出 14-用for,while,dowhile循环实现100以内素数之和 15-将大于10元小于100元的钱换成1元,2元,5元的组合 16-输出99乘法口诀 17-验证哥德巴赫猜想 18-求两个正整数的最大公约数和最小公倍数 19-判断素数 20-求(m,n)以内全部素数,每行输出10个 21-输出10000到99999的所有回数 22-两个6*6矩阵的乘积 23-对一批数进行排列,求出最大值与平均数 24-输入一批学生的成绩,换成五分制 25-逆序输出 26-求阶乘 27-用递归函数求Fibonacci数列的前40个数,每行输出8个 28-输入某年某月某日,判断这一天是这一年的第几天 29-写出1000以内的所有完数 30-输入年和天数,输出对应的年、月、日 将以上30个子函数放在一个主函数内进行调用。 任务要求一、提交材料应包括:(1)系统源代码 (2)课程报告二、整个设计过程具体要求(1)需求分析 对子函数各功能进行分析,设计出需要完成的功能,完善各个子函数的调用关系;(2)设计过程 进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程 养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分答辩情况30分成绩评定教师: ;.1. 需求分析经过大一上学期的理论学习,在基础实验的基础上,本学期我们继续开设了C语言程序设计实践课。课程要求我们对已经学习的基础实验进行整合与衔接处理,并最终形成一个系统性质的规模较大的程序。本次课程设计要求我们达到能独立完成一个1000行以上的程序,完成后要求实现已知半径求圆面积、已知球半径,求表面积和体积,输入两个实数、交换其值输出等30中功能。 通过整个程序的开发过程,最终使我们掌握利用计算机解决实际问题的基本方法,熟悉C语言开发的全过程,提高综合应用C语言的能力、编程和调试能力,为学习计算机后续课程打好专业基础。 2. 概要设计模块划分:1. int diyi() 已知半径求圆面积 2. int dier() 已知球半径,求表面积和体积 3. void disan() 输入两个实数,交换其值输出 4. void disi() 输入两个整数,求他们的平方和 5. void diwu() 分段计费 6. void diliu() 求一元二次方程的根 7. void diqi() 判断三个整数是否能构成三角形 8. void diba() 计算11000之间能被三整除的所有自然数之和 9. void dijiu() 猴子吃桃问题 10. void dishi() 输入一个正整数,求位数和位数之和 11. void dishiyi() 输入一行字符,统计大小写字母,数字和其他字符 12. void dishier() 输入一个四位数,将其加密后输出 13. int dishisan() 用冒泡排序对10个数排序 14. void dishisi() 用for,while,dowhile循环实现100以内素数之和 15. void dishiwu() 将大于10元小于100元的钱换成1元,2元,5元的组合 16. void dishiliu() 输出99乘法口诀 17. void dihsiqi() 验证哥德巴赫18. void dishiba() gcd(int m,int n) int lcm(int m,int n) 求两个正整数的最大公约数和最小公倍数 19. void dihsijiu() int isprime(int m) 判断素数 20. void diershi() 求(m,n)以内全部素数,每行输出10个 21. void diershiyi() 输出10000到99999的所有回数 22. void diershier() 两个6*6矩阵的乘积 23. void diershisan() void allPrimes(int m,int n) void sort(int array,int n) 对一批数进行排列,求出最大值与平均数 24. int diershisi() char switchScore(int score) 输入一批学生的成绩,换成五分制 25. void diershiwu() 逆序输出 long reverse(long number)返回number的逆序数 26. void diershiliu() 求阶乘 27. void diershiqi() 用递归函数求Fibonacci数列的前40个数,每行输出8个 28. int dierhsiba() 输入某年某月某日,判断这一天是这一年的第几天 29. void diershijiu() 写出1000以内的所有完数 30. void disanshi() void MonthDay(int year,int yearDay,int *pMonth,int *pDay) 输入年和天数,输出对应的年、月、日 31.void myprint() 显示菜单界面 将以上30个子函数放在一个主函数内进行调用。 int main() 主函数3. 详细设计:#include#include #include#include#include#define PI 3.14void myprint();/*显示菜单界面*/*此函数的功能是:已知圆半径R的值,求圆的面积S。*/int diyi()float r,area;printf(请输入圆的半径:);scanf(%f,&r);area = PI * r *r;printf(该圆的面积为:%fn,area); return area;/*此函数的功能是:已知球半径R的值,求球的表面积S和球的体积V。 S = 4R2; V = 4/3R3 ;*/int dier( )float r,s,v;printf(请输入球的半径:);scanf(%f,&r);s = 4 * PI * r *r;printf(该球的表面积为:%fn,s);v = s * r / 3;printf(该球的体积为:%fn,v);/*此函数的功能是:从键盘输入两个实数,并交换其值后输出。*/void disan( )double x,y,z;printf(请输入两个实数:);scanf(%lf%lf,&x,&y);printf(交换前两个实数为:%f,%fn,x,y);z = x; x = y; y = z;printf(交换后两个实数为:%f,%fn,x,y);/*此函数的功能是:从键盘输入两个整数,输出它们的平方和。*/void disi( )int x,y,z;printf(请输入两个整数:);scanf(%d%d,&x,&y);printf(%d和%d的平方和为:%dn,x,y,x*x+y*y);/*此函数的功能是: 创建时间: */void diwu( )int x;double y;printf(请输入 x :);scanf(%d,&x );if( x =0 & x 0)x1 = (-b + sqrt(delt)/(2*a);x2 = (-b - sqrt(delt)/(2*a);printf(有两个不同的实根:x1 = %.2f,x2 = %.2f。n,x1,x2);else printf(无实根。n);elseprintf(不是一元二次方程。n); /该程序的功能是:/*从键盘输入三个整数,判断能否由它们作为三边长构成一个三角形。 (提示:任意两边之和大于第三边。)*/void diqi( )int a,b,c;printf(请输入三个整数:);scanf(%d%d%d,&a,&b,&c);if(a+bc & a+cb & b+ca)printf(三个整数可以作为三条边构成一个三角形。n);elseprintf(不能构成一个三角形); /该函数的功能是:用循环语句计算11000之间的能被3整除的所有自然数的和。/*分别用do.while, while, for 三种循环语句求和,输出结果。*/void diba( )int i,sum_for = 0;for( i=3; i=1; day-)peach_num = 2 * (peach_num + 1);/printf(第 %2d 天的桃子个数为 %6d .n,day,peach_num); /第一天的桃子数即为所摘的桃子总数。输出第一天的桃子数。 printf(第 1 天摘的桃子总数为 %d .n,peach_num); /* 输入一个正整数,求该整数的位数和各位数之和。*/* 逆序输出一个正整数 */void dishi(void) int n,count = 0, sum = 0,m; printf(Enter n: ); /* 输入提示 */ scanf (%d, &n); m = n; /保存输入的n的值,便于后面输出 while(n != 0) sum += n % 10; n = n / 10; count + ; printf(该数是%d, 它共有%d位,它的各个数字之和为%d。n,m,count, sum); /该函数的功能是:/*输入十个字符,分别统计其中的英文大写字母,小写字母、数字字符和其他字符。*/void dishiyi( )int count_upper = 0, count_lower = 0, count_digit = 0, count_other = 0,i,j;char ch10 ;printf(请输入十个字符,最好包含大小写字母、数字和其他符号:n);getchar();for(i=0;i10;i+)scanf(%c,&chi);printf(%c,ch9);for(j=0;j= A & chj = a & chj = 0 & chj = 9) count_digit +;else count_other +;printf( 大写字母有 %3d 个,n 小写字母有 %3d 个,n 数字字符有 %3d 个,n 其他字符有 %3d 个.n,count_upper,count_lower,count_digit,count_other);return ;/*此函数的功能是: 编写程序,完成以下功能:输入一个四位数,将其加密后输出。方法是该数每一位上的数字加9,然后除以10取余,作为该位上的新数字,最后将千位和十位上的数字互换,百位和各位上的数字互换,组成加密后的新四位数。如:输入 1257 ,输出 4601 。 创建时间: */void dishier()int x,y,ge,shi,bai,qian; /因为是要输入一批四位数,所以用循环结构; while(1) printf(请输入一个四位的正整数 x:);scanf (%d,&x);if(x9999) break; /如果输入的不是一个四位数,则结束循环。 /分离各位上的数字 qian = x / 1000; bai = x % 1000 /100; /bai = x/100 - qian*10;shi = x % 100 /10; /shi = x/10 - qian*100 - n*10;ge = x % 10; /ge = x - qian*1000 - n*100 - o*10;printf(加密前该数的各位数字分别为:%d %d %d %dn,qian,bai,shi,ge); /查看分离的各个数字是否正确 /加密 qian = (qian + 9) % 10;bai = (bai + 9) % 10;shi = (shi + 9) % 10;ge = (ge + 9) % 10;y = shi * 1000 + ge * 100 + qian * 10 + bai;printf(加密前该数为: %-6d,加密后该数变为: %-6dn,x, y);/*此函数的功能是: 用冒泡法对10个数进行排序*/int dishisan() int i,j,t,a10; printf(imput 10 numbers:); for(i=0;i10;i+) scanf(%d,&ai); for(i=0;i10;i+) for(j=0;j10;j+) if(ajaj+1) t=aj; aj=aj+1; aj+1=t; printf(nthe result is :n); for(j=0;j10;j+) printf(%d ,aj); /*此函数的功能是用for,while,do-while循环实现100以内所有偶数之和*/ void dishisi()int i,sum=0;printf(用for,while,do-while循环实现100以内所有偶数之和);for(i=2;i=100;i+=2)sum+=i;printf(for循环:sum=%dnn,sum);i=2;sum=0;while(i=100)sum+=i;i+=2; printf(while循环:sum=%dnn,sum);i=2;sum=0;dosum+=i;i+=2;while(i=100);printf(do-while循环:sum=%dnn,sum);/*此函数的功能是:将一笔钱(大于10元,小于100元)换算成1元、2元和5元的纸币组合。 输入金额,问有几种换算方法?针对每一种换算方法,输出各种面额的纸币数量,要求 每种硬币至少有一枚。 创建时间: */void dishiwu( )int num_1,num_2,num_5,count = 0;int money;printf(请输入要换算的钱的金额:);scanf(%d,&money);printf(针对每种换算方法,各种面值的纸币的数量分别为:n 5元 2元 1元 n);for(num_5 =1; num_5 = money/5 ; num_5 +)for(num_2 =1; num_2 = money/2 ; num_2 +)for(num_1 =1; num_1 = money ; num_1 +)if( money = 5 * num_5 + 2 * num_2 + 1 * num_1)printf(%6d%6d%6dn,num_5,num_2,num_1);count +;printf(共有 %d 种换算方法。n,count); /*/该函数的功能是: 用循环结构输出九九乘法表。*/void dishiliu( )int i,j;for(i = 1; i = 9; i+ )for(j = 1; j = i; j+ )printf(%d * %d = %2d, ,i,j,i*j);printf(n);/*/该函数的功能是:验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和。 要求将6到100之间的偶数都表示为2个素数之和,输出时一行输出4组。 基本思想:对 6 100之间的所有偶数n,若 n = a + b,则首先 a、b一定都是奇数, 所以选用穷举法对a(3n/2范围内的奇数)的值从3开始列举,若a是素数,再判断b是否为素数。 */void dishiqi( )int n,i,a,b,c,d;int count ;printf(验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和nn);for(n = 6;n = 100; n = n+2)count = 0;for( a = 3; a= n/2; a = a + 2)/判断a是否为素数 c = sqrt(a);for(i=2;i c) /a是素数的情况下 /判断b是否为素数 b = n - a;d = sqrt(b);for(i=2;i d) /b是素数的情况下 printf( %3d = %3d + %3d ,n,a,b);count +;if(count % 4 =0)printf(n); printf(n);/*此函数的功能是:求两正整数的最大公约数和最小公倍数,用一个函数求最大公约数,另一个函数求最小公倍数。*/int gcd(int m,int n);int lcm(int m,int n);void dishiba( )printf(求两正整数的最大公约数和最小公倍数nn);int m,n, a,b;printf(input m,n:); scanf(%d%d,&m,&n); a = gcd(m,n); b = lcm(m,n); printf(gcd(%d,%d)=%dn,m,n,a);printf(lcm(%d,%d)=%dn,m,n,b); /使用枚举法求最大公约数 int gcd(int m,int n) int i,temp;temp = m = 1; i- ) /在1,temp 之间找公倍数if( m % i = 0 & n % i = 0 ) return i; /使用枚举法求最小公倍数 int lcm(int m,int n) int i,temp;temp = m n ? m : n ; /临时变量temp存储m、n中较大的数 for(i = temp; i = m * n; i+ ) /在temp,m*n 之间找公倍数 if( i % m = 0 & i % n = 0 ) return i; /*此函数的功能是:写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。*/void dishijiu( )int n; int isprime(int m); /此处是函数声明 printf(请输入一个正整数:);scanf(%d,&n); /输入一个正整数n if(isprime(n) = 1) printf(%d is a prime.n,n);else printf(%d is not a prime.n,n);/* 定义判断素数的函数,如果x是素数则返回1(真);否则返回0(假)*/int isprime(int m) int i; double n; if(m = 1) return 0; /* 1不是素数,返回0 */ n = sqrt(m); for( i = 2; i = n; i+) if (m % i = 0) /* 如果m不是素数 */ return 0;/* 返回0 */ return 1;/* m是素数,返回1 */*求m,n以内的全部素数(1m=n500),每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。*/* 使用嵌套循环求一定范围以内的全部素数 */ /* 调用求平方根函数,需要包含数学库 */* 声明:判断素数的函数,如果x是素数则返回1(真);否则返回0(假)*/int isprime(int m);/声明子函数:输出m,n范围内的所有素数。 void allPrimes(int m,int n);void diershi() int count, m, n,x; printf(请输入正整数的范围m和n(1m=n500):); scanf(%d%d,&m,&n); /*count = 0; /count记录素数的个数,并用于控制输出格式 for(x = m; x = n; x+) if(isprime(x) / 如果x是素数 printf(%6d, x); / 输出x count+; /累加已经输出的素数个数 if(count % 10 = 0) /如果count是10的倍数,换行 printf(n); */allPrimes(m,n); /调用子函数来完成此功能 printf(n);/定义子函数:输出m,n范围内的所有素数。 void allPrimes(int m,int n)int x,count=0;for(x = m; x = n; x+) if(isprime(x) /* 如果x是素数 */ printf(%6d, x); /* 输出x */ count+; /* 累加已经输出的素数个数 */ if(count % 10 = 0) /* 如果count是10的倍数,换行 */ printf(n); /*输出10000到99999的所有回文数回文数是一种数字.如:98789,这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数.还有10001,11111,12721等都是回文数.*/void diershiyi()printf(输出10000到99999的所有回文数nn);int a,b,c,d,e;long f=10000;dof+;a=f/10000;b=(f-a*10000)/1000;c=(f-a*10000-b*1000)/100;d=(f-a*10000-b*1000-c*100)/10;e=f-a*10000-b*1000-c*100-d*10;if (a=e&b=d) printf(%8ld,f);while (f);/*求两个矩阵的乘积*/ void diershier() int a66; int i,j,sum=0; int max=0; printf(请输入一个6*6数组的各个元素:n); for(i=0;i6; i+) for(j=0;jmax) max=aij; sum+=aij; printf(最大值为:%dn 所有元素的和为%dn,max,sum); for(i=0;i6;i+) for(j=0;j6;j+) if(aij=max) printf(最大值的行标:%d 列标:%dn,i+1,j+1); break; if(aij=max) break; /*对一批数进行排列,并求出最大值与平均数*/ #define MAX 100#define SWAP(x,y) int t;t=x;x=y;y=t;void diershisan()int n,i;void sort(int a,int );int arrayMAX;printf(你想对多少个数进行排序:n);scanf(%d,&n);srand(unsigned)time(NULL);for(i=0;in;i+) arrayi=rand()%50;printf(n输出排序前的数:n);for(i=0;in;i+) printf(%3d,arrayi);printf(n);sort(array,n);void sort(int array,int n)int i,k,j;double av=0;for(i=0;in-1;i+) k=i; for(j=i+1;jarrayk) k=j; if(k!=i) SWAP(arrayi,arrayk);for(i=0;in;i+) av+=arrayi;printf(输出排序后的数:n);for(i=0;in;i+) printf(%3d,arrayi);printf(n最大数是:%dn,array0);printf(平均数是:%lfn,av/n);printf(n); /*此函数的功能是: 将学生成绩由百分制换算成五分制 创建时间: */char switchScore(int score);void diershisi()int score;char grade;char switchScore(int score);while(1) /因为是要输入一批四位数,所以用循环结构; printf(请输入一个100以内的正整数 :);scanf(%d,&score ); if(score100) break; /若输入的不是100以内的整数,在结束循环。 grade = switchScore(score);/*printf(输入的百分制成绩为: %-6d,其对应的五分制等级为: %-6cn,score, grade);*/char switchScore(int score)char grade; switch( score / 10) case 10: case 9: printf(An); break; case 8: printf(Bn); break; case 7: printf(Cn); break; case 6: printf(Dn); break; default: printf(En); /*输入一个正整数,将它逆序输出。 要求定义并调用函数reverse(number),它的功能是返回number的逆序数。 例如,reverse(12345)的返回值是54321.*/* 逆序输出一个正整数 */void diershiwu()printf(逆序输出一个正整数nn); long n,m; long reverse(long number); printf(Enter n: ); /* 输入提示 */ scanf (%d, &n); m = rever
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网上培训授课合同范本
- 电脑设备保修合同范本
- 电脑维修保密合同范本
- 银行柜员劳务合同范本
- 理疗行业劳务合同范本
- 饭店厨师用工合同范本
- 民间房屋质押合同范本
- 甲方担责车位合同范本
- 测绘房屋委托合同范本
- 琴行学生家长合同协议
- 高中语文语法简略
- 登革热诊疗方案(2024年版)解读
- DBJ33T 1320-2024 建设工程质量检测技术管理标准
- 驾照科一试题库-900题
- SH∕T 3097-2017 石油化工静电接地设计规范
- CE安全标准规范(电气类)
- 第3课《追求人生理想》第2框《努力把人生理想变为现实》-【中职专用】《哲学与人生》同步课堂课件
- 花园小学少先队知识竞赛题
- (2024版)大学本科新增专业《生物育种技术》解读
- JJG 643-2024标准表法流量标准装置
- 加令岭水库防洪抢险应急预案
评论
0/150
提交评论