C语言课后习题解答

时间:2019-05-12 02:02:45下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言课后习题解答》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《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<(strlen(str)/2);i++,j--){

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<=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

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<10;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)

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<3;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<3;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<3;i++)

for(j=i;j<3;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<3;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<3;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<3;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<3;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<3;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<3;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<3;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语言程序设计(科学出版社)课后习题解答

第3章习题解答

第1章

1.C 语言程序主要由预处理命令、函数、注释等组成。

2.填空

(1)分号

(2)main(3)stdio.h 3.源程序:

#include main(){

printf(“*************************n”);printf(“Hello World!n”);

printf(“*************************”);} 4.源程序:

#include main(){

int a, b, c;/* 定义变量 */

scanf(“%d”, &a);/* 输入第一个整数 */ scanf(“%d”, &b);/* 输入第二个整数 */ c=a-b;/*

计算差 */

printf(“%d-%d=%d”,a,b,c);/* 输出结果 */ } 5.(1)(2)x=10;

(3)printf(“s=%dn”,s);

第2章

1.(1)c(2)a(3)b g(4)a d e(5)d

2.a.5 b.295

c.4 d.29 e.9 3.a.x=4,y=6

b.x=4,y=3 f.x=3,y=6 4.16 5.#include main(){

int a,b,c;

scanf(“%d%d”,&a,&b);c=a*b;

printf(“%d*%d=%d”,a,b,c);}

第3章

1.(1)b(2)b(3)d(4)a(5)b 2.(1)&a,&b(2)l,s

3.printf(“x=%.2f,y=%.2fn”,x,y);

4.#include main(){

int num1,num2,num3,sum;

float average;

scanf(“%d%d%d”,&num1,&num2,&num3);

sum=num1+num2+num3;

average=sum/3.0;

printf(“sum=%d,average=%.2fn”,sum,average);} 5.#include main(){

int hour,minute,second,total;/* 定义变量代表时、分、秒和总秒数 */

scanf(“%d”,&total);

hour=total/3600;

minute=total%3600/60;

second=total%3600%60;

printf(“%dhours:%dminutes:%dsecondsn”,hour,minute,second);}

第4章

1.(1)a(2)b(3)b(4)b

(5)b 2.0 3.(1)6(2)4(3)1(4)1 4.#include main(){

int x,y;

scanf(“%d”,&x);

if(x>-5 && x<0)

y=5*x;

if(x == 0)

y=-1;

if(x>0 && x<10)

y=2*x+1;

printf(“x=%d,y=%dn”,x,y);} 5.#include main(){

int score,rank;/* score 表示成绩,rank 表示级别 */

printf(“Please input score:”);

scanf(“%d”,&score);

rank=score/10;

switch(rank)

{

case 10:

case 9: printf(“成绩等级为:An”);break;

case 8: printf(“成绩等级为:Bn”);break;

case 7: printf(“成绩等级为:Cn”);break;

case 6: printf(“成绩等级为:Dn”);break;

default:printf(“成绩等级为:En”);break;

} } 6.#include void main(){

int n;

printf(“Please input the digit:”);

scanf(“%d”,&n);

switch(n)

{

case 1:printf(“Jan n”);break;

case 2:printf(“Feb n”);break;

case 3:printf(“Mar n”);break;

case 4:printf(“Apr n”);break;

case 5:printf(“May n”);break;

case 6:printf(“Jun n”);break;

case 7:printf(“Jul n”);break;

case 8:printf(“Agu n”);break;

case 9:printf(“Sep n”);break;

case 10:printf(“Oct n”);break;

case 11:printf(“Nov n”);break;

case 12:printf(“Dec n”);break;

} }

第5章

1.(1)b(2)a(3)b(4)d(5)d 2.7,1 3.y=-1 4.m=6 5.10,14 6.3 7.5

8.ABABCDCD 9.# include main(){

int i;

long int sum=0;

for(i=2;i<=200;i+=2)

sum+=i;

printf(“2+4+6+...+200=%ld”,sum);} 10.#include main(){

long int n;

int sum = 0;

printf(“Please input the nber:”);

scanf(“%ld”,&n);

while(n!= 0)

{

sum += n % 10;

n /= 10;

}

printf(“%dn”, sum);}

第6章

1.(1)d(2)b(3)d(4)c

(5)a 2.11 3.3 4.5689 5.12,6

6.(1)i--(2)n

7.(1)char k;

(2)i main(){

float a[10];

int i;

float sum=0,average;

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

{

printf(“a[%d]=?”,i);

scanf(“%f”,&a[i]);

sum+=a[i];

}

average=sum/10;

printf(“average is %.2fn”,average);} 9.#include #define N 10 main(){

int a[N],i,target,found;

for(i=0;i

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

printf(“Please input a number:”);

scanf(“%d”,&target);

i=0;

while(i

i++;

found = i

printf(“%dn”,found);} 10.#include #define N 80 main(){

char str[N];

int len=0,i=0;

printf(“Please input a string:”);

gets(str);

while(str[i++]!= 0)len++;

printf(“the length of string is %d.n”,len);}

第7章

1.21

2.136 3.16

4.(1)func

(2)m++

5.9

6.1,6,3,2,3 7.2,5,1,2,3,-2 8.#include int fun(int a,int b,int c);main(){

int a,b,c,max;

printf(“Please input three numbers:”);

scanf(“%d%d%d”,&a,&b,&c);

max=fun(a,b,c);

printf(“Max is %d.n”,max);}

