当前位置:文档之家› 第08章的习题参考答案

第08章的习题参考答案

8-1:编写函数实现将任意数列顺序进行逆序处理,并用它处理以下序
列:1,2,3,4,9,10,22,88,222,90,55和33的逆序.
#include
#include

void main()
{
int dataNum=0;
int i;
int *pArray;

printf("How many data do you want to process?\n");
scanf("%d",&dataNum);
pArray=(int*)malloc(dataNum*sizeof(int));
printf("Now please input the data::\n");
for(i=0;i{
printf("the Array[%d] is ::",i);
scanf("%d",&pArray[i]);
}
printf("The data before process is::\n");
for(i=0;i{
printf("%d ",pArray[i]);
}
printf("\n");
printf("The data processed is::\n");
for(i=0;i{
printf("%d ",pArray[dataNum-i-1]);
}
}

8-2:编写函数实现Fibonacci数列的计算,并用它来计算第32个Fibonacci数列元素.
#include
#include

int Fibonacci(int Index);

void main()
{
int index;
printf("Which element do you want to caculate?\n");
scanf("%d",&index);
Fibonacci(index);
}

int Fibonacci(int Index)
{
int tempA=1,tempB=1;
int i;
int *pArray=(int *)malloc(Index*sizeof(int));
pArray[0]=tempA;
pArray[1]=tempB;
for(i=2;i{
pArray[i]=pArray[i-1]+pArray[i-2];
}
printf("The %d element is: %d\n",Index,pArray[Index-1]);
printf("The all element is ::\n");
for(i=0;i{
printf("%d ",pArray[i]);
}
return 0;
}

8-3:有n个学生,每人考m门科目,试编写一个程序完成以下工作:
(1).找出各门功课的最高成绩,最低成绩和平均成绩;
(2).求出全部同学全部课程的总平均成绩;
(3).统计各门课程不及格人数,所有课程不及格人数和不及格人数的百分比.
#include
#include

typedef struct
{
int chinese;
int math;
int english;
}student;

int maxElement(int *pArray,int dataNum);
int minElement(int *pArray,int dataNum);
float average(int *pArray,int dataNum);
int noPass(int *pArray,int dataNum);

void main()
{
int dataNum=0;
int i;

printf("How many student are there?");
scanf("%d",&dataNum);
student *pArray=(student*)malloc(dataNum*sizeof(student));

for(i=0;i{
printf("The %d student's chinese score is:\n",i+1);
scanf("%d",&pArray[i].chinese);
printf("The %d student's math score is:\n",i+1);
scanf("%d",&pArray[i].math);
printf("The %d student's english score is:\n",i+1);
scanf("%d",&pArray[i].english);
}

int *ptempChinese=(int *)malloc(dataNum*sizeof(int));
int *ptempMath=(int *)malloc(dataNum*sizeof(int));
int *ptempEnglish=(int *)malloc(dataNum*sizeof(int));

for(i=0;i{
ptempChinese[i]=pArray[i].chinese;
ptempMath[i]=pArray[i].math;
ptempEnglish[i]=pArray[i].english;
}

printf("the highest score of chinese is %d\n",maxElement(ptempChinese,dataNum));
printf("the lowest score of chinese is %d\n",minElement(ptempChinese,dataNum));
printf("the average score of chinese is %f\n"

,average(ptempChinese,dataNum));
printf("the highest score of math is %d\n",maxElement(ptempMath,dataNum));
printf("the lowest score of math is %d\n",minElement(ptempMath,dataNum));
printf("the average score of math is %f\n",average(ptempMath,dataNum));
printf("the highest score of english is %d\n",maxElement(ptempEnglish,dataNum));
printf("the lowest score of english is %d\n",maxElement(ptempEnglish,dataNum));
printf("the average score of english is %f\n",average(ptempEnglish,dataNum));

printf("the nopass chinese number is %d\n",noPass(ptempChinese,dataNum));
printf("the nopass math number is %d\n",noPass(ptempMath,dataNum));
printf("the nopass english number is %d\n",noPass(ptempEnglish,dataNum));
}

int maxElement(int *pArray,int dataNum)
{
int max=pArray[0];
int i;

for(i=0;i{
if(pArray[i]>max)
{
max=pArray[i];
}
}
return max;
}

int minElement(int *pArray,int dataNum)
{
int min=pArray[0];
int i;

for(i=0;i{
if(pArray[i]{
min=pArray[i];
}
}
return min;
}

float average(int *pArray,int dataNum)
{
float add=0.0;
float avg=0.0;
int i;

for(i=0;i{
add+=pArray[i];
}
avg=add/dataNum;
return avg;
}

int noPass(int *pArray,int dataNum)
{
int num=0;
int i;

for(i=0;i{
if(pArray[i]<60)
{
num++;
}
}
return num;
}

8-4:假设输入n行文字,每行的字符数不超过80个并由键盘输入.编写一个程序来统计其中字
母,数字和空格等符号的数目.假设字母,数字和空格之外的字符算一类.
#include
#include

void main()
{
char String[80];
char cstemp;
int index=0,stringNum=0,dataNum=0,spaceNum=0;
int i;

printf("please input the string and end with 'z'::\n");
while(1)
{
cstemp=getchar();
if(cstemp=='z' || cstemp=='Z')
break;
String[index]=cstemp;
index++;
}
printf("the string is :\n");
for(i=0;i{
printf("%c",String[i]);
}
printf("\n");
for(i=0;i{
if(String[i]>'a' && String[i]<'z')
stringNum++;
else if(String[i]>'A' && String[i]<'Z')
stringNum++;
else if(String[i]>'0' && String[i]<'9')
dataNum++;
else if(String[i]='\0')
spaceNum++;
}
printf("the stringNum is %d,the dataNum is %d,the spaceNum
is %d",stringNum,dataNum,spaceNum);
}

8-5:略;
8-6:略;

8-9:编写矩阵乘法的函数;
#include
#define N 2
#define M 3


int main()
{
int i,j,k;
int arr_1[N][M],arr_2[M][N],arr_3[N][N];


printf("please input value of arr_1[N][M]:\n");
for(i=0;i{
for(j=0;j{
printf("arr_1[%d][%d]=",i,j);
scanf("%d",&arr_1[i][j]);
}
}



/*xian shi */

for(i=0;i{
for(j=0;j{
printf("%d ",arr_1[i][j]);

}
printf("\n");
}


printf("\n\n\n");
printf("please in

put value of arr_2[M][N]:\n");
for(i=0;i{
for(j=0;j{
printf("arr_2[%d][%d]=",i,j);
scanf("%d",&arr_2[i][j]);
}
}


for(i=0;i{
for(j=0;j{
printf("%d ",arr_2[i][j]);

}
printf("\n");
}


for(i=0;i{
for(j=0;j{ arr_3[i][j]=0;
for(k=0;k{
arr_3[i][j]+=arr_1[i][k]*arr_2[k][j];
}
}
}



printf("\n\n\n");
printf("the matrix arr_3[N][N]:\n");
for(i=0;i{
for(j=0;j{
printf("%d ",arr_3[i][j]);

}
printf("\n");
}
getch();
return 0;
}

8-10:编写程序计算矩阵的两个对角线上元素之和;
#include
#define N 10

int main()
{
int arr[N][N];
int i,j,n,m;
int sum1=0,sum2=0,sum=0;
printf("please in put arr[n][n],(n>0):\n");
printf("n=");
scanf("%d",&n);
if(n<=0) exit(1);



printf("please input the value of matrix:\n");
for(i=0;i{
for(j=0;j{
printf("arr[%d][%d]=",i,j);
scanf("%d",&arr[i][j]);
}
}


printf("\n\nthe matrix is:\n");
for(i=0;i{
for(j=0;j{
printf("%d ",arr[i][j]);

}
printf("\n");
}


for (i=0;i<=n-1;i++)
{
sum1=sum1+arr[i][i];
sum2=sum2+arr[i][(n-1)-i];

}
sum=sum1+sum2;

printf("\n\nsum=%d\n\n",sum);

getch();
}

8-11:用数组的办法完成杨辉三角的计算和打印;
#include
#define N 15
int main(void)
{
int arr[N][N],i,j;
int n;
clrscr();
printf("Enter n with in(0-15):\nn=");
scanf("%d",&n);

printf("\nThe Triangle like this:\n\n ");
for(i=0;i{
for(j=n;j>=i;j--)
{
printf(" ");
}

for(j=0;j<=i;j++)
{
if(i==j||j==0)
arr[i][j]=1;
else
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
printf("%4d",arr[i][j]);

if(i==j)
printf("\n");
}
}
getch();
return 0;
}

8-12:编写程序完成三维数组的输入,输出和加法运算;

#include
#define MAX 15

void main()
{
int a[MAX][MAX][MAX];
int i,j,k,n;
clrscr();
printf("Enter n=");
scanf("%d",&n);

printf("now please input the value of Number group:\n");
for(i=0;i{
for(j=0;j{
for(k=0;k{
printf("a[%d][%d][%d]=",i,j,k);
scanf("%d",&a[i][j][k]);
}
}
}
printf("-----------------------------\n");
for(i=0;i{
for(j=0;j{
for(k=0;k{ printf("%d ",a[i][j][k]);
}
printf("\n");
}
printf("\n");
}
getch();
}

8-13:给定字符串,将其所有的大写变成小写,所有的小写变成大写;
#include

void main()
{
char St

ring[80];
char cstemp;
int index=0;
int i;

printf("please input the string and end with 'z'::\n");
while(1)
{
cstemp=getchar();
if(cstemp=='z' || cstemp=='Z')
break;
String[index]=cstemp;
index++;
}
printf("the string is :\n");
for(i=0;i{
printf("%c",String[i]);
}
printf("\n");
for(i=0;i{
if(String[i]>='a' && String[i]<='z')
{
printf("%c",String[i]-32);
}
else if(String[i]>='A' && String[i]<='Z')
{
printf("%c",String[i]+32);
}
}
}

8-14:对给定的字符串进行字符排序(降序)并统计各种字符出现的频率,然后按照统计频率的
高低输出各字符的信息;
#include
#include

void main()
{
char String[80];
char cstemp,strTemp;
int index=0;
int strNum[26];
int i,j;

printf("please input the string and end with '#'::\n");
while(1)
{
cstemp=getchar();
if(cstemp=='#')
break;
String[index]=cstemp;
index++;
}
printf("the string is :\n");
for(i=0;i{
printf("%c",String[i]);
}
printf("\n");

for(i=index;i>0;i--)
{
for(j=0;j{
if(String[j]{
strTemp=String[j];
String[j]=String[j+1];
String[j+1]=strTemp;
}
}
}
printf("the string in desc order is :\n");
for(i=0;i{
printf("%c",String[i]);
}

printf("\n");
for(i=0;i<26;i++)
{
strNum[i]=0;
}

for(i=0;i{
strTemp=String[i];
switch(strTemp)
{
case 'a':
strNum[0]++;
break;
case 'A':
strNum[0]++;
break;
case 'b':
strNum[1]++;
break;
case 'B':
strNum[1]++;
break;
case 'c':
strNum[2]++;
break;
case 'C':
strNum[2]++;
break;
case 'd':
strNum[3]++;
break;
case 'D':
strNum[3]++;
break;
case 'e':
strNum[4]++;
break;
case 'E':
strNum[4]++;
break;
case 'f':
strNum[5]++;
break;
case 'F':
strNum[5]++;
break;
case 'g':
strNum[6]++;
break;
case 'G':
strNum[6]++;
break;
case 'h':
strNum[7]++;
break;
case 'H':
strNum[7]++;
break;
case 'i':
strNum[8]++;
break;
case 'I':
strNum[8]++;
break;
case 'j':
strNum[9]++;
break;
case 'J':
strNum[9]++;
break;
case 'k':
strNum[10]++;
break;
case 'K':
strNum[10]++;
break;
case 'l':
strNum[11]++;
break;
case 'L':
strNum[11]++;
break;
case 'm':
strNum[12]++;
break;
case 'M':
strNum[12]++;
break;
case 'n':
strNum[13]++;
break;
case 'N':
strNum[13]++;
break;
case 'o':
strNum[14]++;
break;
case 'O':
strNum[14]++;
break;
case 'p':
strNum[15]++;
break;
case 'P':
strNum[15]++;
break;
case 'q':
strNum[16]++;
break;
case 'Q':
strNum[16]++;
break;
case 'r':
strNum[17]++;
break;
case 'R':
st

rNum[17]++;
break;
case 's':
strNum[18]++;
break;
case 'S':
strNum[18]++;
break;
case 't':
strNum[19]++;
break;
case 'T':
strNum[19]++;
break;
case 'u':
strNum[20]++;
break;
case 'U':
strNum[20]++;
break;
case 'v':
strNum[21]++;
break;
case 'V':
strNum[21]++;
break;
case 'w':
strNum[22]++;
break;
case 'W':
strNum[22]++;
break;
case 'x':
strNum[23]++;
break;
case 'X':
strNum[23]++;
break;
case 'y':
strNum[24]++;
break;
case 'Y':
strNum[24]++;
break;
case 'z':
strNum[25]++;
break;
case 'Z':
strNum[25]++;
break;
}
}
for(i=0;i<26;i++)
{
printf("%c,%d\n",i+97,strNum[i]);
}

}
8-15:编写一个程序来读取一系列字符串,要求选择附录V中合适的字符串函数;
(1).输出那些以字母”b”开头的字符串;
(2).输出那些以”ed”结尾的字符串;
#include
#include

void main()
{
char String[20][80];
char cstemp;
int index[20],nFlags=0;
int i,j;

for(i=0;i<20;i++)
{
index[i]=0;
}

while(1)
{
printf("please input the strings and end with '#'::\n");
while(1)
{
cstemp=getchar();
if(cstemp=='#')
break;
String[nFlags][index[nFlags]]=cstemp;
index[nFlags]++;
}
printf("press 'y' to continue inputting.");
getchar();
if(getchar()!='y')
{
break;
}
else
{
nFlags++;
}
}
for(i=0;i<=nFlags;i++)
{
if(String[i][0]=='b')
{
for(j=0;j{
printf("%c",String[i][j]);
}
}
else if(String[i][index[i]]=='d' && String[i][index[i-1]]=='e')
{
for(j=0;j{
printf("%c",String[i][j]);
}
}
printf("\n");
}
}
8-16:略;
8-17:用数组汇总调查结果.对学校食堂情况调查40名学生,要求按10个等级进行质量评估,
如1表示非常差,10表示非常好.要求用数组的形式存放调查原始数据,在此基础上对调查结
果进行分类(等级)汇总统计和整体质量评估(调查结果的平均值).
#include
#include

void main()
{
int array[40][10],score[10];
int temp=0;
int i,j;

for(i=0;i<40;i++)
{
for(j=0;j<10;j++)
{
printf("the array[%d][%d]=",i,j);
scanf("%d",&array[i][j]);
}
}

for(i=0;i<10;i++)
{
score[i]=0;
}

for(i=0;i<40;i++)
{
for(j=0;j<10;j++)
{
temp=array[i][j];
switch(temp)
{
case 1:
score[0]++;
break;
case 2:
score[1]++;
break;
case 3:
score[2]++;
break;
case 4:
score[3]++;
break;
case 5:
score[4]++;
break;
case 6:
score[5]++;
break;
case 7:
score[6]++;
break;
case 8:
score[7]++;
break;
case 9:
score[8]++;
break;
case 10:
score[9]++;
break;
}
}
}
for(i=0;i<10;i++)
{
printf("the score

%d'number is %d\n",i+1,score[i]);
}
}

8-18:略;
8-19:略;
8-20:略;
8-21:略;
8-22:略;
8-23:略

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