文档库

最新最全的文档下载
当前位置:文档库 > C习题库

C习题库

《C语言程序设计》复习题库

1、计算下面公式的值。T=1/1!+1/2!+1/3!+……+1/m! 当m=5时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)答案:1.717

2、程序填空:用*号输出字母C的图案。

#include "stdio.h"

#include "conio.h"

main()

{

_____________

printf(" *\n");

_____________

_____________

getch();

}

3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。(注:所有变量用long数据类型定义!) 答案:1533459

4、/*下面程序的功能是:计算并输出700以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!)*/ 答案:6591

#include

void main()

{

int total=0, mc=1, k=700;

int pm[10],count=0;

while( (k>=2) && mc<=10 )

{

if ((k%13==0) || (k%17==0))

{

pm[mc] = k;

mc++;

}

k--;

}

for( k=1;k<=10;k++ )

total += pm[k-1];

printf(" %d\n",total);

}

5、求x = 1+1/5+1/7+1/9+…的近似值,直到最后一项的绝对值小于10-5为止。

6、计算如下公式的A20值。 A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), ......(按四舍五入保留10位小数)。答案:0.6180339850

7、求[10,1600]之间能被7整除的奇数之和。答案:90965

8、函数mystrlen(char *s)的功能是求字符串s的长度。请填空。

Int mystrlen(char *s)

{int num=0;

while( ) {____;}

return ( );

9、[100,500]之间同时满足除以7余5,除以5余3,除以3余1的整数之和。答案:1042

10、求[100,999]之间所有的素数的个数。答案:143

11、编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。答案:110

12、/*数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。下列程序的功能是求出该数列前10项的和。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!)*/ 答案:311

#include

void main()

{

long sum=0,a[30]={1,2,1};

int k,j;

for( k=3;k<10;k++ )

a[k] = a[k-1]+a[k-2]+a[k-3];

for( j=1;j<=10;j++ )

sum += a[j];

printf(" %ld\n",sum);

}

13、/*求1到2000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/ 答案:61

#include

int prime(int x)

{

int k;

for(k=2;k

if(__________) break;

if(k==x) return 1;

else return 0;

}

void main( )

{ int a,b,n=0;

int prime(int x);

for(a=2;a<=1998;a++)

{

if(prime(a)==1)

{ b=a+2;

if(__________) n++;

}

printf(" %d \n",n);

}

14、编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。答案:4

15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?答案:9

16、爱因斯坦走台阶:有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?答案:119

17、/*求1000以内最大的10个素数的和。*/ 答案:9664

#include

int prime(long n)

{

long k;

for(k=2;k<=n-1;k++)

if(____________) return 0;

return 1;

}

void main( )

{

long t,total=0,num=0;

int prime(long n);

for(t=1000;t>=2;t--)

{

if(____________)

{

total=total+t; num++;

}

if(num==10)break;

}

printf("\n%ld",total);

}

18、/*求1!+2!+3!+...+7!,7!表示7的阶乘。*/ 答案:5913

#include

long jc( long x)

{

long k,fac=1;

for(k=1;________;k++)

fac *=k ;

________;

}

{

long n,sum=0;

long jc(long x);

for(n=1;n<=7;n++)

________;

printf("\n%ld",sum);

}

19、求10000以内所有完数之和,"完数"是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完数。(注:所有变量用int数据类型定义!) 答案:8658

20、/*数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。下列程序先给出数列的第一项(1)、第二项(2)、第三项(1),再逐步计算其它项并保存在数组a中,最后求出该数列的第25项。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!)*/答案:1323525 #include

#include

#define N 30

void main()

{

long a[N];

int k;

clrscr();

a[0] = 1; a[1] = 2; a[2]=1;

for( k=3;k<=20;k++ )

a[k] = a[k-1]+a[k-2]+a[k-3];

printf(" %ld\n",a[k-1]);

}

21、/*求区间[200,3000]中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。*/ 答案:87970

#include

int hws(long n)

{

long x=n,t=0,k;

while(x>0)

{

k=x%10;

t = t*10 + k;

x=x/10;

}

if( ___________) return 1;

else return 0;

}

void main( )

{

long k,s=0;

int hws(long n);

for(k=200; k<=2000;k++)

if(___________)

s=s+k;

printf("\n%ld",s);

}

22、/*下面的程序是求表达式的值:

s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+...+(1*2*3*...*n)/(3*5*7*...(2*n+1))请将程序补充完整,并给出当n=25时,程序的运行结果(按四舍五入保留10位小数)。*/答案:1.5707963267

#include

double fun(int n)

{

double s=1.0, t=1.0;

int k;

double rtn=1.0;

for(k=1;k<=n; k++)

{

t = t*k;

s = s*(2*k+1);

_________________

}

return rtn;

}

void main()

{

double sum;

__________

printf("\n %.10lf",sum);

}

23、已知:Sn=2/1+3/2+4/3+…+(n+1)/n, 求Sn不超过50的最大值(按四舍五入的方式精确到小数点后第三位)。答案:49.395

24、计算Y=X/1!-X^3/3!+X^5/5!-X^7/7!+……前20项的值(已知:X=2)。要求:按四舍五入的方式精确到小数点后第二位。答案: 0.91

25、若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。例:3^2+4^2=5^2,则5为弦数,求[131,200]之间最小的弦数。答案:135

26、已知X,Y,Z为三个正整数,且X^2+Y^2+Z^2=25^2,求X+Y+Z的最大值。答案:43

27、猴吃桃:有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。以后每天都是吃尚存桃子的一半零一个。到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。问小猴子第一天共摘下了多少个桃子。答案:1534

28、求[1,50]之间的所有整数能构成直角三角形的三边的组数。例如:3*3+4*4=5*5,它们构成直角三角形,所以{3,4,5}作为一组,但{4,3,5}视为跟{3,4,5}相同的一组。答

案:20

29、15元钱换成1元、2元、5元的票面,问有多少种不同的兑换方法?输出所有的兑换方法。答案: 18种

30、用迭代法求x等于a开平方的正数值。

迭代公式为:x n+1=1/(2*(x n+a/x n)),要求直到前后两次求出的x的差的绝对值小于10-5为止。A的值从键盘输入。

31、求最大的水仙花数,所谓水仙花数,指的是一个三位数,其各个数字的立方之和等于该数。答案:407

32、一球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?

答案: 299.609375 0.097656

33、编写程序,完成如下功能,输入8个float类型的实数,分别求最大值和最小值,保留三位小数输出最大值和最小值。

34、编写程序输出如下字符图形:

@ @ @ @ @ @ @ @ @ @ @

@ @ @ @ @ @ @ @ @ @

@ @

@

35、计算:s=f(-30)+f(-29)+......+f(-1)+f(0)+f(1)+......+f(30)的值。其中函数定义如下:f(x)=(x+1)/(x-2) 如果 x>1; f(x)=0 如果 x=0 或 x=2 ;f(x)=(x-1)/(x-2) 如果 x<0。(按四舍五入保留6位小数) 答案:65.223018

36、编写程序输出如下字符图形(最后一行19颗星):

* * *

* * * * *

* * * * * * *

* * * … * * * *

37、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

38、计算下面公式的值。T=1+1/(2*3)+1/(3*4)+……+1/(m*(m+1)),当m=50时的结果(按四舍五入保留6位小数)。(注:所有变量用double数据类型定义!)答案:1.480392

39、程序填空:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

程序分析:利用while语句,条件为输入的字符不为'\n'.

#include "stdio.h"

#include "conio.h"

main()

{

char c;

int letters=0,space=0,digit=0,others=0;

printf("please input some characters\n");

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

{

if(c>='a'&&c<='z'||c>='A'&&c<='Z')

_________

else if(c==' ')

_________

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

_________

else

_________

}

printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, space,digit,others); getch();

}

