C语言程序设计实践课程报告
北方民族大学
课程报告课程名称:程序设计实践
专业班级:软件工程(2)班
学生姓名:李思良
学号: 20152170
任课教师:王晓锋
学期: 2015-2016学年春季学期
课程报告任务书
成绩评定教师:
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() 计算1~1000之间能被三整除的所有自然数之和
9.void dijiu() 猴子吃桃问题
10.void dishi() 输入一个正整数,求位数和位数之和
11.void dishiyi() 输入一行字符,统计大小写字母,数字和其他字符
12.void dishier() 输入一个四位数,将其加密后输出
13.int dishisan() 用冒泡排序对10个数排序
14. void dishisi() 用for,while,do~while循环实现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.14
void myprint();/*显示菜单界面*/
/*此函数的功能是:已知圆半径R的值,求圆的面积S。
*/
int diyi()
{
float r,area;
printf("请输入圆的半径:");
scanf("%f",&r);
area = PI * r *r;
printf("该圆的面积为:%f\n",area);
return area;
}
/*此函数的功能是:已知球半径R的值,求球的表面积S和球的体积V。
S = 4πR2; V = 4/3πR3 ;
*/
int dier( )
{
float r,s,v;
printf("请输入球的半径:");
scanf("%f",&r);
s = 4 * PI * r *r;
printf("该球的表面积为:%f\n",s);
v = s * r / 3;
printf("该球的体积为:%f\n",v);
}
/*此函数的功能是:从键盘输入两个实数,并交换其值后输出。*/
void disan( )
{
double x,y,z;
printf("请输入两个实数:");
scanf("%lf%lf",&x,&y);
printf("交换前两个实数为:%f,%f\n",x,y);
z = x; x = y; y = z;
printf("交换后两个实数为:%f,%f\n",x,y);
}
/*此函数的功能是:从键盘输入两个整数,输出它们的平方和。*/
void disi( )
{
int x,y,z;
printf("请输入两个整数:");
scanf("%d%d",&x,&y);
printf("%d和%d的平方和为:%d\n",x,y,x*x+y*y);
}
/*此函数的功能是:
创建时间:
*/
void diwu( )
{
int x;
double y;
printf("请输入x :");
scanf("%d",&x );
if( x < 0)
{
y = 0;
}
else if (x>=0 && x<=15)
{
y = 4*x/3.0;
}
else
{
y = 2.5*x-10.5;
}
printf("x = %d, y = f(x) = %lf \n",x, y);
}
/*此函数的功能是:编写程序,求一元二次方程ax2+bx+c=0的根。
*/
void diliu( )
{
float a,b,c,delt,x1,x2;
printf("请输入系数a,b,c :");
scanf("%f%f%f",&a,&b,&c );
if(a !=0)
{
delt = b * b - 4 * a * c;
if(delt == 0)
{
x1 = x2 = -b / (2 *a);
printf("有两个相同的实根:%.2f.\n",x1);
}
else if(delt > 0)
{
x1 = (-b + sqrt(delt))/(2*a);
x2 = (-b - sqrt(delt))/(2*a);
printf("有两个不同的实根:x1 = %.2f,x2 = %.2f。\n",x1,x2);
}
else printf("无实根。\n");
}
else
{
printf("不是一元二次方程。\n");
}
//该程序的功能是:
/*从键盘输入三个整数,判断能否由它们作为三边长构成一个三角形。
(提示:任意两边之和大于第三边。)
*/
void diqi( )
{
int a,b,c;
printf("请输入三个整数:");
scanf("%d%d%d",&a,&b,&c);
if(a+b>c && a+c>b && b+c>a)
printf("三个整数可以作为三条边构成一个三角形。\n");
else
printf("不能构成一个三角形");
}
//该函数的功能是:用循环语句计算1~1000之间的能被3整除的所有自然数的和。/*
分别用do…..while, while, for 三种循环语句求和,输出结果。
*/
void diba( )
{
int i,sum_for = 0;
for( i=3; i<1000; i+=3 )
sum_for = sum_for + i;
printf("使用for循环计算3+6+9+….+999的和,结果为:%d \n",sum_for);
/*此函数的功能是:解决猴子吃桃问题
创建时间:
*/
void dijiu( )
{ int day,peach_num;
peach_num = 1; //第10天的桃子个数
//printf("第10 天的桃子个数为%6d .\n",peach_num);
for(day=9; day>=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 ++ ;
}
}
//该函数的功能是:
/*************************************************************
输入十个字符,分别统计其中的英文大写字母,小写字母、数字字符和其他字符。
***********************************************************/
void dishiyi( )
{
int count_upper = 0, count_lower = 0, count_digit = 0, count_other = 0,i,j;
char ch[10] ;
printf("请输入十个字符,最好包含大小写字母、数字和其他符号:\n");
getchar();
for(i=0;i<10;i++)
{
scanf("%c",&ch[i]);
}
printf("%c",ch[9]);
for(j=0;j<10;j++)
{
if(ch[j] >= 'A' && ch[j] <= 'Z') count_upper ++;
else if(ch[j] >= 'a' && ch[j] <= 'z') count_lower ++;
else if(ch[j] >= '0' && ch[j] <= '9') count_digit ++;
else count_other ++;
}
printf(" 大写字母有%3d 个,\n 小写字母有%3d 个,\n 数字字符有%3d 个,\n 其他字符有%3d 个.\n",count_upper,count_lower,count_digit,count_other);
/*此函数的功能是:
编写程序,完成以下功能:输入一个四位数,将其加密后输出。
方法是该数每一位上的数字加9,然后除以10取余,作为该位上的新数字,
最后将千位和十位上的数字互换,百位和各位上的数字互换,组成加密后的新四位数。
如:输入1257 ,输出4601 。
创建时间:
*/
void dishier()
{
int x,y,ge,shi,bai,qian;
//因为是要输入一批四位数,所以用循环结构;
while(1)
{
printf("请输入一个四位的正整数x:");
scanf ("%d",&x);
if(x<1000 || x>9999) 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 %d\n",qian,bai,shi,ge);
//查看分离的各个数字是否正确
//加密
qian = (qian + 9) % 10;
shi = (shi + 9) % 10;
ge = (ge + 9) % 10;
y = shi * 1000 + ge * 100 + qian * 10 + bai;
printf("加密前该数为:%-6d,加密后该数变为:%-6d\n",x, y);
}
}
/*此函数的功能是:
用冒泡法对10个数进行排序**/
int dishisan()
{
int i,j,t,a[10];
printf("imput 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
for(j=0;j<10;j++)