搜档网
当前位置:搜档网 › (完整版)C语言程序设计练习题(含程序及参考答案)

(完整版)C语言程序设计练习题(含程序及参考答案)

C语言练习题

(所提供的源程序均采用自定义函数方式解决,如不采用函数方式,也可直接在main函数中借鉴该思想编程,因时间有限,所有程序未能一一验证,仅供参

考使用)

1、定义一个函数int fun(int a,int b,int c),它的功能是:若a,b,c能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。

#include

int fun(int a,int b,int c)

{

if(a+b>c && b+c>a && a+c>b)

{

if(a==b && b==c )

return 3;

else if(a==b||b==c||a==c)

return 2;

else return 1;

}

else return 0;

}

void main()

{

int a,b,c,shape;

printf("\nInput a,b,c: ");

scanf("%d%d%d",&a,&b,&c);

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

shape =fun(a,b,c);

printf("\n\nThe shape : %d\n",shape);

}

2、编写一个程序,将两个变量的值交换, 例如变量a中的值原为 3,b中的值原为8,程序运行后 a 中的值为8,b中的值为3。

#include

void fun(int *x,int *y)

{

int t;

t=*x;*x=*y;*y=t

}

void main()

{

int a=3,b=8;

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

fun(&a,b);

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

}

3、从键盘输入3个数,将最大值放在变量a中,最小值放在变量c中。

例如,输入的数为:55 12 34,

输出结果应当是:a=55.0,b=34.0,c=12.0。

#include

void fun(float *p,float *q,float *s)

{

float k;

if (*p<*q)

{ k=*p;*p=*q;*q=k;}

if (*q<*s)

{ k=*s;*s=*p;*p=k;}

if (*p<*q)

{ k=*p;*p=*q;*q=k;}

}

void main()

{ float a,b,c;

printf("Input a b c: "); scanf("%f%f%f",&a,&b,&c);

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

fun(&a,&b,&c);

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

}

4、编写函数fun(int n),它的功能是:计算正整数n的所有因子(1和n除外)之和作为函数值返回。例如:n=120时,函数值为239。

#include

#include

int fun(int n)

{

int i,s=0;

for (i=2;i

if (n%i==0) s=s+i;

return s;

}

void main() /*主函数*/

{

void NONO();

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

NONO();

}

void NONO( )

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,

输出数据,关闭文件。 */

FILE *wf;

wf = fopen("a30.out", "w") ;

fprintf(wf,"%d\n",fun(120));

fclose(wf) ;

}

5、计算s,并输出

1 1 1

S = 1 + ── + ─── + …… + ──────

1+2 1+2+3 1+2+3+…+n

n通过键盘输入,例如:若n的值为11时,则函数值为:1.833333 #include

#include

float fun(int n)

{

int i;

float s=1.0,h=1;

for (i=2;i<=n;i++)

{

h=h+i; s=s+1.0/h;

}

return s;

}

void main()

{

int n;float s;

printf("\nPlease enter N:");scanf("%d",&n);

s=fun(n);

printf("the result is:%f",s);

}

6、将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:7531。#include

void fun(long s,long *t)

{

int d;

long s1=1;

*t=0;

while (s>0)

{

d=s%10;

if(d%2!=0)

{

*t=d*s1+*t;

s1=s1*10;

}

s/=10;

}

}

main()

{

long s,t;

printf("\nPlease enter s:");

scanf("%ld",&s);

fun(s,&t);

printf("The result is:%ld\n",t);

}

7、计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值从键盘传入,若k的值为500,则输出4622。

#include

int fun(int k)

{

int m=0,mc=0,j;

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

{

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

{

m=m+k;mc++;

}

k--;

}

return m;

}

void main()

{

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

}

8、已知一个数列的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和,计算并输出该数列前n项的平方根之和sum。例如,当n=10时,程序的输出结果应为:23.197745。

#include

#include

double fun(n)

{

double sum,s0,s1,s2,s;

int k;

sum = 1.0;

if(n <= 2) sum = 0.0;

s0 = 0.0; s1 = 0.0; s2 = 1.0;

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

{ s = s0 + s1 + s2;

sum += sqrt(s);

s0 = s1; s1 = s2; s2 = s;

}

return sum;

}

void main ( )

{

int n;

printf("Input N=");

scanf("%d", &n);

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

}

9、编写一个程序,从键盘输入m,输出大于m且紧随m的素数。#include

int fun(int m)