int fun(int a,int b,int c){

int max;

max= a>b?(a>c?a:c):(b>c?b:c);

return max;} 9.#include long int sum(int n);main(){

int n;

printf(“n=?”);

scanf(“%d”,&n);

printf(“Sum=%ld.n”,sum(n));}

long int sum(int n){

if(n = = 1)return 1;

else return sum(n-1)+n;} 10.#include void fun(n);main(){

int n;

printf(“n=?”);

scanf(“%d”,&n);

fun(n);

}

void fun(n){

if(n = = 0)return;

else

{

fun(n/2);

printf(“%-2d”,n%2);

} }

第8章

1.(1)b(2)d(3)b(4)c(5)c 2.8

3.123456789 4.2 3 4 5 6 5.345

6.1 2 3 4 5 6 7.b[i]

8.bcdefgha 9.p=sum 10.#include #include main()

{

char str[80];

char *p1, *p2;gets(str);p1=str;

p2=str+strlen(str)-1;

while(p1

puts(p1

}

第9章

1.a.#define F(x)(x)*(x)*(x)b.#define F(x)(x)%4

c.#define F(x,y)(x)*(y)<100?1:0 2.a.4 b.4

c.#define DOUBLE(x)2*(x)3.d 4.-20

5.N is undefined 6.7.5 7.y=6 8.#include

#define SWAP(a,b){int temp;temp=a;a=b;b=temp;} main(){

int x,y;

printf(“x=?”);

scanf(“%d”,&x);

printf(“y=?”);

scanf(“%d”,&y);

SWAP(x,y)

printf(“x=%d,y=%d.n”,x,y);}

第10章

1.struct student{

int sno;

char sname[10];

char sex;}stu1,stu2;2.12

3.合法的有a,b,d

c.改成 s.u.rectangle.length=25;

e.改成 s.u.circle.radius=5;

f.改成 s.u.circle.radius=5;

4.a,b,c,d(说明:变量 b 有确定的值之后,b++是合法的。)5.改为

typedef struct product {

char name[10];float price;}PRODUCT;

PRODUCT products[10];

6.(1)struct employee(2)printemp(emp)7.2 4 3 9 8 8.#include struct time_struct {

int hour;

int minute;

int second;};

main(){

struct time_struct time;

printf(“Input time?n(Example 18:28:38)n”);

scanf(“%d:%d:%d”,&time.hour,&time.minute,&time.second);

printf(“Time is %d:%d:%dn”,time.hour,time.minute,time.second);} 9.#include struct time_struct {

int hour;

int minute;

int second;}time;

void enter_time();void display_time();main(){

enter_time();

display_time();}

void enter_time(){

printf(“Enter the time(example 18:28:38)?”);

scanf(“%d:%d:%d”,&time.hour,&time.minute,&time.second);}

void display_time(){

printf(“Time is %d:%d:%d.n”,time.hour,time.minute,time.second);} 10.#include #define N 3 struct hotel {

char name[31];/*旅馆名称*/

char address[31];/*旅馆地址*/

int grade;/*旅馆级别*/

float average_charge;/*平均房价*/

int number;/*房间数量*/ }h[N]={

{“h1”,“上海路”,5,500.00,80}, {“h2”,“北京大街”,5,480.00,70}, {“h3”,“南京大街”,3,300.50,100} };

