C语言练习题答案_第1页
C语言练习题答案_第2页
C语言练习题答案_第3页
C语言练习题答案_第4页
C语言练习题答案_第5页
已阅读5页,还剩181页未读 继续免费阅读

下载本文档

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

文档简介

1、1.已知三角形的三边长为a,b,c,计算三角形面积的公式为:area=sqrt(s(s-a)(s-b)(s-c),其中s=(a+b+c)/2。试编程从键盘输入a,b,c的值(假设a,b,c的值可以保证其构成一个三角形),计算并输出三角形的面积。*输入格式要求:"%f,%f,%f" 提示信息:"Input a,b,c:"*输出格式要求:"area = %.2fn"程序运行示例如下:Input a,b,c:3,4,5area = 6.00答案:#include<stdio.h>#include<math.h>int

2、 main(void)float a, b, c, s, area;printf("Input a,b,c:");scanf("%f,%f,%f", &a, &b, &c);s = (a + b + c) / 2;area = sqrt(s*(s - a)*(s - b)*(s - c);printf("area = %.2fn", area);return 0; -12.从键盘任意输入一个4位整数,编程计算并输出它的逆序数.例如:输入1234,分离出千位1、百位2、十位3和个位4,然后计算4*1000+3*1

3、00+2*10+1=4321,并输出4321。*要求输入提示信息为:无*要求输入格式为: "%d"*要求输出格式为:"%d"程序运行示例如下:1234 此处为输入4321 此处为输出答案:#include<stdio.h>int main(void)int a, b, c, d,e;scanf("%d",&a);b = a/1000;c = a%1000/100;d = a%100/10;e = a%10;a = e*1000+d*100+c*10+b;printf("%d",a);return

4、 0; -23.有关输入输出问题。输入为:12a b 运行结果为:1,2,a,b,123.300000,65535请改正程序中的错误,使它能得出正确的结果。#include <stdio.h>main() int b; unsigned short a = 65535; short k = a; char c, d; int f, g; b = (1234.0 - 1) / 10; scanf("%c", &c); scanf("%c", &d); scanf("%d", &f); scanf(&q

5、uot;%d", &g); printf("%c,%c,%c,%c,%f,%d", c, d , f, g, b, k);答案:#include <stdio.h>main()double b;int a = 65535;char c, d;int f, g;b = (1234.0 - 1) / 10;scanf("%c", &c);scanf("%c", &d);scanf("%ct", &f);scanf("%c", &g);pr

6、intf("%c,%c,%c,%c,%f,%d", c, d , f, g, b, a); -34.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。请找出以下程序的错误,并改正之。#include <stdio.h>#include <string.h> #define ARR_SIZE = 80;   main()    char strARR_SIZE;    int  len, i; 

7、60;  int  letter=0,digit=0,space=0,other=0;     printf("请输入一个字符串:");    gets(str);     len = strlen(str);         for (i=0; i<len; i+)    

8、0;       if (a=<stri<=z | A=<stri<=Z)                    letter +;               &#

9、160;                   else if (0=<stri<=9)                     digit +;      &

10、#160;                           else if (stri=' ' )                   &#

11、160;                      space +;                            

12、60;else            other +;                      printf("英文字符数:%dn", letter);    printf("数字字符数:%dn&q

13、uot;, digit);    printf("空格数:%dn", space);    printf("其他字符数:%dn", other);答案 :#include <stdio.h>#include <string.h> #define ARR_SIZE  80  main()    char strARR_SIZE;    int&#

14、160; len, i;    int  letter = 0, digit = 0, space = 0, other = 0;     printf("请输入一个字符串:");    gets(str);     len = strlen(str);     for (i = 0; i<len; i+)  &

15、#160;         if ('a' <= stri&&stri <= 'z' | 'A' <= stri&&stri <= 'Z')                    lette

16、r+;                else if ('0' <= stri && stri<= '9')                    digit+; 

17、60;              else if ( stri = ' ')                    space+;         

18、60;      else            other+;         printf("英文字符数:%dn", letter);    printf("数字字符数:%dn", digit);    p

19、rintf("空格数:%dn", space);    printf("其他字符数:%dn", other); -45.对输入的一个数判断是否是素数。所谓素数是指这个数只能被1和自身整除。要求在主函数输入一个数,调用函数Fun()判断该数是否是素数。打印信息在主函数中进行。例如:从键盘输入5,5是素数则打印如下信息:"5 is a prime number"。又如:从键盘输入4, 4不是素数则打印如下信息:"4 is not a prime number"。负数、0和1均不是

20、素数。对输入的数据要考虑数据的合法性,不满足条件的数要重新输入直到满足条件为止。不能使用全局变量,不按给定的函数原型编写程序不给分。Fun()函数原型为: int Fun(int m);*输入数据提示信息:"Please input a number:n" 注:该提示信息请放在循环体外*输入数据格式为:"%d"*输出格式要求: 若是素数输出数据格式为:"%d is a prime numbern" 若不是素数输出数据格式为: "%d is not a prime numbern"不完整答案:#include<

21、stdio.h>int Fun(int a)    int i;    if(a>1)            for(i = 2;i<a;i+)                    

22、;   if(a%i=0)             return 0;             else             continue;  

23、0;               return 1;        else    return 0;     main()    int b,c;    printf("Please in

24、put a number:n");    scanf("%d",&b);    c = Fun(b);    if(0 = c)    printf("%d is not a prime numbern",b);    else    printf("%d is a prime number

25、n",b);     参考答案:#include "stdio.h"int Fun(int m);int main()                    int m, flag;     printf("Please input a number:n");

26、    do                            scanf("%d", &m); /1        while (m < 2); /e1 

27、60;   flag = Fun(m); /3     if (flag) /1        printf("%d is a prime numbern", m);    else        printf("%d is not a prime numbern", m); /

28、1     return 0;                int Fun(int m)/2                    int i, flag = 1; /1   &

29、#160; for (i = 2; i < m; i+) /1                            if (m % i = 0) /1             

30、60;                      flag = 0; /1            break;             &#

31、160;  return flag;/2               - -56.求1898 现將不超过2000的所有素数从小到大排成第一行,第二行上的每个数都等于它“右肩”上的素数与“左肩”上的素数之差。请编程求出:第二行数中是否存在这样的若干个连续的整数,它们的和恰好是1898?假如存在的话,又有几种这样的情况?*输入格式要求:提示信息:"There are follwing primes in first row :n&

32、quot;*输出格式要求:"(%d).%3d,.,%dn"程序运行示例如下:There are follwing primes in first row :(1).101,.,1999(2). 89,.,1987(3). 53,.,1951(4). 3,.,1901答案:#include <stdio.h>#define N 330int aN;int main()int c = 0, b = 0, d = 1;int i = 0, j = 0, k = 0;for (i = 3;i <= 2000;i+)for (j = 2;j < i;j+)if

33、 (i%j = 0)break;elsecontinue;if (j = i)ak = i;k+;elsecontinue;printf("There are follwing primes in first row :n");for (c = 329;c >= 0;c-)for (b = c + 1;c < b;b+)if (b < 330)if (ab - ac) = 1898)printf("(%d).%3d,.,%dn", d, ac, ab);d+;elsecontinue;elsebreak;7.从键盘任意输入一个整数m,若

34、m不是素数,则对m进行质因数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否则输出"It is a prime number"。例如,用户输入90时,程序输出90 = 2 * 3 * 3 * 5;用户输入17时,程序输出"It is a prime number"。输入提示信息:"Input m:"输入格式:"%d"输出格式:是素数时输出"It is a prime numbern"否则输出用"%d = ","%d * "运行示例1:Input

35、m:9090 = 2 * 3 * 3 * 5运行示例2:Input m:13It is a prime number答案:#include <stdio.h>#include <math.h>int IsPrime(int x);void OutputPrimeFactor(int x);int main()int m;printf("Input m:");scanf("%d",&m);if(IsPrime(m)printf("It is a prime numbern");elseprintf(&qu

36、ot;%d = ",m);OutputPrimeFactor(m);return 0;int IsPrime(int x)int i,flag=1;int squareRoot=sqrt(x);if(x<=1)flag=0;for(i=2;i<=squareRoot&&flag;i+)if(x%i=0)flag=0; return flag;void OutputPrimeFactor(int x)int i;for(i=2;i<x;i+)if(x%i=0)printf("%d * ",i);OutputPrimeFactor(x

37、/i);return;printf("%d",x);-78.将任一整数转换为二进制形式。*输入格式要求:"%d" 提示信息:"Input number:"*输出格式要求:"number of decimal form:%dn" " it's binary form: "程序运行示例如下:Input number:876number of decimal form:876 it's binary form: 00000000000000000000001101101100答案:#i

38、nclude <stdio.h>#include <stdlib.h>int main()int a;char b32;printf("Input number:");scanf("%d", &a);printf("number of decimal form:%dn", a);printf(" it's binary form: ");printf("%sn", itoa(a, b, 2);-89.求自然数n最近的素数k, k>n。*输入提示信息*

39、:"Input n:"*输入数据格式*:"%d"*输出数据格式*:"%d"示例输入:257输出:Please input n:263答案:#include<stdio.h>int main() int n, i = 1, k; printf("Please input n:"); scanf("%d", &n); for (k = n + 1;i;k+) for (i = 2;i < k;i+) if (k%i = 0) break; else continue; if

40、 (i = k) printf("%d", k); i = 0; break; -910.如果一个正整数m的所有小于m的不同因子(包括1)加起来正好等于m本身,那么就被称它为完全数。它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。注意:1没有真因子,所以不是完全数。例如,6就是一个完全数,是因为6 = 1 + 2 + 3。请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入的整数是否是完全数。要求:按如下原型编写判断完全数的函数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数。int IsPerfect(i

41、nt x);*要求输入提示信息为: "Input m:n"*要求输入格式为: "%d"*要求输出格式为 "%d is a perfect numbern""%d is not a perfect numbern"注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程,主函数不能使用int main和return 0。答案:#include<stdio.h>int IsPerfect(int x);int main() int m; printf("Input m:n");

42、 scanf("%d", &m); if (IsPerfect(m) printf("%d is a perfect numbern", m); else printf("%d is not a perfect numbern", m);int IsPerfect(int x) int i = 1,b = 0; for (i = 1;i < x;i+) if (x%i = 0) b = b + i; continue; else continue; if (b = x) return 1; else return 0;

43、-1011.用函数编程计算两整数的最大值,在主函数中调用该函数计算并输出从键盘任意输入的两整数的最大值。*输入格式要求:"%d,%d" 提示信息:"Input a,b:"*输出格式要求:"max = %dn"程序运行示例如下:Input a,b:5,8max = 8答案:#include <stdio.h>int max(int a, int b) if(a >= b) return a; else return b;main() int a = 0,b = 0; printf("Input a,b:&qu

44、ot;); scanf("%d,%d",&a,&b); printf("max = %dn",max(a,b);-1112.利用求阶乘函数Fact(),编程计算并输出1! + 2! + + n!的值。*输入格式要求:"%u" 提示信息:"Input n(n>0):"*输出格式要求:"sum = %lun"答案:#include <stdio.h>int sum_s(int i);main() unsigned int n = 0; unsigned long b

45、 = 0; printf("Input n(n>0):"); scanf("%u",&n); for (b;n;n-) b = b +sum_s(n); printf("sum = %lun",b); int sum_s(int i) int a; for(a = 1;i;i-) if (i > 1) a = a * i; else a = a * 1; return a;-1213.编程输出如下菜单界面(具体的输出则以下面提示中要求的输出格式为准):=大学信息管理系统= - 办公室管理 财务管理 教务管理 图书管

46、理 科研管理 设备管理 人事管理 后勤管理 退出系统-请您在上述功能中选择(08):提示:输出如下格式"=大学信息管理系统= n""-n""1. 办公室管理 5. 财务管理 n""2. 教务管理 6. 图书管理 n""3. 科研管理 7. 设备管理 n""4. 人事管理 8. 后勤管理 n""0. 退出系统n""-n""请您在上述功能中选择(08):n"答案:#include <stdio.h>main(

47、) printf("=大学信息管理系统= n"); printf("-n"); printf("1. 办公室管理 5. 财务管理 n"); printf("2. 教务管理 6. 图书管理 n"); printf("3. 科研管理 7. 设备管理 n"); printf("4. 人事管理 8. 后勤管理 n"); printf("0. 退出系统n"); printf("-n"); printf("请您在上述功能中选择(08):n

48、");-1314.利用静态变量计算n的阶乘。*输入格式要求:"%d" 提示信息:"Input n:"*输出格式要求:"%d! = %ldn"程序运行示例如下:Input n:101! = 12! = 23! = 64! = 245! = 1206! = 7207! = 50408! = 403209! = 36288010! = 3628800答案:#include <stdio.h>int sum_s(int i);main() unsigned int n = 0,b = 1; printf("In

49、put n:"); scanf("%d",&n); for (b = 1;b <= n;b+) printf("%d! = %ldn",b,sum_s(b); int sum_s(int i) int a; for(a = 1;i;i-) if (i > 1) a = a * i; else a = a * 1; return a;-1415.写一个程序从键盘输入两个整数,然后显示输出第1个数除以第2个数的结果。例如,输入123和12,程序的输出结果格式如下: 10 Remainder = 3 - 12 ) 123 提示:使

50、用求余运算符获得余数,使用整数除法获得商。*输入格式要求:"%d%d" 提示信息:"请输入两个整数:"*输出格式要求:"%13d Remainder = %dn"" -n""%5d ) %5d"答案:#include <stdio.h>main() int a, b, c, d; printf("请输入两个整数:"); scanf("%d%d",&a,&b); c = a / b; d = a % b; printf("

51、;%13d Remainder = %dn",c,d); printf(" -n"); printf("%5d ) %5d",b,a);-1516.写一个程序,将接收的摄氏温度转换为对应的华氏温度。程序应显示如下的提示信息: Please input cels: 然后输入一个十进制数并回车,然后程序以合适的消息形式输出转换后的华氏温度。程序使用如下的公式完成转换:摄氏温度 = 5.0 *(华氏温度 32.0) / 9.0*输入格式要求:"%lf" 提示信息:"Please input cels: "*输出

52、格式要求:"The fahr is: %.2f"答案:#include <stdio.h>main() double a,b; printf("Please input cels: "); scanf("%lf",&a); b = (9.0 * a)/5.0 + 32.0; printf("The fahr is: %.2f",b);-1617.写一个程序,将接收的华氏温度转换为对应的摄氏温度。程序应显示如下的提示信息: Please input fahr: 然后输入一个十进制数并回车,然后程序

53、以合适的消息形式输出转换后的华氏温度。程序使用如下的公式完成转换:摄氏温度 = 5.0 *(华氏温度 32.0) / 9.0*输入格式要求:"%lf" 提示信息:"Please input fahr: "*输出格式要求:"The cels is: %.2f"答案:#include <stdio.h>main() double a,b; printf("Please input fahr: "); scanf("%lf",&a); b = 5.0 * (a - 32.0) /

54、9.0; printf("The cels is: %.2f",b);-1718.编写一个程序,输入一个3位整数,要求逆序输出对应的数。例如:输入123,则输出321。*输入格式要求:"%d" 提示信息:"Please enter a positive integer: "*输出格式要求:"%d->%dn" 程序运行示例如下:Please enter a positive integer: 345345->543答案:#include<stdio.h>int main(void) int a

55、, b, c, d,e; printf("Please enter a positive integer: "); scanf("%d",&a); b = a/100; d = a%100/10; e = a%10; c = e*100+d*10+b; printf("%d->%d",a,c); return 0;-1819.计算两个数的平方和从键盘读入两个实数,编程计算并输出它们的平方和,要求使用数学函数pow(x,y)计算平方值,输出结果保留2位小数。提示:使用数学函数需要在程序中加入编译预处理命令 #include

56、 <math.h>以下为程序的输出示例:Please input x and y:1.2,3.4result=13.00输入格式:"%f,%f"输出格式:输入提示信息:"Please input x and y:n"输出格式:"result=%.2fn"答案:#include <stdio.h>#include <math.h>main() float x,y,z; printf("Please input x and y:n"); scanf("%f,%f"

57、,&x,&y); z = pow(x,2) + pow(y,2); printf("result=%.2fn",z);1920.写一个程序从键盘输入两个整数,然后显示第1个整数占第二个整数的百分比,保留到小数点后1位。例如输入5和40,程序输出结果如下: 5 is 12.5 percent of 40 *输入格式要求:"%d%d" 提示信息:"请输入两个整数:"*输出格式要求:"%d is %.1f percent of %d"答案:#include <stdio.h>main() in

