编程语言应用

注册

 

发新话题 回复该主题

全国计算机等级考试二级教程C语言编程 [复制链接]

1#

全国计算机等级考试二级教程——C语言程序设计(年版)

编程题答案(第9章):

[9.27]

输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数。用下标为0的元素统计字符’0’的个数,用下标为1的元素统计字符’1’的个数……

#includestdio.h

#includectype.h

main()

{charc;

intk,a[10]={0};

while((c=getchar())!=\n)

if(isdigit(c))a[c-0]+=1;

/*isdigit见附录6*/

for(k=0;k10;k++)

printf("%d的个数:%d\n",k,a[k]);

}

[9.28]

编写函数,对具有10个整数的数组进行如下操作:从下标为n的元素开始直到最后一个元素,依次向前移动一个位置。输出移动后的结果。

#includestdio.h

voidfun(inta[],intn)

{inti,t;

for(i=n;i10;i++)

a[i-1]=a;

}

main()

{inta[10]={0,1,2,3,4,5,6,7,8,9},n,i;

scanf("%d",n);

fun(a,n);

for(i=0;i9;i++)

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

}

[9.29]

编写函数,把数组中所有奇数放在另一个数组中返回。

#includestdio.h

#defineN10/*用10替换N*/

intfun(inta[],intb[])

{inti,k=0;

for(i=0;iN;i++)

if(a%2)/*判断奇数*/

{b[k]=a;

k++;

}

returnk;/*k是b[]实际大小*/

}

main()

{inta[N]={0,1,2,3,4,5,6,7,8,9};

intb[N],k,i;

k=fun(a,b);

for(i=0;ik;i++)

printf("b[%d]=%d\n",i,b);

}

[9.30]

编写函数,对字符数组中的字母按由大到小的字母顺序进行排序。

#includestdio.h

#includectype.h

intfun(chara[],charb[])

{inti,j,n,k=0;

charm;

for(i=0;i9;i++)

{if(isalpha(a))/*判断字母*/

b[k]=a,k++;

}/*将是字母的a[]赋值给b[]*/

for(j=0;jk;j++)

{for(n=j+1;nk;n++)

{if(b[j]b[n])

m=b[j],b[j]=b[n],b[n]=m;

}

}/*b[]大小排序*/

returnk;

}

main()

{charb[9],a[9]={a,9,d,8,g,h,j,k,6};

intn,k;

k=fun(a,b);

for(n=0;nk;n++)

printf("b[%d]=%c\n",n,b[n]);

}

[9.31]

输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。请对插在最前,插在最后,插在中间三种情况运行程序,以便验证程序是否正确。

#includestdio.h

voidfun(int[],int);

main()

{inti,x,k,a[10];

printf("请输入9个有序数:");/*留一个位置*/

for(i=0;i9;i++)

scanf("%d",a);/*a[]赋值*/

for(k=0;k9;k++)

printf("a[%d]=%d\n",k,a[k]);

printf("请输入一个数:");

scanf("%d",x);

fun(a,x);

for(k=0;k10;k++)

printf("a[%d]=%d\n",k,a[k]);

}

/*只考虑了从小到大的情况*/

voidfun(inta[],intx)

{inti,j=0,k;

for(i=0;i9;i++)

{if(xa)j++;/*判断插入位置*/

}

for(k=8;k=j;k--)

a[k+1]=a[k];/*后移*/

a[j]=x;

}

[9.32]

编写函数,把任意十进制正整数转换成二进制数。提示:把十进制数不断被2除的余数放在一个一维数组中,直到商数为零。在主函数中进行输出,要求不得按逆序输出。

#includestdio.h

intfun(int,int[]);

main()

{intx,n,k,a[35];

printf("十进制数:");

scanf("%d",x);

n=fun(x,a);

printf("二进制数:");

for(k=0;kn;k++)

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

}

intfun(intx,inta[])

{inti,j,k,t;

for(i=0,j=x;j!=0;j/=2)

a=j%2,i++;

for(k=0;ki/2;k++)

t=a[k],a[k]=a[i-k-1],a[i-k-1]=t;

returni;

}

[9.33]

编写函数,调用随机函数产生0到19之间的随机数,在数组中存入15个互不重复的整数。要求在主函数中进行输出结果。若已定义x为int类型,调用随机函数步骤如下:

#includestdlib.h

x=rand()%20;/*产生0到19的随机数*/

#includestdio.h

#includestdlib.h

voidfun(inta[])

{inti,j,k,x;

for(i=0;i15;)

{for(j=0,k=0,x=rand()%20;ji;j++)

{if(x!=a[j])k++;}

if(k==j)a=x,i++;

}

}

main()

