c语言习题及答案

时间:2025-04-20

在教学中积累的习题及参考答案,想与同行分享

1、求一元二次方程的根(root.cpp) #include "stdio.h" #include "math.h" main()

{ float a,b,c,d,x1,x2,p,q; scanf("%f,%f,%f",&a,&b,&c); if (fabs(a)<=1e-6)

printf("is not a quadratic\n"); else

{d=b*b-4*a*c; if (fabs(d)<=1e-6)

printf("has two equal roots:%8.4f\n",-b/(2*a)); else

if (d>1e-6) {x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("has two real roots:\n");

printf("x1=%8.4f and x2=%8.4f\n",x1,x2);

}

else

{p=-b/(2*a); q=sqrt(-d)/(2*a); printf("has complex roots:\n"); printf("x1=%8.4f+%8.4fi\n",p,q); printf("x2=%8.4f-%8.4fi\n",p,q); }

} }

在教学中积累的习题及参考答案,想与同行分享

2、已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):

profit≤1000

没有提成;

提成10%; 提成15%; 提成20%;

1000<profit≤2000 2000<profit≤5000 5000<profit≤10000 10000<profit

提成25%。

算法设计要点: 为使用switch语句,必须将利润profit与提成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、 ),如果将利润profit整除1000,则当: profit≤1000 对应0、1 1000<profit≤2000 对应1、2

2000<profit≤5000 对应2、3、4、5

5000<profit≤10000 对应5、6、7、8、9、10 10000<profit 对应10、11、12、

为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可: profit≤1000 对应0 1000<profit≤2000 对应1 2000<profit≤5000 对应2、3、4 5000<profit≤10000 对应5、6、7、8、9 10000<profit 对应10、11、12、……

main()

{ long profit; int grade; float salary=500; printf("Input profit: "); scanf("%ld", &profit);

grade= (profit–1) / 1000; /*利润-1再整除1000,转化成switch中的case标号 */

switch(grade)

{ case 0: break; /*profit≤1000 */ case 1: salary += profit*0.1; break;

/*1000<profit≤2000 */

在教学中积累的习题及参考答案,想与同行分享

case 2: case 3:

case 4: salary += profit*0.15; break; /*2000<profit≤5000 */ case 5: case 6: case 7: case 8:

case 9: salary += profit*0.2; break; /*5000<profit≤10000 */ default: salary += profit*0.25; }

printf("salary=%.2f\n", salary);

}

/*10000<profit */

3、求一个数的阶乘(lx5_00.cpp) #include "stdio.h" main()

{int i;float p=1; for (i=1;i<=50;i++) p=p*i;

printf("%le",p); /*输出用指数形式表示*/ } 4、译密码:译码有约定:即将输入的字母译成该字母之后的第四个字母,其它字符不变,

如A译成E,a译成z,China!择成Glmre!,参考程序如下:(lx5_0.cpp)

#include "stdio.h" main() {char c;

while ((c=getchar())!='\n')

{if (c>='a' && c<='z' || c>='A' && c<='Z') {c=c+4;

if (c>'Z' && c<='Z'+4 || c>'z') c=c-26; }

printf("%c",c); }

printf("\n"); }

5、求Fibonacci数列的前40个数。(lx5_1.cpp)

在教学中积累的习题及参考答案,想与同行分享

分析:该数列的生成方法为:F1=1,F2=1,Fn=Fn-1+Fn-2(n>=3),即从第3个数开始,每个数等于前2个数之和。

main()

{ long int f1=1,f2=1;

int i=1; /*定义并初始化循环控制变量i*/ for( ; i<=20; i++ ) /*1组2个,20组40个数*/ { printf(“%15ld%15ld”, f1, f2); /*输出当前的2个数*/ if(i%2==0) printf(“\n”); /*输出2次(4个数),换行*/ f1 += f2; f2 += f1; /*计算下2个数*/ }

}

6、输出10~100之间的全部素数。(lx5_2.cpp)

分析:所谓素数n是指除1和n之外,不能被2~(n-1)之间的任何整数整除。

main()

{ int i=11, j, counter=0;

for( ; i<=100; i+=2) /*外循环:为内循环提供一个整数i*/ { for(j=2; j<=i-1; j++) /*内循环:判断整数i是否是素数*/ if(i%j==0) /*i不是素数:因为能被2~(i-1)之间的某个数整除*/ break; /*强行结束内循环,执行下面的if语句*/ if(counter%10==0) /*每输出10个数换一行*/ printf("\n");

if( j >= i ) /*整数i是素数:输出,计数器加1*/ { printf("%6d",i); counter++; } }

}

在教学中积累的习题及参考答案,想与同行分享

7、输出九九乘法表 (lx5_3.cpp) main() { int i,j,p=1; for (j=1;j<=9;j++) { printf("\n"); for (i=1;i<=j;i++) { p=j*i;

printf("\t%d*%d=%d",i,j,p); } } }

8、输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。#include"stdio.h" (zy5_2.cpp) main() { char c;

int letter=0,space=0,number=0,other=0; printf("input a row of letter:\n"); while ((c=getchar())!='\n')

{ if (c>='a' && c<='z'||c>='A' && c<='Z') letter++; else if (c==' ') space++;

else if (c>='0' && c<='9') number++;

e …… 此处隐藏:6891字,全部文档内容请下载后查看。喜欢就下载吧 ……

c语言习题及答案.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219