admin管理员组

文章数量:1530846

2023年12月26日发(作者:)

C语言程序设计课后答案

第1章 C语言概述

一、选择题

1.D 2.C 3.D 4.C 5.A 6.C 7.D

二、填空题

1..c .obj .exe

2.需求分析 算法设计 编写程序 编译程序 连接程序 编写程序文档

3./* */

三、编程题

1.参考代码如下:

#include

int main()

{

}

2.参考代码如下:

#include

int main()

{

}

/*编译预处理指令*/

/*主函数的函数头*/

/*函数体的开始标记*/

/*输出要显示的字符串*/

/*程序返回值0*/

/*函数的结束标记*/

printf("***这是我的第一个C语言程序!***n");

return 0;

printf("***这是我的第一个C语言程序!***n");

return 0;

1

C语言程序设计课后答案

第2章 算法

一、选择题

1.A 2.A 3.C 4.B

二、简答题

1.计算n!算法的流程图如图2-1所示。

开始输入n的值赋初值i=1;S=1;i<=nYesS=S*i;i++;No输出S的值结束

图2-1 计算n!算法的流程图

2.计算n!算法的N-S流程图如图2-2所示。

输入n的值赋初值i=1;S=1;当i<=nS=S*i;i++;输出S的值

图2-2 计算n!算法的N-S流程图

3.计算两个数a和b最大公约数算法的流程图如图2-3所示。

2

C语言程序设计课后答案

开始输入a、b是否c=a;b=a;a=cc=a/b的余数判断a>bc是否等于0是否a=b;b=c输出b结束

图2-3 求最大公约数流程图

4.计算两个数a和b最大公约数算法的N-S流程图如图2-4所示。输入a、b是判断a>b否c=a;b=a;a=cc=a/b的余数当c不为0时a=bb=cc=a/b输出最大公约数b

图2-4 求最大公约数N-S流程图

3

C语言程序设计课后答案

第3章 数据类型及其运算

一、选择题

1.A 2.A 3.A 4.B 5.C

6.D 7.D 8.C 9.C 10.B

二、填空题

1.整型 浮点型

2.0

3.26

4.9

5.1.5 6.7

6.9,11,9,10

三、编程题

1.参考代码如下:

#include

int main()

{

}

2.参考代码如下:

#include

int main()

{

int a,b,c;

a=10;

b=20;

c=a;

a=b;

b=c;

printf("a=%d,b=%dn",a,b);

return 0;

int num,a,b,c;

printf("Please input the number:");

scanf("%d",&num);

a=num/100;

b=(num-100*a)/10;

c=num-100*a-10*b;

a+= b*10+c*100;

printf("The result is%dn",a);

4

C语言程序设计课后答案

}

return 0;

3.参考代码如下:

#define PI 3.14159

#include

int main()

{

}

float r,l,s,v;

printf("请输入圆半径:");

scanf("%f",&r);

l=2*PI*r;

s=PI*r*r;

v=4*PI*r*r*r/3;

printf("半径为%f的圆周长为%f,面积为%f,圆球体积为%f n",r,l,s,v);

return 0;

5

C语言程序设计课后答案

第4章 顺序结构程序设计

一、选择题

1.D 2.C 3.D 4.B 5.B

二、填空题

1.27n

2.12

3.scanf("%d",&a);

三、编程题

1.参考代码如下:

#include

int main()

{

}

2.参考代码如下:

#include

int main()

{

}

3.参考代码如下:

6

int x;

float y,s;

printf("请输入商品的单价");

scanf("%f",&y);

scanf("%d",&x);

s=x*y;

printf("商品总价为: %fn",s);

return 0;

printf("请输入购买商品的个数");

int a,b;

printf("请输入a和b的值");

scanf("a=%d,b=%d",&a,&b);

a=a+b;

b=a-b;

a=a-b;

printf("a=%d,b=%dn",a,b);

return 0;

C语言程序设计课后答案

#include

int main()

{

}

4.参考代码如下:

#include

int main()

{

}

int a=5;

float b=1.332;

