C语言程序设计部分习题及例题参考程序_第1页
C语言程序设计部分习题及例题参考程序_第2页
C语言程序设计部分习题及例题参考程序_第3页
C语言程序设计部分习题及例题参考程序_第4页
C语言程序设计部分习题及例题参考程序_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计部分例题及课后习题参考程序 1.编程计算如下分段函数: 2?+ 3着10 y = 4?总? 10 5?- 6 ?0 参考程序 #include int main() float x,y; printf(input x:); scanf(%f, if(x=10) y=2*x+3; else if(x=0) y=4*x; else y =5*x -6; printf(y=%.2fn,y); 2编程将从键盘输入的百分制成绩转换为等级分,转换方法如下:90 以上(大于或等于 90,下同)为 A,80 分以上为 B,70 分以上为 C,60 分以上为 D,60 分以下,即低于 60 分 为

2、 E。 参考程序 #include int main() float score; char rank; printf(input a score:); scanf(%f, if(score100|score0) printf(invalid score inputn); exit( -1 ); switch(int)score/10) case 10: case 9: rank=A;break; case 8: rank=B;break; case 7: rank=C;break; case 6: rank=D;break; default: rank=E; printf(%.2f:%cn,

3、score,rank); return 0; 3. 编程判断以从键盘输入的三个数为边长,是否能构成三角形。 参考程序 #include int main() float a,b,c; printf(input a,b,c:); scanf(%f%f%f, if(a0 else printf(%.2f,%2.2f,%.2f) 不能围成三角形 n,a,b,c); 4. 编程实现将从键盘输入的一个正整数逆序输出,如输入1234,输出 3421 参考程序 #include int main() int n; printf(input a number:); scanf(%d, do printf(%d

4、,n%10); n/=10; while(n!=0); return 0; 5. 输入一个 110 范围内的整数,计算该数的阶乘。 参考程序 #include int main() int n,s=1,i; printf(input a number(110):); scanf(%d, for(i=2;i=n;i+) s*=i; printf(%d!=%dn,n,s); return 0; 6. 从键盘输入的一行字符,统计其含有多少个字符。 【参考程序】 #include int main() char ch; int cnt=0; printf(input a char line:); ch

5、=getchar(); while(ch!=n) cnt+; ch=getchar(); printf(%dn,cnt); return 0; 7. 打印乘法口诀表。 【参考程序】 #include int main() int i,j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%d*%d=% -3d,j,i,i*j); printf(n); return 0; 8. 在屏幕上打印如下规律的图形,具体行数由键盘输入。 * * * * * 【参考程序】 #include int main() int i,j,n; printf( 请输入打印图形的行数: );

6、 scanf(%d, for(i=1;i=n;i+) for(j=1;j=n -i;j+) printf( ); for(j=1;j=2*i -1;j+) printf(*); printf(n); return 0; 9. 从键盘输入一个正整数,编程判断其是否为素数(质数) 【参考程序】 #include int main() int i,n; printf( 请输入一个正整数: ); scanf(%d, for(i=2;i*i=n;i+) if(n%i=0) break; if(i*i=n|n=1) printf(%d 不是一个素数 .n,n); else printf(%d 是一个素数

7、.n,n); return 0; 10. 从键盘输入 100 个整数,求其中正整数的和。 【参考程序】 #include #define N 100 int main() int n,s=0,i; for(i=1;i=N;i+) printf(请输入第d个整数:”,i); scan f(%d, if(*O) con ti nue; s+=n; prin tf(%dn,s); return 0; 11. 从键盘输入1000个学生某门课程的百分制成绩,分别统计其中80分以上(即大于或等 于80)、60分以上及低于60分的人数。 【参考程序】 #i nclude #defi ne N 1000 in

8、t mai n() int m, n,k,i; float score; m=n=k=0; for(i=1;i100|score=80) m+; else if(score=60) n+; else k+; prin tf(%d:%d:%dn,m, n,k); return 0; 10-6时,停止计算。 当最后一项的绝对值小于 12. 运用如下公式计算圆周率的近似值, -+ ? + (-1 )?-1- + ? 5 72?2 1 ?1 =1 - + 43 【参考程序】 #include int main() double pi=0.0,t=1.0; int sgn=1; while(t10000

