C++程序分析
前两天老师让我们做个C语言的课程实验设计,之后要我们分析代码
我程序代码都是抄我同学的,也不会啊,希望哪个高手帮忙分析下,小弟非常感谢.
这是程序题目和程序代码:
主界面
********************************************
********** 系 统 ***************
*******请选择以下你要的操作*****************
1、求阶乘倒数之和。(用递归法)
2、将一个十进制数转换成r进制数(利用函数调用)。
3、求3个数的最大公约数和最小公倍数。(利用函数调用)
4、把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列。(利用数组和指针来做)
5、求n阶方阵的转置矩阵。(利用易做图数组或指针作函数参数)
程序代码如下:
#include<stdio.h>
#include<stdlib.h>
double sumb(int n);
void dtob(int x);
void dtoo(int x);
void dtox(int x);
int maxab(int x,int y);
int minab(int x,int y);
void insert(int a);
void move(int *pointer);
int main(void)
{
int number;
while(1)
{
printf("\n");
printf("c语言程序设计系统界面\n");
printf("********************** \n");
printf("**1. 求阶乘倒数之和(递归法)\n");
printf("**2. 将一个十进制数转换成r进制数(利用函数调用)\n");
printf("**3.求三个数的最大公约数和最小公倍数(利用函数调用)\n");
printf("**4.把一个整数插入到按由小到大的顺序排列(利用数组和指针来做)\n");
printf("**5.求n阶方阵的转置矩阵(利用易做图数组或指针作函数参数\n");
printf("**6.退出***********\n");
printf(" ************************************************\n");
printf("\n number(1~6):");
scanf("%d",&number);
switch(number)
{
case 1:
{
int n;
scanf("%d",&n);
printf("sum=%f",sumb(n));
break;
}
case 2:
{int x;
printf("x= ");
scanf("%d",&x);
dtob(x);
dtoo(x);
dtox(x);
break;
}
case 3:
{
int x,y,z;
scanf("%d,%d,%d",&x,&y,&z);
printf("x=%d,y=%d,z=%d\n",x,y,z);
printf("max=%d,min=%d\n",maxab(maxab(x,y),z),minab(minab(x,y),z));
break;
}
case 4:
{
int a;
printf("a=");
scanf("%d",&a);
insert(a);
break;
}
case 5:
{
int a[3][3],*p,i;
printf("input matrix:\n");
for(i=0;i<3;i++)
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);
p=&a[0][0];
move(p);
printf("now, matrix:\n");
for(i=0;i<3;i++)
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);
break;
}
case 6:
{
exit(0);
}
default:
{
printf("please input 1~6:\n");
break;
}
}
}
return 0;
}
double sumb(int n)
{
int i,t=1;
double sum=0;
for(i=1;i<=n;i++)
{
t=t*i;
sum=sum+1.0/t;
}
return sum;
}
void dtob(int x)
{
int j,k;
int p[30];
for(j=0;x!=0;j++)
{
p[j]=x%2;
x=x/2;
}
printf("\n二进制数为:");
for(k=j-1;k>=0;k--)
{
printf("%d\n",p[k]);
}
}
void dtoo(int x)
{
int j,k;
int p[30];
for(j=0;x!=0;j++)
{
p[j]=x%8;
x=x/8;
}
printf("\n八进制数为:");
for(k=j-1;k>=0;k--)
{
printf("%d\n",p[k]);
}
}
void dtox(int x)
{
int j,k;
int p[30];
for(j=0;x!=0;j++)
{
p[j]=x%16;
x=x/16;
if(p[j]<10) p[j]+=48;
else
{
switch(p[j])
{
case 10:
p[j]='A';
break;
case 11:
p[j]='B';
break;
case 12:
p[j]='C';
break;
case 13:
p[j]='D';
break;
case 14:
p[j]='E';
break;
case 15:
p[j]='F';
break;
}
}
}
printf("\n十六进制数为:");
for(k=j-1;k>=0;k--)
{
printf("%c\n",p[k]);
补充:大家帮帮忙,很急啊 明天交 谢谢 非常感谢
追问:哎呀 昨天太匆忙就落下了一段程序
分场感谢 分你拿了 嘿嘿
答案:#include<stdio.h>
#include<stdlib.h>
double sumb(int n);
void dtob(int x);
void dtoo(int x);
void dtox(int x);
int maxab(int x,int y);
int minab(int x,int y);
void insert(int a);
void move(int *pointer);
int main(void)
{
int number;
while(1)
{
printf("\n");
printf("c语言程序设计系统界面\n");
printf("********************** \n");
printf("**1. 求阶乘倒数之和(递归法)\n");
printf("**2. 将一个十进制数转换成r进制数(利用函数调用)\n");
printf("**3.求三个数的最大公约数和最小公倍数(利用函数调用)\n");
printf("**4.把一个整数插入到按由小到大的顺序排列(利用数组和指针来做)\n");
printf("**5.求n阶方阵的转置矩阵(利用易做图数组或指针作函数参数\n");
printf("**6.退出***********\n");
printf(" ************************************************\n");
printf("\n number(1~6):"); //输入 1~6中数字
scanf("%d",&number);
switch(number)
{
case 1: //如果输入数字是1 执行这段代码,求阶乘倒数之和
{
int n;
scanf("%d",&n); // 输入所求阶乘的数字,例如求5的阶乘就输入5
printf("sum=%f",sumb(n)); //调用sumb(n)函数,并且输入sumb(n)函数返回的结果
break; //结束这条语句。
}
case 2: //如果输入数字是2 将一个十进制数转换成r进制数(下面的3 4 5 6一一对应上面的所说的)
{int x;
printf("x= ");//输出 x=
scanf("%d",&x); //输入一个10进制的数字
dtob(x); // 调用函数dtob(x),求2进制数,并且输出结果
dtoo(x);//调用函数dtoo(x),求8进制数 并且输出结果
dtox(x);// 调用函数dtox(x),求十六进制数 并且输出结果
break;
}
case 3: //求三个数的最大公约数和最小公倍数
{
int x,y,z;
scanf("%d,%d,%d",&x,&y,&z); //输入3个数
printf("x=%d,y=%d,z=%d\n",x,y,z); // 将输入的3个数输出
printf("max=%d,min=%d\n",maxab(maxab(x,y),z),minab(minab(x,y),z));
//递归调用maxab(maxab(x,y),z),minab(minab(x,y),z)求最大公约数和最小公倍数
break;
}
case 4: //把一个整数插入到按由小到大的顺序排列
{
int a;
printf("a="); // 输出 a=
scanf("%d",&a);// 输入 a
insert(a); // 条用函数insert(a)
break;
}
case 5: // 求n阶方阵的转置矩阵
{
int a[3][3],*p,i;
printf("input matrix:\n");
for(i=0;i<3;i++)
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);// 将9个数输入2维数组
p=&a[0][0]; // 指针P指向2维数组的首地址
move(p); //调用move()函数
printf("now, matrix:\n");
for(i=0;i<3;i++)
printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]);//输出2维数组中所有元素
break;
}
case 6: //退出程序
{
exit(0); //退出程序的函数
}
default: //如果输入的不是 1~6中的数字,执行下面代码
{
printf("please input 1~6:\n");
break;
}
}
}
return 0;
}
double sumb(int n) //求阶乘和的函数(PS:这貌似不是递归)
{
int i,t=1;
double sum=0;
for(i=1;i<=n;i++)
{
t=t*i; // 求t的阶乘
sum=sum+1.0/t; //求t的阶乘和t前面所有的阶乘的和
}
return sum;//返回t阶乘的总和
}
void dtob(int x) //求2进制
{
int j,k;
int p[30]; //定义30个数组
for(j=0;x!=0;j++)//执行循环 求余数
{
p[j]=x%2; //将x除以2的余数放入数组中
x=x/2; //将x处于2的商赋值给x
}
printf("\n二进制数为:");
for(k=j-1;k>=0;k--)
{
printf("%d\n",p[k]);//输出数组中的数字,从最后一个开始输出
}
}
void dtoo(int x) //求8进制
{
int j,k;
int p[30];
for(j=0;x!=0;j++)
{
p[j]=x%8;//将x除以8的余数放入数组中
x=x/8;//将x的商赋值给x
}
printf("\n八进制数为:");
for(k=j-1;k>=0;k--)
{
printf("%d\n",p[k]); //输出数组中的数字,从最后一个开始输出
}
}
void dtox(int x) //求16进制
{
int j,k;
int p[30];
for(j=0;x!=0;j++)
{
p[j]=x%16;
x=x/16;
if(p[j]<10) p[j]+=48;// 如果第j个数的余数小于10.侧余数加上48
else
{
switch(p[j])
{
case 10: //如果第j个余数 为10,将A赋值给p[j], 由于16进制中10以上的都用字母
p[j]='A';
break;
case 11://如果第j个余数 为11,将A赋值给p[j], 由于16进制中10以上的都用字母
p[j]='B';
break;
case 12://如果第j个余数 为12,将A赋值给p[j], 由于16进制中10以上的都用字母
p[j]='C';
break;
case 13://如果第j个余数 为13,将A赋值给p[j], 由于16进制中10以上的都用字母
p[j]='D';
break;
case 14://如果第j个余数 为14,将A赋值给p[j], 由于16进制中10以上的都用字母
p[j]='E';
break;
case 15://如果第j个余数 为15,将A赋值给p[j], 由于16进制中10以上的都用字母
p[j]='F';
break;
}
上一个:c++程序设计
下一个:C++删字符