main(){

int grade,i;

printf(“请输入级别(3-5)?”);

scanf(“%d”,&grade);

for(i=0;i

if(h[i].grade==grade)

printf(“名称:%sn 地址:%sn 级别:%dn平均房价%.2fn 房间数量:%dn”,h[i].name,h[i].address,h[i].grade,h[i].average_charge,h[i].number);}

第11章

1.(1)c

(2)d(3)b(4)b(5)b

2.Basican 3.fgetc(fp)

4.“record.dat”, “w” 5.#include #include #include

typedef struct Employee {

int id;

char name[20];

char gender[20];

int age;

char address[20];}Employee;

int main(void){

FILE *fp;

char another,choice;

Employee emp;

long int recsize;

fp=fopen(“employee.dat”,“rb+”);

if(fp==NULL)

{

fp=fopen(“employee.dat”,“wb+”);

if(fp==NULL)

{

printf(“Can't Open File”);

exit(0);

}

}

recsize=sizeof(emp);

while(1)

{

printf(“1.添加记录 2.显示男员工 3.退出n”);

printf(“Enter your choice(1-3):”);

fflush(stdin);

scanf(“%c”,&choice);

switch(choice)

{

case'1':

fseek(fp,0,SEEK_END);

another='Y';

while(another=='Y'|| another=='y')

{

printf(“输入信息(id 姓名

性别

年龄 住址):n”);

scanf(“%d %s %s %d

%s”,&emp.id,&emp.name,&emp.gender,&emp.age,&emp.address);

fwrite(&emp,recsize,1,fp);

printf(“是否继续(Y/N): ”);

fflush(stdin);

another=getchar();

}

break;

case '2':

printf(“学号t 姓名t性别t 年龄t住址n”);

rewind(fp);

while(fread(&emp,recsize,1,fp)==1)

if(strcmp(emp.gender,“男”)==0)

printf(“%dt%st%st%dt%sn”,emp.id,emp.name,emp.gender,emp.age,emp.address);

break;

case '3':

fclose(fp);

exit(0);

}

} } 6.#include“stdio.h” #include“stdlib.h” #define M 2

#define stu struct student stu {

int num;

char name[20];

float s1;

float s2;

float s3;

float avg;};main(){

stu st[M];

FILE *fp;

int i;

printf(“请输入 5 名同学生的成绩,按照学号,姓名,成绩 1,成绩2,成绩 3 的顺序,中间用空格隔

开:n”);

for(i=0;i

{

scanf(“%d%s%f%f%f”,&st[i].num,st[i].name,&st[i].s1,&st[i].s2,&st[i].s3);

st[i].avg=(st[i].s1+st[i].s2+st[i].s3)/3;

} if((fp=fopen(“stud.rec”,“wb”))==NULL)

{

printf(“cannot open filen”);

}

for(i=0;i

{

if(fwrite(&st[i],sizeof(stu),1,fp)!=1)

printf(“file write errorn”);

}

fclose(fp);

fp=fopen(“stud.rec”,“rb”);

printf(“numtnametscore1tscore2tscore3taveragen”);

for(i=0;i

{

fread(&st[i],sizeof(stu),1,fp);

printf(“%dt%st%.2ft%.2ft%.2ft%.2fn”,st[i].num,st[i].name,st[i].s1,st[i].s2,st[i].s3,st[i].avg);

}

fclose(fp);}

第12章

1.a.2 b.4 c.11 d.4 e.-15 f.28 g.-36 2.程序设计分析:先将整数x 右移4 位,将该整数机内码的第4 到7 位移至第0 到3 位,然后与0x000f(***1)进行位与运算,所保留的低4 位就是所要的结果

#include void main(){

int x,y;

scanf(“%d”,&x);

y=x>>4;y=y&0x000f;

printf(“4~7位的十六进制数:y=%#xn”,y);} 3.d

4.(1)p!=NULL

(2)p=p->next 5.p=p->next

6.略

第三篇:《王几何》课后习题解答

《王几何》课后习题解答

一、快速默读课文,概括文章的主要内容,说说王几何老师给你留下了怎样的印象。

本文写了王几何老师上第一节课时的情形,刻画了一位风趣幽默、教学水平高、业务能力强、学识广博的老师形象。

印象:王老师和蔼风趣,是良师又是益友,是平凡朴实、学生喜欢爱戴的人,他留给我的印象终生难忘。

二、王老师请同学们在黑板上画圆和三角形,用意是什么?文章中的这些描写,在结构和内容表达上有什么作用?

王老师请同学们在黑板上画圆和三角形,用意是让同学们明白只要功夫深,铁棒可以磨成针!要大家牢记一种热爱知识和持之以恒的学习精神。

文章中的这段描写,在结构上总结了上文,在内容上点明了主旨。

三、这是一篇典型的写人记事的文章,作者从外貌、神态、语言、动作等不同方面刻画了一位老师的形象。先在课文中圈点出相关描写,然后任选一个方面写一段评价文字,与同学交流。如果你喜欢画画,可以用简笔线条勾勒出王老师的肖像。

示例:“矮胖老师依然不说一句话,但却渐渐收起了笑容,用黑板刷轻轻敲击着讲台上的课桌,待全班同学安静下来,他突然面向课堂,反手在背后的黑板上徒手画了一个篮球大的圆,紧接着,又反手画了一个等边三角形。”

这段文字运用了神态、动作等描写方法,寥寥几笔,一个水平高,业务熟,见识广的教师形象跃然纸上。

/ 1

第四篇:c语言课后习题

C语言程序设计实验报告

学院

数学与信息技术

班级

学号

11130730

姓名

指导教师

实验1 简单程序设计

1.实验目的

(1)熟悉C语言开发环境并掌握在该环境下如何编辑、编译、连接和运行一个C程序。(2)通过运行一个简单的C程序过程,初步了解C程序的基本结构及特点。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)输入三个整数,请把这三个数由小到大输出。试编写多种方法。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)C程序是由一个个函数构成,当一个函数调用另一个函数时,需要对被调函数作声明。(2)用户自定以的函数最好写在一个头文件中,在需要的地方用文件包含命令即可。

(3)system(“cls”)函数的作用是清屏,它的声明在头文件stdlib.h中。如果是在Linux操作系统的gcc环境下,清屏用system(”clear”)。

4. 常见错误

(1)数据声明或语句后面缺少分号。(2)对被调函数没有声明。

(3)没有main函数或者有多个main函数。

5. 程序代码

#include int main(){ float a,b,c,t;printf(“请输入三个数:”);scanf(“%f,%f,%f”,&a,&b,&c);if(a>b){

t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} printf(“%5.2f,%5.2f,%5.2fn”,a,b,c);} 6. 实验结果

7. 心得体会

刚开始学习C语言,有一些小问题,数据声明时,分号会忘记,语句后面缺少分号。而且n斜杠会写反,有时会忘记声明函数。

实验2 顺序结构程序设计

1.实验目的

(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量。(2)掌握数据的输入输出的方法,能正确使用各种格式控制符。(3)掌握算术运算符和赋值运算符。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)输入圆半径和圆柱高,求圆周长、圆面积、圆球表面积、圆球体积和圆柱体积。输入输出要有文字说明,输出结果取小数点后2位。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)用scanf和printf对数据进行输入输出时,不同的数据类型用不同的格式控制符。(2)scanf函数中的格式控制后面应当是变量地址,而不是变量名。

4. 常见错误

(1)变量没有定义,直接使用。

(2)企图利用整数除以整数得到精确结果。例如1/4结果不是0.25而是0,1/4.0结果才是0.25。(3)printf和scanf函数中格式控制符的个数与变量或变量地址的个数不一致。(4)scanf函数的地址表列因该是变量地址,而不是变量名。