9、00) pi+=sgn/t; sgn=-sgn; t+=2; printf(Pi=%.6lfn,4*pi); return 0; 13. 古代某工地需要搬运砖块,已知男人每人每次搬3 块,女人每人每次搬 2 块,小孩两人 每次抬一块,现有 45 人一次正好搬完全部砖块,请问男人、女人、小孩各几人? 【参考程序】 #include int main() int w,m,c; for(m=0;m=15;m+) for(w=0;w=22;w+) c=45-m -w; if(m*3+w*2+c*.5=45) printf(%d:%d:%dn,m,w,c); return 0; 14. 从键盘输入两个正

10、整数到 m、 n 中,求它们的最大公约数和最小公倍数。 【参考程序】 #include int main() int m,n,m1,n1,r; printf( 请输入两个正整数: ); scanf(%d%d, m1=m; n1=n; r=m%n; while(r!=0) m=n; n=r; r=m% n; prin tf(gcd(%d,%d)=%dn,m1, n1, n); 14.编程计算如下式子的值, 直到 prin tf(lcm(%d,%d)=%dn,m1, n1,m1* n1/n); return 0; n等于100。 1 1 1 ?1 1 +- +? + (-1 ) ?-1 + ? 2

11、34? 【参考程序】 #in elude int mai n() double s=0.0,t=1.0; int sgn=1; while(t=100) s+=sg n/t; sg n二sg n; t+=1; prin tf(s=%.6lfn,s); return 0; 15.计算如下规律式子的值。 该式子表示的含义为 2+22+222,故结果为246。 a + aa + aaa + ? + aaa? a(n 个 a) 其中 a与n的值都是由键盘输入确定。如当a为2, n 为3时, 【参考程序】 #i nclude int mai n() int a,n, s=0,t; prin tf(i n

12、put a,n:”); scan f(%d%d, t=a; while( n0) s+=t; t=t*10+a; n-; prin tf(%dn,s); 3 5 7 101 1 + + + + ? + 2 46 100 return 0; 16.计算如下式子的值。 【参考程序】 #in elude int mai n() int n; float s=0.0; for(n=2;*=100; n+=2) s+=(float)( n+1)/n; prin tf(%.6fn,s); return 0; 10 17.如数列第1项为2,此后各项的值均为其前一项的2倍再加3,编程计算该数列的前 项之和。

13、【参考程序】 #in clude int mai n() int n, s=0,i; n=2; for(i=1;i=3;i+) s+=n; n=n *2+3; prin tf(%dn,s); return 0; 18.现要求将1角钱换成1分、2分或5分的硬币,请问有多少种换法,并输出每一种换法。 【参考程序】 #i nclude int mai n() int on e,two,five,c nt=0; for(five=0;five=2;five+) for(two=0;two=0) printf(%d:%d:%dn,one,two,five); cnt+; printf( 一共有 %d 种

14、换法 n,cnt); return 0; 20. 编程统计并输出 200 到 300 以内的全部素数。 【参考程序】 #include int main() int m,i,k=0; for(m=201;m300;m+=2) for(i=3;i*im) k+; printf(%8d,m); if(k%5=0) printf(n); printf(n200 到 300 之间一共有 %d 个素数 n,k); return 0; 21. 打印所有“水仙花数” ,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该 数自身。如 153 【参考程序】 #include int main() int

15、m,n,k; for(m=1;m=9;m+) for(n=0;n=9;n+) for(k=0;k=9;k+) if(m*m*m+n*n*n+k*k*k=m*100+n*10+k) printf(%5d,m*100+n*10+k); printf(n); return 0; 22. 输出 200 到 300 之间满足如下条件的数,即各位数字之和为12,数字之积为 42. 【参考程序】 #include int main() int m,n; for(m=0;m=9;m+) for(n=0;n=9;n+) if(m+n=10 printf(n); return 0; 23. 编程将一个正整数进行质