char c='A';

printf("a=%4d b=%.3fn",a,b);

printf("a+b=%.1fn",a+b);

printf("c='%c' or %dn",c,c);

return 0;

printf(" ****n");

printf(" *n");

printf(" * n");

printf(" ****n");

return 0;

7

C语言程序设计课后答案

第5章 选择结构程序设计

一、选择题

1.C 2.D 3.B 4.B 5.D

二、填空题

1.0

3.20,30,30

5.①a>b

2.a的值为2;b的值为1

4.1

②a=b;b=t;

三、编程题

1.参考代码如下:

#include

int main()

{

}

2.参考代码如下:

#include

int main()

{

int x,y;

/*定义整型变量x、y*/

/*输出屏幕提示*/

/*从键盘输入x的值*/

/*根据x的取值计算y的值*/

/*根据x的取值计算y的值*/

/*输出y的值*/

printf("Please input x:");

scanf("%d",&x);

if(x<0)

else

y=-x+1;

printf("y=%dn",y);

y=3*x+2;

int a;

printf("Please enter an integer :");

scanf("%d",&a);

switch(a)

{

case 1:printf("Mondayn");break;

case 2:printf("Tuesdayn");break;

case 3:printf("Wednesdayn");break;

case 4:printf("Thursdayn");break;

case 5:printf("Fridayn");break;

case 6:printf("Saturdayn");break;

8

C语言程序设计课后答案

}

case 7:printf("Sundayn");break;

default:printf("Error!n");

}

return 0;

3.参考代码如下:

#include

int main()

{

}

4.参考代码如下:

#include

int main()

{

float a,b;

printf("inpute the income:");

scanf("%f",&a);

if(a<=3500)

else

b=(5000-3500)*0.03+(9500-5000)*0.1+(a-9500)*0.2;

printf("the tax is:%.2f",b);

return 0;

b=0;

b=(a-3500)*0.03;

b=(5000-3500)*0.03+(a-5000)*0.1;

else if(a<=5000)

else if(a<=9500)

int c,s;

float p,w,d,f;

printf("Please enter price,weight,distance:");

scanf("%f,%f,%d",&p,&w,&s);

if(s>=3000)

else

{

case 0:d=0;break;

case 1:d=2;break;

case 2:

9

/*提示输入数据*/

/*输入单价、重量、距离*/

/*3000km以上为同一折扣*/

/*3000km以下各段折扣不同,c的值不相同*/

c=12;

c=s/250;

switch(c)

/*c=0,代表250km以下,折扣d=0*/

/*c=1,代表250km~500km,折扣d=2%*/

C语言程序设计课后答案

}

case 3:d=5;break;

case 4:

case 5:

case 6:

case 7:d=8;break;

case 8:

case 9:

case 10:

case 11:d=10;break;

case 12:d=15;break;

}

/*c=2和3,代表500km~1000km,折扣d=5%*/

/*c=4~7,代表1000km~2000km,折扣d=8%*/

/*c=8~11,代表2000km~3000km,折扣d=10%*/

/*c=12,代表3000km以上,折扣d=15%*/

/*计算总运费*/

/*输出总运费,取两位小数*/

f=p*w*s*(1-d/100.0);

return 0;

printf("freight=%10.2fn",f);

5.参考代码如下:

#include

int main()

{

}

int a,i,j,k;

printf("inpute the number(100-999):");

scanf("%d",&a);

if(a%3==0&&a%5==0&&a%7==0)

else

printf("not can be divided by 3 or 5 or 7 ");

10

printf("can be divided by 3,5,7 ");

printf("can be divided by 3,5 ");

printf("can be divided by 3,7 ");

printf("can be divided by 5,7 ");

printf("can be divided by 3 ");

printf("can be divided by 5 ");

printf("can be divided by 7 ");

else if(a%3==0&&a%5==0)

else if(a%3==0&&a%7==0)

else if(a%5==0&&a%7==0)

else if(a%3==0)

else if(a%5==0)

else if(a%7==0)

return 0;

C语言程序设计课后答案

