《c语言参考答案.doc》由会员分享,可在线阅读,更多相关《c语言参考答案.doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、从10个整数中把最小的数找出来,并与最前面的数对调, 指出最小的数原来的位置。17 最/;,数, 来 % 与 面 / 调 出 最 )原 的 &置 & ,* =, = , ( / ),* % ;=*= *)* ; *=)(变的变指交 ; * ; 部/ , ,* . 结写 没/ ) , % ),% ), = = *, =, , = = ( 序印数/; * % ; (; =) 指的换/ *指指局/; ( 针是数果)*, % ), ( ;=;= ; ; ); ;= *( = & ,*,* = =, = ( 指,出由按修) ( ) ,( ( ), )= ; ; ) ( . 约约数求) ( )0( ) )
2、0( ;0 ) ) % )0( ) ) ) ) : ) ,( 多果结行运测 , , , , , 0 ( + = ! ; + )+;-; ,= ( + + = + (+ ; ) ; , ( +; = , ), ( ) ; ) , . 次计、排组统并原法次统组后数泡, , (统序现统和现组数另复数个计设回参(的换序统,大按数现数下) % *结统/ + ;0(/*指:* ) ) ( *串三/ +;= 0 ) 为各 , ( + + =( + ( + =& +;! ;= + ;( *效 时用 ; +- 0 + 0( 0 ) , + ; ): ; , ;)+ ( ) 0+ ,( ( +-=( + 0 )
3、+0 0 序大由,家十) )/ )() 0,0 ( =+= ;0)+ = . 函函) ) + 0 )+0!= )() ,0 ( 函函起连字两程)( ), ( + ; ), ), + 0(+ ( ; ) +0( + ;( , , ) + ( +0 ( + ;=( )+ ;= , . ) ), ( ) = ), ) ( + ; + 0( ) + ( 0 +0 = + ; 0 )+ 0 ) , +; +0 , 值最每值每, ) ( = )( ), + ; ) ), ) % +; =( , ( ; ; = + = +;0( , ) + ;= 0 , ; 0)= + ; ( = . . ) =+( )
4、( +0( ( + - (+ ;( ; = )- )= +- + 0 ( 0 ) ( )+0 ;( , ,0 ( . . 行一 ,出打序小,中找数个) , + 0 ), 0= ( + - =; - = ( ( = 入入、入初定序然,当数到将数入现好由已整),% +0() , ( = = + / = ( . ) +0( - + / = , = 序(排小们得请序排按已 ) )0 : )() + = , ( ;= =0= = + *元个小设; , . ) %: )0,% ; ; =0 + *素第小设;) & ( ) =( , ( ( &设* ,) : ,;元 =; ,= ) ) ) 请小( + -(
5、 /+ + ,整好入到,入入 = = ) ; ( + )数,出一 . ( ;+ ( + - ) ( + ( ( = . =0 , =+ , ( + = ( % ); )=( 值值 +; ) 0 ;+ +0(+ )0+; ) =+ 0+ ) , ) + ); ( )两函 (0 ) ) +=+= 00 )家由 ; ); 0 =+) ; )最函参统写其符 计,结参调 ; 时 =+ +( +( 各为 = 三 ) 指( 统 下数大序参回复另和序( ,数统原排计 . ;)( , , ) + ( ;+) + (0, , 果 , )% 0 ) )( 数约. = )() )修出 = * (=;); =;( )*
6、数 局指 的 ( %*;印 (= =, =, ,), /写 , * 变的;* * ( =, & ) / , #include void main( ) int i,j,a10,k;for(i=0;i=9;i+) scanf(%d,&ai);j=0;/*假设最小值是第0个元素*/for(i=1;i=9;i+) if(aiaj) j=i;if(j!=0)k=a0;a0=aj;aj=k;printf(min number is:%dn,a0);printf(the position is:%dn, j); #include int f(int a)int i,j,k;j=0;/*假设最小值是第0个元
7、素*/for(i=1;i=9;i+) if(aiaj) j=i;if(j!=0)k=a0;a0=aj;aj=k; return j;void main( ) int i,j,a10;for(i=0;i=9;i+) scanf(%d,&ai);j=f(a);printf(min number is:%dn,a0);printf(the position is:%dn, j); 已知5个数已经按由大到小排好序,请编程使得它们按由小到大排序。(逆序)#include void main( ) int a5=5,4,3,2,1,i,t;for (i=0;i5/2;i+)t=ai;ai=a4-i;a4-
8、i=t;for (i=0;i5;i+)printf(%d,ai);#include void f(int a)int i,t;for (i=0;i5/2;i+)t=ai;ai=a4-i;a4-i=t;void main() int a5=5,4,3,2,1,i;f(a);for (i=0;i5;i+)printf(%d,ai);已知5个整数,已经由大到小排好序,现输入一个数,将其插入到该数组适当位置,使其仍然有序。(定义并初始化、输入、查找、移动、插入)#include void main( ) int a6=20,15,12,8,6;int i,k=9;if(k=0;i-)if(kai)ai
9、+1=ai;else break;ai+1=k;for (i=0;i6;i+)printf(%d ,ai);#include void f(int a,int k)int i;if(k=0;i-)if(kai)ai+1=ai;else break;ai+1=k;void main( ) int a6=20,15,12,8,6;int i;f(a,33);for (i=0;i6;i+)printf(%d ,ai);任输入20个正整数,找出其中素数,并按由小到大排序,打印输出素数,每5个数换一行。#include #include void main( ) int a20,b20,i,j,k,m;
10、 for(i=0;i20;i+) scanf(%d,&ai); k=0; for(i=0;i20;i+) for( j=2;jai-1) bk=ai; k+; for(i=0;ik-1;i+)for(j=0;jk-1-i;j+)if(bjbj+1) m=bj; bj=bj+1;bj+1=m; for(i=0;ik;i+) printf(%5d,bi); if(i+1)%5=0)printf(n); #include #include int sushu(int a)int j;int f=1;for( j=2;j=sqrt(a);j+)if(a%j=0) f=0;break; return f
11、;int sushuarray(int a,int b)int k=0;int i;for(i=0;i20;i+)if(sushu(ai)=1) bk=ai; k+; return k;void paixu(int b,int k)int i,j,m;for(i=0;ik-1;i+)for(j=0;jbj+1) m=bj; bj=bj+1; bj+1=m; void main( ) int a20,b20,i,k; for(i=0;i20;i+) scanf(%d,&ai); k=sushuarray(a,b); paixu(b,k); for(i=0;ik;i+) printf(%5d,bi
12、); if(i+1)%5=0)printf(n); 有一个23的矩阵,求每行最小值及每列的最小值。#include void main( ) int a23,b2,c3,i, j;for(i=0;i2;i+) for(j=0;j3;j+) scanf(%d,&ai j);for(i=0;i2;i+) bi=ai0; for( j=1;j3;j+) if(ai jbi) bi=ai j; for(j=0;j3;j+) cj=a0j; for(i=1;i2;i+) if(aijcj) cj=aij; for(i=0;i2;i+)for(j=0;j3;j+)printf(%5d,aij);print
13、f(%5dn,bi); for(i=0;i3;i+) printf(%5d,ci);printf(n);#include void f(int a23,int b2,int c3)int i,j;for(i=0;i2;i+) bi=ai0; for( j=1;j3;j+) if(ai jbi) bi=ai j; for(j=0;j3;j+) cj=a0j; for(i=1;i2;i+) if(aijcj) cj=aij; void main( ) int a23,b2,c3,i, j;for(i=0;i2;i+) for(j=0;j3;j+) scanf(%d,&ai j);f(a,b,c);
14、 for(i=0;i2;i+)for(j=0;j3;j+)printf(%5d,aij);printf(%5dn,bi); for(i=0;i3;i+) printf(%5d,ci);printf(n);编一程序,将两个字符串连接起来法一:不用函数#include void main()char a80,b30;int i,j;gets(a);gets(b);for(i=0;ai!=0;i+);for(j=0;bj!=0;j+)ai+=bj;ai=0;puts(a);puts(b);法二:用函数#include void f(char a,char b)int i,j;for(i=0;ai!=
15、0;i+);for(j=0;bj!=0;j+)ai+=bj;ai=0;void main()char a80,b30;gets(a);gets(b);f(a,b); /puts(a);puts(b);任输入十个国家的名字,按由小到大排序。#include #include void main( ) char a1020,b20; int i,j; for (i=0;i10;i+) gets(ai); for (i=0;i9;i+) for (j=0;j0) strcpy(b,aj); strcpy(aj,aj+1); strcpy(aj+1,b); printf(paixu is :n); f
16、or (i=0;i10;i+) printf(%sn,ai); #include #include void f(char a1020)int i,j;char b20;for (i=0;i9;i+) for (j=0;j0) strcpy(b,aj); strcpy(aj,aj+1); strcpy(aj+1,b); void main( ) char a1020; int i; for (i=0;i10;i+) gets(ai); f(a); printf(paixu is :n); for (i=0;i10;i+)printf(%sn,ai);有一篇三行文字的文章,每行最多80个字符,编
17、写函数,由实参传递字符串,分别统计文章中大写字母、小写字母、数字、空格及其它字符的个数。分析: 自定义函数需返回多个统计结果,可采用一个专门的数组存放统计结果,并将其作为函数参数,在被调函数中计数。#include void count(char s380, int c5) int i, j; char t; /*用临时变量t提高效率*/ for(i=0; i=A&t=a&t=0&t=9) c2+; else if(t=32) c3+; else c4+; return;void main( ) char str380; static int c5, i; /*c各元素为0*/ void co
18、unt(char 80, int ); for(i=0; i=2; i+) /*输入三行字串*/ gets(stri); count(str, c); /*实参:两个数组指针*/ for(i=0; i=4; i+) /*输出统计结果*/ printf(%5d, ci);编写以下5函数,实现对一个数组按由小到大排序,并统计排序过程中交换的次数(注意参数、返回值的设计) 打印一个数组 将一个数组复制到另一个数组中 用起泡法实现排序和统计 用选择法实现排序和统计 main() 数组初始化为5,27,10,8,15,7,9,24,3,6 用起泡法 打印原始数组和排序后数组、统计次数 用选择法排序原始数
19、组并统计 打印原始数组和排序后数组、统计次数#include void myprint(int a,int n)int i;printf(n );for(i=0;in;i+) printf(%d ,ai);return;void mycopy(int a,int b,int n)int i;for(i=0;in;i+) bi=ai;return;int qipao(int a,int n)int i,j,x=0,t;for(i=0;in-1;i+) for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;x+;return x;int xuanze(int a,int n)int
20、i,j,x=0,k,t;for(i=0;in-1;i+) k=i;for(j=i+1;jn;j+)if(ajak)k=j;if(k!=i)t=ai;ai=ak;ak=t;x+;return x;void main()int a10=5,27,10,8,15,7,9,24,3,6,b10,p,q;/int a10=1,2,3,4,5,6,7,10,9,8,b10,p,q; 测试数据,运行验证,看结果是多少mycopy(a,b,10);printf(nthe source array is: );myprint(a,10);p=qipao(a,10);printf(nqipao the array
21、 is: );myprint(a,10);printf(nqipao= %dn ,p);printf(nthe source array is: );myprint(b,10);q=xuanze(b,10);printf(nxuanze array is: );myprint(b,10);printf(nxuanze= %d n,q);递归,求两个数的最大公约数#include int f(int x,int y)int r,p ;if(x*q)t=p;p=q;q=t;if(*p*k)t=p;p=k;k=t;if(*q*k)t=k;k=q;q=t;printf(n%d%d%d n,a,b,c)
22、;printf(n%d%d%d n,*p,*q,*k);读程序写结果 (参数是指针)void f(int *p,int *q,int *k)int * t; /局部变量是指针if(*p*q)t=p;p=q;q=t; /交换的是指针if(*p*k)t=p;p=k;k=t;if(*q*k)t=k;k=q;q=t;printf(n%d%d%d n,*p,*q,*k);/函数内打印 排好序 why?void main()int a=3,b=1,c=2;/int a=3,b=2,c=1;/int a=1,b=2,c=3;int *p,*q,*k,*t;p=&a;q=&b;k=&c;f(p,q,k);pr
23、intf(n%d%d%d n,a,b,c);printf(n%d%d%d n,*p,*q,*k); / 没有排序 why?读程序写结果#include void f(int *p,int *q,int *k)int t; /局部变量是intif(*p*q)t=*p;*p=*q;*q=t; /交换的是指针变量指向的变量if(*p*k)t=*p;*p=*k;*k=t;if(*q*k)t=*k;*k=*q;*q=t;printf(n%d%d%d n,*p,*q,*k); /void main()int a=3,b=1,c=2;/int a=3,b=2,c=1;/int a=1,b=2,c=3;int *p,*q,*k,*t;p=&a;q=&b;k=&c;f(p,q,k);printf(n%d%d%d n,a,b,c); /变 why?printf(n%d%d%d n,*p,*q,*k);/变 why?
限制150内