{

int i,k;

for (i=m+1;;i++) {

for (k=2;k

if(i%k==0)

break;

if (k>=i)

return(i);

}

}

void main()

{

int n;

printf("\nPlease enter n:");

scanf("%d",&n);

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

}

10、判断两个整数m和n是否互质(即是否有公共的因子)(m≠1,n≠1)。方法是:用2到t(t取m和n中较小的那个数)之间的数分别去除m和n,若m和n能同时被某个数除尽,则m和n不互质;否则它们互质。

例如,若输入187和85,则应输出No(表示它们不互质,它们有公因子17)。若输入89和187,则应输出Yes(表示它们互质)。

#include

int IsThat( int m, int n )

{

int k, t, mk=1;

t=m;

if (m>n) t=n;

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

if( m%k==0 && n%k==0 )

{ mk=0; break; }

return mk;

}

void main( )

{

int m, n;

printf( "\nPlease enter 2 numbers:\n" );

scanf("%d %d", &m, &n);

if( IsThat( m, n ) )

printf( "Yes\n" );

else

printf( "No\n" );

}

11、将十进制正整数m转换成k进制数(2≤k≤9)并输出(m,k从键盘输入)。

例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。

#include

void Trans( int m, int k )

{

int aa[20], i,j;

for( i = 0; m; i++ )

{

aa[i] = m%k;

m /= k;

}

for( j=i-1; j>=0; j-- )

printf("%d", aa[j]);

}

void main()

{

int b, n;

printf( "\nPlease enter a number and a base:\n" );

scanf("%d %d", &n, &b );

Trans( n, b );

}

12、统计从键盘输入的50个实数中有多少个正数、多少个负数、多少个零#include

void fun(int *zs,int *fs,int *l,float aa[])

{

int i;

for(i=0;i<50;i++)

{

if(aa[i]>0)

(*zs)++;

if(aa[i]<0)

(*fs)++;

if(aa[i]==0)

(*l)++;

}

}

void main()

{

float num[50];

int i,czs,cfs,cl;

czs=cfs=cl=0;

printf( "\nPlease enter 50 float numbers :\n" );

for(i=0;i<50;i++)

scanf(“%f”,&num[i]);

fun(&czs,&cfs,&cl,num);

printf("\n正数:%d ,负数:%d ,零:%d \n",czs,cfs,cl);

}

13、计算并输出方程X2+Y2=1989的所有整数解

#include

void fun()

{

int x,y;

for(x=1;x<=44;x++)

for(y=1;y<=44;y++)

if(x*x+y*y==1989)

printf(“x=%d ,y=%d \n”,x,y);

}

void main()

{

printf(“方程x^2+y^2=1989的整数解为:\n”);

fun();

}

14、从键盘输入10个整数,求出其中的最大值。#include

int fun(int aa[])

{

int m,i;

m=aa[0];

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

if(aa[i]>m)

m=aa[i];

return m;

}

void main()

{

int num[10],i;

printf(“请从键盘输入10个整数:\n”);

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

scanf(“%d”,&num[i]);

printf(“\n最大的数是:%d\n”,fun(num)); }

15、从键盘输入n值,输出如右图形。(例如n=5时)

void fun(int n)

{

int i,j;

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

{

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

printf(“%3d”,1);

for(j=2;j<=n+1-i;j++)

printf(“%3d”,j);

printf(“\n”);

}

}

void main()

{

int n;

printf(“\n请输入图形的行数:”);

scanf(“%d”,&n);

fun(n);

}

16、使用函数的方式,计算如下公式的值。

1 1 1

A1=1,A2=──,A3=──,……An=──── 1+A1 1+A2 1+A(n-1) 例如:若n=10,则应输出: 0.617977。

#include

float fun ( int n )

{

float A=1; int i;

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

A = 1.0/(1+A);

return A ;

}

void main( )

{

int n ;

printf("\nPlease enter n: ") ;

scanf("%d", &n ) ;

printf("A%d=%f\n", n, fun(n) ) ;

}

* 17、使用函数的方式,,按下面的公式计算并输出数列的第m项。

┌ 2, m = 1;

│ 3, m = 2;

FFF( m ) = ┤ 5, m = 3;

└ FFF(m - 3) + FFF(m - 1), m > 3;

例如,若输入整数 9,则应输出:47。

(不用做)

* 18、使用函数的方式,按以下递归公式求函数值

┌10 (n=1)

fun(n)=│

└fun(n-1)+2 (n>1)

例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。

(不用做)

19、计算并输出当0

例如,在主函数中从键盘给x输入0.21后,输出为:s=1.100000。

#include

#include

double fun(double x)

{

int n=1; /* 循环计数*/

double sn=1; /* 累计数*/

double xn=1,xn1=0; /*x的n值,以及x的n-1值;*/

while(fabs(xn-xn1)>=0.000001)/*绝对值是否合格*/

{

xn=xn*x*(0.5-n+1)/n; /*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/ n+=1;

sn+=xn; /*sn累加上xn*/

}

return sn;

}

void main()

{

double x,s;

printf("Input x: "); scanf("%lf",&x);

s=fun(x);

printf("s=%f\n",s);

}

20、计算并输出s。

x^2 x^3 x^n

s = 1 + x + ── + ── + …… + ──

2! 3! n!

n,x从键盘输入,例如,当n=10,x=0.3时,函数值为1.349859。#include

double fun(double x,int n)

{

int i;

double f=1.0,h=x;

double s=1;

s=s+h/f;

for (i=2;i<=n;i++)

{

f=f*i;h=h*x;

s=s+h/f;

}

return s;

}

void main()

{

printf("%f\n",fun(0.3,10));

}

相关主题