当前位置:文档之家› c语言参考答案

c语言参考答案

c语言参考答案
c语言参考答案

从 10 个整数中把最小的数找出来,并与最前面的数对调, 指出最小的数原来的位置。

#include #include

void main( )int f(int a[])

{{

int i,j,a[10],k;int i,j,k;

for(i=0;i<=9;i++) scanf("%d",&a[i]);j=0;/* 假设最小值是第0 个元素 */ j=0;/* 假设最小值是第0 个元素 */for(i=1;i<=9;i++)

for(i=1;i<=9;i++)if(a[i]

if(a[i]

if(j!=0){k=a[0];a[0]=a[j];

{k=a[0];a[0]=a[j];a[j]=k;}

a[j]=k;}return j;

printf("min number is:%d\n",a[0]);}

printf("the position is:%d\n", j);void main( )

}{

int i,j,a[10];

for(i=0;i<=9;i++) scanf("%d",&a[i]);

j=f(a);

printf("min number is:%d\n",a[0]);

printf("the position is:%d\n", j);

}

已知 5 个数已经按由大到小排好序,请编程使得它们按由小到大排序。(逆序)

#include void main( )

{#include void f(int a[])

{

int a[5]={5,4,3,2,1},i,t; for (i=0;i<5/2;i++)

{int i,t;

for (i=0;i<5/2;i++) {

t=a[i];

a[i]=a[4-i]; a[4-i]=t;t=a[i];

a[i]=a[4-i]; a[4-i]=t;

}}

}for (i=0;i<5;i++)

printf("%d",a[i]);

}

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 void main( )

{#include void f(int a[],int k) {

int a[6]={20,15,12,8,6}; int i,k=9;

if(k<=a[4]) a[5]=k; else int i;

if(k<=a[4]) a[5]=k; else

{

{

for (i=4;i>=0;i--)

if(k>a[i])for (i=4;i>=0;i--)

if(k>a[i])

{

{a[i+1]=a[i];

a[i+1]=a[i]; }

else break;

}

else break; a[i+1]=k;

a[i+1]=k;}

}

for (i=0;i<6;i++)

printf("%d ",a[i]);}

void main( ) {

}int a[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

#include #include

void main( )int sushu(int a)

{int a[20],b[20],i,j,k,m;{int j;

for(i=0;i<20;i++)int f=1;

scanf("%d",&a[i]);for( j=2;j<=sqrt(a);j++)

k=0;if(a%j==0){f=0;break;}

for(i=0;i<20;i++)return f;

{for( j=2;j<=a[i]-1;j++)}

if(a[i]%j==0)

if(j>a[i]-1)

{b[k]=a[i];k++;

}

for(i=0;i

for(j=0;j

if(b[j]

}

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];

return k;

k++;}

{m=b[j];

b[j]=b[j+1];

b[j+1]=m;

}

for(i=0;i

{

printf("%5d",b[i]);}

void paixu(int b[],int k)

{int i,j,m;

for(i=0;i

for(j=0;j

if(b[j]>b[j+1])

{m=b[j];b[j]=b[j+1];

}}

if((i+1)%5==0)printf("\n");b[j+1]=m; }

}

void main( )

{int a[20],b[20],i,k;

for(i=0;i<20;i++)

scanf("%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( )

{#include

void f(int a[2][3],int b[2],int c[3]) {

int a[2][3],b[2],c[3],i, j; for(i=0;i<2;i++)

for(j=0;j<3;j++)int i,j;

for(i=0;i<2;i++) {b[i]=a[i][0];

scanf("%d",&a[i][ j]);for( j=1;j<3;j++)

if(a[i][ j]

for(i=0;i<2;i++)

{b[i]=a[i][0];

for( j=1;j<3;j++)}

for(j=0;j<3;j++) {c[j]=a[0][j];

if(a[i][ j]

}if(a[i][j]

{c[j]=a[0][j];}

for(i=1;i<2;i++)

}if(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]);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<3;i++)

printf("%5d",c[i]);f(a,b,c);

for(i=0;i<2;i++) {

}printf("\n");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 void main()

{#include void f(char a[],char b[]) {

char a[80],b[30]; int i,j;

gets(a);

gets(b);int i,j;

for(i=0;a[i]!='\0';i++); for(j=0;b[j]!='\0';j++) {

for(i=0;a[i]!='\0';i++);a[i++]=b[j];

for(j=0;b[j]!='\0';j++) {}

a[i]='\0';

a[i++]=b[j]; }

a[i]='\0';}

void main() {

}puts(a);

puts(b);

char a[80],b[30];

gets(a);

gets(b);

f(a,b); //

puts(a);

puts(b);

}

任输入十个国家的名字,按由小到大排序。

#include #include #include #include void main( )void f(char a[10][20]) {char a[10][20],b[20];{int i,j;

int i,j;char b[20];

for (i=0;i<10;i++)for (i=0;i<9;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]);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);

strcpy(a[j],a[j+1]);}

}

strcpy(a[j+1],b);

}

printf("paixu is:\n");

for (i=0;i<10;i++)

printf("%s\n",a[i]);

}

void main( )

{char a[10][20];

int i;

for (i=0;i<10;i++)gets(a[i]);

f(a);

printf("paixu is:\n");

for (i=0;i<10;i++)printf("%s\n",a[i]);

}

有一篇三行文字的文章,每行最多 80 个字符,编写函数,由实参传递字符串,分别统计文章

中大写字母、小写字母、数字、空格及其它字符的个数。

分析:

自定义函数需返回多个统计结果,可采用一个专门的数组存放统计结果,并将其作为函数参数,在被调函数中计数。

#include

void count(char s[3][80], int c[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]++;

else if(t==32) c[3]++;

else c[4]++;

return;

}

void main( )

{ char str[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

void myprint(int a[],int n)

{

int i;

printf("\n ");

for(i=0;i

return;

}

void mycopy(int a[],int b[],int n)

{

int i;

for(i=0;i

return;

}

int qipao(int a[],int n)

{

int i,j,x=0,t;

for(i=0;i

for(j=0;j

if(a[j]>a[j+1])

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

x++;

}

return x;

}

int xuanze(int a[],int n)

{

int i,j,x=0,k,t;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]

k=j;

if(k!=i)

{

t=a[i];

a[i]=a[k];

a[k]=t;

x++;

}

}

return x;

}

void main()

{

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 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

r=x%y;

if(r==0) else return y; 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;

//int a=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;

//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);

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? }

相关主题
文本预览
相关文档 最新文档