您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 实验(7)-函数-参考答案
1C语言程序设计实验教学(7)【实验目的】函数是C程序的基本组成部分,学习函数的设计和调用是很重要的。实验目的是掌握函数的定义、变量的作用域和函数的调用。【实验要求】实际应用程序通常是由多个函数构成的,要求将常见的功能模块用函数形式实现,并学会在主函数或其他函数中调用定义的函数。要学会函数声明。【实验课时】6.0【实验内容】1.编写函数fun(n),n为三位自然数,判断n是否为水仙花数,是返回1,否返回0。编写main函数,输入一个数num,调用fun(num)函数,并输出函数的返回值。#includestdio.hintfun(intn){inta,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);elsereturn(0);}main(){intnum;scanf(%d,&num);while(num100||num=1000){printf(pleaseenterthenumagain!(num=100&&num1000)\n);scanf(%d,&num);}if(fun(num)==1)printf(yes\n);elseprintf(no\n);}2.编写函数ss(n),判断n是否为素数,是返回1,否返回0。编写main函数,输入一个数num,调用ss(num)函数,并输出函数的返回值。#includestdio.hintss(intn){inti;2for(i=2;in;i++)if(n%i==0)break;if(i=n)return(1);elsereturn(0);}main(){intnum;scanf(%d,&num);if(ss(num)==1)printf(yes\n);elseprintf(no\n);}3.编写一个函数fun(n),计算n!,并编写main函数测试,在main函数中输入num,调用fun(num),输出计算的结果。#includestdio.hlongfun(intn){longs=1;inti;for(i=1;i=n;i++)s=s*i;return(s);}main(){intnum;scanf(%d,&num);if(num=0)printf(%d!=%ld\n,num,fun(num));elseprintf(inputdataerror!\n);}4.使用递归函数实现计算n!,并在main函数中调用。#includestdio.hlongfun(intn){longf;if(n==1||n==0)f=1;elsef=n*fun(n-1);returnf;}3main(){intnum;scanf(%d,&num);if(num=0)printf(%d!=%ld\n,num,fun(num));elseprintf(inputdataerror!\n);}5.某数列为K(n)的定义为:用递归的方法求该数列的第6项k(6)。1n=1k(n)=k(n-1)×2n为偶数k(n-1)×3n为奇数intk(intn){intc;if(n==1)c=1;elseif(n%2==0)c=k(n-1)*2;elsec=k(n-1)*3;returnc;}main(){intm;scanf(%d,&m);if(m=1)printf(k(%d)=%d\n,m,k(m));elseprintf(inputdataerror!\n);}6.计算s=(1!)+(1!+2!)+…+(1!+…+n!)。n由用户输入,小于10。(设计:函数h1()计算阶乘;函数h2()计算每个数据项的累加运算。用函数的嵌套来做)longh1(intn){longt=1;inti;for(i=1;i=n;i++)t=t*i;returnt;}longh2(intm){longs=0;inti;4for(i=1;i=m;i++)s=s+h1(i);returns;}main(){intk,j;longsum=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);}7.设计一个函数fc,其功能为统计数组中偶数的个数。编写main函数,用数组名num做为函数传递的参数调用fc函数,实现对数组num的统计,并输出统计结果。#includestdio.hintfc(inta[],intn){inti,c=0;for(i=0;in;i++)if(a[i]%2==0)c=c+1;return(c);}main(){inti,num[10];for(i=0;i10;i++)scanf(%d,&num[i]);printf(oushu:%d\n,fc(num,10));printf(jishu:%d\n,10-fc(num,10));}8.在一个一维数组a中存放10个正整数,求其中所有的素数。(用数组元素作为函数的实际参数)5intsushu(intx){inti,k=1;if(x==1)k=0;for(i=2;i=x/2;i++)if(x%i==0)k=0;return(k);}main(){inta[10],i;for(i=0;i10;i++)scanf(%d,&a[i]);printf(sushuofarrayaare:\n);for(i=0;i10;i++)if(sushu(a[i]))printf(%5d,a[i]);printf(\n);}9.设计一个函数,计算两个自然数的最大公约数。intgcd(intm,intn){intr;r=m%n;while(r!=0){m=n;n=r;r=m%n;}returnn;}main(){intm,n;scanf(%d,%d,&m,&n);printf(%d\n,gcd(m,n));}10.设计一个函数floatave(inta[10]),计算数组a所有元素的平均值。(用数组名作为函数的实际参数)floatave(inta[10])6{inti,sum=a[0];floataver;for(i=1;i10;i++)sum=sum+a[i];aver=1.0*sum/10;return(aver);}voidmain(){inti,score[10];floataver;for(i=0;i10;i++)scanf(%d,&score[i]);printf(\n);aver=ave(score);printf(averagescoreis%5.2f\n,aver);}11.用选择法对数组中10个整数按升序排序。(要求将排序功能设计成函数,数组名作为参数)。voidsort(intarray[],intn){inti,j,k,t;for(i=0;in-1;i++){k=i;for(j=i+1;jn;j++)if(array[j]array[k])k=j;t=array[k];array[k]=array[i];array[i]=t;}}voidmain(){inta[10],i;printf(inputthearray:\n);for(i=0;i10;i++)scanf(%d,&a[i]);sort(a,10);printf(outputthearrayafterordered:\n);7for(i=0;i10;i++)printf(%5d,a[i]);printf(\n);}12.设有一个3×4的矩阵,求出其中的最大元素。(要求:将计算最大值的功能设计成函数,数组名作为参数)max_value(intarray[12]){inti,max;max=array[0];for(i=0;i12;i++)if(array[i]max)max=array[i];return(max);}main(){inta[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};printf(max=%d\n,max_value(a));}13.设计一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。(学习指导书P74)#includestring.hmain(){intinverse(charstr[]);/*函数原型声明*/charstr[100];printf(Inputstring:\n);gets(str);inverse(str);printf(Outputstringafterinverse:\n);puts(str);}intinverse(charst[])/*函数定义*/8{chart;inti,j;for(i=0,j=strlen(st);istrlen(st)/2;i++,j--){t=st[i];st[i]=st[j-1];st[j-1]=t;}}14.设计一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如输入1990,应输出“1990”。(学习指导书P76)#includestring.hmain(){charstr[80];voidinsert(charstr[]);printf(\nInputfourdigits:\n);gets(str);insert(str);printf(\nOutputdigitsafterinsertspace:\n);puts(str);}voidinsert(charstr[]){inti;for(i=strlen(str);i0;i--){str[2*i]=str[i];str[2*i-1]='';}}15.使用局部静态变量,求1到5的阶乘。intfac(intn){staticintf=1;9f=f*n;returnf;}main(){inti;for(i=1;i=5;i++)printf(%d!=%d\n,i,fac(i));}16.从键盘上输入一个字符串,内有若干个字符,再输入一个字符,编写程序将字符串中该字符删去。(用外部函数实现)____参考课件和教材。/*文件名为:zy161.c*/main(){externenter_string(),delete_string(),print_string();charc;staticcharstr[80];enter_string(str);scanf(%c,&c);delete_string(str,c);print_string(str);}/*文件名为:zy162.c*/#includestring.henter_string(charstr[]){gets(str);}/*文件名为:zy163.c*/delete_string(charstr[],charch){inti,j;for(i=j=0;str[i]!='\0';i++)if(str[i]!=ch)10str[j++]=str[i];str[j]='\0';}/*文件名为:zy164.c*/#includestring.hprint_string(charstr[]){puts(str);}
本文标题:实验(7)-函数-参考答案
链接地址:https://www.777doc.com/doc-2530773 .html