C语言程序设计(第二版)习题参考答案1 下载本文

内容发布更新时间 : 2024/5/2 22:22:40星期一 下面是文章的全部内容请认真阅读。

{

int a[6][6],t,i,j;

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

;

for(i=0; i<6;i++){ t= ; for(j=0;j<6;j++)

a[i][j]= ; }

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

printf(\

; } }

解:① scanf(“%d”,&a[i][j]) ② a[i][i] ③ a[i][j]/t ④printf(“\\n”)或putchar(‘\\n’)

3.以下程序的功能是将字符串a中下标值为偶数的元素由小到大排序,其他元素不变。

#include #include void main() {

char a[81],t; int i,j,n;

gets(a);

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

for(j=i+2;j

t=a[i];

; a[j]=t; }

puts(a); }

解:① a[n]!= ‘\\0’ ② ia[j] ⑤ a[i]=a[j]

4.输入一个整数,输出它的二进制序列。

#include void main() {

int a[32],x,i,m;

int change(int x,int a[]);

scanf(\ m=change(x,a); for(i=0;i

printf(\

45

}

int change( ) {

int n=0,t,k;

do { a[n]=x%2; ; n++; }while(x!=0);

for(k=0;k

; a[n-k-1]=t;

}

return n; }

解:① int x,int a[] ② x=x/2 ③ a[k]=a[n-k-1] 5.程序能够按以下形式输出一个杨辉三角形,请对函数yahuei在下划线处将程序补充完整。

1 1 1 1 2 1 1 3 3 1 1 4 6 4 1

1 5 10 10 5 1 #include #define N 6

yahuei(int a[ ][N]) {

int i, j;

a[0][0]=1;

for(i=0; i

a[i][i]=1; }

for( ; i

void main() {

int x[N][N],i,j;

yahuei( ); for( i=0 ; i

printf(\ printf(\ } }

解:① i=2 ② j

6. 统计在一个字符串中各元音字母(a、e、i、o、u)出现的次数。

#include

46

void main() {

char s[80];

int i, ;

printf(\

gets(s); for(i=0; ;i++)

if( )

a[0]++; else if(s[i]=='e'||s[i]=='E')

a[1]++; else if(s[i]=='i'||s[i]=='I') a[2]++; else if(s[i]=='o'||s[i]=='O')

a[3]++; else if(s[i]=='u'||s[i]=='U')

a[4]++;

printf(\ for(i=0;i<5;i++)

}

解:① a[5] ②s[i]!= '\\0' ③s[i]== 'a'|| s[i]== 'A' ④ printf(“]”,i)

五、编程题

1.在数组x的10个数中求平均值v,找出与v相差最小的数组元素。 解:#include

#include void main()

{ double x[10],v,d; int i;

for(i=0,v=0;i<10;i++) { scanf(\ v+=x[i]; } v=v/10; d=x[0];

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

if(fabs(d-v)>fabs(x[i]-v)) d=x[i];

printf(\平均值:%-8.2f,与平均值最近元素:%-8.2f\\n\}

2.输入n(n≤20)个数放在一维数组中,找出其中最小的数,将它与数组最前面的元素交换后输出这些数。

解:#include

void main()

47

{ int i,k,temp,n,a[20]; printf(\ scanf(\ for(i=0;i

scanf(\ for(k=0,i=1;i

temp=a[0];a[0]=a[k];a[k]=temp;

for(i=0;i

3.输入一个字符串,统计其中数字字符出现的次数。

解:#include void main()

{ char s[80]; int i,n=0; gets(s);

for(i=0;s[i]!='\\0';i++)

if(s[i]>='0'&&s[i]<='9') n++;

printf(\中包含%d个字符\\n\ }

4.设有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。问在第20年时,共有多少头牛?分别输出从第1年至第20年每年的母牛数。

解:#include #define N 20 void main()

{ int x[N+1]={1},i; // x[0]存放初始母牛头数,即1头母牛 // x[i]存放第i年的母牛头数,其中1≤i≤20 for(i=1;i

{ if(i<4) x[i]=x[i-1]+1; // 头3年,每年只增加1头母牛 else x[i]=x[i-1]+x[i-3]; // 从第4年开始

// 每年的母牛数=去年的头数+今年新生的 // 说明:3年前母牛的数量即为今年新生的小牛数 printf(\第%d年,有%d头母牛\\n\ } }

5.有n(n≤20)个数,已按从小到大顺序排列好,要求输入一个数,把它插到数列中,使数列仍有序,并输出新的数列。 解:#include

void main()

{ int i,n,a[21],x;

48

printf(\≤20 :\ printf(\ for(i=0;i=0;i--)

if(a[i]>x) a[i+1]=a[i]; else break; a[i+1]=x;

for(i=0;i

6.求解约瑟夫问题。M个人围成一圈,分别为1到M号。从第一个人开始报数,数到n的人出圈。再由下一个人开始报数,数到n的人出圈,??直到最后一个人为止。输出依次出圈人的编号,M值预先选定,n值由键盘输入。例如,M=10,n=5,依次出圈的是:5,10,6,2,9,8,1,4,7,3 解:#include

#define M 10 void main() { int n;

int a[M],i,k,t; // t存放出圈的人数,k存放报数 printf(\输入n的值:\\n\ scanf(\

for(i=0;i

while(t

{ printf(“ %d “,a[i]); t++;

a[i]=0; // 该人出圈 } } i++;

if(i==M) i=0;

} }

7.输入n(n≤50)个职工的工资(单位为元,一元以下部分舍去),计算工资总额,计算给职工发放工资时,所需各种面额人民币的最小张数(分壹佰元、伍拾元、贰拾元、拾元、伍元、壹元6种)。

49