C语言程序设计实验教学(7)【实验目的】函数是C程序的基本组成部分,学习函数的设计和调用是很重要的。
实验目的是掌握函数的定义、变量的作用域和函数的调用。
【实验要求】实际应用程序通常是由多个函数构成的,要求将常见的功能模块用函数形式实现,并学会在主函数或其他函数中调用定义的函数。
要学会函数声明。
【实验课时】6.0【实验内容】编写函数fun(n),n为三位自然数,判断n是否为水仙花数,是返回1,否返回0。
编写main 函数,输入一个数num,调用fun(num)函数,并输出函数的返回值。
#include "stdio.h"int fun(int n){int a,b,c;a=n%10; b=n/10%10; c=n/100;if(a*a*a+b*b*b+c*c*c==n) return(1);else return(0);}main(){int num; scanf("%d",&num);while(num<100||num>=1000){printf("please enter the num again! (num>=100&&num<1000) \n");scanf("%d",&num);}if(fun(num)==1) printf(" yes \n");else printf(" no \n");}编写函数ss(n), 判断n是否为素数,是返回1,否返回0。
编写main函数,输入一个数num,调用ss(num)函数,并输出函数的返回值。
#include "stdio.h"int ss(int n){int i;for(i=2;i<n;i++)if(n%i==0) break;if(i>=n) return(1);else return(0);}main(){ int num; scanf("%d",&num);if(ss(num)==1) printf(" yes \n");else printf(" no \n");}编写一个函数fun(n),计算n!,并编写main函数测试,在main函数中输入num,调用fun(num),输出计算的结果。
#include "stdio.h"long fun(int n){long s=1; int i;for(i=1;i<=n;i++) s=s*i;return(s);}main(){int num; scanf("%d",&num);if(num>=0) printf("%d!=%ld \n",num,fun(num));else printf("input data error! \n");}使用递归函数实现计算n!,并在main函数中调用。
#include "stdio.h"long fun(int n){long f;if(n==1||n==0) f=1;else f=n*fun(n-1);return f;}main(){int num; scanf("%d",&num);if(num>=0) printf("%d!=%ld \n",num,fun(num));else printf("input data error! \n");}某数列为K(n)的定义为:用递归的方法求该数列的第6项k(6)。
1 n=1k(n)= k(n-1)×2 n为偶数k(n-1)×3 n为奇数int k(int n){int c;if(n==1) c=1;else if(n%2==0) c=k(n-1)*2;else c=k(n-1)*3;return c;}main(){int m;scanf("%d",&m);if(m>=1) printf("k(%d)=%d\n",m,k(m));else printf("input data error!\n");}计算s=(1!)+(1!+2!)+…+(1!+…+n!)。
n由用户输入,小于10。
(设计:函数h1()计算阶乘;函数h2()计算每个数据项的累加运算。
用函数的嵌套来做)long h1(int n){long t=1;int i;for(i=1;i<=n;i++) t=t*i;return t;}long h2(int m){long s=0;int i;for(i=1;i<=m;i++)s=s+h1(i);return s;}main(){int k,j;long sum=0;scanf("%d",&k);for(j=1;j<=k;j++)sum=sum+h2(j);printf("(1!)+(1!+2!)+...+(1!+2!+...+%d!)=%ld\n",k,sum);}设计一个函数fc,其功能为统计数组中偶数的个数。
编写main函数,用数组名num做为函数传递的参数调用fc函数,实现对数组num的统计,并输出统计结果。
#include "stdio.h"int fc(int a[],int n){int i,c=0;for(i=0;i<n;i++)if(a[i]%2==0) c=c+1;return(c);}main(){int i,num[10];for(i=0;i<10;i++)scanf("%d",&num[i]);printf("oushu: %d \n",fc(num,10));printf("jishu: %d \n",10-fc(num,10));}在一个一维数组a中存放10个正整数, 求其中所有的素数。
(用数组元素作为函数的实际参数)int sushu(int x){int i,k=1;if(x==1) k=0;for(i=2;i<=x/2;i++)if(x%i==0) k=0;return(k); }main( ){int a[10],i;for(i=0;i<10;i++) scanf("%d",&a[i]);printf("sushu of array a are:\n");for(i=0;i<10;i++)if(sushu(a[i])) printf("%5d",a[i]);printf("\n");}设计一个函数,计算两个自然数的最大公约数。
int gcd(int m,int n){int r;r=m%n;while(r!=0){m=n;n=r;r=m%n;}return n;}main(){int m,n;scanf("%d,%d",&m,&n);printf("%d\n",gcd(m,n));}设计一个函数float ave(int a[10]),计算数组a所有元素的平均值。
(用数组名作为函数的实际参数)float ave(int a[10]){int i,sum=a[0] ; float aver;for(i=1;i<10;i++)sum=sum+a[i] ;aver=1.0*sum/10 ;return(aver); }void main(){int i,score[10]; float aver;for(i=0;i<10;i++)scanf("%d",&score[i]);printf("\n");aver=ave(score);printf("average score is %5.2f\n",aver);}用选择法对数组中10个整数按升序排序。
(要求将排序功能设计成函数,数组名作为参数)。
void sort(int array[],int n){int i,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(array[j]<array[k]) k=j;t=array[k];array[k]=array[i];array[i]=t;} }void main(){int a[10],i;printf("input the array:\n");for(i=0;i<10;i++) scanf("%d",&a[i]);sort(a,10);printf("output the array after ordered:\n");for(i=0;i<10;i++) printf("%5d",a[i]);printf("\n");}设有一个3×4的矩阵,求出其中的最大元素。
(要求:将计算最大值的功能设计成函数,数组名作为参数)max_value(int array[12]){int i,max;max=array[0];for(i=0;i<12;i++)if(array[i]>max) max=array[i];return(max);}main(){int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};printf("max=%d\n",max_value(a));}设计一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
(学习指导书P74)#include <string.h>main(){int inverse (char str[]); /*函数原型声明*/char str[100];printf("Input string:\n");gets(str);inverse(str);printf("Output string after inverse:\n");puts(str);}int inverse(char st[]) /* 函数定义*/{char t; int i,j;for(i=0,j=strlen(st);i<strlen(st)/2;i++,j--){ t=st[i];st[i]=st[j-1];st[j-1]=t;}}设计一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。