C语言入门习题系列三(含答案)

时间:2024-12-09 18:26:50

21 编程计算指定式子的近似值

编写一个程序,计算的近似值(直到最后一项的绝对值小于eps)。(eps为极小值,可以由用户输入,也可以以常量的形式出现;用户输入的x绝对值应该小于1,否则不能结束循环)

  1. #include <>
  2. #include <>
  3. #include <>
  4. int main()
  5. {
  6. double sum,eps=0.0000000001,x,t;
  7. int n;
  8. scanf("%lf",&x);
  9. sum=x;
  10. t=x;
  11. for(n=1;t>=eps;n=n+2)
  12. {
  13. t=-1*t*n/(n+1)*x*x/(n+3);
  14. sum+=x;
  15. }
  16. printf("sum=%lf\n",sum);
  17. return 0;
  18. }

22 取出特定整数中所有奇数数字,按规则组成新的数

取出一个无符号的十进制整数中所有奇数数字,按原来的顺序组成一个新的数。

  1. #include <>
  2. int main()
  3. {
  4. long x,s=0,j=0; //x:输入数据;s:输出数据的倒序;j:输出数据;
  5. int n,i; //n:x从个位开始往左位移的单个数字;i:s从个位开始往左位移的单个数字;
  6. scanf("%ld",&x);
  7. //本题使用位运算更简单,初学时所做,暴力解
  8. while(x) //x!=0
  9. {
  10. n=x%10;
  11. if(n%2!=0)
  12. s=s*10+n;
  13. x=x/10;
  14. }
  15. while(s)
  16. {
  17. i=s%10;
  18. j=j*10+i;
  19. s=s/10;
  20. }
  21. printf("%ld",j);
  22. }

23 编程实现字符按规则的输出

请编写一个程序,实现以下功能:接收键盘上的输入,直到按Enter键为止,对于这些字母按如下规则进行转换:

① 如果输入的大写字母,请转换为小写字母;如果输入的小写字母,请转换为大写字母。

② 对于非字母字符,则不进行转换,原样输出。

③ 若有连续的一个以上的空格时,则只输出一个空格。

请对输入的信息按上述规则进行转换后,再在屏幕上进行输出。

  1. #include <>
  2. int main()
  3. {
  4. char c,front= '\0';
  5. scanf("%c",&c);
  6. while(c!= '\n')
  7. {
  8. if(c!=' ')
  9. {
  10. if(c>='A'&&c<='Z')
  11. {
  12. c=c+32;
  13. putchar(c);
  14. }
  15. else if(c>='a'&&c<='z')
  16. {
  17. c=c-32;
  18. putchar(c);
  19. }
  20. else
  21. putchar(c);
  22. }
  23. if(c== ' ')
  24. if(c!=front)
  25. putchar(c);
  26. front=c;
  27. c=getchar();
  28. }
  29. return 0;
  30. }

24 编程统计学生的成绩

从键盘上输入若干个学生的成绩,统计输出所有学生成绩之和,并计算这些学生的平均成绩。

  1. #include <>
  2. int main()
  3. {
  4. float s,i=0; //s:单人分数;i:人数
  5. float avg=0,sum=0;
  6. scanf("%f",&s);
  7. while(s>=0) //输入任意复数退出循环
  8. {
  9. i++;
  10. sum=sum+s;
  11. avg=sum/i;
  12. scanf("%f",&s);
  13. }
  14. printf("\nsum=%f\navg=%f\n",sum,avg);
  15. return 0;
  16. }

25 输入无符号整数,求所有数位上数字之和

  1. #include <>
  2. int main()
  3. {
  4. int x,m,s=0;
  5. scanf("%d",&x);
  6. while(x!=0)
  7. {
  8. m=x%10;
  9. s=s+m;
  10. x=x/10;
  11. }
  12. printf("%d",s);
  13. return 0;
  14. }

26 求一元二次方程的根

