c语言参考答案
从10个整数中把最小得数找出来,并与最前面得数对调, 指出最小得数原来得位置。
#include〈stdio。h>
void main( )
{
?inti,j,a[10],k;
for(i=0;i〈=9;i++) scanf("%d",&a[i]);
j=0;/*假设最小值就是第0个元素*/
for(i=1;i<=9;i++)
?if(a[i]<a[j])j=i;
if(j!=0)
{??k=a[0]; a[0]=a[j];?a[j]=k;}?printf("min number is:%d\n",a[0]);
printf("theposition is:%d\n",j);
}
#include 〈stdio.h>
int f(int a[])
{
int i,j,k;
?j=0;/*假设最小值就是第0个元素*/ for(i=1;i<=9;i++)
if(a[i]<a[j]) j=i;
if(j!=0)
{??k=a[0];?a[0]=a[j];?a[j]=k;}
returnj;
}
voidmain()
{
?int i,j,a[10];
for(i=0;i〈=9;i++) scanf(”%d",&a[i]);
j=f(a);
printf(”minnumberis:%d\n”,a[0]);
printf(”the position is:%d\n", j);
}
已知5个数已经按由大到小排好序,请编程使得它们按由小到大排序。(逆序)
#include void main( ) { inta[5]={5,4,3,2,1},i,t; for(i=0;i<5/2;i++) ?{ ??t=a[i]; ??a[i]=a[4-i]; ?a[4-i]=t; ?} ?for (i=0;i<5;i++) ?printf(”%d",a[i]); } #include 〈stdio、h> void f(int a[]) { ?inti,t; for(i=0;i<5/2;i++) { t=a[i]; ??a[i]=a[4—i]; ?a[4—i]=t; ?} } void main() { ?int a[5]={5,4,3,2,1},i; ?f(a); for(i=0;i〈5;i++) ??printf(”%d”,a[i]); } 已知5个整数,已经由大到小排好序,现输入一个数,将其插入到该数组适当位置,使其仍然有序。(定义并初始化、输入、查找、移动、插入) #include 〈stdio、h〉 void main( ) { int a[6]={20,15,12,8,6}; ?int i,k=9; ?if(k<=a[4]) a[5]=k; ?else ?{ for (i=4;i>=0;i--) ?if(k>a[i]) ??{ ?a[i+1]=a[i]; ??} elsebreak; ?a[i+1]=k; } ?for (i=0;i〈6;i++) printf("%d ",a[i]); } #include〈stdio。h〉 voidf(int a[],int k) { inti; if(k<=a[4]) a[5]=k; else { ?for (i=4;i〉=0;i-—) ??if(k>a[i]) ?{ ?a[i+1]=a[i]; ?} ??elsebreak; ?a[i+1]=k; ?} } void main() { ?inta[6]={20,15,12,8,6}; int i; ?f(a,33); for (i=0;i〈6;i++) ?printf("%d ",a[i]); } 任输入20个正整数,找出其中素数,并按由小到大排序,打印输出素数,每5个数换一行。 #include #include <math.h> void main( ) {int a[20],b[20],i,j,k,m; for(i=0;i〈20;i++) scanf(”%d",&a[i]); k=0; for(i=0;i〈20;i++) {for(j=2;j<=a[i]—1;j++) if(a[i]%j==0) break; if(j〉a[i]—1) {b[k]=a[i]; k++; }} ?for(i=0;i ?for(j=0;j ???if(b[j]〈b[j+1]) ??{m=b[j]; b[j]=b[j+1]; b[j+1]=m; } ? for(i=0;i〈k;i++) { ??printf(”%5d",b[i]); if((i+1)%5==0)printf("\n"); ?} } #include<stdio、h〉 #include intsushu(int a) {?int j; int f=1; ?for(j=2;j<=sqrt(a);j++) ?if(a%j==0){f=0;break;} return f; } int sushuarray(int a[],int b[]) {?int k=0; ?int i; ?for(i=0;i〈20;i++) if(sushu(a[i])==1) { b[k]=a[i]; k++; } return k; } void paixu(intb[],intk) {int i,j,m; for(i=0;i<k-1;i++) for(j=0;j ???if(b[j]〉b[j+1]) ???{m=b[j]; b[j]=b[j+1];b [j+1]=m; }} void main( ) { int a[20],b[20],i,k; for(i=0;i<20;i++) scan f(”%d",&a[i]); k=sushuarray(a,b); paixu(b,k); ? for(i=0;i {?printf(”%5d",b[i]); ?if((i+1)%5==0)printf("\n"); } } 有一个2×3得矩阵,求每行最小值及每列得最小值。 #include void main( ) { int a[2][3],b[2],c[3],i, j; for(i=0;i<2;i++) for(j=0;j〈3;j++) scanf("%d",&a[i][j]); for(i=0;i〈2;i++) { b[i]=a[i][0]; for( j=1;j<3;j++) if(a[i][j]<b[i])b [i]=a[i][j]; } for(j=0;j<3;j++) {c[j]=a[0][j]; for(i=1;i〈2;i++) if(a[i][j]〈c[j]) c [j]=a[i][j]; } ?for(i=0;i<2;i++) { ?for(j=0;j<3;j++) ?printf("%5d",a[i][j]); ?printf("%5d\n",b[i]); } ?for(i=0;i〈3;i++) printf("%5d",c[i]); printf("\n”);} #include〈stdio、h> void f(int a[2][3],intb[2],intc[3]) { ?inti,j; ?for(i=0;i<2;i++) ?{ b[i]=a[i][0]; for( j=1;j<3;j++) if(a[i][j]<b[i]) b[i]=a[i][ j]; } for(j=0;j〈3;j++) {c[j]=a[0][j]; for(i=1;i<2;i++) if(a[i][j]〈c[j]) c[j]=a[i][j]; } } voidmain() { ?int a[2][3],b[2],c[3],i,j; ?for(i=0;i<2;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); ?f(a,b,c); for(i=0;i<2;i++) ?{ ??for(j=0;j〈3;j++) ???printf("%5d”,a[i][j]); printf("%5d\n”,b[i]); } ?for(i=0;i〈3;i++) ?printf(”%5d",c[i]); ?printf("\n"); } 编一程序,将两个字符串连接起来 法一:不用函数 #include 〈stdio.h> void main() { char a[80],b[30]; ?inti,j; ?gets(a); gets(b); ?for(i=0;a[i]!='\0’;i++); for(j=0;b[j]!=’\0';j++) ?{ ?a[i++]=b[j]; } a[i]='\0'; puts(a); puts(b); } 法二:用函数 #include <stdio、h> voidf(char a[],char b[]) { ?int i,j; for(i=0;a[i]!='\0';i++); for(j=0;b[j]!='\0';j++) ?{ a[i++]=b[j]; } ?a[i]='\0’; } voidmain() { ?char a[80],b[30]; ?gets(a); gets(b); f(a,b); // puts(a); ?puts(b); }?任输入十个国家得名字,按由小到大排序。 #include #include void main( ) { char a[10][20],b[20]; int i,j; for (i=0;i〈10;i++) gets(a[i]); for(i=0;i〈9;i++) for (j=0;j<9-i;j++) if (strcmp(a[j],a[j+1])>0) { strcpy(b,a[j]); strcpy(a[j],a[j+1]); strcpy(a [j+1],b); } printf("paixuis:\n"); for(i=0;i<10;i++) printf("%s\n”,a[i]); } #include <stdio。h> #include 〈string。h> void f(char a[10][20]) { int i,j; char b[20]; for(i=0;i<9;i++) for (j=0;j〈9-i;j++) if (strcmp(a[j],a[j+1])〉0) {strcpy(b,a[j]); strcpy(a [j],a[j+1]); strcpy(a[j+1],b); } }void main( ) {char a[10][20]; inti; for (i=0;i<10;i++) gets(a[i]); f(a);? ?printf("paixuis:\n”); for (i=0;i<10;i++)printf("%s\n",a[i]); } ? 有一篇三行文字得文章,每行最多80个字符,编写函数,由实参传递字符串,分别统计文 章中大写字母、小写字母、数字、空格及其它字符得个数。 分析: 自定义函数需返回多个统计结果,可采用一个专门得数组存放统计结果,并将其作为函数参数,在被调函数中计数。 #include<stdio。h> voidcount(char s[3][80], intc[5]) { int i, j; char t; /*用临时变量t提高效率*/ for(i=0; i〈=2; i++) for(j=0;(t=s[i][j])!=0; j++) if(t>='A’&&t<='Z’)c[0]++; else if(t>='a’&&t<='z') c[1]++; else if(t〉=’0'&&t<='9') c[2]++; elseif(t==32) c[3]++; else c[4]++; return; } void main( ) {charstr[3][80]; static int c[5], i; /*c各元素为0*/ void count(char [ ][80],int [ ]); for(i=0;i〈=2; i++) /*输入三行字串*/ gets(str[i]); count(str, c); /*实参:两个数组指针*/ for(i=0; i〈=4; i++) /*输出统计结果*/ printf(”%5d", c[i]); } 编写以下5函数,实现对一个数组按由小到大排序,并统计排序过程中交换得次数(注意参数、返回值得设计) –打印一个数组 –将一个数组复制到另一个数组中 –用起泡法实现排序与统计 –用选择法实现排序与统计 –main() ?数组初始化为{5,27,10,8,15,7,9,24,3,6} ?… ?用起泡法 ?打印原始数组与排序后数组、统计次数 ?用选择法排序原始数组并统计 ?打印原始数组与排序后数组、统计次数 #include 〈stdio。h> void myprint(int a[],intn) { int i; printf("\n "); ?for(i=0;i<n;i++) printf(”%d",a[i]); return; } voidmycopy(int a[],int b[],intn) { inti; ?for(i=0;i〈n;i++) b[i]=a[i]; return; } int qipao(int a[],int n) { ?int i,j,x=0,t; for(i=0;i〈n—1;i++) ??for(j=0;j〈n-1-i;j++) ??if(a[j]>a[j+1]) ??{ ???t=a[j]; ????a[j]=a[j+1]; ??a[j+1]=t; ??x++; } ?returnx; } int xuanze(int a[],int n) { ?int i,j,x=0,k,t; ?for(i=0;i〈n—1;i++) ?{ ?k=i; ??for(j=i+1;j ??if(a[j]〈a[k]) ??k=j;??? ??if(k!=i) ??{ t=a[i]; ???a[i]=a[k]; ??a[k]=t; ?x++; ?} ?} ?returnx; } voidmain() { ?int a[10]={5,27,10,8,15,7,9,24,3,6},b[10],p,q; ?//int a[10]={1,2,3,4,5,6,7,10,9,8},b[10],p,q;测试数据,运行验证,瞧结果就是多少mycopy(a,b,10); printf("\nthe source array is:"); ?myprint(a,10); ?p=qipao(a,10); printf(”\nqipao the array is: ”); myprint(a,10); ?printf("\nqipao=%d\n ”,p); ?printf("\nthe sourcearrayis: "); ?myprint(b,10); ?q=xuanze(b,10); ?printf(”\nxuanze arrayis:”); ?myprint(b,10); printf(”\nxuanze=%d\n",q); } 递归,求两个数得最大公约数 #include 〈stdio。h> intf(int x,inty) { intr,p ; if(x〈y) {p=y;y=x;x=p;} ?r=x%y; if(r==0)return y; else ?return f(y,r); } void main() { ?int k; k=f(36,24); ?printf("is%d ",k); } 三个数,不修改其值,按由小到大输出,用指针void main() { int a=3,b=1,c=2; //int a=3,b=2,c=1; ?//inta=1,b=2,c=3; ?int *p,*q,*k,*t; p=&a;q=&b;k=&c; 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",a,b,c); ?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; //inta=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); ?printf("\n%d%d%d\n”,*p,*q,*k); //没有排序why? } 读程序写结果 #include void f(int *p,int *q,int*k) { int t; //局部变量就是int 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); // } 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? }