16、因数分解,例如输入90,须在屏幕上打印出 90=2*3*3*5 【参考程序】 #include int main() int m,n; scanf(%d, printf(%d=,m); n=2; while(m!=1) while(m%n=0) printf(%d,n); if(m!=n) printf(*); m/=n; n+; printf(n); return 0; 24. 输入一行字符,分别统计其中英文字母、空格、数字及其他字符的个数。 【参考程序】 #include int main() char ch; int letter,space,digit,other; letter=sp

17、ace=digit=other=0; printf(input a char line:); ch=getchar(); while(ch!=n) if(ch=a else if(ch= ) space+; else other+; ch=getchar(); printf(%d:%d:%d:%dn,letter,digit,space,other); return 0; 25. 编程输出 1000 以内的全部完数。所谓完数,是指该数恰好等于他的全部真因子的和。如 6=1+2+3 【参考程序】 #include int main() int m,i,t; for(m=2;m=1000;m+)

18、t=1; for(i=2;i*i=m;i+) if(m%i=0) t+=i; if(i*i!=m) t+=m/i; if(t=m) printf(%dn,m); return 0; 26. 从键盘输入 10 个整数,求这些整数的总和及平均值,并统计不低于平均值的元素个数。 【参考程序】 #include #define N 5 int main() int aN,i,cnt=0; float aver; printf( 请输入 %d 个整数: ,N); aver=0.0; for(i=0;iN;i+) scanf(%d, aver+=ai; for(i=0;i=aver/N) cnt+; pr

19、intf(” 这d 个整数的和是 .0f,平均值是 .2fn,N,aver,aver/10); printf(不低于平均值的数有 %d个n”,ent); return 0; 27. 设有存放于数组中一组整数,现从键盘输入一个整数,在数组中查找该数,如果数组中 含有该数,则输出其全部出现位置,否则输出“* 不存在”, * 代表该数值。 【参考程序】 #inelude #define N 10 int main() int aN=16,35,48,29,56,43,93,64,90,48; int n,sgn,i; printf( 请输入待查找的整数: ); seanf(%d, sgn=0; fo

20、r(i=0;iN;i+) if(ai=n) sgn=1; printf(%d 在数组中的 %d 位置出现 .n,n,i+1); if(sgn=0) printf(%d 不存在 n,n); return 0; 28. 设有一存在有 10 个随机数的数组,请编程找出其中的最大数及其在数组中的位置。 【参考程序】 #include #include #include #define N 10 int main() int aN,i,k; srand(time(NULL); for(i=0;iN;i+) ai=rand(); printf(%6d,ai); k=0; for(i=1;iak) k=i;

21、 printf(n最大值是d,它是数组的第 %d个数n”,ak,k+1); return 0; 29. 现有一未排序的整型数组,要求用选择法将该数组按由大到小的顺序排序。 【参考程序】 #include #define N 10 int main() int aN,i,k,j,t; printf( 请输入 %d 个整数 :,N); for(i=0;iN;i+) scanf(%d, for(j=0;jN-1;j+) k=j; for(i=j+1;iak) k=i; t=aj;aj=ak;ak=t; printf( 排序后的数组: n); for(i=0;iN;i+) printf(%5d,ai)

22、; printf(n); return 0; 30. 现有一数组, 其元素已按由大到小的顺序排列, 现从键盘输入一个数, 插入到该数组中, 要求插入后的数组元素依然由大到小排列。 【参考程序】 #include #define N 10 int main() int aN+1=98,96,87,78,72,64,56,51,43,36; int n,i; printf( 插入前的数组: n); for(i=0;i=0;i -) if(ain) ai+1=ai; else break; ai+1=n; printf( 插入后的数组: n); for(i=0;i=N;i+) printf(%5d,

23、ai); printf(n); return 0; 31. 设有存放于一维数组中一组整数,且已按由小到大顺序排序,现从键盘输入一个整数, 在数组中查找该数, 如果数组中含有该数, 则输出该数的出现位置, 否则输出 “* 不存在”, * 代表该数值。 【参考程序】 #include #define N 10 int main() int aN=93,90,64,56,50,48,43,35,29,16; int n,sgn,top,bott,mid; printf( 请输入待查找的整数: ); scanf(%d, sgn=0; top=0; bott=N -1; while(topn) top=

