C语言程序设计练习题含程序及参考答案资料_第1页
C语言程序设计练习题含程序及参考答案资料_第2页
C语言程序设计练习题含程序及参考答案资料_第3页
C语言程序设计练习题含程序及参考答案资料_第4页
C语言程序设计练习题含程序及参考答案资料_第5页
已阅读5页,还剩45页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计练习题(含程序及参考答案)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+bc & b+ca & a+cb)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

2、 a,b,c: );scanf(%d%d%d,&a,&b,&c);printf(na=%d, b=%d, c=%dn,a,b,c);shape =fun(a,b,c);printf(nnThe shape : %dn,shape);2、 编写一个程 序,将两个变量的值交换,例如变量a中的 值原为3 , b中的值原为8,程序运行后a中的值为8, b中 的值为 3。#include void fun(int *x,int *y)int t;t=*x;*x=*y;*y=tvoid main()int a=3,b=8;printf(%d %dn,a,b);fun(&a,b);printf(%d %dn

3、,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

4、.1f,b=%4.1f,c=%4.1fnn,a,b,c);fun(&a,&b,&c);printf(a=%4.1f,b=%4.1f,c=%4.1fnn,a,b,c);4、编写函数fun(int n),它的功能是:计算正整数n 的所有因子(1和n除外)之和作为函数值返回。例如: n= 1 20时,函数值为 239。#include #include int fun(int n)int i,s=0;for (i=2;in;i+)if (n%i=0) s=s+i;return s;void main() /*主函数 */void NONO(); printf(%dn,fun(120);NONO();

5、void NONO( )/* 请在此函数内打开文件,输入测试数据,调用 fun 函 数,输出数据,关闭文件。 */FILE *wf;wf = fopen(a30.out, w) ;fprintf(wf,%dn,fun(120);fclose(wf) ;5、计算 s, 并输出1 1 1S = 1 + + + +1+21+2+31+2+3+nn 通过键盘输入,例如:若 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;r

6、eturn 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 (s0)d=s%10;if(d%2!=0)*t=d*s1+*t; s1=s1*10;s/=10;

7、main()long s,t;printf(nPlease enter s:);scanf(%ld,&s);fun(s,&t);printf(The result is:%ldn,t);7、计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值从键盘传入,若k的值为500,则输出4622。#include int fun(int k)int m=0,mc=0,j;while(k=1)&(mc10)if (k%13 = 0)|(k%17 = 0)m=m+k;mc+;k-;return m;void main()printf(%dn,fun(500);8、已知一个数列的前三项分别为 0

8、, 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

9、 ( )int n;printf(Input N=);scanf(%d, &n); printf(%fn, fun(n) );9、 编写一个程序,从键盘输入m输出大于m且紧随m勺素 数。#include int fun(int m)int i,k;for (i=m+1;i+) for (k=2;k=i) return(i);void main()int n;printf(nPlease enter n:);scanf(%d,&n); printf(%dn,fun(n);10、判断两个整数m和n是否互质(即是否有公共的因子)(m 1 , n工1 )。方法是:用2到t (t取m和n中较小的那个数)

10、之间的数分别去除 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 (mn) 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(

11、%d %d, &m, &n);if( IsThat( m, n ) )printf( Yesn ); elseprintf( Non );11、将十进制正整数m转换成k进制数(2 k 9)并输出(m, k从键盘输入)。例如,若输入 8和2,则应输出 1000(即十进制数 8转换成 二进制表示是 1000)。#include void Trans( int m, int k )int aa20, i , j;for( i = 0; m; i+ )aai = m%k;m /= k;for( j=i-1; j=0; j- ) printf(%d, aaj); void main()int b, n;

12、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;i0) (*zs)+;if(aai0) (*fs)+;if(aai=0) (*l)+; void main()float num50; int i,czs,cfs,cl;czs=cfs=cl=0;printf( nPlease e

13、nter 50 float numbers :n ); for(i=0;i50;i+) scanf( “ %f” ,&numi);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( “方程 x2+yA2

14、=1989 的整数解为:n ”);fun();14、从键盘输入 10 个整数,求出其中的最大值。#include int fun(int aa)int m,i;m=aa0;for(i=1;im)m=aai;return m;void main()int num10,i;printf( “请从键盘输入 10 个整数 :n ” );for(i=0;i10;i+)scanf( “ %d” ,&numi);printf( “n 最大的数是 :%dn ” ,fun(num);123451123411123111121111115、从键盘输入n值,输出如右图形。(例如n=5时)#include void

