实验一 函数-指针及其应用

时间:2026-01-18   来源:未知    
字号:

实验一函数、指针及其应用

(一)函数的基本应用 一、实验目的

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<stdio.h> 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 <stdio.h> 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<stdio.h> 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<num/2 && ② ;n++) if ( ③ ==0)

flag=0;

return( ④ ); }

(3)以下程序功能是:输入一个长的正整数,将其每位数分离出来,并求其和。例如,输入650123,输出为:6+5+0+1+2+3=17。(求和采用递归实现) #include <stdio.h> 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 <stdio.h>

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<stdio.h> 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)。

(二)指针与数组

一、实验目的

1、进一步理解指针概念。

2、掌握指针与一维数组的关系。 3、掌握指针与二维数组的关系。 4、掌握指针数组的定义和引用。

5、掌握用指针数组、字符串指针编写相应的应用程序。 二、实验内容

1.验证性试验

(1)下列程序的执行结果是什么? #include <stdio.h> void main() { int a[10]; int *p;

for(p=a; p<a+10; p++)

scanf("%d",p); for(p=a; p<a+10; p++)

{printf("address=%x\t",p); printf("value=%d\n",*p); }

printf("%d\t",p); printf("%d\n",*p); }

(2)下列程序的执行结果是什么? #include<stdio.h> void main( ) { int a[5][5]; int i,j;

for(i=0;i<5;i++) for(j=0;j<5;j++)

*(*(a+i)+j)=i+j; for(i=0;i<5;i++) { for(j=0;j<5;j++)

printf("%2d",*(*(a+i)+j) );

printf("\n"); } }

(3)下列程序的执行结果是什么? #include <stdio …… 此处隐藏:5736字,全部文档内容请下载后查看。喜欢就下载吧 ……

实验一 函数-指针及其应用.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:19 元/月 原价:99元
    低至 0.1 元/份 每月下载300
    全站内容免费自由复制
    VIP包月下载
    特价:19 元/月 原价:99元
    低至 0.1 元/份 每月下载300
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)