24、mid+1; else bott=mid -1; if(sgn=0) printf(%d 不存在 n,n); else printf(%d 在第 %d 个数位置被发现 .n,n,mid+1); return 0; 32.按如下格式打印杨辉三角形, 具体行数由键盘输入。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 【参考程序】 #include #define N 20 int main() int yangNN,n,i,j; printf( 请输入要打印的的行数: ); scanf(%d, for(i=0;in;i+) yangi0=yangii=1

25、; for(i=2;in;i+) for(j=1;ji;j+) yangij=yangi -1j+yangi -1j-1; for(i=0;in;i+) for(j=0;jn -i-1;j+) printf(%3c, ); for(j=0;j=i;j+) printf(%6d,yangij); printf(n); return 0; 33. 编程实现从一字符串中删除指定的字符。 【参考程序】 #include #define N 80 int main() char strN,ch,i,j=0; printf( 请输入一个字符串: ); gets(str); printf( 请输入待删除的字

26、符: ); ch=getchar(); for(i=0;stri!=0;i+) if(stri!=ch) strj+=stri; strj=0; printf( 删除指定字符后的字符串: %sn,str); return 0; 34. 现有若干字符串存放于一个二维数组中,每行存放一个字符串,现要求用冒泡法将这些 字符串按由小到大排序,即按字符母顺排序。 【参考程序】 #include #include #define N 80 #define M 6 int main() char strMN,tempN,i,j; printf( 请输入 %d 个字符串: ,M); for(i=0;iM;i+

27、) gets(stri); for(i=0;iM -1;i+) for(j=0;j0) strcpy(temp,strj); strcpy(strj,strj+1); strcpy(strj+1,temp); printf( 排序后的字符串: n); for(i=0;iM;i+) puts(stri); return 0; 35. 现有一个英文句子,请编程统计其中的单词数,已知单词之间用空格分隔(空格数大于 等于 1),不考虑单词是否为合法英语单词,特别提醒,第一单词之前也可能有若干空格。 【参考程序】 #include #define N 80 int main() char strN,i,