(5)scanf函数在格式控制字符串中除了格式说明以外还有其他字符时,在输入数据时(6)没有在对应的位置输入与这些字符相同的字符。

5. 程序代码

#include int main(){ float h,r,l,s,sq,vq,vz;float p=3.141526;printf(“请输入圆半径r,圆柱高h”);scanf(“%f,%f”,&r,&h);l=2*p*r;//圆周长

s=r*r*p;//圆面积

sq=4*p*r*r;//圆球表面积

vq=4.0/3.0*p*r*r*r;//圆球体积

vz=p*r*r*h;//圆柱体积

printf(“圆周长为: l=%6.2fn”,l);printf(“圆面积为: s=%6.2fn”,s);printf(“圆球表面积为: sq=%6.2fn”,sq);printf(“圆球体积为: vq=%6.2fn”,vq);printf(“圆柱体积为: vz=%6.2fn”,vz);return 0;} 6. 实验结果

7. 心得体会

这边是基础的用scanf和printf对数据进行输入输出,不同的数据类型用不同的格式控制符。有点小睇混淆。才刚开始,还是觉得挺简单的。

实验3 选择结构程序设计

1.实验目的

(1)了解C语言表示逻辑变量的方法(2)学会正确使用关系运算符和逻辑运算符。(3)熟练掌握if语句和switch语句。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)把百分制成绩转换成5级记分制,要求分别用if else 和switch语句。

90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E

(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)注意关系运算符==和复制运算符=的区别。(2)if和else的匹配原则。

(3)在switch语句中正确使用break。

4. 常见错误

(1)赋值运算符=和关系运算符等号=搞混。(2)在if语句为复合语句时,忘记写{}。(3)if语句出现嵌套时,没正确配对。(4)switch语句中,没正确使用break。

5. 程序代码

#include int main(){ float score;char grade;printf(“请输入学生成绩:”);scanf(“%f”,&score);while(score>100 || score<0){

printf(“n输入有误,请重新输入!”);

scanf(“%f”,&score);} switch((int)(score/10)){ case 10: case 9:grade='A';break;case 8:grade='B';break;case 7:grade='C';break;case 6:grade='D';break;case 5: case 4:

} case 3: case 2: case 1: case 0:grade='E';} printf(“成绩是%5.1f,相应的等级是%cn”,score,grade);return 0;6. 实验结果

7. 心得体会

赋值运算符=和关系运算符等号=搞混。在if语句为复合语句时,忘记写{}。if语句出现嵌套时,没正确配对。

实验4 循环结构程序设计

1.实验目的

(1)熟练掌握循环语句中的for语句、while语句和do while语句的使用方法,以及这三种循环语句之间的转换方法。

(2)掌握编写循环结构程序的方法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)通过键盘输入任意两个正整数,求其最大公约数和最小公倍数。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)循环结构程序的设计方法。

(2)while和do while循环之间的转换方法。

(3)getch函数从键盘接收一个字符,该函数被调用后程序会暂停,等待按任意键,再继续执行后续的语句,以便我们观察中间结果。在VC++下需要包含conio.h头文件,在Linux下需要包含头文件curses.h。由于在Linux下getch函数还需要与其它函数配合使用才能达到上面所说的功能并且在编译时还要指定链接所使用的库文件,所以在Linux环境建议使用两次调用getchar函数来替换getch函数。

4. 常见错误

(1)循环体为复合语句时,没用{}括起来。

(2)在while()和for()后面添加分号,使得循环体为空语句。(3)for括号里的分号和逗号用错。

(4)循环嵌套时,内循环的初始条件和循环体没正确设计好。

5. 程序代码

#include int main(){ int r,m,n,p;scanf(“%d,%d”,&m,&n);p=n*m;do{ r=m%n;m=n;n=r;p=p/m;}while(r!=0);printf(“最大公约数:%dn”,m);

printf(“最小公倍数:%dn”,p);return 0;} 6. 实验结果

7. 心得体会

循环体为复合语句时,没用{}括起来。在while()和for()后面添加分号,使得循环体为空语句。for括号里的分号和逗号用错。循环嵌套时,内循环的初始条件和循环体没正确设计好。

实验5 数组的应用

1.实验目的

(1)掌握一维数组和二维数组的定义和引用。(2)掌握字符数组和字符串函数的使用。(3)掌握与数组有关的算法(特别是排序算法)。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)用选择法对10个整数排序。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)在循环中,数组元素的引用。

(2)起泡排序法、选择排序法和插入排序法。

4. 常见错误

(1)数组定义时,没规定数组长度或者长度为一变量。(2)循环中数组元素的下标没正确表示。

(3)起泡排序、选择排序和插入排序算法没理解透。

(4)起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。(5)字符串的复制和比较直接使用赋值运算符和关系运算符。

5. 程序代码

#include int main(){ int i,j,t,a[10];printf(“请输入10个整数:n”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<9;i++)

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

if(a[i]>a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

} printf(“选择排列:n”);for(i=0;i<10;i++)

printf(“%5d”,a[i]);printf(“n”);return 0;} 6. 实验结果

7. 心得体会

数组定义时,没规定数组长度或者长度为一变量。循环中数组元素的下标没正确表示。起泡排序、选择排序和插入排序算法没理解透。起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。字符串的复制和比较直接使用赋值运算符和关系运算符。

实验6 函数的应用

1.实验目的

(1)掌握函数的定义和调用方法。