15、fun(int n)int i,j;for(i=1;i=n ;i+)for(j=1;jv=i;j+) printf(“ 3c” ,1);for(j=2;j=n+1-i;j+)printf(“ 3d ,j);printf( “n ” ); void main() int n;printf( n请输入图形的行数:”;scanf(“%cT,&n);fun(n);16、使用函数的方式,计算如下公式的值。1 1 1A1=1, A2=, A3=, An=1+A11+A21+A(n-1)例如:若n=10,则应输出:0.617977#include float fun ( int n )float A=1;

16、int i;for (i=1; i 3;例如,若输入整数9,则应输出:47(不用做)* 18、使用函数的方式,按以下递归公式求函数值厂 10(n=1)fun(n)=L fun(n-1)+2 (n1)例如,当给n输入5时,函数值为18;当给n输入3时, 函数值为14。(不用做)19、计算并输出当0vxv0.97时下列多项式的值,直到|S(n)-S(n-1)|0.000001 为止。0.5(0.5-t) LI. 5 (a. 5-L) (p. S-2)0. 5 OD. 5-1) (JO. 5-2J 5-n+l)S= 1+0 5打;+K冷+213!n!例如,在主函数中从键盘给x输入0.21后,输出为:

17、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(

18、Input x: ); scanf(%lf,&x);s=fun(x);printf(s=%fn,s);20、计算并输出 s 。xA2 xA3xAn2! 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(%fn,fun(0.3,10);21、从键盘输入 high ,计算并输出

19、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;if (yes=1)sum +=high; n+;high-;return sum ;void main ( )printf(%dn, fun (100);22、请编写函数 float fun(int n) ,它的功能是:

20、返回 n(包括n)以内能被5或9整除的所有自然数的倒数之和。例如,n=20,返回0.583333。注意:要求n的值不大于100。 #include double fun(int n)int i;double sum=0.0; if(n0&n=100) for (i=1;i=n;i+) if(i%5=0|i%9=0) sum+=1.0/i;return sum;void main()int n; double s; printf(nInput n: ); scanf(%d,&n); s=fun(n);printf(nns=%fn,s);23、请编一个函数 fun(int *a, int n, i

21、nt *odd, int*even) ,函数的功能是分别求出数组中所有奇数之和以及 所有偶数之和。形参n给出数组a中数据的个数;利用指针 odd返回奇数之和,利用指针 even返回偶数之和。例如:数组中的值依次为: 1 , 9, 2, 3, 11, 6;则利 用指针 odd 返回奇数之和 24;利用指针 even 返回偶数之 和 8 。#include #define N 20fun ( int *a, int n, int *odd, int *even )int i,sum_odd=0,sum_even=0;for(i=0;in;i+)if(ai%2=0)sum_even+=ai;else

22、sum_odd+=ai;*odd=sum_odd;*even=sum_even;void main( )int aN=1,9,2,3,11,6, i, n=6, odd, even;printf ( The original data is : n );for ( i = 0; i n; i + ) printf ( %5d,*(a+i) );printf(nn);fun ( a, n, &odd, &even );printf ( The sum of odd numbers: %dn, odd );printf ( The sum of even numbers: %dn,even );2

23、4、编写计算三角形面积的程序,注意:将计算面积定义 成函数 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+bc & b+ca & a+cb)prin

24、tf( “ elseprintf( “ 25、编写程序,求 一项的值小于 10-4 #include double fun(int n) double m=1.0; int i=1;double p=1.0; dom=m+1.0/p;i+;p=p*i; while(1.0/p=1E-4);return m; 三角形面积为 :%.2f无法构成三角形 ”)E=1+1/1 ! +1/2 ! + ,fun(a,b,c);+1/n! ,要求最后void main()int n; double s;printf(Input n: ); scanf(%d,&n);s=fun(n);printf(s=%fn,

25、s);26、计算并输出给定数组(长度为 9)中每相邻两个元素之 平均值的平方根之和。例如,给定数组中的 9 个元素依次为 12.0 、34.0 、 4.0 、 23.0 、34.0、45.0、18.0 、3.0 、11.0 ,输出应为: s=35.951014 。#include #include double fun(double x9)int i ;double avg=0.0,sum=0.0;for (i=0;i8;i+)avg=(xi+xi+1)/2;sum+=sqrt(avg);return sum;void main() doubles,a9=12.0,34.0,4.0,23.0,

26、34.0,45.0,18.0,3.0,11.0; int i;printf(nThe original data is :n); for(i=0;i9;i+)printf(%6.1f,ai);printf(nn);s=fun(a); printf(s=%fnn,s);27、将1到m之内(含m)能被7或11整除的所有整数放在数 组a中。例如,若输入m的值为50,则在数组a中的值为:7 11 14 21 22 28 33 35 42 4449#include #define M 100 void fun ( int m, int *a , int *n ) int i,count=0;for(i=

27、1;i=m;i+) if(i%7=0 | i%11=0) acount+=i;*n=count;void main( )int aaM, n, k;fun ( 50, aa, &n );for ( k = 0; k n; k+ )if(k+1)%20=0) printf(n);else printf( %4d, aak );printf(n) ;28、请编写函数 int fun(int m,int score,intbelow) ,它的功能是:将低于平均分的人数作为函数值 返回,并将低于平均分的成绩放在below数组中(m表示score 的长度, score 表示成绩)。例如,当 score