28、cnt; printf( 请输入一个英文句子,以回车结束: ); gets(str); if(str0= |str0=0) cnt=0; else cnt=1; for(i=0;stri!=0;i+) if(stri= printf( 该句子一共含有 %d 个单词 n,cnt); return 0; 36. 现有一实型一维数组,请编程分别找出其中的最大值和最小值,并将最大值与数组的最 后一个元素交换,最小值与数组的第一个元素交换。 【参考程序】 #include #define N 10 int main() float aN,t; int ma,mi,i; printf( 请输入 %d 个实

29、数: ); for(i=0;iN;i+) scanf(%f, ma=mi=0; for(i=1;iama) ma=i; if(aiami) mi=i; t=a0; a0=ami; ami=t; if(ma=0) ma=mi; t=ama; ama=aN -1; aN-1=t; printf( 处理后的数组: ); for(i=0;iN;i+) printf(%6.2f,ai); printf(n); return 0; 37. 编程求一方阵的两条对角线元素和(包括主副对角线) 【参考程序】 #include #define N 5 int main() int aNN,i,j,s=0; pri

30、ntf( 请输入一个方阵: n); for(i=0;iN;i+) printf( 请输入方阵的第 %d 行元素: ,i+1); for(j=0;jN;j+) scanf(%d, for(i=0;iN;i+) s+=aii; for(i=0;iN;i+) if(i!=N -i-1) s+=aiN-i-1; printf( 该方阵的对角元素的和为 %dn,s); return 0; 2个 38. 编程将一个一维数组中的元素颠倒次序,即第1 元素与最后一个元素交换位置,第 元素倒数第2个元素交换位置,依此类推。 【参考程序】 #include #define N 10 int main() int

31、aN,i,t; printf( 请输入 %d 个整数: ,N); for(i=0;iN;i+) scanf(%d, for(i=0;iN/2;i+) t=ai; ai=aN -i-1; aN-i-1=t; printf( 颠倒后的数组: ); for(i=0;iN;i+) printf(%5d,ai); printf(n); return 0; 39. 用筛法求 100 以内的全部素数。 【参考程序】 #include #define N 100 int main() int aN,i,j; for(i=0;iN;i+) ai=i+1; a0=0; for(i=0;i*i=N;i+) if(a

32、i!=0) for(j=i+1;jN;j+) if(aj%ai=0) aj=0; printf(%d 以内的全部素数: n,N); for(i=0;iN;i+) if(ai!=0) printf(%5d,ai); printf(n); return 0; 40. 对于从键盘输入的英文句子,将其中的空格用替* 换。 【参考程序】 #include #define N 81 int main() char strN,i; printf( 请输入一个英文句子: ); gets(str); for(i=0;stri!=0;i+) if(stri= ) stri=*; printf( 替换后的字符串:

33、); puts(str); return 0; 41. 请写一个函数用于统计在一个一维数组中出现指定数值的次数,要求一维数组及指定数 值都是由主函数通过参数传递。 【参考程序】 #include #define N 10 int myseek(int a,int len,int n) int i,cnt=0; for(i=0;ilen;i+) if(ai=n) cnt+; return cnt; int main() int numN,n,i,count; printf( 请输入 %d 个整数: ,N); for(i=0;iN;i+) scanf(%d, printf( 请输入待统计其出现次数

34、的数: ); scanf(%d, count=myseek(num,N,n); printf(%d 一共出现 %d 次 .n,n,count); return 0; 42. 编写一个函数,用于判断给定的整数是否为素数,如是则返回1,否则返回 0,并写一主 函数调用上述函数,输出 3100 之间的所有素数。 【参考程序】 #include int isprime(int n) int i; for(i=2;i*i=n;i+) if(n%i=0) return 0; return 1; int main() int i; for(i=3;i100;i+=2) if(isprime(i)=1) pr

35、intf(%5d,i); printf(n); return 0; 43. 编写了递归函数求 Fibonacci 数列的第 n 项,其中 n 由参数传递,并在主函数中调用该函 数输出数列的前 20 项。 【参考程序】 #include long fib(int n) if(n=1|n=2) return 1; return fib(n -1)+fib(n -2); int main() int i; for(i=1;i21;i+) printf(%l8d,fib(i); printf(n); return 0; 44. 编写一函数,实现用冒泡法将数组元素按由大到小排列,其中排序的数组及参与排序

36、的 元素个数由参数传递。 【参考程序】 #include #define N 10 void bubble_sort(int arr,int n) int i,j,t; for(i=0;in -1;i+) for(j=0;jn -i-1;j+) if(arrjarrj+1) t=arrj;arrj=arrj+1;arrj+1=t; int main() int aN,i; printf( 请输入 %d 个整数: ,N); for(i=0;iN;i+) scanf(%d, bubble_sort(a,N); printf( 排序后的数组: n); for(i=0;iN;i+) printf(%5

37、d,ai); printf(n); return 0; 45. 编写一函数,实现用选择法将数组元素按由小到大排列,其中排序的数组及参与排序的 元素个数由参数传递。 【参考程序】 #include #define N 10 void select_sort(int arr,int n) int i,j,t,k; for(i=0;in -1;i+) k=i; for(j=i+1;jn;j+) if(arrjarrk) k=j; t=arrk;arrk=arri;arri=t; int main() int aN,i; printf( 请输入 %d 个整数: ,N); for(i=0;iN;i+) scanf(%d, select_sort(a,N); printf( 排序后的数组: n); for(i=0;iN;i+) printf(%5d,ai); printf(n); return 0; 46. 编写一个函数,其原型为 void delete_char(char str,char ch)

温馨提示

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

评论

0/150

提交评论