(1)掌握函数实参与形参的对应关系,以及“值传递”的方式。(1)掌握函数的嵌套调用和递归调用的方法。

(1)掌握全局变量和局部变量,动态变量以及静态变量的概念和使用方法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排列,主函数通过调用它实现题目要求。

(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)函数的定义和调用方法。

(2)函数的实参数为数组时,形参的形式以及实参和形参之间的数据传递方式。(3)函数的递归调用。

4. 常见错误

(1)函数没定义,就被调用。(2)函数定义了,又没被调用。(3)定义函数时,形参没规定类型。(4)函数调用时,实参前加类型。(5)被调函数没有声明

(6)嵌套调用和递归调用没理解透,使用错误。(7)全局变量和局部变量有效范围没能正确区分。

5. 程序代码

#include #include #define N 10 char str[N];int main(){ void sort(char[]);int i,flag;for(flag=1;flag==1;){ printf(“input string:n”);scanf(“%s”,&str);if(strlen(str)>N)printf(“string is too long,input again!”);else flag=0;} sort(str);printf(“string sorted:n”);for(i=0;istr[i+1]){ t=str[i];str[i]=str[i+1];str[i+1]=t;} } 6. 实验结果

7. 心得体会

有时候函数没定义就使用,有时候会定义函数,然后没有使用,定义函数时,形参没规定类型。函数调用时,实参前加类型。会把形参与实参搞混

实验7 指针的应用

1.实验目的

(1)熟练掌握指针的定义、赋值和使用。

(2)掌握用指针引用数组的元素、熟悉指向数组的指针的使用。(3)熟练掌握字符数组与字符串的使用,掌握指针数组。(4)掌握指针函数与函数指针的用法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)有一个班4个学生,5门课程。①求第1门课程的平均分;②找出两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)列指针变量的定义、赋值以及利用它引用数组元素。(2)行指针变量的定义、赋值以及它在二维数组中的使用。(3)函数指针变量的定义、赋值和利用它进行函数调用。

4. 常见错误(1)混淆变量值和变量地址。

(2)指针变量没有初始化,就利用该指针变量引用变量。

(3)利用指针变量引用一维数组元素和二维数组元素或地址时,引用的方法不对。(4)函数指针概念清楚。(5)混淆行指针变量和指针数组。

5. 程序代码

#include 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=0;i<5;i++)scanf(“%s”,course[i]);printf(“input NO.and scores:n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%3s”,course[i]);printf(“n”);pscore=&score[0][0];pnum=&num[0];for(i=0;i<4;i++){

scanf(“%d”,pnum+i);

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

scanf(“%f”,pscore+5*i+j);} paver=&aver[0];printf(“nn”);avsco(pscore,paver);avcour1(pcourse,pscore);printf(“nn”);fali2(pcourse,pnum,pscore,paver);printf(“nn”);good(pcourse,pnum,pscore,paver);return 0;} void avsco(float *pscore,float *paver){ int i,j;float sum,average;for(i=0;i<4;i++){

sum=0.0;

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

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=0;i<4;i++)sum=sum+(*(pscore+5*i));average1=sum/4;printf(“course1:%s average score:%7.2fn”,*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=0;i<5;i++)printf(“%11s”,course[i]);printf(“averagen”);for(i=0;i<4;i++){

labe1=0;for(j=0;j<5;j++)if(*(pscore+5*i+j)<60.0)labe1++;if(labe1>=2)

{

printf(“%d”,num[i]);for(k=0;k<5;k++)printf(“%11.2f”,*(pscore+5*i+k));printf(“%11.2fn”,aver[i]);

} } } void good(char course[5][10],int num[4],float *pscore,float aver[4]){ int i,j,k,n;printf(“ ======Students whose score is good======n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%11s”,course[i]);printf(“ averagen”);for(i=0;i<4;i++){

n=0;

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

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

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

{

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

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

printf(“%11.2f”,*(pscore+5*i+k));

printf(“%11.2fn”,aver[i]);

} } } 6. 实验结果

7. 心得体会

指针这章有点小混乱 混淆变量值和变量地址。会忘记给指针变量没有初始化,就利用该指针变量引用变量。数组元素或地址有些模糊

实验8 结构体的应用

1.实验目的(1)掌握结构体变量、结构体数组以及结构体指针的定义和使用。(2)掌握动态存储分配函数的用法和单向链表的创建、输出等操作。(3)掌握用typedef定义类型。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)编写建立链表的函数creat,输出链表的函数print,删除链表中节点的函数del,插入节点的函数insert,再编写一个主函数,先后调用这些函数,在主函数中指定需要删除和插入的节点的数据。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)结构成员引用的三种方法。(2)链表节点数据类型的定义。

(3)malloc函数用于动态分配存储空间,它的返回值类型是void *,在实际使用中一般需要强类型转换成多需要的类型。该函数的声明在stdlib.h头文件中。(4)链表操作中,节点指针域的使用。

4. 常见错误

(1)引用结构体成员时,成员运算符.和指向运算符->的使用混淆。(2)链表操作过程中不能正确利用指针域进行操作。(3)不能正确使用typedef声明新类型名。

5. 程序代码

