c语言程序设计第四版答案 第八章指针 课后3 。14 。15答案

Python09

c语言程序设计第四版答案 第八章指针 课后3 。14 。15答案,第1张

//课后3

#include <stdio.h>

int main()

{ void input(int *)

void max_min_value(int *)

void output(int *)

int number[10]

input(number)

max_min_value(number)

output(number)

return 0

}

void input(int *number)

{int i

printf("input 10 numbers:")

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

scanf("%d",&number[i])

}

void max_min_value(int *number)

{ int *max,*min,*p,temp

max=min=number

for (p=number+1p<number+10p++)

if (*p>*max) max=p

else if (*p<*min) min=p

temp=number[0]number[0]=*min*min=temp

if(max==number) max=min

temp=number[9]number[9]=*max*max=temp

}

void output(int *number)

{int *p

printf("Now,they are:")

for (p=numberp<number+10p++)

printf("%d ",*p)

printf("\n")

}

//课后14

#include <stdio.h>

int main()

{void sort (char *p,int m)

int i,n

char *p,num[20]

printf("input n:")

scanf("%d",&n)

printf("please input these numbers:\n")

for (i=0i<ni++)

scanf("%d",&num[i])

p=&num[0]

sort(p,n)

printf("Now,the sequence is:\n")

for (i=0i<ni++)

printf("%d ",num[i])

printf("\n")

return 0

}

void sort (char *p,int m) // 将n个数逆序排列函数

{int i

char temp, *p1,*p2

for (i=0i<m/2i++)

{p1=p+i

p2=p+(m-1-i)

temp=*p1

*p1=*p2

*p2=temp

}

}

//课后15

#include <stdio.h>

int main()

{void avsco(float *,float *)

void avcour1(char (*)[10],float *)

void fali2(char course[5][10],int num[],float *pscore,float aver[4])

void good(char course[5][10],int num[4],float *pscore,float aver[4])

int i,j,*pnum,num[4]

float score[4][5],aver[4],*pscore,*paver

char course[5][10],(*pcourse)[10]

printf("input course:\n")

pcourse=course

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

scanf("%s",course[i])

printf("input NO. and scores:\n")

printf("NO.")

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

printf(",%s",course[i])

printf("\n")

pscore=&score[0][0]

pnum=&num[0]

for (i=0i<4i++)

{scanf("%d",pnum+i)

for (j=0j<5j++)

scanf("%f",pscore+5*i+j)

}

paver=&aver[0]

printf("\n\n")

avsco(pscore,paver) // 求出每个学生平均成绩

avcour1(pcourse,pscore) // 求出第一门课的平均成绩

printf("\n\n")

fali2(pcourse,pnum,pscore,paver) // 找出2门课不及格的学生

printf("\n\n")

good(pcourse,pnum,pscore,paver) // 找出成绩好的学生

return 0

}

void avsco(float *pscore,float *paver) // 求每个学生的平均成绩的函数

{int i,j

float sum,average

for (i=0i<4i++)

{sum=0.0

for (j=0j<5j++)

sum=sum+(*(pscore+5*i+j)) //累计每个学生的各科成绩

average=sum/5 //计算平均成绩

*(paver+i)=average

}

}

void avcour1(char (*pcourse)[10],float *pscore) // 求第一课程的平均成绩的函数

{int i

float sum,average1

sum=0.0

for (i=0i<4i++)

sum=sum+(*(pscore+5*i)) //累计每个学生的得分

average1=sum/4 //计算平均成绩

printf("course 1:%s average score:%7.2f\n",*pcourse,average1)

}

void fali2(char course[5][10],int num[],float *pscore,float aver[4])

// 找两门以上课程不及格的学生的函数

{int i,j,k,labe1

printf("==========Student who is fail in two courses======= \n")

printf("NO. ")

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

printf("%11s",course[i])

printf("average\n")

for (i=0i<4i++)

{labe1=0

for (j=0j<5j++)

if (*(pscore+5*i+j)<60.0) labe1++

if (labe1>=2)

{printf("%d",num[i])

for (k=0k<5k++)

printf("%11.2f",*(pscore+5*i+k))

printf("%11.2f\n",aver[i])

}

}

}

void good(char course[5][10],int num[4],float *pscore,float aver[4])

// 找成绩优秀学生(各门85以上或平均90分以上)的函数

{int i,j,k,n

printf(" ======Students whose score is good======\n")

printf("NO. ")

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

printf("%11s",course[i])

printf("average\n")

for (i=0i<4i++)

{n=0

for (j=0j<5j++)

if (*(pscore+5*i+j)>85.0) n++

if ((n==5)||(aver[i]>=90))

{printf("%d",num[i])

for (k=0k<5k++)

printf("%11.2f",*(pscore+5*i+k))

printf("%11.2f\n",aver[i])

}

}

}

1_5.DDBAB

二.

1.第一次循环X为1,y为1,z为4;输出6;第二次循环X为6,y为1,z为4;输出11;第三次循环X为11,y为1,z为4;输出16;

2. 要区别于break,break是符合条件直接跳出循环,不再执行循环操作。continue是跳到下一循环,执行下步循环操作 1 4 7

答案给你做参考的,采不采纳无所谓

#include <stdio.h>

#include<string.h>

#define N 10

void input(int num[],char name[N][8])

{

int i

for(i=0i<Ni++)

{

printf("\nInput NO.:")

scanf("%d",&num[i])

printf("Input name:")

getchar()

gets(name[i])

}

}

void sort(int num[],char name[N][8])

{

int i,j,min,temp1

char temp2[8]

for(i=0i<N-1i++)

{

min=i

for(j=i+1j<=Nj++)

if(num[min]>num[i])

min=j

temp1=num[i]

strcpy(temp2,name[i])

num[i]=num[min]

strcpy(name[i],name[min])

num[min]=temp1

strcpy(name[min],temp2)

}

printf("\nresult:\n")

for(i=0i<Ni++)

printf("\n%5d%10s",num[i],name[i])

}

void search(int n,int num[],char name[N][8])

{

int top,bott,mid,loca

int sign=0

loca=0

top=0

bott=N-1

if((n<num[0])||(n>num[N-1]))

loca=-1

while((sign==1)&&(top<=bott))

{

mid=(bott+top)/2

if(n==num[mid])

{

loca=mid

printf("NO. %d, his name is %s。\n",n,name[loca])

sign=-1

}

else if(n<num[mid])

bott=mid-1

else

top=mid+1

}

if(sign==1&&loca==-1)

printf("Can not fine %d.\n",n)

}

void main()

{

int num[N],number,flag=1,c,n

char name[N][8]

input(num,name)

sort(num,name)

while(flag==1)

{

printf("\nInput number to look for:")

scanf("%d",&number)

search(number,num,name)

printf("Continue or not(Y/N)?")

getchar()

c=getchar()

if(c=='N'||c=='n')

flag=0

}

}