实验(8)-函数-参考答案.doc_第1页
实验(8)-函数-参考答案.doc_第2页
实验(8)-函数-参考答案.doc_第3页
实验(8)-函数-参考答案.doc_第4页
实验(8)-函数-参考答案.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计 实验教学(8)【实验目的】函数是C程序的基本组成部分,学习函数的设计和调用是很重要的。实验目的是掌握函数的定义、变量的作用域和函数的调用。【实验要求】实际应用程序通常是由多个函数构成的,要求将常见的功能模块用函数形式实现,并学会在主函数或其他函数中调用定义的函数。要学会函数声明。【实验课时】6.0【实验内容】1. 编写函数fun(n),n为三位自然数,判断n是否为水仙花数,是返回1,否返回0。编写main函数,输入一个数num,调用fun(num)函数,并输出判断结果。#include #include 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);void main()int num; clrscr();scanf(%d,&num); while(num=1000) printf(please enter the num again! (num=100&num1000) n); scanf(%d,&num); if(/*/ fun(num)=1 /*/) printf( %d is a sxhs.n,num); else printf( %d is not a sxhs.n,num);2. 编写函数ss(n), 判断n是否为素数,是返回1,否返回0。编写main函数,输入一个数num,调用ss(num)函数,并输出判断结果。#include #include int ss(int n)int i; for(i=2;i=n) return(1); else return(0);void main() int num; clrscr();scanf(%d,&num);if(/*/ ss(num)=1 /*/) printf(%d is a sushu.n,num); else printf(%d is not a sushu.n,num);3. 编写一个函数fun(n),计算n!,并编写main函数测试,在main函数中输入num,调用fun(num),输出计算的结果。#include #include long fun(int n)long s=1; int i; for(i=1;i0) printf(%d!=%ld n,num,/*/ fun(num) /*/); else printf(input data error! n);4. 使用递归函数实现计算n!,并在main函数中调用。#include #include long fun(int n)long f;if(n=1|n=0) f=1; else f=n*fun(n-1); return f;void main()int num; clrscr();scanf(%d,&num); if(num0) printf(%d!=%ld n,num,/*/ fun(num) /*/); else printf(input data error! n);5. 某数列为K(n)的定义为:用递归的方法求该数列的第6项k(6)。 1 n=1 k(n)= k(n-1)2 n为偶数 k(n-1)3 n为奇数#include #include 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;void main()int m; clrscr(); scanf(%d,&m); if(m=1) printf(k(%d)=%dn,m,/*/ k(m) /*/); else printf(input data error!n);6. 计算s=(1!)+(1!+2!)+(1!+n!)。 n由用户输入,小于10。(设计:函数h1(n)计算n的阶乘;函数h2(m)计算1!+2!+m!的累加运算。在主函数中调用h2()函数,h2()函数中调用h1()函数来实现累加。)#include #include 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;void main()int k,num; long sum=0; clrscr(); scanf(%d,&num); for(k=1;k=num;k+) /*/ sum=sum+h2(k) /*/; printf(1!)+(1!+2!)+.+(1!+2!+.+%d!)=%ldn,num,/*/ sum /*/);7. 设计一个函数gcd(),计算两个自然数的最大公约数。在主函数中输入两个数,调用此函数,输出求得的结果。#include #include int gcd(int m,int n)int r;r=m%n; while(r!=0) m=n;n=r;r=m%n; return n;void main()int m,n; clrscr(); scanf(%d,%d,&m,&n); printf(%dn,/*/ gcd(m,n) /*/); /*调用gcd()求m,n的最大公约数*/8. 在一个一维数组a中存放10个正整数, 输出其中所有的素数。(用数组元素作为函数的实际参数) #include #include 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); void main( ) int a10,i; clrscr(); for(i=0;i10;i+) scanf(%d,&ai); printf(sushu of array a are:n); for(i=0;i10;i+) if(/*/ sushu(ai) /*/) /*以数组元素作实参调用sushu()进行判断*/ printf(%5d,ai);printf(n); 9. 设计一个函数fc,其功能为统计数组中偶数的个数。编写main函数,用数组名num做为函数传递的参数调用fc函数,实现对数组num的统计,并输出统计结果。#include #include int fc(int a,int n)int i,c=0; for(i=0;in;i+) if(ai%2=0) c=c+1; return(c);void main()int i,num10; clrscr();for(i=0;i10;i+) scanf(%d,&numi); printf(oushu: %d n,/*/ fc(num,10) /*/);/*数组名和长度作实参调用fc()*/ printf(jishu: %d n,/*/ 10-fc(num,10) /*/);10. 设计一个函数float ave(int a10),计算数组a所有元素的平均值。(用数组名作为函数的实际参数)#include #include float ave(int a10)int i,sum=a0 ; float aver; for(i=1;i10;i+) sum=sum+ai ; aver=1.0*sum/10 ; return(aver); void main() int i,score10; float aver; clrscr(); for(i=0;i10;i+) scanf(%d,&scorei); printf(n); aver=/*/ ave(score) /*/; /*以数组名作实参调用ave()*/ printf(average score is %5.2fn,aver);11. 用选择法对数组中10个整数按升序排序。(要求将排序功能设计成函数,数组名作为参数)#include #include void sort(int array,int n)int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(arrayjarrayk) k=j; t=arrayk;arrayk=arrayi;arrayi=t; void main() int a10,i; clrscr(); printf(input the array:n); for(i=0;i10;i+) scanf(%d,&ai); /*/ sort(a,10) /*/; /*以数组名和长度作实参调用sort()*/printf(output the array after ordered:n); for(i=0;i10;i+) printf(%5d,ai); printf(n);12. 设有一个34的矩阵,求出其中的最大元素。(要求:将计算最大值的功能设计成函数max_value(int array12),二维数组名作为参数)#include #include max_value(int array12)int i,max; max=array0; for(i=0;imax) max=arrayi; return(max);void main()int a34=1,3,5,7,2,4,6,8,15,17,34,12; clrscr(); printf(max=%dn,/*/ max_value(a) /*/); /*以二维数组名作实参*/13. 设计一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。(课后习题P248_题7.9)#include #include #include void main() int inverse (char str ); /*函数原型声明*/char str100; clrscr();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=sti; sti=stj-1; stj-1=t;14编写一个程序,在主函数中输入10个不等长的字符串。用另一个函数sort()对它们排序,函数sort()原型为:void sort(char (*s)10);,要求形参是指向由10个元素组成的一维数组的行指针,然后在主函数输出这10个已排好的字符串。#include #include #include void main()void sort(char (*s)10); int i; char str1010; char (*p)10; clrscr(); printf(Input 10 strings:n); for(i=0;i10;i+) gets(stri); p=/*/ str /*/; /*让行指针变量指向二维字符数组第0行*/*/ sort(p) /*/; /*以行指针变量名作实参调用sort()*/ printf(Now, the sequence is:n); for(i=0;i=1;i-) for(j=0;j0 ) /*/ strcpy(t,sj); strcpy(sj,sj+1); strcpy(sj+1,t); /*/运行结果:Input 10 strings: ChinaJapanKoreaEgyptNepalAmericaGermanSudanItalyLibyaNow, the sequence is:AmericaChinaEgyptGermanItalyJapanKoreaLibyaNepalSudan15编写一个程序,在主函数中输入10个不等长的字符串。用另一个函数sort()对它们排序,函数sort()原型为:void sort(char *p10);,要求用指针数组处理,然后在主函数输出这10个已排好的字符串。#include #include #include void main()void sort(char *p); int i; char *s10,str1020; clrscr(); for(i=0;i10;i+) si=/*/ stri /*/; /*将第i个字符串的首地址赋予指针数组p的第i个元素*/ printf(Input 10 strings:n); for(i=0;i10;i+) gets(/*/ si /*/); /*/ sort(s) /*/; /*以指针数组名作实参调用sort()*/ printf(Now, the sequence is:n); for(i=0;i=1;i-) for(j=0;j0) /*比较后交换字符串地址*/ /*/ temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; /*/运行情况如下:Input 10 strings:ChinaJapanYemenPakistanMexicoKoreaBrazilIcelandCanadaMongoliaNow, the sequence is:BrazilCanadaChinaIcelandJapanKoreaMexicoMongoliaPakistanYemen16编写一个程序,用指向指针的指针的方法对5个字符串排序并输出。自定义函数sort()的原型为:void sort(char *p);。#include #include #include #define LINEMAX 20 /*定义字符串的最大长度*/void main()void sort(char *p); int i; char *p,*pstr5,str5LINEMAX; clrscr(); for(i=0;i5;i+) pstri=/*/ stri /*/; /*将第i个字符串首地址赋予指针数组pstr的第i个元素*/ printf(Input 5 strings:n); for(i=0;i5;i+) gets(pstri); p=/*/ pstr /*/; /*让二级指针变量p指向指针数组第0号元素*/ /*/ sort(p) /*/; /*以二级指针变量名作实参调用sort()*/ printf(strings sorted:n); for(i=0;i5;i+) puts(pstri);void sort(char *p) /*比较交换法对5个字符串排序的函数*/int i,j; char *temp; for(i=0;i4;i+) for(j=i+1;j0) /*比较后交换字符串地址*/ /*/ temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; /*/运行情况如下:Input 5 strings:ChinaAmericaIndiaPhilippinesCanadastrings sorted:AmericaCanadaChinaIndiaPhilippines17编写一个程序,用指向指针的指针的方法对n个整数排序并输出。要求写一个自定义函数sort(),其原型为:void sort(int *p,int n);n和整数在主函数中输入。排序后结果最后在主函数中输出。#include #include void main()void sort(int *p,int n); /*被调函数的原型声明 */ int i,n,data10,*p,*pstr10; clrscr(); printf(Input n: ); scanf(%d,&n); for(i=0;in;i+) pstri=/*/ &datai /*/; /*将第i个整数的地址赋予指针数组pstr的第i个元素*/ printf(Input %d integer numbers:n,n); for(i=0;in;i+) scanf(%d,/*/ pstri /*/); /*用指针数组元素引用datai地址*/ p=/*/ pstr /*/; /*让二级指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论