您的当前位置:首页正文

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

2024-07-17 来源:独旅网
时间:二O二一年七月二十九日

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

时间:二O二一年七月二十九日 #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\

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

printf(\"\\n\\nThe shape : %d\\n\ }

2、编写一个程序,将两个变量的值交换, 例如变量a中的值原为

3,b中的值原为8,程序运行后 a 中的值为8,b中的值为3。

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

#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\ fun(&a,b);

printf(\"%d %d\\n\ }

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\

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

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

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

4、编写函数fun(int n),它的功能是:计算正整数n的所有因子

(1和n除外)之和作为函数值返回。例如:n=120时,函数值为239。

#include #include int fun(int n) {

int i,s=0; for (i=2;ivoid main() /*主函数*/ {

void NONO();

printf(\"%d\\n\ NONO(); }

void NONO( )

{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ FILE *wf;

wf = fopen(\"a30.out\ fprintf(wf,\"%d\\n\ fclose(wf) ;

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

}

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; } returns; }

void main() {

int n;float s;

printf(\"\\nPlease enter N:\");scanf(\"%d\ s=fun(n);

printf(\"the result is:%f\ }

6、将一个整数中的每一位上为奇数的数依次取出,构成一个新数

放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:7531。

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

#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\ fun(s,&t);

printf(\"The result is:%ld\\n\ }

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

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

{

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\ }

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;

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

sum += sqrt(s);

s0 = s1; s1 = s2; s2 = s; } return sum;} void main ( ) { int n;

printf(\"Input N=\"); scanf(\"%d\ printf(\"%f\\n\ }

9、编写一个程序,从键盘输入m,输出大于m且紧随m的素数。 #include int fun(int m) { int i,k;

for (i=m+1;;i++) { for (k=2;kif (k>=i) return(i); } }

void main() { int n;

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

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

printf(\"%d\\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\ if( IsThat( m, n ) ) printf( \"Yes\\n\" ); else

printf( \"No\\n\" ); }

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

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

键盘输入)。

例如,若输入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\ void main() {

int b, n;

printf( \"\\nPlease enter a number and a base:\\n\" ); scanf(\"%d %d\ }

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)

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

(*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 50float numbers :\\n\" ); for(i=0;i<50;i++) scanf(“%f”,&num[i]); fun(&czs,&cfs,&cl,num);

printf(\"\\n正数:%d ,负数:%d ,零:%d \\n\ }

13、计算并输出方程X+Y=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()

2

2

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

{

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时)

#include void fun(int n) { int i,j;

时间:二O二一年七月二十九日

1 2 3 4 5 1 1 2 3 4 1 1 1 2 3 1 1 1 1 2 1 1 1 1 1

时间:二O二一年七月二十九日

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 ; }

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

void main( ) { int n ;

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

printf(\"A%d=%f\\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)

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

{

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*/ } returnsn; }

void main() {

double x,s;

printf(\"Input x: \"); scanf(\"%lf\ s=fun(x);

printf(\"s=%f\\n\ }

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) {

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

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\ }

21、从键盘输入high,计算并输出high以内最大的10个素数之和。例如,输入high的值为100,则输出732。 #include int fun( int high ) {

int sum = 0, n=0, j, yes; while ((high >= 2) && (n < 10)) {

yes = 1;

for (j=2; j<=high/2; j++ ) if (high % j ==0 )

{

yes=0; break; }

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

if (yes==1) {

sum +=high; n++; } high--; }

return sum ; }

void main ( ) {

printf(\"%d\\n\ }

22、请编写函数float fun(int n),它的功能是:返回n(包含n)以内能被5或9整除的所有自然数的倒数之和。例如,n=20,返回0.583333。注意:要求n的值不大于100。 #include double fun(int n) { int i;

double sum=0.0; if(n>0&&n<=100) {

for (i=1;i<=n;i++) if(i%5==0||i%9==0) sum+=1.0/i; }

return sum; }

void main()

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

{

int n; double s; printf(\"\\nInput n: \"); scanf(\"%d\ s=fun(n);

printf(\"\\n\\ns=%f\\n\ }

23、请编一个函数fun(int *a, int n, int *odd, int *even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。形参n给出数组a中数据的个数;利用指针odd返回奇数之和,利用指针even返回偶数之和。

例如:数组中的值依次为: 1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even 返回偶数之和8。 #include #define N 20

fun ( int *a, int n, int *odd, int *even ) {

int i,sum_odd=0,sum_even=0; for(i=0;isum_odd+=a[i]; *odd=sum_odd; *even=sum_even; }

void main( ) {

int a[N]={1,9,2,3,11,6}, i, n=6, odd, even;

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

printf ( \"The original data is : \\n\" );

for ( i = 0; i < n; i ++ ) printf ( \"%5d\ printf(\"\\n\\n\");

fun ( a, n, &odd, &even );

printf ( \"The sum of odd numbers: %d\\n\ printf ( \"The sum of even numbers: %d\\n\ }

24、编写计算三角形面积的程序,注意:将计算面积定义成函数float fun(int a,int b,int c)(a,b,c为三角形的三条边,返回三角形的面积),在主函数中调用fun #include #include

float fun(int a,int b,int c) { float p; p=(a+b+c)/2;

return sqrt(p*(p-a)*(p-b)*(p-c)); }

void main() {

int a,b,c;

printf(“请输入三角形三条边:\\n”); scanf(“%d%d%d”,&a,&b,&d); if(a+b>c && b+c>a && a+c>b)

printf(“三角形面积为:%.2f”,fun(a,b,c)); else

printf(“无法构成三角形”); }

25、编写程序,求E=1+1/1!+1/2!+……+1/n!,要求最后一项

时间:二O二一年七月二十九日

时间:二O二一年七月二十九日

的值小于10 #include double fun(int n) {

double m=1.0; int i=1; double p=1.0; do{

m=m+1.0/p; i++; p=p*i;

} while(1.0/p>=1E-4); return m; }

void main() {

int n; double s;

时间:二O二一年七月二十九日 -4

时间:二O二一年七月二十九日

因篇幅问题不能全部显示,请点此查看更多更全内容