40、打印出如下图案(菱形)

*

***

*****

*******

*****

***

*

41、求出[2,478]以内的:

(1)最大的素数。 *467

(2)素数数目。 *91

(3)所有素数之和。 *19580

42、已知:

∑=-=N i i

i b a y 12)( ?????=)(2)(为偶数为奇数i i i i a i ?????=)()(32为偶数为奇数i i i i b i

(1)若N=10,求Y 。 *1304735

(2)若N=15,求Y 。 *1.184172E+07

43、已知:n X X X y n +???+++=212, 其中:X = 0.25,n = 1,2,┅,求:

(1) Y 值(精确到小数点后第5位) *1.28767

(2) 与(1)匹配的最小的n *7

44、以下程序输入三个整数值给a ,b ,c ,程序把b 中的值给a ,把c 中的值给b ,把a 中的值给c ,交换后输出a 、b 、c 的值。例如:读入后,a=10、b=20、c=30;交换后,a=20、b=30、c=10。请填空。

#include <stdio.h >

main()

{int a,b,c,t;

printf("Enter a,b,c:");

scanf("%d%d%d",___);

___;a=b;___;___;

printf("a=%d b=%d c=%d\n",a,b,c);

45.下面fun函数的功能是从a数组中查找值为y的元素;若找到,返回该元素的下标值,若不存在值为y的元素,返回0;数列放在a数组的a[1]到a[n]中,a[0]元素用来作为临时存储单元。请填空。

fun(int a[],int y,int n)

{int k=0;

a[0]=y;k=n;

while( ) k--;

return( );

46、/*下列程序的功能是求出二阶Fibonacci数列前10之和,1,1,2,3,5,8…。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!3是第四项,5是第五项。)*/ 答案:143

#include

void main()

{

long sum=0,a[30]={1,1,2};

int k;

for( k=2;k<10;k++ )

a[k] = a[k-1]+a[k-2];

for( k=1;k<=10;k++ )

sum += a[k];

printf(" %ld\n",sum);

}

47、20,160]之间的所有偶数的平方和。答案:694380

48、求[10,2000]之间能被2或3或5整除的数之和。答案:67795

49、求800以内的最大的20个素数之和。答案:14510

50、求当n=60时下式的和:s=1+1/(1+2)+1/(1+2+3)+......+1/(1+2+3+......+n)(按四舍五入保留6位小数)。答案:1.967214

51、编写程序:输入x的值,按照下列公式计算cos(x)

cos(x)=1-x2/2!+ x4/4!- x6/6!+... 精确到10-5。

答案

1、计算下面公式的值。

T=1/1!+1/2!+1/3!+……+1/m! 当m=5时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)答案:1.717

#include

main()

{int n,k=1,i=1; 解释;

float T=0; T必需是浮点数,因为后面是小数

scanf("%d",&n); 输入一个你要算到的数。

while(i<=n) 一直做到你输入的那个数

{i++;

T=T+1.0/k; 做一次循环就磊加一次

k=k*i; 这就是算n的阶乘

}

printf("%f\n",T);

getch(); 算完以后停止看到结果

}

2、程序填空:用*号输出字母C的图案。

#include

#include

main()

{int i=0,j=0;

for(i=4;i>0;i--)

{for(j=i*i;j>0;j--) 做循环

printf(" "); 前输出前面的空格

printf("**\n"); 打印*字符

}

printf("*\n*\n");

for(i=1;i<5;i++) 用两个循环完成,当然也能用一个完成,但是要算哦

{for(j=1;j<=i*i;j++) 后面的循环是一样的就只是反过来

printf(" ");

printf("**\n");

}

getch();

}

3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。(注:所有变量用long数据类型定义!) 答案:1533459

#include "stdio.h"

main()

{int k=0;

int i,c;

for(i=1001;i<10000;)

{ int s=0;

int a=0,j=1;

c=i;

for(;j<5;j++)

{a=c%10; 求各位数字的循环

c=c/10;

s=s+a; 求各位数的和

}

if(s%15==0) 判断是否满足条件

k=k+i; 求满足条件的数字的和

i=i+2;

}

printf("%d",k); 输出总和

}

4、/*下面程序的功能是:计算并输

出700以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!)*/ 答案:6591

#include

void main()

{

int total=0, mc=1, k=700;

int pm[10],count=0;

while( (k>=2) && mc<=10 )

{

if ((k%13==0) || (k%17==0))

{

pm[mc] = k;

mc++;

}

k--;

}

for( k=1;k<=10;k++ )

total += pm[k-1];

printf(" %d\n",total);

这是正确的程序

#include

void main()

{

int total=0, mc=0, k=700;

int pm[10];

while( (k>=2) && mc<10 )

{

if ((k%13==0) || (k%17==0))

{ 这两个程序之间的差异就是在数组中的一个要从零开始注意其中的差异哦

pm[mc] = k;

mc++;

}

k--;

}

for( k=0;k<10;k++ )

total += pm[k];

printf(" %d\n",total);

}

5、求x = 1+1/5+1/7+1/9+…的近似值,直到最后一项的绝对值小于10-5为止。

#include "stdio.h"

long float s( float i);

void main()

{float i=1.0;

long float a,x=0; 因为有小数就要用浮点数哦

do

{a=s(i); 调用函数

x=x+a;

}

while(a>0.00001); 条件当然也可以用递归的方法,你要是不习惯就用着方法

printf("x=%lf\n",x);

getch();

}

long float s(float i) 写函数求1/(2i+1)的值

{

if(i==1)

return(1);

else

return(1/(2*i+1));

}

6、计算如下公式的A20值。A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), ......(按四舍五入保留10位小数)。答案:0.6180339850

#include "stdio.h"

float sm(int i);

void main()

{

printf("%f",sm(20)); 打印并调用函数

getch();

}

float sm(int i) 定义sm函数

{float f;

if(i==1)

f=1; 中断函数条件就是当f为一时就终止了else

f=1/(1+sm(i-1)); 递归法求函数return(f);

}

7、求[10,1600]之间能被7整除的奇数之和。答案:90965

#include "stdio.h"

void main()

{int i,j,a=0;

for(i=11;i<=1600;)

{if(i%7==0) 条件判断是否能被7整除

a=a+i;

i=i+2;}

printf("%d",a);

getch();

}

8、函数mystrlen(char *s)的功能是求字符串s的长度。请填空。

Int mystrlen(char *s)

{int num=0;

while( ) {____;}

return ( );

答案是

Int mystrlen(char *s) 写函数

{int num=0;

while('\0') {num=num+1;} 知道字符串结束时就结束字符串最后的一定是以\0结尾的书上有哦

return (num);

9、[100,500]之间同时满足除以7余5,除以5余3,除以3余1的整数之和。答案:1042

#include "stdio.h"

void main()

{int i,a=0;

for(i=100;i<=500;i++) 做循环并且判断是不是满足条件

if(i%7==5&&i%5==3&&i%3==1)

a+=i;

printf("%d",a);

getch();

}

10、求[100,999]之间所有的素数的个数。答案:143

#include "stdio.h"

int ss(int i);