实验一 函数-指针及其应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一函数、指针及其应用
(一)函数的基本应用
一、实验目的
1.掌握函数声明、定义及调用的方法。
2.掌握函数实际参数与形式参数的对应关系以及数据的“值传递”方式。
3.掌握递归的思想和递归调用的一般方法。
4.学习编写简单的递归程序。
二、实验内容
1.验证性实验
(1)下列程序的执行结果是什么?
#include "stdio.h"
void change(int a,int b)
{ int t;
t=a;a=b;b=t;
}
void main( )
{ int x,y;
printf("input x,y: ");
scanf("%d,%d",&x,&y);
change(x,y);
printf("x=%d,y=%d\n",x,y);
}
思考:为什么x与y的值没有互换?
(2)下列程序的执行结果是什么?
#include
void exam1(int);
void exam2(void);
int a=0;
void main(void)
{ int a;
a=15;
printf("a=%d\n",a);
exam1(a);
printf("a=%d\n",a);
exam2( );
printf("a=%d\n",a);
}
void exam1( int a)
{ printf("\ta=%d\n",a);
a++;
printf("\ta=%d\n",a);
}
void exam2(void)
{ printf("\ta=%d\n",a);
a++;
printf("\ta=%d\n",a);
}
2.程序填空
(1)下列程序的功能是输出100~1000之间所有既能被3整除,又能被7整除的数。
#include
void main()
{int k;
int sele(int n);
for(k=100;k<=1000;k++)
if( ① )
printf("%5d", ② );
printf("\n");
}
int sele(int n)
{ if( ③ )
return (1);
return 0 ;
}
(2)下列程序的功能是:prime()函数用于判别一个数是否为素数,在主函数输入一个整数,输出是否素数的信息。
#include
void main()
{
int number;
int prime(int number);
printf("请输入一个正整数:\n");
scanf("%d",&number);
if (prime(number))
printf("\n %d是素数. ",number);
else
printf("\n %d不是素数. ",number);
}
int prime(int num) /*此函数用于判别素数*/
{ int flag= ① ,n;
for(n=2;n if ( ③ ==0) flag=0; return( ④ ); } (3)以下程序功能是:输入一个长的正整数,将其每位数分离出来,并求其和。例如,输入650123,输出为:6+5+0+1+2+3=17。(求和采用递归实现) #include int sum(long n) { unsigned long x; if(n<10) ① ; else x=sum(n/10)+ ② ; return ③ ; } void main() { unsigned long x; printf("请输入一个整数:"); scanf("%lu",&x); printf("s=%d", ④ ); printf("\n"); } 3.程序改错 (1)下列程序的功能是利用自定义函数计算一无符号整数各位数字的乘积。 #include unsigned f(unsigned num) {unsigned k=0;★ do {k*=num/10;★ num/=10; }while(k);★ return k; } void main() {int x; printf("input x=:\n"); scanf("%d", x);★ printf("%d",f(x)); } (2)以下程序的功能是:输入一个三位数,判断是否为“水仙花数”。函数flower()用以判断一个数是否为“水仙花数”,主函数main()中进行测试。 #include int flower(int n) { int x=0,i,j,k; i=(n%10); j= (n/10/10);★ k=(n/100); x=i*i*i+j*j*j+k*k*k; if(x==n) return 0; else return 1; } void main() { int n; printf("Please intput n: "); scanf("%f",&n);★ if(n>999||n<100) printf("Input error!!!"); else {if(flower(n))★ printf("%d is a flower nubmer!\n",n); else printf("%d isn't a flower nubmer!\n",n); } } 4.设计性实验 (1)写一函数判断输入年份是否为闰年,并编写主函数测试。 提示: ①该函数有一个整型参数year,若year为闰年,则返回1,否则返回0。 ②判断年份year是否为闰年的条件是:若year能被4整除而且不能被100整除,则是闰年;若year能被400整除也是闰年。 (2)编写函数求出任意二个正整数的最大公约数和最小公倍数。在主函数中输入这两个数,并输出它们的最大公约数和最小公倍数。 (3)编写一个函数求1+2+3+…100。要求用递归调用的方法实现,并写一个主函数输出结果。 (4)已知二阶Fibonacci数列: Fib(0)=0;若n=0 Fib(1)=1;若n=1 Fib(n)= Fib(n-1)+ Fib(n-2) 其他情况 定义递归和非递归函数求Fib(n)。