C语言课后习题解答_c语言课后习题解答

2020-02-27 其他范文 下载本文

C语言课后习题解答由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言课后习题解答”。

第七章 函数调用 7-1 写两个函数,分别求两个整数的最大公约数和最小公倍数,#include

void main(){ int hcf(int,int);int lcd(int,int,int);

int u,v,h,l;scanf(“%d,%d”,&u,&v);

h=hcf(u,v);printf(“H.C.F=%dn”,h);

l=lcd(u,v,h);printf(“L.C.D=%dn”,l);}

int hcf(int u,int v){ int t,r;if(v>u){

t=u;

u=v;

v=t;} while((r=u%v)!=0){

u=v;

v=r;} return(v);}

int lcd(int u,int v,int h){ return(u*v/h);} 7-2 求方程ax*x+bx+c=0的根,用3个函数分别求当b*b-4ac大于0,等于0、小于0时的根并输出结果。从主函数输入abc的值。

#include #include float x1,x2,disc,p,q;

void main(){ void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float);float a,b,c;printf(“input a,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);

printf(“equation: %5.2f*x*x+%5.2f*x+%5.2f=0n”,a,b,c);disc=b*b-4*a*c;printf(“root:n”);if(disc>0){

greater_than_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);} else if(disc==0){

equal_to_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);} else {

smaller_than_zero(a,b);

printf(“x1=%f+%fitx2=%f-%fin”,p,q,p,q);} }

void greater_than_zero(float a,float b){ x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);} void equal_to_zero(float a,float b){ x1=x2=(-b)/(2*a);}

void smaller_than_zero(float a,float b){ p=-b/(2*a);q=sqrt(-disc)/(2*a);}

7-3 写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。

#include

void main(){ int prime(int);int n;printf(“ninput an integer:”);scanf(“%d”,&n);

if(prime(n))

printf(“n %d is a prime.n”,n);else

printf(“n %d is not a prime.n”,n);}

