《C语言程序设计练习题(含程序及参考答案).doc》由会员分享,可在线阅读,更多相关《C语言程序设计练习题(含程序及参考答案).doc(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、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+bc & b+ca & a+cb) if(a=b & b=c )return 3; else if(a=b|b=c|a=c) return 2;els
2、e 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=%dn,a,b,c); shape =fun(a,b,c); printf(nnThe shape : %dn,shape);80做 变存数的 别所体结 统0做个一可的数:,的指放学最把 数构放生名成绩号记生 做分高生找节的 中链点头放成生,绩习号由学、做用录生高成输组构结,生 入成习学由生已 ) ) ( ) ( ) ( ( ) = ; ; - !
3、 +/=() , . ,样的与正回。 字数否!:串返,文字当是 个断) ( 函定 ) % ) ), ) ) ( ) ; ) 0 , , ( + ) ()+* + (0 + 0, 00 +; 0 0 . ) 中 存 中如母保后, 个并编字好母字放存 符) % ) , () ( : ) % 0 , ( 0 ;*= + * * *| =; ( ) ) ) 0 0 * , - ; = ; * ) + = 为容中指所时 :内串符 :的符 如部的数 接剩长组 并序列排序符符所 别) : ) ( ) , %: ) ) ( &= +; 0 字成,有所串出,程 )( ) )( ) ) ( ( ) ;): ( (
4、 - = +; 0 ) 出 为有中字置容中字,编) ( ) ) ) ) : ) ;: ( , + %( * 容中后数则 :符的后最字个串位移字有串把序编 , + 0 ( , ) : 0 : : ; ; : + ; + : ;: ;: ; ; : ;+ ; : + ; : ;+ : + + + ; + ;+ ; ) * )+_; _(;+0 ) ( 00 =_ * 00000 00000 是果输, 串入中组所在依数的自 符 字盘从写 ) , % ( ) ( ) ( = ;= ; -( = = & ;0 : ( & + ; ) ( = ( * ! 符输则 入母母小改都的,字应改首单中将 符键从编)
5、 ) % ( ) ) ( ) ( ),: , = ( + = , . ! 果 值 ,的, 为符字)从 字 从中除程 ) ) ( +;0 )+;( ), , , ( + ;( +;( ( | 0 出 | 为为置 :的,例出中函 果计 放存 把+ ,程 ) ) % + ; ): ),( )( ) %( ; ; ) ( + =( + ; , ( . 中数 入并元的列 维列 出) ) ( ) ( ) ) , ) 0 + ; ) ( ) , 0 , , , = | =( = |0 ( + = + = 0 , .:值序 | 均平元数的 出) ( , + ) ), &( ) ) ( + 0 + ;( ) (
6、 0000 , , , , = ( +)* ) *= +; +; , 0)( 是的 为为中二如 中串个次顺列数的维的行将能, 写) , ( )”( 0=)+), “ + ;0=- =-+ ; . 数素元按 数差减将,元二 元个 个知 )+ *( ( ) ( ) 00 + * 0= 0 + ;( = +0 (+ * . 素中 -法方数) +; ;=)源 ,均 用 )义 式 决) 不 数 式 可 ) %数( 该 ;想 , ) ,限 所 序 一 证 ) 参% 使 用 ) ( ) , ( -义= 函)-; ; ,0 的 能 若 , 能 边 形 数 中若 能插将规来腰数个角键从写数组好排 到按个 构)
7、三 ; 函,数 ( );不;( 三 ) 数 返 0 ) * *( )-( ) (=), ( ) ,( ; ) ,( + ; ) 0 0, ( ;+ =+ ;= - + !( = . , , )入从素 中除重值元组整) % ) ), ( = - =+ ) &= +; ;)( , * ( )个入素三插情个前根序行两的数是的排:。)排行个序排 , ( + : ( ( = 0, 00 0 ) _ + + _ = _ ) ()+;0 / = ) ;=(0 0 *0 0= 0、 、:应的 返函0 0 0 为数数 ,。成表 , 示中 在的平低,返作人均将能功, 写请 ) ) , ) 0=) ( +; ) (
8、 , ; * =+ 0= |=% )+ = 0 , 00 为的组数 为输, 中组放有除 能(到将), ) ) ;. ); = ) : 00 ., ,.0 . ( ) + / (+ ; 00 ,0 0 .=出, 0 0 、 . 依 组定和根的值元邻中)长定输计), %( ) )& ) ( ) = . + 0 0. 0. +& & )& % )”边形角请 ( )(*- ( )+ . 用数主)形回边的角, ( ( 成积算将序积形计编 ) ) : ) , ,( ) ) * ( + ) = , , ( = = + + 0= )+ ;= 0= 0=_, * , , ( *-及以 0 * *计循 . 000
9、 :输后入给从函 止 0.0-( 直值多列. 当并做 函时输;为值 入当 (+- = 数数归下,的用 做 :应 整若 ) - = , = 项 列出式公下方数、 ) , ) % ( )(0= + ; ( = ( 输,0若例 - + =,=,= 值式公,的用) “ )”的图输“ ( ) ( ), % +- = ) % + +; +; ( , ( 值最其求整入输)()”:整 ( ( ) , %, % = (+ ; + = ( 数整 出算) , : %, %正( ) , ) &” + =): ( 0= ( +)(0=( +) 0 (+) 0 (+ , , 个多负少正少数实入输计) ( &,%+ ( (
10、& ; ( = % + ; ( . )00表二 进(0 , 若)输盘 出 数 成整制十) ) ( ,( ( ) , % ) : ( , ; 0 =& = )+= ) = ( )质示(出输 输。 因它互示 输,和 若例质质否;和则数被时 ,除分间之的较 取 法 , )的否即否和数断)(% )&,( ) ( )( = 0= + ( ) += ) = = = + = ; 0 = 0= ; =0. 0 ; , 为出的时0当例 和平 数输,项的其都各 0为别前个知)0( ( - + + ) =%(0= ( ) & ( 0 0 ( . 输0为值,盘从。然除 个的大以并)% ( ) ( ) ): ( ( 0
11、= 0* + 0= 0%0 0 ( :中时 的 ,位仍,高高在数成出依数奇每的整 ),% ) )( ;) ( ( 0. += 0 ( . . 为函则 :,盘+ + + + 输 ) )0 ) ( = * * 闭据输数 用据测输打函请 )() () */ 0= + 0 , . 值时 。值为之除 子有整算能的 ( ),.= =( ) ), , % % = ) & % ; ( ; ;*= *; ;=;= (; *=;* * * * ,*; 0( =.=,| 应= | 数的=如 中量放最中变大将 盘) ( ),( ) % = ( = * * ( 为中为的 运,原值,原值量 换量两序个序量量值原 为 )
12、)盘将放中 = * *( =* %) %) )( ,(的整子为值 0 * ( )请输用数输* () ) + :则 . 0=+0 ( ( ) )每依数高位, : ( 00 = )()( 并以 然从为 (0 ( (0%) )前0都项输和当时为 . =0 ;= ) = % ),素 ( = ( ),)和否的法取较间,数;质若输示因。 质) = =) & , ( ( 十成盘若,进表) = 计实数多 , ( +)(0) 0( :)+” )(,% 出 数 ( ( , ) ”)整其 , + ( 入数 ( ) 。 ; %) +% 图”“)的式 =, 若0 = ;=( ( 下出列 = 整应 ,数 当 输时并.列
13、( 入 0 循 * 0以* /* - 解* = = 键如0 ; / 从 以数入0 , ) = ; = ;- ,) (,以 之 值不 00= +|= )& 一 的出所参据指用 和的 指回指回 , _ ; 0 + = &)面, 法)程+!项 . ( ) & (,计中值和组 、 = 00;+ ( , 0 : ; . ) 将 有中输数的 0 =+)= = ; ,( )= ) 将人,的 ,数 返的、 0(; /0; =_+ 00 ( ( 个排。是的根个入) ( + = = = , % 元重 ) , ( = ; (, ) () ;( )()( ; 到好键数将 ;)( ( ) ; ) ,= )方中素 *+
14、=(+ 0 知 ,减按数 -= ,0( (, ,能的顺个如为 的 )0 ; ; ) , , 0 )( + & ) , 数均 | . 0= +=+ = , , , ) );+ , ) ) 元入 , + ( ; (), ) + % ,+ 放 出的 为 | 出 0 + ( ( , ;) + ) 除 字 , . = , () 编符 首应改母 符 ! * ; + ( & - ; ( ) )( , )从 的在中 , 0000 0_) ; + ; + ; ; : : ; : 0 ), 0+ 序串位字最 则后 * %+ ) : ) )字容中 出 ; ( ( ) ()串有字 ;+ ( ) % ) 符排序 剩的
15、: 内时中容 + * ; , * ) )(= * *+ * 0( 0 % ) % 符 字字,保中存 (+ *) , )函 个是文:数 与样 , (/+! =) ) )已习 结成录、由绩成点的生分记号生数学放,的0 结 数做) % ), ) %,= )& & % ) , , ( 0 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)
16、; fun(&a,b); printf(%d %dn,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(%
17、f%f%f,&a,&b,&c); printf(a=%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=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() /*主函数*/ void NONO();
18、printf(%dn,fun(120);NONO();void NONO( )/* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ FILE *wf; wf = fopen(a30.out, w) ; fprintf(wf,%dn,fun(120); fclose(wf) ; 5、计算s,并输出 1 1 1 S = 1 + + + + 1+2 1+2+3 1+2+3+nn通过键盘输入,例如:若n的值为11时,则函数值为:1.833333#include #include float fun(int n) int i; float s=1.0,h=1; fo
19、r (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 (s0) d=s%10;
20、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:%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
21、m;void main() printf(%dn,fun(500); 8、已知一个数列的前三项分别为0,0,1, 以后的各项都是其相邻的前三项之和,计算并输出该数列前n项的平方根之和sum。例如,当n10时,程序的输出结果应为: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
22、(s); s0 = s1; s1 = s2; s2 = s; return sum;void main ( ) 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、判断
23、两个整数m和n是否互质(即是否有公共的因子)(m1,n1)。方法是: 用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 (mn) t=n;for(k=2;k=t;k+) if( m%k=0 & n%k=0 ) mk=0; break; return mk;void main( )
24、int m, n; printf( nPlease enter 2 numbers:n );scanf(%d %d, &m, &n); if( IsThat( m, n ) ) printf( Yesn ); else printf( Non );11、将十进制正整数m转换成k进制数(2k9)并输出(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-
25、1; j=0; j- )printf(%d, aaj);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;i0)(*zs)+;if(aai0)(*fs)+;if(aai=0)(*l)+;void main()float num50;int i,
26、czs,cfs,cl;czs=cfs=cl=0;printf( nPlease enter 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+y2=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);1 2 3 4 51 1 2 3 41 1 1 2 31 1 1 1 21 1 1 1 115、从键盘输入n值,