当前位置:编程学习 > C/C++ >>

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++删字符

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,