C語言程序設(shè)計第二版課后習題答案(3)
C語言程序設(shè)計第六章 數(shù)組
一、選擇題
D A D A A C C A D
二、程序閱讀題
13 13 13 13 13 13
三、上機實訓題
1、分別用冒泡法和選擇排序法對十個隨機整數(shù)進行排序。
參考教材
2、編寫一個程序計算字符串中值為x(x由鍵盤輸入)的字符個數(shù)。
#include "stdio.h"
#include "string.h"
main()
{ char a[20],x;
int n=0,i=0;
printf("\nPlease input string,end of enter key: ");
gets(a);
printf("\nPlease input x:");
x=getchar();
while(a[i]!='\0')
{if (a[i]==x) n++;
i++; }
printf("\n%d",n); }
if(x[i]>ave) printf("%f ",x[i]); }
3、編寫一個程序判定用戶輸入的正數(shù)是否為“回文數(shù)”,所謂回文數(shù)是指數(shù)正讀反讀都相同。
#include
main()
{ int buffer[10],i,k,b;
long number,n;
printf("input a positive number:");
scanf("%ld",&number);
k=0;
n=number;
do
{ buffer[k]=n%10;
k=k+1;
n=n/10; } while(n!=0);
b=1;
for(i=0;i<=(k-1)/2;i++)
if(buffer[i]!=buffer[k-1-i]) b=0;
if(b) printf("%ld is huiwenshu\n",number);
else printf("%ld is not huiwenshu\n",number); }
4、求二維數(shù)組的周邊元素之和
#include
main()
{
int a[3][3]={{3,-2,1,2},{0,1,3,-2},{3,1,0,4}};
int i,j,sum=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(i=0;i<3;i++)
if (i==0||j==0||j==2||i==2) sum=sum+a[i][i];
printf("%d",sum);
}
5、編寫程序找出一個二維數(shù)組的鞍點。即該位置上的元素在該行最大,但是在該列最小。
main()
{ int i,j,k,max,maxi,maxj,flag1,flag2;
int a[2][3]={{1,2,3},{4,5,6}};
flag2=0;
for (i=0;i<2;i++)
{ max=a[i][0];
for (j=0;j<3;j++)
if (a[i][j]>max) { max=a[i][j]; maxj=j;}
for (k=0,flag1=1;k<2 && flag1;k++)
if (a[k][maxj]
if (flag1) {printf("\n %d is answer,locate:line %d colum %d\n",max,i,maxj);
flag2=1; } }
if (!flag2) printf("\n no answer!"); }
項目實訓:
1、評定奧運會某參賽選手的成績。設(shè)某參賽選手的某項目有8位評委,要求去掉一個最高分和一個最低分,給出其最后得分。
#include
#define N 10 /*定義字符常量*/
main()
{
int x[N],i,max,min,score=0;
printf("Please input %d integers:\n",N);
/*輸入N個數(shù),存入數(shù)組中*/
for(i=0;i
{ scanf("%d",&x[i]); score+=x[i];} /*賦初值*/
max=min=x[0]; /*將第一個數(shù)默認為最大或最小值*/
for(i=1;i
{
if(max
if(min>x[i]) min=x[i]; /*求最小值*/
}
printf("The last score is : %d\n",(score-max-min)/(N-2);
}
2、
打印出以下楊輝三角形(要求打印出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
… … … …
#define N 11
main()
{ int i,j,a[N][N];
for (i=1;i
{ a[i][i]=1;a[i][1]=1;}
for (i=3;i
for (j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for (i=1;i
{ for (j=1;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n"); }
printf("\n"); }
#define N 11
main()
{
int i,j,a[N][N];
for(i=1;i
{
a[i][i]=1;
a[i][1]=1;
}
for(i=3;i
for(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i
{
for(j=1;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
printf("\n");
}
本程序的運行結(jié)果為:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
3、一個程序,將字符數(shù)組s2中的全部字符拷貝到字符數(shù)組s1中。不用strcpy函數(shù)??截悤r,‘\0’也要拷貝過去。‘\0’后面的字符不拷貝。
解:
#include "stdio.h"
main()
{
char from[80],to[80];
int i;
printf("Input string:");
scanf("%s",from);
for(i=0;i<=strlen(from);i++)
to[i]=from[i];
printf("the result: %s\n",to);
}
本程序的運行結(jié)果為:
the result:Input string:student
C語言程序設(shè)計第七章 函數(shù)
一、選擇題
B D C B B D A A D
三、編程題
1、寫一個判定偶數(shù)的函數(shù),在主函數(shù)中輸入一個整數(shù),輸出是否是偶數(shù)的信息。
int even(x)
int x ;
{ if (x%2==0) return(1);
else return(0); }
main()
{ int x;
scanf("%d",&x);
if (even(x)) printf("x is even.");
else printf("x is not even.");}
2、統(tǒng)計 400~499 這些數(shù)中 4 這個數(shù)字出現(xiàn)的次數(shù),要求判斷一個數(shù)有幾位4這個數(shù)字用函數(shù)實現(xiàn)。
main()
{ int i,k=0;
for(i=400;i<=499;i++)
k=k+num(i);
printf ("number=%d\n",k); }
num(x)
int x;
{ int y,k=0;
while(x!=0)
{ y=x%10;
if(y= = 4) k++;
x=x/10; }
return(k);}
3、找出1000之內(nèi)的所有“完數(shù)”,要求判斷一個數(shù)是否為完數(shù)用函數(shù)實現(xiàn)。
main()
{ int i;
for (i=1;i<1000;i++)
if (wan(i)) printf ("%5d",i);
printf ("\n"); }
wan(x)
int x;
{ int i,k;
k=0;
for (i=1;i<=x/2;i++)
if (x%i= =0) k=k+i;
if (k= =x) return (1);
else return (0); }
項目實訓:
1、已有變量定義和函數(shù)調(diào)用語句:int x=57;isprime (x);函數(shù)isprime ( )用來判斷一個整型數(shù)a是否為素數(shù),若是素數(shù),函數(shù)返回1,否則返回0。請編寫isprime 函數(shù)。
isprime (int a) { }
解:
main()
{ int x=57;
int isprime(int);
if (isprime(x)) printf(“%d is prime.”,x);
else printf(“%d is not prime.”,x);
}
isprime (int a)
{int i;
for(i=2;i
if(a%i= =0) return 0;
return 1;}
2、
輸入10個學生的成績,分別用函數(shù)實現(xiàn):
(1)求平均成績; (2)按分數(shù)高低進行排序并輸出。
解:main( )
{float average(float b[]);
void sort(float b[]);
float a[10],j,aver;
printf("input 10:");
for(j=0;j<10;j++)
scanf("%f",&a[j]);
aver=average(a);
printf("aver=%.2f\n",aver);
sort(a);
for(j=0;j<10;j++)
printf("%10.2f",a[j]);
}
float average(float b[ ])
{int j; float sum=0,aver;
for(j=0;j<10;j++)
sum=sum+b[j];
aver=sum/10.0;
return(aver);
}
void sort(float b[ ])
{int i,j,max,k;
for(i=0;i<10;i++)
{max=b[i]; k=i;
for(j=i+1;j<10;j++)
if(max
{max=b[j]; k=j;}
b[k]=b[i];
b[i]=max;
}
}
本程序運行結(jié)果為:
input 10:45 12 86 85 79 84 85 96 45 89
aver=70.60
96.00 89.00 86.00 85.00 85.00 84.00 79.00 45.00 45.00 12.00