#include #include #define LEN sizeof(struct Student)struct Student { long num;float score;struct Student *next;};int n;int main()//主函数 { struct Student *creat();struct Student *del(struct Student *,long);struct Student *insert(struct Student *,struct Student *);void print(struct Student *);struct Student *head,stu;long del_num;printf(“input records:n”);head=creat();print(head);printf(“input the deleted number:”);scanf(“%ld”,&del_num);head=del(head,del_num);print(head);printf(“input the inserted record:”);scanf(“%ld,%f”,&stu.num,&stu.score);head=insert(head,&stu);print(head);return 0;} struct Student *creat()//创建链表 { struct Student *head;struct Student *p1,*p2;n=0;p1=p2=(struct Student *)malloc(LEN);scanf(“%ld,%f”,&p1->num,&p1->score);head=NULL;while(p1->num!=0){

n=n+1;

if(n==1)head=p1;

else p2->next=p1;

p2=p1;

p1=(struct Student *)malloc(LEN);

scanf(“%ld,%f”,&p1->num,&p1->score);} p2->next=NULL;return(head);} struct Student *del(struct Student *head,long num)//{ struct Student *p1,*p2;if(head==NULL){

printf(“nlist null!n”);

return(head);} p1=head;while(num!=p1->num && p1->next!=NULL){

删除

p2=p1;

p1=p1->next;} if(num==p1->num){

if(p1==head)head=p1->next;

else p2->next=p1->next;

printf(“delete:%ldn”,num);

n=n-1;} else printf(“%ld not been found!n”,num);return(head);} struct Student * insert(struct Student *head,struct Student *stud)//{ struct Student *p0,*p1,*p2;p1=head;p0=stud;if(head==NULL){

head=p0;

p0->next=NULL;} else {

while((p0->num>p1->num)&&(p1->next!=NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->num<=p1->num)

{

if(head==p1)head=p0;

else p2->next=p0;

p0->next=p1;}

else

{p1->next=p0;

p0->next=NULL;

}} n=n+1;return(head);} void print(struct Student *head)//输出链表 { struct Student *p;printf(“nNow,These %d records are:n”,n);p=head;

插入

if(head!=NULL)do {

printf(“%ld %5.1fn”,p->num,p->score);

p=p->next;}while(p!=NULL);} 6. 实验结果

7. 心得体会

结构体可以允许我们自己建立不同类型数据,组成组合型的数据结构。这样可以处理一些复杂的问题。但是,在引用结构体成员时,成员运算符.和指向运算符->的使用时会有点混淆。而且有时会不能正确利用指针域进行操作。

实验9 文件的应用

1.实验目的

(1)掌握文件、缓冲文件系统以及文件指针等概念。

(2)学会使用文件打开、关闭、读、写等函数对文件进行简单的操作。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)编写函数void fun(int n,int *t),其功能是计算n!,通过指针t返回。编写main函数,通过键盘输入一个不大于100的整数,调用fun函数,将指针t返回的值写入文件myf2.out中。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)access函数可以用来判断某一文件是否存在。调用该函数时,在VC++下需包含头文件io.h,在Linux下需包含unistd.h头文件。(2)fopen、fclose函数的使用。(3)fread和fwrite函数的使用。

4. 常见错误

(1)文件打开方式使用错误。(2)文件使用完毕没有关闭。

(3)不能正确使用文件读写函数对文件进行操作。

5. 程序代码

#include #include void fun(int n, int *t){

int result=1;int i;for(i=1;i<=n;i++){ result*=i;} *t=result;}

int main(){ int num;int write;FILE *pFile;scanf(“%d”,&num);while(num>=100){

printf(“输入的数据大于100了n”);

scanf(“%d”,&num);} fun(num,&write);

} if((pFile=fopen(“myf2.out”,“w”))==NULL){

printf(“打开文件失败!n”);

} fprintf(pFile,“%d”,write);fclose(pFile);printf(“%d”,write);return 0;6. 实验结果

7. 心得体会

文件打开方式使用错误。文件使用完毕没有关闭。不能正确使用文件读写函数对文件进行操作。而且对于的各种操作容易混淆。不太清楚什么时候怎样使用。

第五篇:C语言课后习题

习题

第三章

#include #include int main(){

int d,p;

double r,a,m;

scanf(“%d %d %lf”,&d,&p,&r);

a=(p/(p-d*r));

m=log(a)/log(1+r);

if(p>0&&d>0)

{

if(d<=m*p)

printf(“%.1f”,m);

else

printf(“God”);

}

else

printf(“0.0”);

return 0;}

勾股数

#include int main(){

int a,b,c,n;

scanf(“%d”,&n);

for(a=1;a<=n;a++)

{

for(b=1;b<=n;b++)

{

for(c=1;c<=n;c++)

{

if(c*c==a*a+b*b)

{

if(a<=b)

{

printf(“%d %d %dn”,a,b,c);

}

}

}

}

}

return 0;}

第四章

计算分段函数值 #include int main(){

float x,y;

scanf(“%f”,&x);

if(x<1)y=x;

else if(x>=1&&x<10)y=2*x-1;

else if(x>=10)y=3*x-11;

printf(“%.2f”,y);

return 0;}

找出三个数中最大的数 #include int main(){

int a,b,c,max;

scanf(“%d%d%d”,&a,&b,&c);

max=a>b?a:b;

if(c>max)

max=c;

printf(“%d”,max);

return 0;}

10844成绩等级评分 #include int main(){

int x;

scanf(“%d”,&x);

if(x>=0&&x<=100)

{

switch(x/10)

{

case 10:

case 9: printf(“A”);break;

case 8 : printf(“B”);break;

case 7 : printf(“C”);break;

case 6 : printf(“D”);break;

default:

printf(“E”);break;

}

}

else

printf(“error”);

return 0;}

