《2022年C语言章节练习 2.pdf》由会员分享,可在线阅读,更多相关《2022年C语言章节练习 2.pdf(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、函数应用程序设计1、编写求圆的面积的函数,并调用该函数求出圆环的面积。#define PI 3.14159 float area(float r) float s; s=PI*r*r; return(s); main() float r1,r2,s; scanf(%d%d,&r1,&r2); s=area(r1)-area(r2); /* 主调函数中变量名不能与被调函数名重名*/ printf(s=%fn,s); 2、编写求 k! 的函数,再调用该函数求10! 并输出。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
2、 - - - - - - - 第 1 页,共 38 页 - - - - - - - - - 解法 1:float jc(int k) float p=1; int i; for(i=1;i0) p=p*k; k-; return(p); main() float p; p=jc(10); printf(p=%fn,p); 3、编写求 k! 的函数,再调用该函数求1!+3!+5!+.+19!之和并输出。float jc(int k) float p=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
3、 - - - 第 3 页,共 38 页 - - - - - - - - - int i; for(i=1;i=k;i+) p=p*i; return(p); main() float s=0; int i; for(i=1;i=19;i+=2) s=s+jc(i); printf(s=%fn,s); 4、 编写求 k! 的函数,再调用该函数求C(m,n)=m!/(n!*(m-n)!)并输出。float jc(int k) float p=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
4、- 第 4 页,共 38 页 - - - - - - - - - int i; for(i=1;i=k;i+) p=p*i; return(p); main() float c; int m,n; scanf(%d%d,&m,&n); c=jc(m)/jc(n)/jc(m-n); /* 或 c=jc(m)/(jc(n)*jc(m-n);*/ printf(c=%fn,c); 5、编写判断素数的函数,再调用该函数判断1937 是否是素数。int isp(int m) int i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名
5、师精心整理 - - - - - - - 第 5 页,共 38 页 - - - - - - - - - for(i=2;i=m-1;i+) if(m%i=0) return(0); /* 能除尽,不是素数,返回0*/ return(1); /* 不能除尽,是素数,返回1*/ main() if(isp(1973)!=0) printf(Its a prime number.n); else printf(Its not a prime number.n); 6、编写判断素数的函数,再调用该函数求出1000 以内的所有素数。int isp(int m) int i; 名师资料总结 - - -精品资
6、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 38 页 - - - - - - - - - for(i=2;i=m-1;i+) if(m%i=0)return(0); /* 能除尽,不是素数,返回0*/ return(1); /* 不能除尽,是素数,返回1*/ main() int i; for(i=2;i=1000;i+) if(isp(i)!=0) printf(%d,i); printf(n); 7、编写判断素数的函数, 调用该函数求出1000 以内的所有素数, 存入数组中并输出。名师资料总结
7、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 38 页 - - - - - - - - - int isp(int m) int i; for(i=2;i=m-1;i+) if(m%i=0) return(0); /* 能除尽,不是素数,返回0*/ return(1); /* 不能除尽,是素数,返回1*/ main() int a500,i,n=0; for(i=2;i=1000;i+) if(isp(i)!=0) an=i; n+; printf(%d,i); /* 或 prin
8、tf(%d,an);*/名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 38 页 - - - - - - - - - printf(n); 8、编写判断素数的函数, 调用该函数求出1000 以内的所有素数之和并输出。int isp(int m) int i; for(i=2;i=m-1;i+) if(m%i=0)return(0); /* 能除尽,不是素数,返回0*/ return(1); /* 不能除尽,是素数,返回1*/ main() int s=0,i; 名师资料总
9、结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 38 页 - - - - - - - - - for(i=2;ib) max=a; else max=b; return(max); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 38 页 - - - - - - - - - main() float x,y,z,t,max; scanf(%f%f%f,&x,
10、&y,&z); t=m(x,y); max=m(t,z); /* 主调函数中变量名不能与被调函数名重名*/ printf(max=%fn,max); 10、编写求两个数中最大数的函数,并调用该函数求出四个数中的最大数。float m(float a,float b) float max; if(ab) max=a; else max=b; return(max); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 38 页 - - - - - - - - - main()
11、 float a,b,c,d,u,v,max; scanf(%f%f%f%f,&a,&b,&c,&d); u=m(a,b); v=m(c,d); max=m(u,v); /* 主调函数中变量名不能与被调函数名重名*/ printf(max=%fn,max); 11、编写求三个数中最大数的函数,并调用该函数求出三个数中的最大数。float m(float a,float b,float c) float max; if(ab) max=a; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
12、 - - 第 12 页,共 38 页 - - - - - - - - - max=b; if(cmax) max=c; return(max); main() float x,y,z,max; scanf(%f%f%f,&x,&y,&z); max=m(x,y,z); /* 主调函数中变量名不能与被调函数名重名*/ printf(max=%fn,max); 12、编写判定闰年的函数,并调用此函数判定某一年是否是闰年。int isleap(int y) if(y%400=0|y%4=0&y%100!=0) return(1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - -
13、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 38 页 - - - - - - - - - else return(0); main() int year; scanf(%d,&year); if(isleap(year)!=0) /* 或 if(isleap(year)*/ printf(%d is a leap year.n,year); else printf(%d is not a leap year.n,year); 13、编写判定闰年的函数,并调用此函数求出公元1 年到公元 1000 年之间的所有闰年。int isleap
14、(int y) if(y%400=0|y%4=0&y%100!=0) return(1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 38 页 - - - - - - - - - else return(0); main() int year; for(year=1;year=1000;year+) if(isleap(year)!=0) /* 或 if(isleap(year)*/ printf(%d,year); printf(n); 14、编写一个将实数四舍
15、五入到小数点后第n 位的函数, 并调用此函数将一个实数舍入到小数点后第2 位(是指内部精度而非输出精度) 。double p(double x,int n) int i; for(i=1;i=n;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 38 页 - - - - - - - - - x=x*10; x=x+0.5; x=(long)x; for(i=1;i=n;i+) x=x/10; return(x); main() double x; x=p(x,2)
16、; printf(x=%fn,x); 15、编写一个函数用于将一个整数前后倒置,并调用此函数将一个从键盘输入的整数前后倒置。int rev(int a) int d,r=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 38 页 - - - - - - - - - while(a!=0) d=a%10; r=r*10+d; a=a/10; return(r); main() int a,r; scanf(%d,&a); r=rev(a); printf(r=%dn,
17、r); 16、编写求两个整数最大公约数的函数,并调用此函数求两个整数的最大公约数。辗转相除法:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 38 页 - - - - - - - - - 以其中一个数作被除数,另一个数作除数,相除求余数。若余数不为0,则以上一次的除数作为新的被除数,以上一次的余数作为新的除数,继续求余数。直至余数为0 时,对应的除数就是最大公约数。int g(int m,int n) int r; while(r=m%n) !=0) /* 余数不为 0
18、 时循环 */ m=n; /* 以上一次的除数作为新的被除数*/ n=r; /* 以上一次的余数作为新的除数*/ return(n); main( ) int a,b,p; scanf(%d%d,&a,&b); p=g(a,b); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 38 页 - - - - - - - - - printf(p=%dn,p); 17、编写求两个整数最大公约数的函数,并调用此函数求两个整数的最小公倍数。int g(int m,int n) /
19、* 辗转相除法 */int r; while(r=m%n) !=0) /* 余数不为 0 时循环 */ m=n; /* 以上一次的除数作为新的被除数*/ n=r; /* 以上一次的余数作为新的除数*/ return(n); main( ) int a,b,p,h; scanf(%d%d,&a,&b); p=g(a,b); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 38 页 - - - - - - - - - h=a*b/p; /* 两数之积除以最大公约数就是最小公
20、倍数*/ printf(h=%dn,h); 18、编写求两个整数最小公倍数的函数,并调用此函数求两个整数的最小公倍数。int h(int m,int n) int r,p; p=m*n; while(r=m%n) !=0) /* 余数不为 0 时循环 */ m=n; /* 以上一次的除数作为新的被除数*/ n=r; /* 以上一次的余数作为新的除数*/ p=p/n; /* 最小公倍数 */ return(p); main( ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页
21、,共 38 页 - - - - - - - - - int a,b,d; scanf(%d%d,&a,&b); d=h(a,b); /* 最小公倍数 */ printf(d=%dn,d); 19、写一个函数 , 功能: 求一维数组的最小值 . 在主函数中输入10 个数,调用函数后 , 在主函数中输出结果 ( 最小数 ) 。void main() int i;int min1(float a ,int n); float a10, min ; for(i=0;i10 ;i+) scanf(%f,&ai);min=min1(a,10) ;n “,min) ; float min1(float a
22、,int n) int i=0;Float min=a0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 38 页 - - - - - - - - - for(i=1;in ;i+) if(aimin) min=ai;return(min); 20、写一个函数 , 功能: 将一维数组升序排序. 在主函数中输入一个字符串 ,调用函数后 , 在主函数中输出结果 ( 升序 ) 。void paixu(char a ,int k) char t;int i,j; for(i=
23、0;ik-1 ;i+) for(j=0;jaj+1) t=aj;aj=ai;ai=t; #include stdio.h main() int i,j,t; char a20; printf(input a string :n) ; scanf(%s,a) ; k=0;while(ai!=0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 38 页 - - - - - - - - - k+;k-; Paixu(a,k); printf(“%s ”, a) ; 21、
24、写一个函数 , 功能: 将一维数组中指定的字符删去. 在主函数中输入一个字符串及要删去的字符,调用函数后, 在主函数中输出结果。Void shanchu(char a ,char m) int k,i,j; i=0; j=0; while(ai!=0) if(ai!=m) aj=ai;j+; i+; else i+; aj= 0 #include stdio.h main() int i,j,m,k; char a30; printf(input a string,m :n);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师
25、精心整理 - - - - - - - 第 23 页,共 38 页 - - - - - - - - - scanf( “%s %c ”, a,&m);Shanchu(a,m); printf(“%s ”, a) ; 22、写一个函数 , 功能: 将一维数组中指定位置的字符逆序 . 在主函数中输入一个字符串及位置 x 和长度 y,调用函数后 , 在主函数中输出结果。Void fanxu(char a ,int x,int y) int i,j;char t; i=x-1; j=x+y-2; for( ;i=j;i+,j-) t=aj;aj=ai;ai=t; #include stdio.h mai
26、n() int i,j,x,y; char a30; printf(input a string and x,y:n);scanf( “%s %d%d”, a,&x,&y) ; fanxu(a,x,y); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 38 页 - - - - - - - - - printf(“%s ”, a) ; 23、编写求 n 个数平均值的函数, 并调用此函数求从键盘输入的100 个数的平均值。float ave(float a,int n)
27、float s=0,p; int i; for(i=0;in;i+) s=s+ai; p=s/n; return(p); main() float x100,p; int i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 38 页 - - - - - - - - - for(i=0;i100;i+) scanf(%f,&xi); p=ave(x,100); printf(p=%fn,p); 24、编写求 n 个数平均值的函数,并调用此函数找出从键盘输入的100个成绩
28、中所有低于平均分的成绩。float ave(float a,int n) float s=0,p; int i; for(i=0;in;i+) s=s+ai; p=s/n; return(p); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 38 页 - - - - - - - - - main() float a100,p; int i; for(i=0;i100;i+) scanf(%f,&ai); p=ave(a,100); for(i=0;i100;i+) i
29、f(aip) printf(%f,ai); 25、写一个函数 , 功能: 找出一维数组中与平均值最接近的数。在主函数中输入 100 个数字,调用函数后, 在主函数中输出结果。#define N 100 #include “stdio.h”#include “math.h ”main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 38 页 - - - - - - - - - float aN,y; int i; for(i=0;iN;i+) scanf(%f,&ai
30、); y=line(a,N); printf(最接近平均值的数为 %fn,y;) Line(float a,int n) int i,y; Float s,p,x; s=0; for(i=0;iN;i+) s=s+ai; p=s/n; x=fabs(a0-p); for(i=1;ifabs(ai-p) x=fabs(ai-p);y=i; return(ay); 26、编写求字符串长度的函数,并调用此函数求一个字符串的长度。#include “stdio.h”名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
31、 - - - - 第 28 页,共 38 页 - - - - - - - - - #include “string.h”int slen(char a) int n=0; while(ai!=0) n+; return(n); main() char a80; int n; gets(a); n=slen(a); printf(n=%dn,n); 27、编写字符串复制的函数,并调用此函数复制一个字符串。#include “stdio.h”名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
32、 29 页,共 38 页 - - - - - - - - - #include “string.h”void scopy(char b,char a) int i; for(i=0;ai!=0;i+) bi=ai; /* 未复制 0*/ bi=0; main() char a80,b80; gets(a); scopy(b,a); puts(b); 28、编写连接两个字符串的函数,并调用此函数连接两个字符串。#include “stdio.h”#include “string.h”名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
33、名师精心整理 - - - - - - - 第 30 页,共 38 页 - - - - - - - - - void scat(char a,char b) int i,n1,n2; n1=strlen(a); n2=strlen(b); for(i=0;i=n2;i+) an1+i=bi; /* 已复制 0*/ main() char a200,b100; gets(a); gets(b); scat(a,b); puts(a); 29、编写比较两个字符串大小的函数,并调用此函数比较两个字符串的大小。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
34、- - - - - 名师精心整理 - - - - - - - 第 31 页,共 38 页 - - - - - - - - - #include “stdio.h”#include “string.h”int scomp(char a,char b) int i,r; i=0; while(ai!=0&bi!=0) /* 若遇到 0,则停止比较 */ if(ai=bi) i+; /* 若对应字符相等,则继续比较下一个*/ else break; /* 若对应字符不相等,则停止比较*/ r=ai-bi; /* 对应字符 ASCII 码之差,即比较结果*/ return(r); main() cha
35、r a80,b80; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 32 页,共 38 页 - - - - - - - - - int d; gets(a); gets(b); d=scomp(a,b); printf(d=%dn,d); 30、编写将字符数组中的字符串前后倒置的函数,并调用此函数将一个字符串前后倒置。#include “stdio.h”#include “string.h”void srev(char a) char t; int n,i,j; n=strlen(
36、a); i=0;j=n-1; while(ij) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 33 页,共 38 页 - - - - - - - - - t=ai;ai=aj;aj=t; /* 交换对应元素的值 */ i+;j-; main() char a80; gets(a); srev(a) puts(a); 31、编写判断字符回文的函数,并调用此函数判定一个字符串是否是回文。#include “stdio.h”#include “string.h”int isR(char
37、 a) int i,j n; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 34 页,共 38 页 - - - - - - - - - n=strlen(a); i=0; j=n-1; while(i=j) return(1); /* 若所有对应字符都相等,则是回文*/ else return(0); main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 35 页
38、,共 38 页 - - - - - - - - - char s100; gets(s); if(isR(s)!=0) printf(yes.n); else printf(no.n); 32、编写判断汉字回文的函数,并调用此函数判定一个汉字字符串是否是回文。#include “stdio.h”#include “string.h”int isR(char a) int i,j n; n=strlen(a); i=0; j=n-2; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3
39、6 页,共 38 页 - - - - - - - - - while(i=j) return(1); else return(0); main() char s100; gets(s); if(isR(s)!=0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 37 页,共 38 页 - - - - - - - - - printf(yes.n); else printf(no.n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 38 页,共 38 页 - - - - - - - - -