28、数组中的 数据为: 10、 20、30、40、50、60、70、80、90时,函数 返回4, below中的数据应为:10、20、30、40。#include #include int fun(int score, int m, int below)int total=0;int average=0;int *p_below=below;int i=0;int j=0;for(i=0;im;i+)total=total+scorei;average=total/m;for(i=0;im;i+)if(scoreiaverage) *p_below=scorei; p_below+; j+;*p_

29、below=NULL;return(j);main( ) int i, n, below9 ;int score9 = 10, 20, 30, 40, 50, 60, 70, 80, 90 ;n = fun(score, 9, below) ;printf( nBelow the average score are: ) ; for (i = 0 ; i n ; i+) printf(%d , belowi) ;29、用插入排序法将n个字符进行排序(降序)。(提示: 插入法排序的思路是:先对数组的头两个元素进行排序, 然后根据前两个元素的情况插入第三个元素,再插入第四 个元素)。#define

30、 N 80#include stdio.h#include string.hvoid insert(char *aa)int i,j,n; char ch;n=strlen(aa);for(i=1;i=0)&(chaaj)aaj+1=aaj;j-;aaj+1=ch;void main() char aN=QWERTYUIOPASDFGHJKLMNBVCXZ;int i;printf(The original string : %sn,a);insert(a);printf(The string after sorting:%snn,a);30、假定整数数组a中元素的值不重复。删除a中值为x的元

31、素(x从键盘输入)。#include #define N 20fun(int *a,int n,int x) int p=0,i;an=x;while(x!=ap)p=p+1;if(p=n)return -1;elsefor(i=p;in;i+)ai=ai+1;return n-1;void main() int wN=-3,0,1,5,7,99,10,15,30,90,x,n,i;n=10;printf(The original data :n); for(i=0;in;i+) printf(%5d,wi);printf(nInput x (to delete):);scanf(%d,&x)

32、;printf(Delete : %dn,x);n=fun(w,n,x);if (n=-1) printf(*Not be found!*nn);else printf(The data after deleted:n); for(i=0;in;i+) printf(%5d,wi);printf(nn);31、一个已按从小到大的顺序排好的数组a,编写程序,从键盘输入一个数 x 按原来排序的规律将它插入数组 a 中#include #define M 20void InSort( int *n, int vv, int k ) int i=0 , j;while ( k vvi & i *n )

33、 i+;if ( ii; j- ) vvj = vvj-1; vvi = k;+*n;void main()int aaM, i, k, m; system(cls);printf( nPlease enter a number:n ); scanf( %d, &m );printf( nPlease enter %d numbers:n, m ); for( i = 0; i m; i+ )scanf( %d, &aai );printf( nPlease enter another number:n ); scanf( %d, &k );InSort( &m, aa, k );for(k=

34、0; k m;k+) printf( %d, aak );32、使用数组的方法筛选出 1-100 中的素数 #include void fun ( int *pt )int i,j,flag;*pt=2;*pt+;for(i=3;i100;i+)flag = 1;for(j=2;ji;j+)if(i % j = 0)flag = 0;if( flag )*pt = i;*pt+;*pt=0;void main( )int *pointer,a30; pointer=a; fun(pointer);printf(The result is :n);while(*pointer)printf (

35、%d ,*pointer+ );33、已知一个数组 a 中包括 10 个整数元素,从 a 中第二个 元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组 b。#include void fun(int a,int b)int i;for(i=1;i10;i+)bi-1=ai-ai-1;for(i=0;i9;i+)printf(“ %3d”,bi);if(i+1)%3=0)printf( “ n ”);int a10=1,2,3,4,5,6,7,8,9,10;int b9; fun(a,b);34、请编写函数fun,函数的功能是:将 M亍N列的二维数组 中的字符数据按列的顺序依次放到

36、一个字符串中。例如,二维数组中的数据为:W W W WS S S SH H H H则字符串中的内容应是:WSHWSHWSH#include void fun(int (*s)10, int *b, int *n, int mm,int nn)int x,y;for(x=0;xnn;x+) for(y=0;ymm;y+)bx*mm+y=*(sy+x);(*n)+;void main()int w1010=33,33,33,33,44,44,44,44,55,55,55,55 ,i,j;int a100=0, n=0; printf(The matrix:n);for(i=0; i3; i+) f