求一元二次方程的根,用3个函数分别求判别式大于0、等于0和小于0时的根,并输出结果。主函数中输入系数a、b、c。

  1. #include <>
  2. #include <>
  3. int main()
  4. {
  5. double a,b,c,delta,x1,x2,p,q;
  6. scanf("%lf %lf %lf",&a,&b,&c);
  7. if(a==0)
  8. printf("不是一元二次方程!\n");
  9. else
  10. {
  11. delta=b*b-4*a*c;
  12. if(delta==0)
  13. {
  14. printf("方程有两个相等的实数根!\n");
  15. x1=-b/(2*a);
  16. x2=x1;
  17. printf("%.2lf , %.2lf\n",x1,x2);
  18. }
  19. else if(delta>0)
  20. {
  21. printf("方程有两个不相等的实数根!\n");
  22. x1=-b/(2*a)+sqrt(delta)/(2*a);
  23. x2=-b/(2*a)-sqrt(delta)/(2*a);
  24. printf("%.2lf , %.2lf\n",x1,x2);
  25. }
  26. else
  27. {
  28. printf("方程有两个不相等的复数根!\n");
  29. p=-b/(2*a);
  30. q=sqrt(-delta)/(2*a);
  31. printf("%.wlf + %.2lfi\n",p,q);
  32. printf("%.wlf - %.2lfi\n",p,q);
  33. }
  34. }
  35. return 0;
  36. }

27 用递归方法求n解勒让德多项式的值

  1. #include <>
  2. #include <>
  3. unsigned int getfactorial(unsigned int n,unsigned int x);
  4. int main()
  5. {
  6. unsigned int x,n,p;
  7. scanf("%u %u",&n,&x);
  8. p=getfactorial(n,x);
  9. printf("p(%u)=%u\n",x,p);
  10. return 0;
  11. }
  12. unsigned int getfactorial(unsigned int n,unsigned int x)
  13. {
  14. unsigned int result;
  15. if(n==0)
  16. result=1;
  17. else if(n==1)
  18. result=x;
  19. else if(n>1)
  20. result=((2*n-1)*x*getfactorial(n-1,x)-(n-1)*getfactorial(n-2,x))/n;
  21. return result;
  22. }

28 计算银行存款余额和利息

计算银行存款余额和利息:假设银行存款季度利息是5.3%,根据输入的原始数据计算利息和账户余额,并以表格的形式输出每个季度的利息和账户余额。要求写两个函数,一个用来计算利息和余额,一个用来输出。

  1. #include <>
  2. double function(float);
  3. void display(float,int);
  4. int main()
  5. {
  6. float sum;
  7. int season;
  8. scanf("%f %d",&sum,&season);
  9. display(sum,season);
  10. return 0;
  11. }
  12. double function(float sum)
  13. {
  14. float a,acc;
  15. a=0.053;
  16. acc=sum*a;
  17. return acc;
  18. }
  19. void display(float sum,int season)
  20. {
  21. int i;
  22. printf("季度 利息 账户余额\n");
  23. printf("--------------------------\n");
  24. for(i=1;i<=season;i++)
  25. {
  26. printf("%d %f %f\n",i,function(sum),function(sum)*i+sum);
  27. /*利息=本金×利率×时间*/
  28. printf("----------------------------\n");
  29. }
  30. }

29 利用函数求和,并把结果作为函数返回值

  1. #include <>
  2. double fun(void);
  3. int main()
  4. {
  5. printf("数列的和:%lf\n",fun());
  6. return 0;
  7. }
  8. double fun()
  9. {
  10. int n=1;
  11. double term,sum=0.0;
  12. do
  13. {
  14. term=(double)(2*n-1)/(2*n*2*n);
  15. sum=sum+term;
  16. n++;
  17. }while(term>0.0001);
  18. return sum;
  19. }

30 利用函数求w的低n-1位数

设w是一个大于10的无符号整数,若w是n(n>=2)位的整数,编写一个函数求w的低n-1位的数作为函数的返回值。如w=5923,则函数返回值为923。

  1. #include <>
  2. int fun(unsigned int);
  3. int main()
  4. {
  5. unsigned int w;
  6. scanf("%u",&w);
  7. if(w<10)
  8. {
  9. printf("data error!");
  10. }
  11. else
  12. printf("%d",fun(w));
  13. return 0;
  14. }
  15. int fun(unsigned int w)
  16. {
  17. int r=1,n=1,s;
  18. s=w;
  19. while(s>10)
  20. {
  21. s=s/10;
  22. r=r*10;
  23. n++;
  24. }
  25. w=w%r;
  26. return w;
  27. }