前续和后续字符 #include int main(){

char x;

x=getchar();switch(x){ case'0':printf(“first”);printf(“ %c”,x+1);break;case'9':printf(“%c ”,x-1);printf(“last”);break;case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': printf(“%c ”,x-1);printf(“%c”,x+1);break;default: printf(“error”);break;

} return 0;}

20秒后的时间 #include #include int main(){

int h,m,s;

scanf(“%d:%d:%d”, &h,&m,&s);

s=s+20;

if(s>59)

{

s=s%60;

m++;

if(m>59)

{

m=m%60;

h++;

if(h>23)

h=0;

}

}

printf(“%02d:%02d:%02dn”, h, m, s);

return 0;}

分期还款

#include #include int main(){

int d,p;

double r,a,m;

scanf(“%d %d %lf”,&d,&p,&r);

a=(p/(p-d*r));

m=log(a)/log(1+r);

if(p>0&&d>0)

{

if(d<=m*p)

printf(“%.1f”,m);

else

printf(“God”);

}

else

printf(“0.0”);

return 0;}

第五章

字母分类统计 #include #include int main(){

char ch;

int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;

while((ch=getchar())!='n')

{

if(ch<=127&&ch>=123)

a++;

else if(ch>=97&&ch<=122)

b++;

else if(ch<=96&&ch>=91)

c++;

else if(ch<=90&&ch>=65)

d++;

else if(ch>=58&&ch<=64)

e++;

else if(ch>=48&&ch<=57)

f++;

else if(ch>=33&&ch<=47)

g++;

else if(ch==32)

h++;

else

i++;

}

printf(“%d %d %d %d”,d+b,f,h,a+c+e+g+i);}

水仙花数

#include int main(){

int n,a,b,c;

for(n=100;n<1000;n++)

{

a=n/100;

b=(n%100)/10;

c=n%10;

if(n==a*a*a+b*b*b+c*c*c)

{

printf(“%dn”,n);

}

}

return 0;}

计算数列和

#include int main(){

int a=1,n,i,sum=0;

scanf(“%d”,&n);

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

{

sum=sum+a;

a=a+2;

}

printf(“%d”,sum);

return 0;}

自由落体

#include int main(){

int i,n;

double h=100.0,s=0.0,c=100.0;

scanf(“%d”,&n);

{

s=s+c;

h=h/2;

c=2*h;

}

printf(“%.3lf”,s);

printf(“%.3lf”,h);

return 0;}

迭代法求平方根 #include #include int main(){

float x1,x2,a;

x2=1;

scanf(“%f”,&a);

x1=a/x2;

while(fabs(x1-x2)>=1e-5)

{

x1=x2;

x2=0.5*(x1+a/x1);

}

printf(“%.4fn”,x2);

return 0;}

打印三角形

#include #include #include int main(){

int n,k,i,j;

scanf(“%d”,&n);

for(i=0;i<2*n-1;i++)

{

k=abs(n-1-i);

for(j=0;j

{

printf(“");

}

for(j=0;j

{

printf(”*“);

}

printf(”n“);

}

return 0;}

勾股数

#include int main(){

int a,b,c,n;

scanf(”%d“,&n);

for(a=1;a<=n;a++)

{

for(b=1;b<=n;b++)

{

for(c=1;c<=n;c++)

{

if(c*c==a*a+b*b)

{

if(a<=b)

{

printf(”%d %d %dn“,a,b,c);

}

}

}

}

}

return 0;}

第六章

18052插入数据 int x,i,t;

scanf(”%d“,&x);

a[15]=x;

for(i=15;i>0;i--){

if(a[i]

{

t=a[i];

a[i]=a[i-1];

a[i-1]=t;

} }

大于平均分

#include int main(){

int a[10];

int i,sum=0,average,count;

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

{

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

}

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

{

sum=sum+a[i];

}

average=sum/10;

count=0;

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

{

if(a[i]>average)

count++;

}

printf(”%d“,count);

return 0;}

输出不同的数据 #include int main(){

int a[20];

int i,t,p=0;

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

{

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

}

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

{

for(t=0;t

if(a[t]==a[i])break;

if(t==i)printf(”%dn“,a[i]);

} }

主对角线上的元素之和 #include int main(){

int a[3][4],i,j,sum=0;

for(i=0;i<3;++i)

{

for(j=0;j<4;++j)

{

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

}

}

for(i=0;i<3;++i)

{

sum+=a[i][i];

}

printf(”%dn“,sum);

return 0;}

1051 鞍点

#include int main(){ int i,j,k,t=0,flag=0,m=0,n=0,a[3][4],max,min;for(i=0;i<3;i++){

for(j=0;j<4;j++)

{

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

} }

for(i=0;i<3;i++){

max=a[i][0];

for(j=0;j<4;j++)

{

if(max

{

max=a[i][j];m=i;n=j;

}

}

for(k=0;k<3;k++)

{

min=a[m][n];

if(min>a[k][n])

flag=1;

}

if(flag==0)

{

t=1;

printf(”%dn“,a[m][n]);}

flag=0;}

if(t==0)

printf(”NO“);

return 0;}

ASCII码值之和的差 #include #include int main(){

char s1[80];

char s2[80];

int i,sum1=0,sum2=0;

gets(s1);

gets(s2);

for(i=0;i

{

sum1+=s1[i];

}

for(i=0;i

{

sum2+=s2[i];

}

printf(”%d“,sum1-sum2);

return 0;}

第七章

所有数字之和 #include int sum(int n){

if(n<10)

return n;

int res=0;

res=(n%10)+sum(n/10);

return res;} main(){

int n;

scanf(”%d“,&n);

printf(”%d“,sum(n));}