37、or(j=0;j4; j+)printf(%3d,wij); printf(n); fun(w,a,&n,3,4); printf(The A array:n);for(i=0;in;i+)printf(%3d,ai);printf(nn); 35、求出NXN的二维数组周边元素的平均值|01279|19745|a = |2 3 8 3 1|45682|59141|则返回主程序后 s 的值应为: 3.375 。 #include #define M 4 #define N 5 int fun ( int aMN )int i, j, sum = 0;for (i = 0; i M; i+)for

38、 (j = 0; j N; j+)if (i = 0)|(i = M - 1)|(j = 0)|(j =N - 1) )sum += aij;return sum;void main( ) int aaMN=1,3,5,7,9,2,9,9,9,4,6,9,9,9,8,1,3,5,7,0;int i, j, y;system(cls);printf ( The original data is : n );for ( i=0; iM; i+ ) for ( j =0; jN; j+ ) printf( %6d,aaij );printf (n);y = fun ( aa );printf( nT

39、he sum: %dn , y );printf(n);36、求出 M 行 N 列的二维数组 tt 里每列中的最小元素, 并依次放入 pp 数组中。#include #define M 3#define N 4void fun ( int ttMN, int ppN )int i, j, min;for(i = 0; i N; i+)min = tt0i;for(j = 0; j ttji)min = ttji;ppi = min;void main( ) int t M N =22,45, 56,30,19,33, 45,38,20,22, 66,40;int p N , i, j, k;s

40、ystem(cls);printf ( The original data is : n );for( i=0; iM; i+ )for( j=0; jN; j+ )printf ( %6d, tij );printf(n);fun ( t, p );printf( nThe result is:n );for ( k = 0; k N; k+ ) printf ( %4d p k );printf(n);37、请编写程序,实现B=A+A,即把矩阵A加上A的转置, 存放在矩阵B中。计算结果在main函数中输出。例如,输入下面的矩阵: 其转置矩阵为:|123|147|456|258|789|36

41、9|程序输出:|2 6 10|6 10 14|10 14 18|#include void fun(int a33,int b33)int i,j;for(i=0;i3;i+)for (j=0;j3;j+)bij=aij+aji;void main() int a33=1,2,3,4,5,6,7,8,9,t33;int i,j;fun(a,t);for(i=0;i3;i+) for(j=0;j3;j+)printf(%7d,tij);printf(n);38、编写程序删除字符串s中从下标k开始的n个字符(n和k 从键盘输入)。例如,字符串内容为: Hellollo World! ,k 中的值为

42、: 5, n 中的值为: 3,结果为: Hello World! 。#include #define N 80void fun(char *a,int k,int n)int i;i=k;while (ai-1!=0) ai=ai+n;i=i+1;void main() char sN=Hellollo World!;int k,n;printf(nThe original string:%sn,s);printf(Enter index k:),scanf(%d,&k);printf(Enter number to delete n:);scanf(%d,&n);fun(s,k,n);pri

43、ntf(nThe string after deleted: %sn,s);NONO();39、编写程序,从键盘输入字符串tt ,将其中每个单词的首字符改为对应的大写字母,首字符后的字母都改为对应 的小写字母。例如,若输入字符串: ab cD bOYxy! ,则输出字符串为:Ab Cd Boyxy!。#include #include char* EXUL( char tt )int isfirst = 1;int i, length;length = strlen( tt );for(i = 0; i = a & tti = A & tti = Z)tti = isfirst?tti:(tt

44、i - A +a);isfirst=0;elseisfirst = 1; return tt;main()int i;char tt81;printf(nPlease enter a string: );gets( tt );printf( nThe result string is:%sn,EXUL( tt ) );40、编写程序,从键盘输入字符串 tt ,字符串中 a 到 z26个字母各自出现的次数,并依次放在pp所指数组中。例如,当输入字符串: abcdefgabcdeabc 后,程序的输出结果应该是:3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 00 0

45、0 0 0 0#include void fun(char *tt, int pp)char *p_tt=tt;int i=0;while(i26)ppi=0;i+;for(;*p_tt!=NULL;p_tt+) switch(*p_tt)case a:pp0+;break; case b:pp1+;break; case c:pp2+;break; case d:pp3+;break; case e:pp4+;break; case f:pp5+;break; case g:pp6+;break; case h:pp7+;break; case i:pp8+;break; case j:pp9+;break; case k:pp10+;brea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论