{inti,a[15]={0};

fun(a);

for(i=0;i15;i++)

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

}

[9.34]

求任意方阵每行,每列,两对角线上元素之和。

#includestdio.h

#definen3

voidfun1(inta[][n])

{inti,j,s=0;

for(i=0;in;i++,s=0)

for(j=0;jn;j++)

{s+=a[j];

if(j==2)printf("第%d行的和:%d\n",i+1,s);

}

}

voidfun2(inta[][n])

{inti,j,s=0;

for(i=0;in;i++,s=0)

for(j=0;jn;j++)

{s+=a[j];

if(j==2)printf("第%d列的和:%d\n",i+1,s);

}

}

voidfun3(inta[][n])

{inti,j,s;

for(i=0,j=0,s=0;in;i++,j++)

{s+=a[j];

if(i==2)printf("正对角线的和:%d\n",s);

}

for(i=0,j=2,s=0;in;i++,j--)

{s+=a[j];

if(i==2)printf("副对角线的和:%d\n",s);

}

}

main()

{inti,j,a[n][n];

printf("a[3][3]:\n");

for(i=0;in;i++)

for(j=0;jn;j++)

scanf("%d",a[j]);

for(i=0;in;i++)

for(j=0;jn;j++)

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

if(j==n-1)printf("\n");

}

fun1(a);

fun2(a);

fun3(a);

}

[9.35]

求两个矩阵的和。

#includestdio.h

#definen3

voidfun(inta[][n],intb[][n],intc[][n])

{inti,j;

for(i=0;in;i++)

for(j=0;jn;j++)

c[j]=a[j]+b[j];

printf("a[3][3]+b[3][3]=\n");

for(i=0;in;i++)

for(j=0;jn;j++)

{printf("%-5d",c[j]);

if(j==n-1)printf("\n");

}

}

main()

{inta[n][n],b[n][n],c[n][n],i,j;

printf("a[3][3]:\n");

for(i=0;in;i++)

for(j=0;jn;j++)

scanf("%d",a[j]);

printf("b[3][3]:\n");

for(i=0;in;i++)

for(j=0;jn;j++)

scanf("%d",b[j]);

fun(a,b,c);

}

#includestdio.h

#definen9

main()

{inti,j,a[n][n];

printf("**AMULTIPLICATIONTABLE**\n");

for(i=1;i10;i++)

printf("(%d)",i);

printf("\n----------------------------------------\n");

for(i=0;i9;i++)

for(j=0;j9;j++)

a[j]=(i+1)*(j+1);

for(i=0;i9;i++)

{printf("(%d)",i+1);

for(j=0;j9;j++)

printf("%-4d",a[j]);

printf("\n");

}

}

[9.37]

调用随机函数为5×4的矩阵置以内的整数,输出该矩阵,求出每行元素之和,并把和值最大的那一行与第一行上的元素对调。若以定义x为int类型,请参考习题9.33调用随机函数。

#includestdio.h

#includestdlib.h

#definem5

#definen4

main()

{inta[m][n],s[m]={0},b,i,j,k;

for(i=0;im;i++)/*矩阵赋值*/

for(j=0;jn;j++)

a[j]=rand()%;

for(i=0;im;i++)/*矩阵输出*/

{for(j=0;jn;j++)

printf("%-2d",a[j]);

printf("\n");

}

for(i=0;im;i++)/*每行求和*/

for(j=0;jn;j++)

{s+=a[j];

if(j==3)printf("第%d行的和:%d\n",i+1,s);

}

for(i=1,k=0;im;i++)/*找最大行*/

if(ss[k])k=i;

for(i=0;in;i++)/*行替换*/

{b=a[0];

a[0]=a[k];

a[k]=b;

}

for(i=0;im;i++)/*输出矩阵*/

{for(j=0;jn;j++)

printf("%-2d",a[j]);

printf("\n");

}

}

[9.38]

调用随机函数为5×5的矩阵置以内的整数,输出该矩阵,然后逆置该矩阵,即将第一列的元素放到第一行上,将第二列的元素放到第二行上,其他以此类推。

#includestdio.h

#includestdlib.h

#definem5

#definen5

main()

{inta[m][n],i,j,k;

for(i=0;im;i++)

for(j=0;jn;j++)

a[j]=rand()%;

for(i=0;im;i++)

{for(j=0;jn;j++)

printf("%-2d",a[j]);

printf("\n");

}

for(i=0;im;i++)

for(j=i;jn;j++)

{k=a[j];

a[j]=a[j];

a[j]=k;

}

printf("逆置\n");

for(i=0;im;i++)

{for(j=0;jn;j++)

printf("%-2d",a[j]);

printf("\n");

}

}

分享 转发
TOP
发新话题 回复该主题