第6章 循环结构程序设计

一、选择题

1.D 2.A 3.A 4.D 5.C 6.C 7.C 8.B

二、填空题

1.do-while语句

3.10

5.15

2.55

4.x>0

三、编程题

1.参考代码如下:

#include

int main ()

{

}

2.参考代码如下:

#include

int main()

{

int i, k, max;

printf("Please input k:");

scanf ("%d",&max);

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

{

}

printf ("max=%dn",max);

return 0;

scanf ("%d",&k);

if (max

max=k;

int n, i, j, k;

for( n=100; n<1000; n++ ) /* 对所有的3位数循环 */

{

i=n/100; /* 的百位数字 */

j=n/10%10; /* 的十位数字 */

k=n%10; /* 的个位数字 */

if(n==i*i*i+j*j*j+k*k*k)

{

11

C语言程序设计课后答案

}

}

}

printf ("%d=%d*%d*%d+%d*%d*%d+%d*%d*%dn",n,i,i,i,j,j,j,k,k,k);

break; /* 只要求找第一个满足条件的数,所以找到后立即退出循环 */

return 0;

3.参考代码如下:

#include

int main()

{

}

4.参考代码如下:

#include

int main()

{

}

5.参考代码如下:

#include

int main ( )

{

int n;

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

{

}

return 0;

if (n%3!=0 || n%5!=0)

continue ; /* n不满足要求,结束本次循环*/

printf (" %5d", n);

int i,j;

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

{

}

return 0;

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

printf("#");

printf("n");

int i,j;

for(i=1;i<=9;i++) /*外循环控制输出的行数*/

{

for(j=1;j<=i;j++) /*内循环输出表中的一行*/

12

C语言程序设计课后答案

}

}

printf("%d*%d=%-3d",j,i,i*j);

printf("n"); /*换行控制,使下一次的式子输出在新行上*/

return 0;

6.参考代码如下:

#include

int main()

{

相等*/

}

7.参考代码如下:

#include

int main()

{

int A,B,C,D,E;/*定义5个整型变量*/

for(A=1;A<6;A++)/*将A在1~5的名次中循环*/

for(B=1;B<6;B++)/*将B在1~5的名次中循环*/

if(A!=B)/*判断变量与已有变量值不相等*/

for(C=1;C<6;C++)/*将C在1~5的名次中循环*/

if(C!=A&&C!=B)/*判断变量与已有变量值不相等*/

for(D=1;D<6;D++)/*将D在1~5的名次中循环*/

if(D!=A&&D!=B&&D!=C)/*判断变量与已有变量值不

for(E=1;E<6;E++)/*将E在1~5的名次中循环*/

if(E!=D&&E!=C&&E!=B&&E!=A)/*判断变量

if((C!=1)&&(D-E==2)&&(E!=2)&&

printf("A=%d,B=%d,C=%d,D=%d,

与已有变量值不相等*/

(A!=1)&&(A!=5)&&(B-C==1))/*根据问题设置的条件*/

E=%dn",A,B,C,D,E);/*输出*/

return 0;

int cock,hen,chick;

/*定义变量为基本整型*/

/*鸡翁范围在0到20之间*/

/*鸡母范围在0到33之间*/

/*鸡雏范围在3到99之间*/

for (cock=0; cock<=20; cock++)

for (hen=0; hen<=33;hen++)

for (chick=3;chick<=99;chick++)

if (5*cock+3*hen+chick/3==100) /*判断钱数是否等于100*/

if (cock+hen+chick==100) /*判断购买的鸡数是否等于100*/

if (chick%3==0)

/*判断鸡雏数是否能被3整除*/

printf("鸡翁:%d只,鸡母:%d只,鸡雏:%d只n",

cock,hen,chick);

13

C语言程序设计课后答案

}

return 0;

14

C语言程序设计课后答案

第7章 数组

一、选择题

1.D 2.B 3.A 4.C 5.B 6.B 7.C 8.C 9.A 10.A

二、填空题

1.2 0 0

3.①s=count=0; ②i=0;i<20;i++

