C语言程序设计练习题(含程序及参考问题详解)_第1页
C语言程序设计练习题(含程序及参考问题详解)_第2页
C语言程序设计练习题(含程序及参考问题详解)_第3页
C语言程序设计练习题(含程序及参考问题详解)_第4页
C语言程序设计练习题(含程序及参考问题详解)_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、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 (/znlnput a,

2、 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 (z/nnThe shape : %dnzz, shape);2、编写一个程序,将两个变量的值交换,例如变量a中的值int k, t, mk=l;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 ( ,znPlease enter 2 numbers:

3、nz/ );scanf (%d %d,&m, &n);if ( IsThat( m, n )printf( Yesn );elseprintf( Non );)n、将十进制正整数m转换成k进制数(2k9)并输出(m, k从键盘输入)。例如,假设输入8和2,那么应输出1000 (即十进制数8转换成二进制表示是1000) o#include void Trans ( int m, int k )(int aa20, i, j;for( i = 0; m; i+ )aai = m%k;m /= k;for ( j=iT; j=0; j) printf(%d, aaj);void main ()(in

4、t b, n;printf ( z/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 *1, float aa)int i;for (i=0;i0) (*zs)+;if (aai 0) (*fs)+;if (aai=0) (*1)+;void main()float num50;int i, czs, cfs, cl;czs=cfs=cl=0;p

5、rintf ( /znPlease enter 50 float numbers : n );for (i=0;i50;i+)scanf (,&numi);fun (&czs, &cfs, &cl, num);printf(/zn 正 数:%d,负 数:%d,零:%dn,czs, cfs, cl);13、计算并输出方程乂2+丫2=1989的所有整数解include void fun()(int x, y;for (x=l;x=44;x+)for (y=l;y=44;y+)if (x*x+y*y=1989)printf( x=%d ,y=%d n ,x,y);)void main()printf

6、 (“方程12+-2=1989的整数解为:n);fun();14、从键盘输入10个整数,求出其中的最大值。include int fun (int aa)(int m, i;m=aa0;for (i=l;im) m=aaireturn m;void main()(int num10, i;printf (请从键盘输入10个整数:n );for(i=0;i10;i+)scanf(,&numi);printf ( n 最大的数是:dn,fun(num);1 2 3 4 5112 3 41112 311112111111 2 3 4 5112 3 41112 3111121111115、从键盘输入n

7、值,输出如右图形。(例如n=5 时)#include void fun (int n)int i, j;for (i=l;i=n;i+)(for(j=l;j=i;j+)printf ( “3d”,1);for (j=2;j=n+l-i;j+)printf( 3d”,j);printf ( n”);void main()int n;printf( “n请输入图形的行数:”);scanf (,&n);fun (n);16、使用函数的方式,计算如下公式的值。1 1 1Al=l, A2=,A3=,An=1+A11+A21+A(n-1)例如:假设n二例,那么应输出:0. 617977c ftinclud

8、e float fun ( int n ) (float A=1; int i;for (i=1; i=n; i+)A = 1.0/(1+A);return A ;)void main()printf (/znPlease enter n: );scanf(%d, &n );printf (Z/A%d=%fn/z, n, fun (n);* 17、使用函数的方式,按下面的公式计算并输出数列的2,3,5,L FFF(m - 3) + FFF(m - 1), m 3;例如,假设输入整数9,那么应输出:47O(不用做)* 18、使用函数的方式,按以下递归公式求函数值HO fun (n)= |HO f

9、un (n)= |(n=l)Lfun(n-1) +2 (nl)例如,当给n输入5时,函数值为18;当给n输入3时,函 数值为14。(不用做)19、计算并输出当0 x0. 97时以下多项式的值,直到 S(n)-S(n-l) |0. 000001 为止。0. 5 (0. 5-1)0. 5 (0. 5-1) (0. 5-2)0. 5 (0. 5-1) (0. 5-2)(0. 5-n+l)S=l+0. 5x+x2+xA3- +x、2!3!n!例如,在主函数中从键盘给X输入0.21后,输出 为:s=l. 100000。#include #include double fun (double x)int

10、n=l;/*循环计数*/double sn=l;/* 累计数*/double xn=l, xnl=0; /*x 的 n 值,以及 x 的 n-l 值;*/ while (fabs (xn-xnl) =0. 000001) /*绝对值是否合格*/ (xn = xn*x*(0. 5-n+l)/n;/* 表达式分解以后xn= (xnT) *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 (z/

11、s=%fnz/, s);20、计算并输出s。x 2 x 3x ns = 1 + x + + + +2!3!n!n,x从键盘输入,例如,当n=10, x=0. 3时,函数值为 1.349859oinclude double fun (double x,int n)int i;double f=l.0, h=x;double s=l;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,计算并输出high以内最大的10个素数 之和。例如,输入h

12、igh的值为入0,那么输出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=l)sum +=high; n+;high一; 原为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,

13、 b=8;printf(d %dn”, a, b);fun (&a, b);printf(d %dn, a, b);3、从键盘输入3个数,将最大值放在变量a中,最小值放在 变量c中。例如,输入的数为:551234,输出结果应当是:a=55. 0, b=34. 0, c=12. 0o#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;return sum ;void main ()(printf(dn, fun (100);22、请编写函

14、数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 (n0&n=100)for (i=l;i=n;i+)if(i%5=0|i%9=0)sum+=l. 0/i;)return sum;void main()int n; double s;printf (/znlnput n: );scanf (%d, &n);s=fun (n);printf(nns二%fn,s);)

15、23、请编一个函数fun (int *a, int n, int *odd, int *even), 函数的功能是分别求出数组中所有奇数之和以及所有偶数 之和。形参n给出数组a中数据的个数;利用指针odd返回奇 数之和,利用指针even返回偶数之和。例如:数组中的值依次为:1, 9, 2, 3, 11, 6;那么利用 指针0dd返回奇数之和24;利用指针even返回偶数之和8。ttinclude 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

16、(ai%2=0) sum_even+=ai;elsesum_odd+=ai;*odd=sumodd;*even=sum even;void mainint aN = l, 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 ev

17、en numbers: %dn,even );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 (“炊l%d%d,&a,&b,&d);if(

18、a+bc & b+ca & a+cb)printf (三角形面积为:. 2f,fun (a, b, c); elseprintf (无法构成三角形”);)25、编写程序,求E=1+1/1! +1/2! +l/n!,要求最后 一项的值小于W4 ttinclude double fun(int n) (double m=l. 0;int i=l;double p=l.0;do (m=m+1. 0/p; i+;p=p*i; while(1.0/p=lE-4);return m;void main()int n; double s;printf (Input n: ); scanf(%d, &n);s

19、=fun(n);printf (/zs=%fnz/, 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+l)/2; sum+=sqrt(avg);return sum;void main ()doubl

20、es, a9 = 12. 0, 34. 0, 4. 0, 23. 0, 34. 0, 45. 0, 18. 0, 3. 0, 11. 0 int i;printf (/znThe original data is : n);for (i=0; i9; i+)printf (%6. lf, ai);printf(nn);s=fun(a);printf (/zs=%fnn/z, s);)27、将1到m之内(含m)能被7或H整除的所有整数放在数组 a中。例如,假设输入m的值为50,那么在数组a中的值为:include define M 100void fun ( int m, int *a , in

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

22、长度, score表示成绩)。例如,当score数组中的数据为:10、20、 30、40、50、60、70、80、90时,函数返回4, below中的数 据应为:10、20、30、40o ftinclude include int fun(int score, int 叫 int below) int total=0;int average=0;int p_be1ow=be1ow;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=

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

24、三个元素,再插入第四个元 素)。ttdefine N 80include stdio.h#include string. hvoid insert(char *aa)int i, j, n; char ch;n=strlen(aa);for(i=l;i=0)&(chaaj)aaj+l=aaj;J;aaj+l=ch;void main() char a N=/QWERTYUIOPASDFGHJKLMNBVCXZ/;int i;printf (Z/The original string :%snz/, a);insert(a);printf (Z/The string after sorting:

25、%snnz/, a);)30、假定整数数组a中元素的值不重复。删除a中值为x的元 素(x从键盘输入)。#include define N 20fun (int *a, int n, int x) int p=0, i;an=x;while(x!=ap)p=p+l;if (p=n)return -1;else(for(i=p;in;i+)ai=ai+l;return n-l;if (*p*q)k=*p;*p=*q;*q=k;)void main () float a, b, c;printf(Input a b c:);scanf&a, &b, &c);printf (/za=%4. If, b

26、=%4. If, c=%4. lfnn/z, a, b, c);fun (&a, &b, &c);printf (/za=%4. If, b=%4. If, c=%4. lfnn/z, 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;in;i+)if (n%i=0) s=s+i;return s;void main() int wN = -3, 0, 1, 5, 7, 99, 10,

27、 15, 30, 90, x, n, i;n=10;printf (zzThe original data : n);for(i=0;in;i+) printf(%5d”, wi);printf (zznlnputx(todelete) :); scanf (%d, &x);printf (,zDelete : %dn,x);n=fun (w, n, x);if (n-1) printf(*Not be found!*nn); else printf (The data after deleted: nz/);for (i=0;in;i+)printf (z/%5d/z, wi) ;print

28、f (nn);31、一个已按从小到大的顺序排好的数组a,编写程序,从 键盘输入一个数x按原来排序的规律将它插入数组a中。include ttdefine M 20void InSort ( int *n, int vv, int k )int i=0 , j;while (kvvi&i*n) i+;if ( ii; j- ) vvj= vvj-l; vvi = k;+*n;)void main ()int aaM, i, k, m;system(cls);printf ( nPlease enter a number:n );scanf ( d,&m );printf ( nPlease en

29、ter %d numbers: nz/, m );for( i = 0; i m; i+ )scanf( %d, &aai);printf ( ,znPlease enter another number: n,z );scanf( %d, &k );InSort ( &m, aa, k );for (k=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+

30、)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 ( d , *pointer+ );33、一个数组a中包括10个整数元素,从a中第二个 元素起,分别将后项减前项之差存入数组b,并按每行3个 元素输出数组b。ttinclude void fun(int a, int b口)int i;for(i=l;i10;i+)bi-l=ai-

31、ai-l;for (i=0;i9;i+)(printf( %3d ,bi);if(i+l)%3=0)printf( n);void main ()(int a10 = l, 2, 3, 4, 5, 6, 7, 8, 9, 10);int b9;fun (a, b);)34、请编写函数fun,函数的功能是:将M行N列的二维数组 中的字符数据按列的顺序依次放到一个字符串中。例如,二维数组中的数据为:W W W WS S S SH H H H那么字符串中的内容应是:WSHWSHWSHoinclude void fun (int (*s) 10, int *b, int *n, int mm, int

32、 nn)int x, y;for (x=0;xnn;x+)for (y=0;ymm;y+)bx*mm+y=*(sy+x);(*n)+;void main ()|intw1010 = 33, 33, 33, 33, 44,44, 44, 44, 55, 55, 55, 55, i, j;int a100 = 0, n=0;printf (Z/The matrix: n/z);for (i=0; i3; i+) for(j=0; j4; J+)printf (z,%3d,z,wi j);printf(n);fun (w, a, &n, 3, 4);printf (Z/The A array: nz

33、/);for (i=0; in; i+)printf (3d,ai) ;printf (nn);35、求出NXN的二维数组周边元素的平均值0 12 7 9 TOC o 1-5 h z 1974523831456825 9 14 1那么返回主程序后s的值应为:3. 375Oinclude #define#define int fun (int i, for (iM 4N 5 (intj, sum=0; ia M N)=o; M; i+)for (j = 0; j N; j+)if (i = 0) (i = M - 1)if (i = 0) (i = M - 1)(J0) (j- 1)sum +=

34、 ai j;return sum;void main() int aaM N = 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,aai j); printf (n);)y = fun ( aa );printf ( nThe sum: %dn,y );printf (n);)36、求出M行N列的二维数组t

35、t里每列中的最小元素,并 依次放入pp数组中。#include #define M 3#define N 4void fun ( int ttMN, int ppN)(int i, j, min;for(i = 0; i N; i+)min = tt 0 i;for(j = 0; j ttj i) min = tt j i;ppi = min;void main () int t M N = 22, 45, 56,30,19, 33,20, 22,45, 38,66, 40;int p L N,i, j, k;system(cls);printf ( The original data is

36、: n );for( i=0; iM; i+ ) for( j=0; jN; j+ )printf ( 6d,t i j);printf (n);fun ( t, p );printf ( nThe result is:n );for ( k = 0; k N; k+ ) printf (%4d ,p k37、请编写程序,实现B=A+A,即把矩阵A加上A的转置,存 放在矩阵B中。计算结果在main函数中输出。例如,输入下面的矩阵:其转置矩阵为:123|147456|2 5 8789|3 6 9程序输出:2 6 106 10 1410 14 18Winclude void fun(int a33

37、, int b3 3)(int i, j;for (i=0;i3;i+)for (j=0;j3;j+)bi j=ai j+aj i;void main() int a 3 3 = 1, 2, 3, 4, 5, 6, 7, 8, 9, t 3 3 int i, j;fun (a, t);for(i=0;i3;i+)for(j=0;j3;j+)printf(7d,ti j);38、编写程序删除字符串s中从下标k开始的n个字符(n和k 从键盘输入)。例如,字符串内容为:Hellollo World!, k中的值为:5, n 中的值为:3,结果为:Hello World! o#include ftde

38、fine N 80void fun (char *a, int k, int n)int i;i=k;while (ail !=,0,) ai=ai+n;i=i+l;void main() char sN=/,Hellollo World!”;int k, n;printf (/znThe original string:%sn/z, s);printf (z,Enter index k:),scanf (d,&k);printf (/zEnternumberto deleten:);scanf (d,&n);void main()/*主函数*/void NONO ();printf (/z%

39、dn/z, fun (120);NONO ();void N0N0()/*请在此函数内翻开文件,输入测试数据,调用fun函 数,输出数据,关闭文件。*/FILE *wf;wf = fopen (a30. out”, w);fprintf (wf, z,%dn,z, fun (120);fclose (wf);5、计算s,并输出1 1 1S = 1 + + + + 1+21+2+31+2+3+nn通过键盘输入,例如:假设n的值为H时,那么函数值为: 1.833333 ttinclude ftinclude float fun(int n)fun (s, k, n);printf (zznThe

40、string after deleted: %sn,s); NONO ();39、编写程序,从键盘输入字符串tt,将其中每个单词的首 字符改为对应的大写字母,首字符后的字母都改为对应的小 写字母。例如,假设输入字符串:abcDbOYxy!,那么输出字符串为:Ab Cd Boyxy!。Winclude includestring. hchar* EXUL ( char tt)int isfirst = 1;int i, length;length = strlen( tt );for(i = 0; i = a & tt i = A & tt i = Z)tti= isfirst?tti:(tti

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

42、int i=0;while (i26)ppi=O;i+;for (;*p_tt!=NULL;p_tt+) switch(*p_tt)case a :pp0+;break;case b :ppl+;break;case c :pp2+;break;case d :pp3+;break;case e :pp4+;break;case :pp5+;break;case g :pp6+;break;case h :pp7+;break;case i :pp8+;break;case j :pp9+;break;case k :pp10+;break;case 5 r :pp11+;break;case

43、 m :pp12+;break;case 5 n :pp13+;break;case o :pp14+;break;case p :pp15+;break;case q :pp16+;break;case r :pp17+;break;case s :pp18+;break;case t :pp19+;break;case u :pp20+;break;case v :pp21+;break;case w :pp22+;break;case x :pp23+;break;case y :pp24+;break;case z :pp25+;break;main() char aa1000;int

44、 bb 26, k, n ;printf ( z/nPlease enter a char string: ) scanf (%s,aa);fun(aa, bb );for ( k = 0 ; k 26 ; k+ ) printf (d ,bb k) printf( n );41、请编写程序,把字符串s中所有的字符前移一个 位置,串中的第一个字符移到最后。例如:原有的字符串为:Mn. 123xyZ,那么调用该函数后, 串中的内容为:n. 123xyZM0#include #include string.httdefine N 81 fun ( char *s ) (char bN;sprint

45、f (b, %s%c,s + 1, *s);strcpy (s, b);)void main() (char a N ;printf ( Enter a string :); gets ( a );printf ( The original string is :) ; puts ( a );fun ( a );printf ( The string after modified : );puts ( a );42、编写程序,把字符串中的内容逆置。例如:字符串中原有的内容为:abcdefg,输出:gfedcba。include #include define N 81void fun ( ch

46、ar *s )int i ,length;char tmp;length = strlen ( s );for (i = 0;i length / 2; i+) (tmp = si;si = slength - i - 1;s length - i - 1 = tmp;void main() char aN;printf ( Enter a string :); gets ( a );printf ( The original string is :) ; puts ( a );fun ( a );printf (n);printf ( The string after modified : );puts ( a );43、编写程序,依次现出学府奔si中所有数字字符,形成新 的字符串s2。include void fun (char *s)int i, j;for(i=0, j=0; si !=,0, ; i+)if (s i =,05 & s i =,95)sj+=si;sj=,0J ;void main ()(char item80;printf (z/nEnter a string : /z) ; gets (item);printf (/znnThe string is : %sn,ite

温馨提示

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

评论

0/150

提交评论