58、t a, b; float c; printf("请输入两个整数:"); scanf("%d%d",&a,&b); c = (float)a / (float)b; c = c *100; printf("%d is %.1f percent of %d",a, c, b );-2021.求三角形面积。输入三角形的三个边长,计算三角形的面积。设三角形的三个边长分别为a、b、c,为简单起见,我们认为输入的三个边长数据是正确的,可以组成一个三角形。*输入格式要求:"%f,%f,%f" 提示信息:&quo

59、t;Enter 3 floats:"*输出格式要求:"area=%.2fn"程序运行示例如下:Enter 3 floats:2,2,3area=1.98答案:#include<stdio.h>#include<math.h>int main(void) float a, b, c, s, area; printf("Enter 3 floats:"); scanf("%f,%f,%f", &a, &b, &c); s = (a + b + c) / 2; area = sqrt

60、(s*(s - a)*(s - b)*(s - c); printf("area=%.2fn", area); return 0;-2122.写一个程序计算长为11.5厘米,宽为2.5厘米,高为10厘米的盒子的体积和表面积。程序说明:采用直接赋值,不用输入。*输出格式要求"area=%.2f,volume=%.2f"答案:#include <stdio.h>main() float a, b; a = (11.5 * 2.5 + 11.5*10 +10 * 2.5)*2; b = 11.5 * 2.5 * 10; printf("a

61、rea=%.2f,volume=%.2f",a,b);23.用递归方法计算整数n的阶乘n!。*输入格式要求:"%d" 提示信息:"Input n:" "n<0, data error!n"*输出格式要求:"%d! = %ldn"程序运行示例如下:Input n:55! = 120答案;#include <stdio.h>int f(int n) if(n=1 |n=0) return 1; else return n * f(n - 1);main() int n; o: printf(

62、"Input n:"); scanf("%d",&n); while (n<0) printf("n<0, data error!n"); goto o; printf("%d! = %ldn",n, f(n);-2324.用递归方法编程计算Fibonacci数列的前N项。其中fib(0)=0,fib(1)=1,fib(n)=fib(n-1)+fib(n-2)。*输入格式要求:"%d" 提示信息:"Input n:"*输出格式要求:"Fib(%d

63、)=%dn"程序运行示例如下:Input n:10Fib(1)=1Fib(2)=1Fib(3)=2Fib(4)=3Fib(5)=5Fib(6)=8Fib(7)=13Fib(8)=21Fib(9)=34Fib(10)=55答案:#include <stdio.h>int Fib(int n) if (n = 0) return 0; else if (n = 1) return 1; else return Fib(n - 1) + Fib(n - 2);main() int n, a; printf("Input n:"); scanf("%

64、d", &n); for (a = 1; a <= n;a+) printf("Fib(%d)=%dn", a, Fib(a); -2425.利用求阶乘函数Fact(),编程计算并输出从1到n之间所有数的阶乘值。*输入格式要求:"%u" 提示信息:"Input n(n>0):"*输出格式要求:"%d! = %lun"程序运行示例如下:Input n(n>0):101! = 12! = 23! = 64! = 245! = 1206! = 7207! = 50408! = 4032

65、09! = 36288010! = 3628800答案:#include<stdio.h>int sum_s(unsigned int i) unsigned int a; for(a = 1;i;i-) if (i > 1) a = a * i; else a = a * 1; return a;int Fact(unsigned int n) unsigned int i; for(i = 1;i <= n; i+) printf("%d! = %lun",i, sum_s(i); main() unsigned int i; printf("Input n(n>0):"); scanf("%u",&i); Fact(i);-2526.爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶

温馨提示

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

评论

0/150

提交评论