c语言参考答案.pdf
1 从 10 个整数中把最小的数找出来,并与最前面的数对调,指出最小的数原来的位置。#include void main()i nt i,j,a10,k;f or(i=0;i=9;i+)scanf(%d,&ai);j=0;/*假设最小值是第0 个元素*/f or(i=1;i=9;i+)if(aiaj)j=i;i f(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)i nt i,j,k;j=0;/*假设最小值是第0 个元素*/f or(i=1;i=9;i+)if(aiaj)j=i;i f(j!=0)k=a0;a0=aj;aj=k;return j;void main()i nt i,j,a10;f or(i=0;i=9;i+)scanf(%d,&ai);j=f(a);printf(min number is:%dn,a0);printf(the position is:%dn,j);2 已知 5 个数已经按由大到小排好序,请编程使得它们按由小到大排序。(逆序)#include void main()i nt a5=5,4,3,2,1,i,t;f or(i=0;i5/2;i+)t=ai;ai=a4-i;a4-i=t;f or(i=0;i5;i+)printf(%d,ai);#include void f(int a)i nt i,t;f or(i=0;i5/2;i+)t=ai;ai=a4-i;a4-i=t;void main()i nt a5=5,4,3,2,1,i;f(a);f or(i=0;i5;i+)printf(%d,ai);3 已知 5 个整数,已经由大到小排好序,现输入一个数,将其插入到该数组适当位置,使其仍然有序。(定义并初始化、输入、查找、移动、插入)#include void main()i nt a6=20,15,12,8,6;i nt i,k=9;i f(k=0;i-)if(kai)ai+1=ai;else break;ai+1=k;f or(i=0;i6;i+)printf(%d,ai);#include void f(int a,int k)i nt i;i f(k=0;i-)if(kai)ai+1=ai;else break;ai+1=k;void main()i nt a6=20,15,12,8,6;i nt i;f(a,33);f or(i=0;i6;i+)printf(%d,ai);4 任输入 20 个正整数,找出其中素数,并按由小到大排序,打印输出素数,每5 个数换一行。#include#include void main()int a20,b20,i,j,k,m;for(i=0;i20;i+)scanf(%d,&ai);k=0;for(i=0;i20;i+)for(j=2;jai-1)bk=ai;k+;f or(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;i nt f=1;f or(j=2;j=sqrt(a);j+)if(a%j=0)f=0;break;return f;int sushuarray(int a,int b)int k=0;i nt i;f or(i=0;i20;i+)if(sushu(ai)=1)bk=ai;k+;r eturn k;void paixu(int b,int k)int i,j,m;f or(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);if(i+1)%5=0)printf(n);5 有一个 23 的矩阵,求每行最小值及每列的最小值。#include void main()int a23,b2,c3,i,j;f or(i=0;i2;i+)for(j=0;j3;j+)scanf(%d,&ai j);f or(i=0;i2;i+)bi=ai0;for(j=1;j3;j+)if(ai jbi)bi=ai j;f or(j=0;j3;j+)cj=a0j;for(i=1;i2;i+)if(aijcj)cj=aij;f or(i=0;i2;i+)for(j=0;j3;j+)printf(%5d,aij);printf(%5dn,bi);f or(i=0;i3;i+)printf(%5d,ci);printf(n);#include void f(int a23,int b2,int c3)i nt i,j;f or(i=0;i2;i+)bi=ai0;for(j=1;j3;j+)if(ai jbi)bi=ai j;f or(j=0;j3;j+)cj=a0j;for(i=1;i2;i+)if(aijcj)cj=aij;void main()int a23,b2,c3,i,j;f or(i=0;i2;i+)for(j=0;j3;j+)scanf(%d,&ai j);f(a,b,c);f or(i=0;i2;i+)for(j=0;j3;j+)printf(%5d,aij);printf(%5dn,bi);f or(i=0;i3;i+)printf(%5d,ci);printf(n);6 编一程序,将两个字符串连接起来法一:不用函数#include void main()char a80,b30;i nt i,j;gets(a);gets(b);f or(i=0;ai!=0;i+);f or(j=0;bj!=0;j+)ai+=bj;ai=0;puts(a);puts(b);法二:用函数#include void f(char a,char b)i nt i,j;f or(i=0;ai!=0;i+);f or(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);7 任输入十个国家的名字,按由小到大排序。#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);for(i=0;i10;i+)printf(%sn,ai);#include#include void f(char a1020)int i,j;char b20;f or(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);8 有一篇三行文字的文章,每行最多80 个字符,编写函数,由实参传递字符串,分别统计文章中大写字母、小写字母、数字、空格及其它字符的个数。分析:自定义函数需返回多个统计结果,可采用一个专门的数组存放统计结果,并将其作为函数参数,在被调函数中计数。#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 count(char 80,int );for(i=0;i=2;i+)/*输入三行字串*/gets(stri);count(str,c);/*实参:两个数组指针*/for(i=0;i=4;i+)/*输出统计结果*/printf(%5d,ci);9 10 编写以下 5 函数,实现对一个数组按由小到大排序,并统计排序过程中交换的次数(注意参数、返回值的设计)打印一个数组 将一个数组复制到另一个数组中 用起泡法实现排序和统计 用选择法实现排序和统计 main()?数组初始化为5,27,10,8,15,7,9,24,3,6?用起泡法?打印原始数组和排序后数组、统计次数?用选择法排序原始数组并统计?打印原始数组和排序后数组、统计次数#include void myprint(int a,int n)i nt i;printf(n);f or(i=0;in;i+)printf(%d,ai);r eturn;void mycopy(int a,int b,int n)i nt i;f or(i=0;in;i+)bi=ai;r eturn;int qipao(int a,int n)i nt i,j,x=0,t;f or(i=0;in-1;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;x+;r eturn x;int xuanze(int a,int n)11 i nt i,j,x=0,k,t;f or(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+;r eturn x;void main()i nt 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;测试数据,运行验证,看结果是多少m ycopy(a,b,10);printf(nthe source array is:);m yprint(a,10);p=qipao(a,10);printf(nqipao the array is:);m yprint(a,10);printf(nqipao=%dn,p);printf(nthe source array is:);m yprint(b,10);q=xuanze(b,10);printf(nxuanze array is:);m yprint(b,10);printf(nxuanze=%d n,q);12 13 递归,求两个数的最大公约数#include int f(int x,int y)i nt r,p;i f(x*q)t=p;p=q;q=t;i f(*p*k)t=p;p=k;k=t;i f(*q*k)t=k;k=q;q=t;printf(n%d%d%d n,a,b,c);printf(n%d%d%d n,*p,*q,*k);15 读程序写结果(参数是指针)void f(int*p,int*q,int*k)i nt*t;/局部变量是指针i f(*p*q)t=p;p=q;q=t;/交换的是指针i f(*p*k)t=p;p=k;k=t;i f(*q*k)t=k;k=q;q=t;printf(n%d%d%d n,*p,*q,*k);/函数内打印排好序 whyvoid main()i nt a=3,b=1,c=2;/int a=3,b=2,c=1;/int a=1,b=2,c=3;i nt*p,*q,*k,*t;p=&a;q=&b;k=&c;f(p,q,k);printf(n%d%d%d n,a,b,c);printf(n%d%d%d n,*p,*q,*k);/没有排序 why16 读程序写结果#include void f(int*p,int*q,int*k)i nt t;/局部变量是inti f(*p*q)t=*p;*p=*q;*q=t;/交换的是指针变量指向的变量i f(*p*k)t=*p;*p=*k;*k=t;i f(*q*k)t=*k;*k=*q;*q=t;printf(n%d%d%d n,*p,*q,*k);/void main()i nt a=3,b=1,c=2;/int a=3,b=2,c=1;/int a=1,b=2,c=3;i nt*p,*q,*k,*t;p=&a;q=&b;k=&c;f(p,q,k);printf(n%d%d%d n,a,b,c);/变 whyprintf(n%d%d%d n,*p,*q,*k);/变 why