元音字母

#include #include void yuan(char*s,char*s2){

int i,k=0;

char c;

for(i=0;*(s+i)!='';i++)

{

c=*(s+i);

switch(c)

{

case'a':

case'e':

case'i':

case'o':

case'u':

case'A':

case'E':

case'I':

case'O':

case'U':*(s2+k)=c;k++;break;

default:break;

}

}

*(s2+k)='';} int main(){

char str[81],str2[81];

gets(str);

yuan(str,str2);

printf(”%s“,str2);}

字符统计

#include #include #include int nL=0,nN=0;int statistics(char*s){

int nS=0,a;

while(*s!='')

{

a=*s;

if(a==' ')

nS++;

else

{

if(a>='1'&&a<='9')

nN++;

else if((a>='a'&&a<='z')||a>='A'&&a<='Z')

nL++;

}

s++;

}

return nS;} int main(){

char s[81];

int nS;

gets(s);

nS=statistics(s);

printf(”%d%d%dn“,nL,nN,nS);

return 0;}

选择排序

#include int sort(int a[],int n){

int i,j,k,tmp;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]

tmp=a[k];a[k]=a[j];a[i]=tmp;

} } int main(){

int a[10];

int i;

for(i=0;i<10;i++)scanf(”%d“,&a[i]);

sort(a,10);

for(i=0;i<10;i++)printf(”%dn“,a[i]);

return 0;}

X的N次方

#include int F(int x,int n){

if(n==0)return 1;

else return x*F(x,(n-1));} int main(){

int x,n;

scanf(”%d%d“,&x,&n);

printf(”%d“,F(x,n));

return 0;}

行列互换

#include void swap(int*a,int*b){

int temp;

temp=*a;*a=*b;*b=temp;} void col(int a[][4],int i,int j){

int k;

for(k=0;k<4;k++)

swap((*(a+k)+i),(*(a+k)+j));} void row(int a[][4],int i,int j){

int k;

for(k=0;k<4;k++)

swap((*(a+i)+k),(*(a+j)+k));} int main(){

int a[4][4];

int i,j;

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

for(j=0;j<4;j++)

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

col(a,0,2);

row(a,0,2);

col(a,1,3);

row(a,1,3);

col(a,0,3);

row(a,0,3);

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

{

for(j=0;j<4;j++)

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

printf(”n“);

}

return 0;}

学生信息统计 #include void average(double a[][5],int n){

int i,j;

for(i=0;i

{

double sum=0,av;

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

sum=sum+a[i][j];

av=sum/5.0;

printf(”%.2f “,av);

}

printf(”n“);} void average2(double a[][5],int n){

int i,j;

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

{

double sum=0,av;

for(i=0;i

sum=sum+a[i][j];

av=sum/n;

printf(”%.2f “,av);

}

printf(”n“);} void top(double a[][5],int n){

int i,j;

double max;

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

{

max=a[0][j];

for(i=0;i

{

if(a[i][j]>max)max=a[i][j];

}

printf(”%.2f “,max);

} } int main(){

double a[10][5];

int i,j;

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

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

scanf(”%lf",&a[i][j]);

average(a,10);

average(a,10);

top(a,10);

return 0;}

下载C语言课后习题解答word格式文档
下载C语言课后习题解答.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言习题(详细解答)

    程序设计基础(C语言版)习题 第01章 一.选择题 1.以下叙述中正确的是________。 A)程序设计的任务就是编写程序代码并上机调试 B)程序设计的任务就是确定所用数据结构 C)程序......

    《中国近代史纲要》课后习题解答

    《中国近代史纲要》课后习题解答1~7章 以下所标页码黑色字为2013版课本,红色字为2015版课本 综述风云变幻的八十年 1.为什么说鸦片战争是中国近代史的起点?(P9-15) (P10-17)......

    大学C语言课本课后习题相应答案及详细解答

    5-1 #include"stdio.h" void main { char c1,c2; printf("c1:"); c1=getchar; if(c1>='a'&&c1='A'&&c1='A'&&c=0&&s0&&d0&&d0&&d0&&dc&&......

    《数字信号处理(第四版)》部分课后习题解答

    Chapter 9 9.1 Develop a lowpass IIR digital filter using Butterworth Approximation with the following specifications: passband egde frequency at Fp = 100 Hz, st......

    《C语言程序设计》课后习题参考答案

    高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案 ――武汉大学出版社习题1参考答案 一、选择题 1. A 2. D 二、填空题 1. BASIC、FORTRAN、AL_GOL60和CO......

    C语言课后习题答案5篇

    C语言课后习题答案-第四版- 第一章 5、请参照本章例题,编写一个C语言程序,输出以下信息: **************************** V e r y G o o d ! **************************** #inc......

    采购与供应管理一二课后习题解答1-10

    第一章复习题 一、单项选择题 1.采购与供应管理的利润杠杆效应指的是( C ) P7 A.利润的增加可以带来采购数量的增加 B.采购数量的增加可以带来利润率的提高 C.采购费用节省较......

    马克思主义基本原理概论课后习题解答(优秀范文5篇)

    高等教育自学考试马克思主义基本原理概论课后习题解答 绪论马克思主义是关于工人阶级和人类解放的科学 1、 如何理解马克思主义是时代的产物?P2 答:(1)马克思主义是资本主义社......