int prime(int n){ int flag=1,i;for(i=2;i

if(n%i==0)

flag=0;return(flag);}

7-4 写一个函数,使给定的一个3x3的二维整形数组转置,即行列转换。#include #define N 3 int array[N][N];

void main(){

void convert(int array[][3]);int i,j;printf(“input array:n”);for(i=0;i

for(j=0;j

scanf(“%d”,&array[i][j]);

printf(“noriginal array :n”);for(i=0;i

for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);}

printf(“convert array:n”);for(i=0;i

for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);} }

void convert(int array[][3]){ int i,j,t;for(i=0;i

for(j=i+1;j

{

t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

} }

7-5 写一个函数,是输入的字符串按反序存放,在主函数中输入和输出字符窜。#include #include char str[100];void main(){ void inverse(char str[]);

printf(“input string:”);scanf(“%s”,str);

inverse(str);

printf(“inverse string:%sn”,str);}

void inverse(char str[]){ char t;int i,j;for(i=0,j=strlen(str);i

t=str[i];

str[i]=str[j-1];

str[j-1]=t;} }

7-6 写一个函数,将两个字符窜连接。

#include void main(){ void concatenate(char string1[],char string2[],char string[]);char s1[100],s2[100],s[100];printf(“input string1:”);scanf(“%s”,s1);printf(“input string2:”);scanf(“%s”,s2);

concatenate(s1,s2,s);printf(“nThe new string is %sn”,s);}

void concatenate(char string1[],char string2[],char string[]){ int i,j;for(i=0;string1[i]!='';i++)

string[i]=string1[i];for(j=0;string2[j]!='';j++)

string[i+j]=string2[j];string[i+j]='';}

7-7 写一个函数,将字符窜中元音字母复制到另一个字符窜,然后输出。#include

void main(){ void cpy(char [],char []);char str[80],c[80];printf(“input string:”);gets(str);

cpy(str,c);

printf(“The vowel letters are:%sn”,c);}

void cpy(char s[],char c[]){

int i,j;for(i=0,j=0;s[i]!='';i++)

if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||

s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U')

{

c[j]=s[i];

j++;

} c[j]='';}

7-13 输入10个学生5门课的成绩,分别用函数实现下列功能。1 计算每个学生平均分。2 计算每门课的平均分。找出所有50个分数中最高的分数所对应的学生和课程。4 计算平均方差。

#include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;

void main(){

int i,j;float h;float s_var(void);float highest();void input_stu(void);void aver_stu(void);void aver_cour(void);

input_stu();aver_stu();aver_cour();

printf(“n NO.cour1 avern”);for(i=0;i

printf(“n NO %2d ”,i+1);

for(j=0;j

printf(“%8.2f”,score[i][j]);

printf(“%8.2fn”,a_stu[i]);}

printf(“naverage:”);for(j=0;j

printf(“%8.2f”,a_cour[j]);printf(“n”);

h=highest();

cour2

cour3 cour4

cour5

printf(“highest:%7.2f

NO.%2d

course %2dn”,h,r,c);printf(“variance %8.2fn”,s_var());}

void input_stu(void){ int i,j;for(i=0;i

printf(“ninput score of student%2d:n”,i+1);

for(j=0;j

scanf(“%f”,&score[i][j]);} }

void aver_stu(void){ int i,j;float s;for(i=0;i

for(j=0,s=0;j

s+=score[i][j];

a_stu[i]=s/5.0;} }

void aver_cour(void){ int i,j;float s;for(j=0;j

s=0;

for(i=0;i

s+=score[i][j];

a_cour[j]=s/(float)N;} }

float highest(){ float high;int i,j;high=score[0][0];for(i=0;i

for(j=0;j

if(score[i][j]>high)

{

high=score[i][j];

r=i+1;

c=j+1;

} return(high);}

float s_var(void){ int i;float sumx,sumxn;sumx=0.0;sumxn=0.0;for(i=0;i

sumx+=a_stu[i]*a_stu[i];

sumxn+=a_stu[i];} return(sumx/N-(sumxn/N)*(sumxn/N));}

7-14 写几个函数:输入10个职工的姓名和职工号按职工号由小到大的顺序排序,姓名顺序也随之调整。要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

#include #include #define N 10

void main(){ void input(int [],char name[][8]);void sort(int [],char name[][8]);void search(int ,int [],char name[][8]);int num[N],number,flag=1,c;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 ot not(Y/N)?”);

getchar();

c=getchar();

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

flag=0;} }

void input(int num[],char name[N][8]){ int i;for(i=0;i

printf(“input NO.: ”);

scanf(“%d”,&num[i]);

printf(“input name: ”);

getchar();

gets(name[i]);} }

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

int i,j,min,templ;char temp2[8];for(i=0;i

min=i;

for(j=i;j

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

min=j;

templ=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

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

num[min]=templ;

strcpy(name[min],temp2);}

printf(“n result:n”);for(i=0;i

printf(“n %5d%10s”,num[i],name[i]);}

void search(int n,int num[],char name[N][8]){ int top,bott,mid,loca,sign;top=0;bott=N-1;loca=0;sign=1;

if((nnum[N-1]))

loca=-1;while((sign==1)&&(top

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

bott=mid-1;

else

top=mid+1;} if(sign==1 || loca==-1)

printf(“%d not been found.n”,n);}

第八章 指针

8-1 1 输入3个整数,按由小到大的顺序输出 #include void main(){ void swap(int*,int*);int a,b,c;

int *p1,*p2,*p3;p1=&a;p2=&b;p3=&c;scanf(“%d,%d,%d”,p1,p2,p3);if(*p1>*p2)swap(p1,p2);if(*p1>*p3)swap(p1,p3);if(*p2>*p3)swap(p2,p3);printf(“%d,%d,%dn”,a,b,c);} void swap(int*p1,int*p2){ int p;p=*p1;*p1=*p2;*p2=p;} 8-2

输入3个整数按有小到大的顺序输出。#include #include

void main(){ void swap(char *,char *);char str1[20],str2[20],str3[20];printf(“input three line:n”);gets(str1);gets(str2);gets(str3);

if(strcmp(str1,str2)>0)

swap(str1,str2);if(strcmp(str1,str3)>0)

swap(str1,str3);if(strcmp(str2,str3)>0)

swap(str2,str3);printf(“Now,the order is:n”);printf(“%sn%sn%sn”,str1,str2,str3);}

void swap(char *p1,char *p2){ char p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);}

8-3 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:1输入10个数;2 进行处理;3 输出10个数 #include

void main(){

void input(int *);

void max_min_value(int *);

void output(int *);int number[10];

input(number);

max_min_value(number);

output(number);

}

void input(int *number)

{ int i;printf(“input 10 numbers:”);for(i=0;i

scanf(“%d”,&number[i]);}

void max_min_value(int *number)

{

int *max,*min,*p,temp;max=min=number;for(p=number+1;p

if(*p>*max)

max=p;

else if(*p

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=number;p

printf(“%d ”,*p);printf(“n”);}

8-7 有一个字符窜,包含n个字符。写一个函数,将此字符窜中从m个字符开始的全部字符复制成为另一个字符窜。

#include #include

void main(){ void copystr(char *,char *,int);

int m;char str1[20],str2[20];

printf(“input string:”);gets(str1);

printf(“which character that begin to copy?”);scanf(“%d”,&m);

if(strlen(str1)

printf(“input error!”);else {

copystr(str1,str2,m);

printf(“result:%sn”,str2);} }

void copystr(char *p1,char *p2,int m)

{ int n;n=0;while(n

n++;

p1++;} while(*p1!=''){

*p2=*p1;

p1++;

p2++;} *p2='';}

8-9 写一个函数,使给定的一个3x3的二维整形数组转置,即行列转换。

#include

void main(){ void move(int *pointer);int a[3][3],*p,i;printf(“input matrix:n”);

for(i=0;i

scanf(“%d %d %d”,&a[i][0],&a[i][1],&a[i][2]);

p=&a[0][0];move(p);

printf(“Now,matrix:n”);for(i=0;i

printf(“%d %d %dn”,a[i][0],a[i][1],a[i][2]);}

void move(int *pointer){ int i,j,t;for(i=0;i

for(j=i;j

{

t=*(pointer+3*i+j);

*(pointer+3*i+j)=*(pointer+3*j+i);

*(pointer+3*j+i)=t;

} }

8-13 将n个数按输入顺序的逆序排列,用函数实现。

#include

void 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=0;i

scanf(“%d”,&num[i]);

p=&num[0];sort(p,n);

printf(“Now,the sequence is:n”);for(i=0;i

printf(“%d ”,num[i]);printf(“n”);}

void sort(char *p,int m){ int i;char temp, *p1,*p2;for(i=0;i

p1=p+i;

p2=p+(m-1-i);

temp=*p1;

*p1=*p2;

*p2=temp;} } 第九章 用户建立的数据类型

9-1 定义一个结构体变量(包扩年、月、日)。计算该日在本年中的第几天,注意闰年问题。

#include

struct {

int year;int month;int day;}date;

void main(){ int days;printf(“input year,month,day:”);scanf(“%d,%d,%d”,&date.year,&date.month,&date.day);

switch(date.month){

case 1: days=date.day;

break;case 2: days=date.day+31;break;case 3: days=date.day+59;break;case 4: days=date.day+90;break;case 5: days=date.day+120;break;case 6: days=date.day+151;break;case 7: days=date.day+181;break;case 8: days=date.day+212;break;case 9: days=date.day+243;break;case 10: days=date.day+273;break;case 11: days=date.day+304;break;case 12: days=date.day+334;break;}

if((date.year %4== 0 && date.year % 100!= 0 ||date.year % 400 == 0)&& date.month >=3)

days+=1;

printf(“%d/%d is the in %d.n”,date.month,date.day,days,date.year);}

%dth day 9-2 写一个函数days,实现第一题的计算,由主函数将年、月、日传递给days函数,计算后将日子数传回主函数输出。

clude

struct {

int year;int month;int day;}date;

void main(){ int i,days;int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf(“input year,month,day:”);scanf(“%d,%d,%d”,&date.year,&date.month,&date.day);

days=0;for(i=1;i

days=days+day_tab[i];days=days+date.day;if((date.year%4==0 && date.year%100!=0 || date.year%400==0)&& date.month>=3)

days=days+1;

printf(“%d/%d is the in %d.n”,date.month,date.day,days,date.year);}

%dth day 9-3 编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num.name,score[3],用主函数输入这些记录,用print函数输出这些记录。

#include #define N 5

struct student {

char num[6];char name[8];int score[4];}stu[N];

void main(){ void print(struct student stu[6]);int i,j;for(i=0;i

printf(“ninput score of student %d:n”,i+1);

printf(“NO.: ”);

scanf(“%s”,stu[i].num);

printf(“name: ”);

scanf(“%s”,stu[i].name);

for(j=0;j

{

printf(“score %d:”,j+1);

scanf(“%d”,&stu[i].score[j]);

}

printf(“n”);} print(stu);}

void print(struct student stu[6]){ int i,j;printf(“n

NO.name

score1

score2

score3n”);for(i=0;i

printf(“%5s%10s”,stu[i].num,stu[i].name);

for(j=0;j

printf(“%9d”,stu[i].score[j]);

printf(“n”);} }

9-4 在第3题的基础上,编写一个函数input,用来输入5个学生的数据记录。

#include #define N 5

struct student { char num[6];char name[8];int score[4];} stu[N];

void main(){ void input(struct student stu[]);void print(struct student stu[]);input(stu);print(stu);}

void input(struct student stu[]){ int i,j;for(i=0;i

printf(“input scores of student %d:n”,i+1);

printf(“NO.: ”);

scanf(“%s”,stu[i].num);

printf(“name:

”);

scanf(“%s”,stu[i].name);

for(j=0;j

{

printf(“score %d:”,j+1);

scanf(“%d”,&stu[i].score[j]);

}

printf(“n”);} }

void print(struct student stu[6]){ int i,j;printf(“n

NO.name

score1

score2

score3n”);for(i=0;i

printf(“%5s%10s”,stu[i].num,stu[i].name);

for(j=0;j

printf(“%9d”,stu[i].score[j]);

printf(“n”);} }

9-5 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总成绩,以及最高分的学生数据(包括学号、姓名、3门课程成绩、平均分数)

#include #define N 10

struct student {

char num[6];char name[8];float score[3];float avr;} stu[N];

void main(){

int i,j,maxi;float sum,max,average;for(i=0;i

printf(“input scores of student %d:n”,i+1);

printf(“NO.:”);

scanf(“%s”,stu[i].num);

printf(“name:”);

scanf(“%s”,stu[i].name);

for(j=0;j

{

printf(“score %d:”,j+1);

scanf(“%f”,&stu[i].score[j]);

} }

average=0;max=0;maxi=0;for(i=0;i

sum=0;

for(j=0;j

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;

average+=stu[i].avr;

if(sum>max)

{

max=sum;

maxi=i;

} } average/=N;

printf(“

NO.name

score1

score2 for(i=0;i

printf(”%5s%10s“,stu[i].num,stu[i].name);

for(j=0;j

printf(”%9.2f“,stu[i].score[j]);

printf(”

%8.2fn“,stu[i].avr);} printf(”average=%5.2fn“,average);printf(”The highest score score3

averagen“);is :

student %s,%sn”,stu[maxi].num,stu[maxi].name);printf(“his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f.n”, stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);}

《C语言课后习题解答.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
C语言课后习题解答
点击下载文档
相关专题 c语言课后习题解答 课后 习题 语言 c语言课后习题解答 课后 习题 语言
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文