《C语言程序设计练习题(含程序及参考答案).docx》由会员分享,可在线阅读,更多相关《C语言程序设计练习题(含程序及参考答案).docx(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1定义一个函数int fun(int a, int b, int c),它的功能 是:若a, b,c能构成等边三角形函数返回3,若能构成等腰 返回2, 一般三角形返回1,若不能构成三角形返回0。ttinclude 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, b
2、, c:);scanf (d%d%d,&a, &b, &c);printf (z/na=%d, b=%d,c=%dn,a, b, c);shape =fun (a, b, c);printf (z/nnThe shape : %dn,shape);幺 编写一个程序,将两个变量的值交换,例如变量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: n,
3、z );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=i-l; j=0; j) printf(%d, aaj);)void main()int b
4、, n;printf ( /znPlease enter a number and a base: n/z ); 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
5、;printf ( /znPlease enter 50 float numbers : n );for (i=0;i50;i+)scanf( ,&numi);fun (&czs, &cfs, &cl, num);printf(n 正 数:%d,负 数:%d,零:%dn,czs, cfs, cl);13、计算并输出方程X2+Y2=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()print
6、f (“方程x-2+y八2=1989的整数解为:n); fun();14、从键盘输入10个整数,求出其中的最大值。 include int fun (int aa)int m, iim)m=aaLireturn m;void main()(int num10, i;printf (请从键盘输入10个整数:n );for (i=0;i10;i+)scanf( %d” ,&numi);printf ( n 最大的数是:%dn,fun(num);1 2 3 4 5112 3 41112 3111121111115、从键盘输入n值,输出如右图形。(例如n=5 时)ftinclude void fun
7、(int n)int i, j;for (i=l;i=n;i+)(for(j=l;j=i;j+)printf ( %3d” , 1);for (j=2;j1, A2=,A3=,An=1+A11+A21+A(n-1)例如:若n二例,则应输出:0. 617977c#include float fun ( int n )float A=1; int i ;for (i=l; i 3;例如,若输入整数9,则应输出:47o(不用做)* 18、使用函数的方式,按以下递归公式求函数值HO fun(n)= |(n=l)Lfun(n-l) +2 (nl)例如,当给n输入5时,函数值为18;当给n输入3时,函 数
8、值为14。(不用做)19、计算并输出当0x0. 97时下列多项式的值,直到S (n) -S (n-1) | 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 n=l;/*循环计数*/double sn=l;/* 累计数*/double xn=l, xnl=0; /*x 的
9、n 值,以及 x 的 nT 值;*/ while (fabs (xn-xnl) =0. 000001) /*绝对值是否合格*/ xn=xn*x*(0. 5-n+l)/n;/* 表达式分解以后xn= (xnT)*x*(0. 5-n+l)/n*/n+=l;sn+=xn;/*sn 累力口上 xn*/)return sn;void main ()double x, s;printf (Input x: ); scanf&x);s=fun (x);printf (z/s=%fn/z, s);20、计算并输出s。x 2 x 3x nS = 1 + X + + + +2!3!n!n,x从键盘输入,例如,当n
10、=10, x=0. 3时,函数值为 1.349859c#include 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个素数 之和。例如,输入high的值为100,则输出732。#include int fun ( int high )(int sum = 0,n=0, j, y
11、es;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, b=8;printf (%d %dn,a, b);fun (&a, b);printf (%d %dn,a, b);3、从键盘
12、输入3个数,将最大值放在变量a中,最小值放在 变量c中。例如,输入的数为:551234,输出结果应当是: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;return sum ;void main ()(printf (,z%dn,z, fun (100);22、请编写函数float fun(int n),它的功能是:返回n (包 括n)以内能被5或9整除的所有自然数的倒数之和。例如
13、, 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+= 1. 0/i ;return sum;void main ()int n; double s;printf (/znlnput n: );scanf (%d, &n);s=fun(n);printf(nns=%fn,s);)23、请编一个函数fun (int *a, int n, int *odd, int *even), 函数的功能
14、是分别求出数组中所有奇数之和以及所有偶数 之和。形参n给出数组a中数据的个数;利用指针。dd返回奇 数之和,利用指针even返回偶数之和。例如:数组中的值依次为:1, 9, 2, 3, 11, 6;则利用 指针odd返回奇数之和24;利用指针even返回偶数之和8。ttinclude ttdefine N 20fun ( int *a, int n, int *odd, int *even )int i, sum_odd=0, sum even=O;for(i=0;in;i+)if (ai%2=0)sum even+=ai;elsesum_odd+=ai;*odd=sum_odd;*even=
15、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 even numbers: %dn,even );24、编写计算三角形面积的程序,注意:将计算面积定义成 函数
16、float fun (int a, int b, int c) (a, b, c 为三角形的三 条边,返回三角形的面积),在主函数中调用funftinclude 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)printf (三角形面积为:. 2f”,fun (a, b, c
17、); elseprintf (无法构成三角形”); 25、编写程序,求E=l+1/1! +1/2! +l/n!,要求最后 一项的值小于10-4 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(l. 0/p=lE-4);return m;void main ()int n; double s;printf (Input n: ); scanf(%d, &n);s=fun (n);printf(s=%fn,s);)26、计算并输出给定数组(长度为9)中每相邻
18、两个元素之 平均值的平方根之和。例如,给定数组中的9个元素依次为12. 0、34. 0、4. 0、23. 0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35. 951014。ttinclude #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()doubles, a9 = 12. 0, 34. 0, 4. 0, 23. 0, 34. 0, 45. 0, 18.
19、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(s=%fnn,s);)27、将1到m之内(含m)能被7或H整除的所有整数放在数组 a中。例如,若输入m的值为50,则在数组a中的值为:711142122283335424449include ttdefine M 100void fun ( int m, int *a , int *n )(int i,count=0;for(i=l;i=m;i+) if(i
20、%7=0 | | i%ll=0) acount+=i;*n=count;void main()int aaM, n, k;fun ( 50, aa, &n );for ( k = 0; k 30、40、50、60、70、80、90时,函数返回4, below中的数 据应为:10、20、30、40o#include #include int fun(int score, int m, int below)int total=0;int average:。;int *p_be1ow=be1ow;int i=0;int j=0;for(i=0;im;i+) total=total+scorei;av
21、erage=total/m;for (i=0;im;i+)if (scoreiaverage) *p_below=scorei; 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 (/z%d ,belowi);29、用插入排序法将n
22、个字符进行排序(降序)。(提示: 插入法排序的思路是:先对数组的头两个元素进行排序,然 后根据前两个元素的情况插入第三个元素,再插入第四个元 素)。#define N 80#include 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;aaj+l=ch;void main() char aN=z/QWERTYUIOPASDFGHJKLMNBVCXZz/;int i;printf (Z/The original strin
23、g :%sn,a);insert(a);printf (The string after sorting:%snn/z, 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-1;if (*p*q)k=*p;*p=*q;*q=k;void main () float a, b, c;printf
24、(Input a b c:);scanf (f%f%f,&a, &b, &c);printf (z/a=%4. If, b=%4. If, c=%4. Ifnn,a, b, c);fun (&a, &b, &c);printf (z,a=%4. If, b=%4. If, c=%4. Ifnn,a, b, c);4、编写函数fun(int n),它的功能是:计算正整数n 的府滴因子(1和n除外)之和作为函数值返回。例如:n=120 时,函数值为239。include ttinclude int fun(int n)int i,s=0;for (i=2;in;i+)if (n%i=0) s=s+
25、i;return s;void main () int wN = -3, 0, 1, 5, 7, 99, 10, 15, 30, 90), x, n, i ;n=10;printf (Z/The original data : n);for(i=0;in;i+) printf(%5d, wi);printf (/znlnputx(todelete):);scanf(%d, &x);printf (Delete : %dnz/, x);n=fun (w, n, x);if (n=-l) printf (*Not be found!*nn); else printf (The data after
26、 deleted: nz,);for (i=0;in;i+)printf (,z%5dz/, wi) ;printf (/znn/z);31、一个已按从小到大的顺序排好的数组a,编写程序,从 键盘输入一个数x按原来排序的规律将它插入数组a中。#include #define M 20void InSort ( int *n, int vv, int k )(int i=0 , j;while ( k vvi & i *n ) i+;if ( i*n )for ( j=*n; ji; j- ) vvj = vvj-l; vvi = k;+*n;)void main()|int aaM, i, k
27、, m;system(cls);printf ( /znPlease enter a number: nz/ );scanf( %d,&m );printf ( z/nPlease enter %d numbers :n,m );for( i = 0; i m; i+ )scanf ( %d,&aai);printf ( ,znPlease enter another number:n );scanf( d,&k );InSort ( &m, aa, k );for (k=0; k m;k+)printf( d,aak);)32、使用数组的方法筛选出1T00中的素数#include void
28、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 (zzThe result is : n);while (*pointer)printf ( %d ,*pointer+ );33、已知一个数组a中包括10个整数元素,从a中第二个 元素起,分别将后项减前项之差
29、存入数组b,并按每行3个 元素输出数组b。#include void fun(int a, int b)(int i;for (i= 1; i10; i+) bi-l=ai-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 S
30、H H H H则字符串中的内容应是:WSHWSHWSHo#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()intw10 10 = 33, 33, 33, 33, 44, 44, 44, 44, 55, 55, 55, 55, i, j;int a100 = 0, n=0;printf (Z/The matrix: nz,);for(i=0; i3; i+) for (j
31、=0; j4; j+)printf (/z%3dz/,wi j);printf(n);fun (w, a, &n, 3, 4);printf (Z/The A array:n);for (i=0; in; i+)printf (3d,ai) ;printf (nn);35、求出NXN的二维数组周边元素的平均值0 11 92 34 55 92 7 97 4 58 3 16 8 21 4 1则返回主程序后s的值应为:3. 375o#include 45int aMN)sum = 0;i M; i+)for (j = 0; j N; j+)if (i = 0) (i = M - 1)-1)sum +
32、= ai j;return sum;(j0)void main() int aaM N = 1,3, 5, 7,9, 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列的二维
33、数组tt里每列中的最小元素,并 依次放入pp数组中。#include ttdefine 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, 45,38, 20, 22, 66, 40;int p N , i, j, k;system(cls);printf ( The original dat
34、a is : 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 k );printf (n);37、请编写程序,实现B=A+A,即把矩阵A加上A的转置,存 放在矩阵B中。计算结果在main函数中输出。例如,输入下面的矩阵:其转置矩阵为:123|147456|2 5 8789|3 6 9程序输出:2 6 106 10 1410 14 18#includ
35、e void fun(int a33, 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 (z,%7d/z, ti j);38、编写程序删除字符串s中从下标k开始的n个字符(n和k 从键盘输入)。例如,字符串内容为:Hellollo World!, k中的值为:5, n 中的值为:3,结果为:H
36、ello World! o#include #define N 80void fun (char *a, int k, int n) (int i;i=k;while (ai-l0,) ai=ai+n;i=i+l;void main () char sN二Hellollo World!z/;int k, n;printf (z/nThe original string:%sn,s);printf (Z/Enter index k:),scanf (d,&k);printf (Z/Enternumberto deleten:);scanf (d,&n);void main()/*主函数*/voi
37、d NONO();printf (/z%dn/z, fun (120);NONO ();void N0N0()/*请在此函数内打开文件,输入测试数据,调用fun函 数,输出数据,关闭文件。*/FILE *wf;wf = fopen (a30. out”, w);fprintf (wf, z,%dnz,, fun (120);fclose(wf);5、计算s,并输出S = 1 + + + +1+21+2+31+2+3+nn通过键盘输入,例如:若n的值为H时,则函数值为: 1.833333#include include float fun (int n)fun (s, k, n);printf (z/nThe string after deleted: %sn,s); NONO ();39、编写程序,从键盘输入字符串tt,将其中每个单词的首 字符改为对应的大写字母,首字符后的字母都改为对应的小 写字母。例如,若输入字符串:abcDbOYxy!,则输出字符串为: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 & tt i = Z)tt i= is