c语言实验七

更新时间:2023-10-09 04:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

常熟理工学院

《C语言程序设计》实验指导与报告书

______学年 第____ 学期

专 业: ___________________________________________ 学 号: ___________________________________________ 姓 名: ___________________________________________ 实验地点:___________________________________________ 指导教师:___________________________________________

计算机科学与工程学院

2014

1

实验9 函数程序设计(1)

9.1 实验目的

1.理解函数的概念,掌握函数的定义与调用方法。

2.理解参数传递的概念,理解形参与实参之间的对应关系。 3.理解局部变量与全局变量的概念。

4.掌握数组作为函数的参数的程序设计方法。

9.2 示例程序

【实验9.1】本程序的功能是:求任意两个正整数的最小公倍数。 程序代码:

#include int gbs(int m,int n) {

int r,p; p=m*n;

while((r=m%n)!=0) { }

p=p/n; return(p); } int main() {

int a,b,c;

printf(\scanf(\

c=gbs(a,b); printf(\return 0; }

/* 调用函数 */

/* 最小公倍数 */

m=n; n=r;

/* 余数不为0时循环 */

/* 上一次的除数作为新的被除数 */ /* 上一次的余数作为新的除数 */

说明:

1.函数中首先求出两个整数的最大公约数,采用的算法是辗转相除法。

2.以其中一个数做被除数,另一个数做除数,相除求余数。若余数不为0,则以上一次的除数作为新的被除数,上一次的余数作为新的除数,继续求余数。

3.直至余数为0时,对应的除数就是最大公约数。两个整数的乘积除以最大公约数即为最小公倍数。

),输出m~n之间所有的完数,完【实验9.2】输入两个正整数m和n(m?1,n?1000数就是其因子和与它本身相等的数。要求定义和调用函数factsum(n),它的功能是返回n的

因子和。例如,factsum(12)的返回值是16(1+2+3+4+6)。

程序代码:

#include

2

int factsum(int n); int main() {

int i,m,n, result;

printf(\scanf(\if(m>n) { {

i=m;m=n;n=i;}

/* 使m

/* 调用函数求因子和 */ /* 判断是否完数 */

for(i=m;i<=n;i++)

result=factsum(i); if(i==result)

printf(\

} return 0; }

int factsum(int n) {

int i,sum; sum=1;

for(i=2;i<=n/2;i++)

if(n%i==0)

sum=sum+i;

return sum; }

/* 累加因子 */ /* 返回因子和 */

/* 找所有因子 */

/* 求因子和函数 */

/* 对函数进行声明 */

说明:

1.函数factsum(n)的功能是返回整数n的因子和。

2.调用返回后,将因子和与i进行比较,若相等则是完数。

9.3 阅读程序

【实验9.3】以下程序的功能是:由键盘输入一个正整数n,调用判断素数的函数,输出小于n的所有素数,将素数以每行3个的形式输出。

程序代码:

#include int prime(int m) {

int i;

for(i=2;i

if(m%i==0)

return(0);

return(1); } int main() {

int i,n,k=0;

printf(\scanf(\for(i=2;i<=n;i++)

3

/* */

/* */

if(prime(i)) {

printf(\k++;

if(k%3==0)

printf(\

} return 0; }

/* */

/* */

说明:

1.输入一个整数后,则判断由2到n之间的每个数是否为素数。

2.函数prime用于判断一个整数n是否为素数。若是素数返回值1,否则返回值0。 【实验9.4】下面程序的功能是:一维数组中存放了10名同学某门课程的成绩,使用全局变量与函数,求出10名同学的平均分、最高分和最低分。

程序代码:

#include

float max=0,min=0; float average(float array[],int n) {

int i;

float aver,sum=array[0];

max=min=array[0]; for(i=1;i

if(array[i]>max)

max=array[i];

else if(array[i]

min=array[i]; sum=sum+array[i]; }

aver=sum/n; return(aver); } int main() {

float ave,score[10]; int i;

for(i=0;i<10;i++)

scanf(\

ave=average(score,10); return 0; }

/* */

printf(\

/* */

/* */

/* */

/* */

说明: 1.程序中将最高分与最低分变量定义为全局变量,这样可以实现从函数中返回多个值。 2.但在程序设计中应尽量少使用全局变量,否则会使函数的通用型降低。

9.4 完善程序

4

【实验9.5】下面程序的功能是:寻找具有下列特性的四位正整数,其百位数为0,去掉百位数0可得到一个三位正整数,而该三位正整数乘以9等于原四位正整数。例如,6075=675×9,所以6075是具有上述特性的正整数。请完善程序。

程序代码:

#include int fun(int n) {

int a,b,c,d; a=n/1000;

/* 求出千位数字 */ /* 求出百位数字 */

b=________; d=n;

if((b==0)&&(_________)

return 1; else

return 0;

} int main() {

int i;

for(i=1000; i<10000; i++)

if(________)

printf(\

printf(\return 0; }

/* 判断i是否所要找的数 */

/* 判断是否满足条件 */

c=(n-a*1000-b*100)/10;

说明:

1.程序采用循环遍历1000到9999之间的每个数。

2.函数fun中分别求出每一位数字,由得到的数字判断是否满足题目的条件,若满足条件返回1,否则返回0。

9.5 改错程序

【实验9.6】本程序的功能是:以每行5个的格式输出2~2000之间满足下列条件的数: (1)该数是素数;

(2)从个位开始依次去掉一位数字后的数仍然是素数。例如,233是素数,23和2仍然是素数,则233满足条件。请改正程序中的错误,并调试。

注意:改错时不允许增加及删除语句,只允许修改或移动语句的位置。 【含有错误的程序代码】

#include int prime(int n) {

int i;

for(i=2;i

if(n%i=0)

return 0;

return 1; }

5

/* 判断n是否为素数的函数 */

int main() {

int m,n,k,flag; for(n=2;n<2000;n++)

if(prime(n))

continue; else {

m=n; flag=1; {

/* 标志变量置为1 */ /* 依次去掉一位数字 */ /* 若不是素数标志变量置为0 */

while(m<0)

m=m/10; if(!prime(m)) { } } if(flag) {

k++; if(k%5==0)

printf(\

}

} return 0; }

/* 若是素数则输出 */

printf(\

flag=0; break;

/* 若不是素数则判断下一个 */

9.6 自己练习

1.编写程序,输出1~100之间各位数的乘积大于各位数的和的数。要求判断各位数的乘积大于各位数的和用函数实现。

2.编写程序验证哥德巴赫猜想:任何充分大的偶数都可由两个素数之和来表示。例如:4=2+2,6=3+3,8=3+5,…。验证4~20之间的数。要求判断素数用函数实现。

3.编写程序,输出100以内的正整数中包含数字3,5,7中的一个的数。要求判断一个数中包含数字3,5,7中的一个的数用函数实现。

6

本文来源:https://www.bwwdw.com/article/b8cf.html

Top