2.windows2000

③continue; ④count++;

三、编程题

1.参考代码如下:

#include

#include

#define N 101

int main(){

}

2.参考代码如下:

15

int i,j,line,a[N];

for(i=2;i

a[i]=i;

for(j=i+1;j

{

}

printf("n");

for(i=2,line=0;i

}

return 0;

if(a[i]!=0){

}

if(line==10){

}

printf("n");

line=0;

printf("%5d",a[i]);

line++;

if(a[i]!=0&&a[j]!=0)

if(a[j]%a[i]==0)

a[j]=0;

for(i=2;i

C语言程序设计课后答案

#include "stdio.h"

int main( )

{

}

3.参考代码如下:

#include

int main(){

}

4.参考代码如下:

#include

int main( )

{

int a[20],i,max,n;

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

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

max=a[0];

n=0;

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

if(max

{

}

max=a[i];

n=i;

printf("max=%d,n=%d",max,n);

return 0;

int i,n,k=16,a[16]={0};

printf("Please enter a digit:");

scanf("%d",&n);

while(n>0)

{

}

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

printf("%2d",a[i]);

return 0;

a[--k]=n%2;

n=n/2;

/* 将十进制数转变为二进制数*/

int month_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},

int year,month,day;

int yearday,leap,i;

16

{0,31,29,31,30,31,30,31,31,30,31,30,31}};

C语言程序设计课后答案

}

printf("nEnter year_month_day:");

scanf("%d %d %d",&year,&month,&day);

leap=((year%4==0)&&(year%100!=0)||(year%400==0));

yearday=day;

for(i=1;i

yearday+=month_tab[leap][i];

printf("yearday=%d",yearday);

return 0;

5.参考代码如下:

#include

int main(){

}

int i,s;

printf("Enter string 1: ");

gets(str1);

printf("Enter string 2: ");

gets(str2);

i=0;

while((str1[i] == str2[i] && str1[i]!= '0')) /*比较两字符串第一个不同的字符*/

i++;

s=str1[i]-str2[i];

printf("%dn", s);

return 0;

char str1[100],str2[100],c;

17

C语言程序设计课后答案

第8章 函数

一、选择题

1.A 2.B 3.C 4.A 5.A 6.C 7.C 8.D

二、填空题

1.5,6

3.① int fun(int x,int y);

4.① i+1

2.11,4

② max=fun(fun(a,b),c);

② &a[i]

三、编程题

1.参考代码如下:

#include

long rfact(int n)

{

}

int main()

{

}

2.参考代码如下:

#include

int main()

{

18

if(n<0)

{

}

else if(n<=1)

else

return(n*rfact(n-1)); /*递归调用自己*/

return(1);

printf("Negative argument to fact!n");

exit(-1);

int n;

long f;

printf("Please input an integral number:");

scanf("%d",&n);

f=rfact(n);

printf("%d!=%ldn",n,f);

return 0;

C语言程序设计课后答案

}

double turn(char x[]);

char str[10];

double a;

gets(str);

a=turn(str);

printf("%fn",a);

return 0;

double turn(char x[])

{

}

3.参考代码如下:

#include

float max=0,min=0;

int main()

{

}

float average(float array[],int n)

{

int i;

double m=0;

for(i=0;x[i]!='0';i++)

if(x[i]>='0'&&x[i]<='9') m=m*16+x[i]-'0';

else if(x[i]>='A'&&x[i]<='F') m=m*16+x[i]-'A'+10;

else if(x[i]>='a'&&x[i]<='f') m=m*16+x[i]-'a'+10;

return m;

/*定义全局变量,max最高分,min最低分*/

float average(float array[],int n); /*函数说明*/

float ave,score[10];

int i;

printf("Please enter 10 scores:");

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

scanf("%f",&score[i]);

/*函数调用*/ ave=average(score,10);

return 0;

/*自定义函数*/

printf("max=%6.2fnmin=%6.2fnaverage=%6.2fn",max,min,ave);

int i;

float aver,sum=array[0];

max=min=array[0];

for(i=1;i

{

19

C语言程序设计课后答案

}

}

if(array[i]>max)

max=array[i];

min=array[i];

else if(array[i]

sum+=array[i];

aver=sum/n;

return(aver);

4.参考代码如下:

#include

int main()

{

}

int large (int x,int y)

{

20

int a[10],b[10],i,n=0,m=0,k=0;

printf("Please enter array a:n");

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

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

printf("Please enter array b:n");

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

{

}

printf("a[i]>b[i] %d timesna[i]=b[i] %d timesn a[i]

if(n>k)

printf("array a is larger than array bn");

printf("array a is smaller than array bn");

printf("array a is equal array bn");

else if (n

else

return 0;

if(large(a[i],b[i])==1)

else

k=k+1;

n=n+1;

m=m+1;

else if(large(a[i],b[i])==0)

scanf("%d",&b[i]);

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

C语言程序设计课后答案

}

int flag;

if(x>y)

else

flag=0;

return (flag);

flag=1;

flag=-1;

else if(x

5.参考代码如下:

#include

double fun (int m)

{

}

int main()

{

}

int m;

printf("please input m:");

scanf("%d",&m);

printf("nThe result is %lfn", fun(m));

return 0;

double y=1.0 ;

int i ;

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

y-=1.0/(i*i);

return(y);

21

C语言程序设计课后答案

第9章 指针

一、选择题

1.B 2.D 3.A 4.B 5.C 6.A 7.C 8.C 9.A 10.A

二、填空题

1.① int *p;

③ int (*p)[4];

⑤ int (*p)();

2.4 12

3.8 10

4.135

5.① num=*b;

② int *p[4];

④ int *p();

⑥ int **p;

②num=*c;

三、编程题

1.参考代码如下:

#include

void swap(int *p1,int *p2)

{

}

int main()

{

int *a,*b,*c,x,y,z;

a=&x;

b=&y;

c=&z;

printf("输入3个整数:");

scanf("%d%d%d",a,b,c);

printf("%d,%d,%dn",*a,*b,*c);

if(*a<*b)

swap(a,b);

swap(a,c);

swap(b,c);

22

int t;

t=*p1;

*p1=*p2;

*p2=t;

if(*a<*c)

if(*b<*c)

C语言程序设计课后答案

}

printf("x=%d,y=%d,z=%dn",x,y,z);

return 0;

2.参考代码如下:

#include

int main()

{

}

3.参考代码如下:

#include

int main ()

{

char str[50],*p,*s,c;

printf("Enter string:");

gets(str);

p=s=str;

while (*p)

p++;

/*找到串结束标记'0'*/

/*指针回退一个字符,指针p指向字符串中的最后一个字符*/

/*当串前面的指针s<(小于)串后面的指针p时,进行循环*/

/*交换两个指针所指向的字符*/

/*串前面的指针s向后(+1)移动*/

/*串后面的指针p向前(-1)移动*/

p--;

{

}

puts(str);

return 0;

c =*s;

*s++=*p;

*p--=c;

/*指针p和s指向str */

while(s

char str1[80],str2[80],str[80];

char *p,*q,*r,*s;

printf("Enter string1:");

gets(str1);

printf("Enter string2:");

gets(str2);

for(p=str1,q=str2,r=str;*p!='0'&&*q!='0';)

if(*p<*q)

else

*r++=*q++;

/*若str2中的字符较小,则将它复制到str中*/

/*判断哪个字符串还没有处理完毕*/

/*继续处理(复制)尚未处理完毕的字符串*/

23

/*完成串合并*/

/*比较str1和str2中的字符*/

*r++=*p++; /*若str1中的字符较小,则将它复制到str中*/

s=(*p!='0')?p:q;

while(*s!='0')

C语言程序设计课后答案

}

*r++=*s++;

/*向str中存入串结束标记*/ *r='0';

puts(str);

return 0;

printf("Result:");

4.参考代码如下:

#include

void inverte(int *x, int n)

{

}

int main()

{

}

5.参考代码如下:

#include

int main()

{

int *p,temp,*i,*j, m=(n-1)/2;

i=x;

j=x+n-1;

p=x+m;

{

}

temp=*i;

*i=*j;

*j=temp;

/*声明变量*/

/*变量I存放数组首地址*/

/*变量j存放数组末尾元素地址*/

/*变量P存放数组中间元素地址*/

/*交换数组前半部分和后半部分元素*/ for(;i<=p;i++,j--)

int i,a[10]={1,2,3,4,5,6,7,8,9,0};

printf("输入数组元素:n");

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

printf("%d,",a[i]);

printf("n");

inverte(a,10);

/*定义数组*/

/*输出数组*/

/*使数组元素逆序*/

/*输出逆序后数组*/

printf("逆序输出数组元素:n");

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

printf("%d,",a[i]);

printf("n");

return 0;

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; /*定义数组*/

24

C语言程序设计课后答案

}

int *p,(*pt)[4],i,j;

printf("显示数组:");

/*声明指针、指针型数组等变量*/

for(p=a[0];p

{

}

printf("n");

printf("请输入要输出的位置: i= ,j= n ");

pt=a;

scanf("i=%d,j=%d",&i,&j);

return 0;

/*输入元素位置*/

/*输出指定位置的数组元素*/ printf("a[%d,%d]=%dn",i,j,*(*(pt+i)+j));

if((p-a[0])%4==0)printf("n");

printf("%4d",*p);

/*每行输出4个元素*/

/*输出数组元素*/

6.参考代码如下:

#include

#include

void sort(char *strings[],int n)

{

}

int main()

{

int n = 5;

int i;

char *strings[]={"C language","Basic","World wide","Hello world",

/*构造字符串数组*/

25

/*对字符串排序*/

char *temp;

int i,j;

for (i=0;i

{

}

for (j=i+1;j

{

}

if (strcmp(strings[i],strings[j])>0)

{

}

temp=strings[i];

strings[i]=strings[j];

strings[j]=temp;

/*比较字符大小,交换位置*/

"One world,one dream!"};

C语言程序设计课后答案

}

sort(strings, n);

for (i=0; i

/*排序*/

printf("%sn",strings[i]);

return 0;

26

C语言程序设计课后答案

第10章 预处理命令

一、选择题

1.B 2.B 3.D 4.A 5.C

二、填空题

1.宏定义、文件包含、条件编译

2.不带参数宏 带参数宏

3.① CIRCLE(R,L,S,V) ② S=PI*R*R;

27

C语言程序设计课后答案

第11章 用户自定义数据类型

一、选择题

1.B 2.A 3.C 4.D 5.A 6.D 7.C 8.D 9.B 10.C

二、填空题

1.struct DATE d={2018,3,25};

3.struct node *

2.struct student *

三、编程题

1.参考代码如下:

#include

#include

typedef struct MyComplex

{

double real;

double img;

}mc;

mc Plus(mc a,mc b)

{

}

mc Sub(mc a,mc b)

{

}

void Show(mc a)

{

mc result;

= + ;

= + ;

return result;

mc result;

= - ;

= - ;

return result;

if( == 0 && == 0)

printf("0.000n");

printf("%.4fin",);

else if( == 0)

else if( == 0)

28

C语言程序设计课后答案

}

else

{

}

printf("%.4fn",);

if( < 0)

else

printf("%.4f+%.4fin",,);

printf("%.4f%.4fin",,);

int main()

{

}

2.参考代码如下:

#include

#define N 5

typedef struct node

{

int num;

int score1;

int score2;

mc a,b;

printf("输入第一个复数 a:n");

scanf("%lf%lf",&,&);

printf("输入第二个复数 b:n");

getchar();

scanf("%lf%lf",&,&);

printf("a b的和: ");

Show(Plus(a,b));

printf("a b的差: ");

Show(Sub(a,b));

return 0;

}STU;

int main()

{

STU s[N];

int sum=0,ave,i;

for(i=0;i

{

printf("请输入第%d个学生的信息(学号、数学成绩、英语成绩):n",i+1);

scanf("%d%d%d",&s[i].num,&s[i].score1,&s[i].score2);

29

C语言程序设计课后答案

}

}

printf("所有学生的信息如下:n");

printf(" 学号tt数学成绩t英语成绩n");

for(i=0;i

{

}

ave=sum/(N*2);

printf("5名学生2门课程的总平均分为:%dn",ave);

return 0;

sum=sum+s[i].score1+s[i].score2;

if(s[i].score1==100||s[i].score2==100)

{

}

printf("学号为%d的学生有满分成绩n",s[i].num);

printf("其信息为:学号:%d,t数学成绩:%d,t英语成printf("%5d:t%10dt%10dtn",s[i].num,s[i].score1,s[i].score2);

for(i=0;i

绩:%dn",s[i].num,s[i].score1,s[i].score2);

3.参考代码如下:

#include

#include

#define N 5

{

STU* creatList(int n)

{

/*单链表中结点的个数(不包括头结点)*/

typedef struct node

int num;

int score1;

int score2;

struct node *next;

}STU;

/*尾插法建立单链表,返回值为单链表的头指针*/

/*head为头指针;s指向当前结点;r指向当前结STU *head,*s,*r;

int i=0;

点的前一个结点*/

if((head=(STU *)malloc(sizeof(STU)))==NULL)

{

printf("error!");

30

/*为头结点分配内存空间,并检测是否分配成功*/

C语言程序设计课后答案

}

}

return(0);

/*将头结点的指针域置空*/ head->next=NULL;

r=head;

for(i=0;i

{

}

r->next=NULL;

return head;

if((s=(STU *)malloc(sizeof(STU)))==NULL)/*s结点总指向当前处理结点*/

{

}

printf("请输入第%d个学生的信息(学号、数学成绩、英语成绩):n",i+1);

scanf("%d%d%d",&s->num,&s->score1,&s->score2);

r=s;

/*从键盘读入数据,存入当前结点的数据域*/

/*将r的指针域指向s,形成单链表*/ r->next=s;

printf("error!");

return(0);

void printList(STU *L)

{

}

int main()

{

/*输出链表元素*/

STU *p;

printf("所有同学的信息如下:n");

printf(" 学号tt数学成绩t英语成绩n");

while(p!=NULL)

{

}

printf("%5d:t%10dt%10dtn",p->num,p->score1,p->score2);

p=p->next;

p=L->next;

printf("n");

int n=N,x,sum=0,ave;

STU *s,*t;

s=creatList(n);

printList(s);

t=s->next;

31

C语言程序设计课后答案

}

while(t!=NULL)

{

}

ave=sum/(n*2);

printf("5名学生2门课程的总平均分为:%dn",ave);

return 0;

sum=sum+t->score1+t->score2;

if(t->score1==100||t->score2==100)

{

}

t=t->next;

printf("学号为%d的学生有满分成绩n",t->num);

printf("其信息为:学号:%d,t数学成绩:%d,t英语成绩:%dn",t->num,t->score1,t->score2);

4.参考代码如下:

#include

struct stu

{

int num;

int mid;

int end;

int ave;

} s[3];

int main()

{

}

5.参考代码如下:

#include

#include

int i;

struct stu *p;

for(p=s;p

{

}

for(p=s;p

printf("%d %d %d %dn",p->num,p->mid,p->end,p->ave);

return 0;

scanf("%d %d %d",&(p->num),&(p->mid),&(p->end));

p->ave=(p->mid+p->end)/2;

/*包含动态内存分配函数的头文件*/

32

C语言程序设计课后答案

#define N 5

{

int data;

/*单链表中结点的个数(不包括头结点)*/

typedef struct node

struct node *next;

/*尾插法建立单链表,返回值为单链表的头指针*/

/*head为头指针,s指向当前结点,r指向当前结点的}STU;

struct node *creatList(int n)

{

}

void printList(struct node *L)

{

struct node *head,*s,*r;

int i=0;

前一个结点*/

if((head=(struct node *)malloc(sizeof(struct node)))==NULL)

{

}

head->next=NULL;

r=head;

{

}

r->next=NULL;

return head;

/*r为尾结点其next指向NULL*/

/*返回单链表的头指针*/

/*输出链表元素*/

if((s=(struct node *)malloc(sizeof(struct node)))==NULL)

{

}

scanf("%d",&s->data); /*从键盘读入数据,存入当前结点的数据域*/

r->next=s;

r=s;

/*将r的指针域指向s,形成单链表*/

/*r指向s结点*/

printf("error!");

return 0;

/*s结点总指向当前处理结点*/

for(i=0;i

/*将头结点的指针域置空*/

/*r指向头结点*/

printf("error!");

return 0;

/*为头结点分配内存空间,并检测是否分配成功*/

struct node *p;

{

33

p=L->next;

/*p指向第一个结点的next*/

/*当p不为NULL时循环*/ while(p!=NULL)

C语言程序设计课后答案

}

}

printf("%5d",p->data); /*输出p所指的结点的数值*/

p=p->next; /*使p后移一个结点*/

printf("n");

/*将元素x插入链表L的尾部*/

/*指针s指向要插入的新结点*/

void insert(STU *L,int x)

{

}

int main()

{

}

int n=N,x;

STU *s;

STU *s,*p,*q;

if((s=(STU *) malloc(sizeof(STU)))==NULL)

printf("error!");

/*将元素x赋给新结点s的数据域*/

/*p指针首先指向第一个元素*/

s->data=x;

p=L->next;

{

}

q=p;

p=p->next;

/*p指针顺着单链表的头指针往后找,直到单链表的末/*把新结点的指针域指向原来p结点的后继结点*/

while(p!=NULL)

尾,q指针指向单链表的最后一个结点*/

s->next=q->next;

q->next=s; /*p结点的指针域指向新结点,完成在链表末尾插入结点的工作*/

/*s为链表头指针*/

printf("请输入%d个整型数,建立单链表:n",n);

s=creatList(n);

printf("建立的包含%d个元素的单链表如下:n",n);

printList(s);

printf("请输入要插入的元素:n");

scanf("%d",&x);

insert(s,x);

printf("插入一个元素后的单链表如下:n");

printList(s);

return 0;

34

C语言程序设计课后答案

第12章 文件

一、选择题

1.B 2.C 3.B 4.D 5.B 6.D 7.C 8.C

二、填空题

1.rewind

2.① fgetc(fp)!=EOF ② fclose(fp);

三、编程题

1.参考代码如下:

#include

#include

int main()

{

}

35

FILE *fp;

char c,str1[100],str2[100];

int i=0;

if((fp=fopen("myfile","r+"))==NULL)

{

}

while(!feof(fp))

{

}

str1[i++]='0';

rewind(fp);

fputs(str1,fp);

rewind(fp);

fgets(str2,i-1,fp);

puts(str2);

fclose(fp);

return 0;

c=fgetc(fp);

if(c>='A'&&c<'Z')

c+=32;

str1[i++]=c;

printf("Cannot open file!");

exit(0);

C语言程序设计课后答案

2.参考代码如下:

#include

#include

#define BUFFSIZE 5000

void main()

{

}

FILE *sfp,*dfp;

int i;

char buf[BUFFSIZE];

if((sfp=fopen("","r"))==NULL)

{

}

if(!(dfp=fopen("","w")))

{

}

i=0;

while(!feof(sfp))

{

}

while(--i>=0)

fclose(sfp);

fclose(dfp);

/*控制反序操作*/

/*写入目的文件中*/ fputc(buf[i],dfp);

buf[i++]=fgetc(sfp);

if(i>=5000)

{

}

printf("buffer not enough!");

exit(0);

/*读出数据送缓冲区*/

/*若i超出5000,程序设置的缓冲区不足*/

/*判断是否文件尾,不是则循环*/

printf("Destination file cannot be openedn");

exit(0);

/*以只写方式打开*/

printf("Source file cannot be openedn");

exit(0);

/*以只读方式打开*/

36

本文标签: 结点指针输出数组