C语言程序设计实验报告
实验5 函数程序设计
一、实验目的
(1)掌握C语言函数定义及调用的规则; (2)掌握递归函数的编写方法和运行过程; (3)理解变量的作用域和生存期。 二、实验内容及步骤
1、程序改错
输入已编好的源程序,源程序中包含有错误,先对源程序进行编译和连接,然后根据提示信息,修改程序中的错误,经过多次修改—编译—连接,直到编译、连接成功。最后运行程序,输出正确结果。
(1)下述程序中,函数FUN功能是:计算正整数NUM的各位上的数字之积。例如,若输入252,则输出应该是20;若输入202,则输出应该是0。
#include
do
{k*=num; num\\=10; }while (num) return k; }
void main() {long n;
scanf(“%ld”,&n);
printf(“\\n%ld\\n”,fun(n)); }
修改后程序代码:
#include
{k*=num; num/=10;
}while (num); return k; }
void main() {long n;
scanf(\
printf(\}
1
运行结果:
2.已有一个已排好序的数组,要求在主程序中输入一个数,调用函数将其它插入数组
中,保持数组依然有序,在主函数中输出插入后的数组。
程序代码:
#include
{ void insert(int y); int x;
printf(\请输入一个数:\ scanf(\ insert(x); printf(\}
void insert(int y) {
int i,j,a[6]={1,5,10,15,20}; for(i=0;i<5;i++) { if(y
{for(j=5;j>i;j--) a[j]=a[j-1]; a[i]=y;break; } }
for(i=0;i<6;i++)
printf(\ }
运行结果:
3、有一篇文章,共有3行文字,每行有80个字符。要求在主程序中输入文章,打印统计结果。写一个函数分别统计出其中英文大写字母、小写字母、数字、空格及其它字符的个数。
程序代码:
#include
2
int d=0,x=0,k=0,n=0,s=0; main()
{void tongji(char c[][80]); char ch[3][80]; int i;
printf(\请输入三行字符:\\n\ for(i=0;i<3;i++) gets(ch[i]); tongji(ch);
printf(\大写字母个数为:%d\\n\ printf(\小写字母个数为:%d\\n\ printf(\空格个数为:%d\\n\ printf(\数字个数为:%d\\n\
printf(\其他字符个数为:%d\\n\
//总数减去大小写字母、空格、数字的个数就是其他字符的个数 }
void tongji(char c[][80]) {int i,j;
for(i=0;i<3;i++)
{ for(j=0;j<80;j++) { if(c[i][j]!='\\0')
{s++;//统计输入字符的总数
if(c[i][j]>='A'&&c[i][j]<='Z')d++; if(c[i][j]>='a'&&c[i][j]<='z')x++; if(c[i][j]>='0'&&c[i][j]<='9')n++; if(c[i][j]==' ')k++; }
else break; } } }
运行结果:
4. 递归程序设计练习——计算最大公约数
3
利用计算最大公约数的三条性质,用递归方法计算两个整数的最大公约数。 性质1:如果x>y,则x和y的最大公约数与x-y和y的最大公约数相同 性质2:如果y>x,则x和y的最大公约数与x和y-x的最大公约数相同 性质3:如果,即x=y,则x和y的最大公约数与x值和y值相同 具体要求:
①主函数中随机输入x、y的值 ②所有变量定义为整数变量。 ③键盘输入数据前要有提示。 ④要求用函数求最大公约数。 程序代码:
#include
{ int max(int a,int b); int x,y; printf(\请输入两个整数:用空格隔开\\n\ scanf(\ printf(\最大公约数为:%d\\n\}
int max(int a,int b) { int t;
if(a==b) t=b;
if(a>b) t=max(a-b,b); if(b>a) t=max(b-a,a); return t; }
运行结果:
4