admin管理员组

文章数量:1530893

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

.

高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案

――武汉大学出版社

习题1参考答案

一、选择题

1. A 2. D

二、填空题

1. BASIC、FORTRAN、AL_GOL60和COBOL

2. 8

3. 关键字

4. 编辑、编译、链接和运行

三、简答题

1.答:

(1)C语言具有结构化的控制语句。C语言提供了结构化程序所必需的基本控制语句,实现了对逻辑流的有效控制。

(2)C语言具有丰富的数据结构类型。C语言除提供整型、实型、字符型等基本数据类型外,还提供了用基本数据类型构造出的各种复杂的数据结构,如数组、结构、联合等。C语言还提供了与地址密切相关的指针类型。此外,用户还可以根据需要自定义数据类型。

(3)C语言具有丰富的运算符。C语言提供了多达34种运算符,丰富的数据类型与丰富的运算符相结合,使C语言的表达力更具灵活性,同时也提高了执行效率。

(4)C语言简洁、紧凑,使用方便、灵活,程序书写自由,有9种控制语句。

(5)C语言既具有高级语言的功能,又具有低级语言的许多功能,通常被称为中级计算机语言。它既是成功的系统描述语言,又是通用的程序设计语言。

(6)C语言与汇编语言相比,可移植性好。

(7)功能强大。C语言具有低级语言的一些功能,所以,生成目标代码质量高,程序执行效率高。现在许多系统软件都用C语言来描述,可以大大提高了编程效率。

2.答:运行一个C语言程序,一般需要经过如下几个步骤:①上机输入并编辑源程序;②编译源程序;③与库函数连接;④生成可执行目标程序;⑤运行目标程序。

3.答:

(1)操作系统的设计与实现。C语言是一种应用非常广泛的结构化高级程序设计语言,既适合编写应用软件,又适合编写系统软件。

.

.

(2)工业控制。由于C语言具有简洁、灵活、代码效率高、能进行位操作等优点,C语言大量应用在单板机、单片机上,以及嵌入式领域等。

(3)图形图像处理。C语言在内存管理和进程控制方面有丰富的指令,而且它能提供快速运行的代码,因而C语言适合进行图形程序设计。

(4)教学领域。C语言是理想的结构化程序设计语言,其描述能力强,应用十分广泛,因此广泛应用于教学领域。许多计算机相关课程,如数据结构及算法大多是用C语言进行描述的。

习题2参考答案

一、选择题

1. A 2.A 3.C

二、填空题

1. 基本数据类型、构造数据类型、指针类型、空类型

2. 反斜线“\”

3. 枚举数据类型(Enumerated Data Type)

三、简答题

1.答:

在C语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类。

基本类型是数据类型的基础,由它可以构造出其他复杂的数据类型。基本类型的值不可以再分解为其他类型。C语言的基本类型包括整型、实型(浮点型)、字符型和枚举型。

C语言的构造类型包括数组类型、结构类型和联合类型。构造类型是根据已定义的一种或多种数据类型用构造的方法定义的。也就是说,一个构造类型的值可以分解成若干个"成员"或"元素"。每个"成员"或"元素"都是一个基本数据类型,或又是一个构造类型。

指针是一种特殊而又具重要作用的数据类型,其值表示某个量在内存中的地址。虽然指针变量的取值类似于整型量,但这是两种完全不同类型的量,一个是变量的数值,一个是变量在内存中存放的地址。

在调用函数时,被调用函数通常应向调用函数返回一个函数值。返回的函数值具有一定的数据类型,应在函数定义的函数说明中给以说明。例如,在例1-1中给出的max函数定义中,函数头为"int max(int a,int b,int c)",其中写在函数名max之前的类型说明符"int"表示该函数的返回值为整型量。但是,也有一类函数,被调用后并不向调用函数返回函数值,这种函数可以定义为"空类型"(也称"无值型"),其类型说明符为void。

习题3参考答案

一、选择题

.

.

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

二、填空题

1. 4字节,1字节,4字节,8字节

2. 20

3. 6 60

4. 26 25

5. 256 22

三、简答题

1. C语言的基本类型包括整型、实型(浮点型)、字符型和枚举型。

2. 定义符号常量和定义变量都要指定数据类型,系统将为其分配一定的存储空间。其不同之处在于:定义符号常量必须给出常量值,且以后不能修改本常量的值;而变量可以在定义变量的同时赋初值,以后可以修改该变量。

3. 常量就是在程序的运行过程中该量是不可修改的量;变量在程序的运行过程中允许对该变量的值进行修改。

四、程序题

1.程序运行结果为:

11

10

10

11

-10

-11

2.程序运行结果为:

3,12,4,4

习题4参考答案

一、选择题

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

二、填空题

1.! && ||

2.0 1

3.1

4.4

5.-1

三、编程题

1.给出等级成绩′A′、′B′、′C′、′D′、′E′,假设,90分以上为′A′,80~89分为′B′,70~79分为′C′,60~69分为′D′,60分以下为′E′,输入一个等级成绩,问属于哪一个分数段。

参考代码如下:

main()

{

.

.

int score,m,n;

char grade;

n=1;

while(n)

{ printf("Please enter the score:");

scanf("%d",&score);

if((score>100)||(score<0))

printf("n Wrong! n");

else n=0;

}

if(score==100) m=9;

else m=(score-score%10)/10;

switch(m)

{ case 0:case 1:case 2:case 3:case 4:case 5:grade='E';break;

case 6:grade='D';break;

case 7:grade='C';break;

case 8:grade='B';break;

case 9:grade='A';

}

printf("score=%d,grade=%cn",score,grade);

}

2.编程序打印出以下图形:

1

121

12321

654321

参考代码如下:

#include

main()

{

int i,j;

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

{

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

printf("%d",j);

for(j=i-1;j>0;j--)

printf("%d",j);

printf("n");

}

}

.

.

3.用1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,问共有几种兑换方案?每种方案各换多少枚?

[提示:设5分、2分和1分的硬币各换x,y,z枚,依题意有x+y+z=100,5x+2y+z=150,由于每一种硬币都要有,故5分硬币最多可换28枚,2分硬币最多可换73枚,1分硬币可换100-x-y枚,x,y,z只需满足第2个方程即可打印,对每一组满足条件的x,y,z值,用计数器计数即可得到兑换方案的数目。]

参考代码如下:

main()

{

int x,y,z,s=0;

for(x=1;x<=28;x++)

for(y=1;y<=73;y++)

for(z=1;z<=148;z++)

{

if(150==5*x+2*y+z)

if(100==x+y+z)

{

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

s++;

}

}

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

}

4.编程:从键盘输入正整数n,输出1+(1+2)+(1+2+3)+……+(1+2+3+…+n)。

参考代码如下:

#include

main()

{

int n,i,s=0,t=0;

printf("Please enter n=");

scanf("%d",&n);

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

{

t=t+i;

s=s+t;

}

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

}

.

.

习题5参考答案

一、选择题

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

二、填空题

1.按行的顺序依次存放的

2.0

3.4

4.6

三、编程题

nn-11.有一个多项式:Pn(x)=a0x+a1x+…+an

它们的系数a0,a1,…,an存放在一个一维数组中。编制程序,输入系数和x的值,计算并输出Pn(x)。

参考代码如下:

#define N 4

main()

{ int a[N+1],p,x,i;

printf("Please enter a[%d],...,a[0]:n",N);

for(i=N;i>=0;i--)

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

printf("Please enter x=n");

scanf("%d",&x);

p=a[N];

for(i=N;i>0;i--)

{

p=p*x+a[i-1];

}

printf("Pn(x)=%dn",p);

}

2.打印以下的杨辉三角形(要求打印6行)。

1

11

121

1331

14641

15101051

参考代码如下:

#include

#include

#define N 6

main()

{

.

.

int i,j,max[N][N];

for(i=0;i

{

for(j=0;j

{ max[i][0]=1;

max[i][i]=1;

}

}

for(i=2;i

{

for(j=1;j

{ max[i][j]=max[i-1][j-1]+max[i-1][j]; }

}

for(i=0;i

{

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

{ printf("%d",max[i][j]); }

printf("n");

}

}

3.编写程序,将一个数插入到有序的数列中去,插入后的数列仍然有序。

参考代码如下:/*假设原有5个数*/

#include

main()

{ int a[6]={1,2,6,10,15};

int n,i,j;

printf("Please enter the insert number:");

scanf("%d",&n);

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

if(n>a[i])

continue;

else

break;

for(j=4;j>=i;j--)

a[j+1]=a[j];

a[i]=n;

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

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

printf("n");

}

4.编写程序,在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则 .

.

输出no found。

参考代码如下:

#include

main()

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

int n,i,j,k=0;

printf("Please enter the number:");

scanf("%d",&n);

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

{ while(n==a[i])

{k=1;j=i;break;}

}

if(k==1)

printf("a[%d]n",j);

else

printf("no found.n");

}

5.编程将下列矩阵中的元素向右移动一列,最右一列移至第一列。

1 4 6

8 10 12

[提示:用二维数组v存放矩阵中元素,数组v可在定义时初始化;有两种方法实现这种移动:一种方法是将移动后的元素放在另一个二维数组中;另一种方法是利用一个中间变量仍将移动后的元素放在数组v中。]

#include

void main()

{ int i,j;

int a[2][3]={1,4,6,8,10,12};

int b[2][3];

b[0][0]=a[0][2];

b[0][1]=a[0][0];

b[0][2]=a[0][1];

b[1][0]=a[1][2];

b[1][1]=a[1][0];

b[1][2]=a[1][1];

printf("a[2][3]:");

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

{ printf("n");

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

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

}

printf("nresult:n");

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

.

.

{ printf("n");

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

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

}

printf("n");

getch();

}

6.利用公式c(i,j)a(i,j)b(i,j)计算m×n的矩阵A和m×n的矩阵B之和,已知a(i,j)为矩阵A的元素,b(i,j)为矩阵B的元素,c(i,j)为矩阵C的元素,i1,2,...,m,j1,2,...,n。

[提示:用二维数组元素做函数参数编程实现矩阵相加。]

#include

#include

#define M 2

#define N 2

int a[M][N];

int b[M][N];

int c[M][N];

void matrix(int a[][M],int b[][N]);

main()

{

int i,j,t;

clrscr();

printf("Please input a[%d][%d]n",M,N);

for(i=0;i

for(j=0;j

{ scanf("%d",&t);

a[i][j]=t;

}

printf("Please input b[%d][%d]n",M,N);

for(i=0;i

for(j=0;j

{ scanf("%d",&t);

b[i][j]=t;

}

matrix(b,c);

printf("a[%d][%d]",M,N);

for(i=0;i

{ printf("n");

for(j=0;j

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

}

printf("n");

printf("b[%d][%d]",M,N);

for(i=0;i

.

.

{ printf("n");

for(j=0;j

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

}

printf("n");

printf("c[%d][%d]=A+B:",M,N);

for(i=0;i

{ printf("n");

for(j=0;j

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

}

}

void matrix(int a[][M],int b[][N])

{ int i,j,k,t;

for(i=0;i

for(j=0;j

c[i][j]=a[i][j]+b[i][j];

}

习题6参考答案

一、选择题

1.A 2.D 3.D

二、填空题

1.指针 取地址

2.3

3.9876

876

4.24

三、编程题

1.输入3个整数,按从大到小的次序输出。

参考代码如下:

main()

{

int a[3],i,j,t;

printf("Please enter three number:n")

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

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

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

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

.

.

if(a[j]

{ t=a[j];a[j]=a[j+1];a[j+1]=t;}

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

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

}

2.编写将n阶正方矩阵进行转置的函数。在主函数中对一个4行4列的矩阵调用此函数。

参考代码如下:

int array[4][4];

convert(int array[4][4])

{

int i,j,t;

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

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

{

t=array[i][j];

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

array[j][i]=t;

}

}

main( )

{

int i,j;

printf("Input array:n");

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

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

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

printf("noriginal array :n");

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

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

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

printf("n");}

convert(array);

printf("convert array:n");

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

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

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

printf("n");

}

}

3.有三个整型变量i,j, k,请编写程序,设置三个指针变量p1,p2,p3,分别指向i, j,k。然后通过指针变量使i,j,k三个变量的值顺序交换,即把i的原值赋给j,把j的原值赋给k,把k的原值赋给i。要求输出i,j, k的原值和新值。

参考代码如下:

.

.

main()

{

int i, j , k, temper;

int *p1, *p2, *p3;

printf("Please input 3 integers:n");

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

p1=&i; p2=&j; p3=&k;

printf("before changed ,the 3 numbers are:n");

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

temper=*p1;*p1=*p3;*p3=*p2; *p2=temper;

printf("after changed ,the 3 numbers are:n");

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

}

4.用指针编写程序,把输入的字符串按逆顺序输出。

参考代码如下:

#include

#include

char *s="1a2b3c4d";

void main()

{

int i,j;

char t;

for(i=0,j=strlen(s)-1;i

{

t=s[i];

s[i]=s[j];

s[j]=t;

}

printf("%sn",s);

}

习题7参考答案

一、选择题

1.C 2.B 3.C

二、填空题

1.float

2.自动(auto)

3.12

4.9.000000

二、编程题

1.编写函数,已知三角形的三个边长,求三角形的面积。

.

.

参考代码如下:

#include

#include

main()

{

float a,b,c,s,area;

printf("Please enter three sides:n");

scanf("%f,%f,%f",&a,&b,&c);

if(a+b>c&&b+c>a&&a+c>b)

{

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("area=%.2fn",area);

}

else printf("It is not a triangle !n");

}

2.编程计算p=k! (m-k)!的值。

参考代码如下:

#include

void main()

{

int k,m;

long p;

printf("Please enter k,m:");

scanf("%d,%d",&k,&m);

p=f(k)*f(m-k);

printf("%dn",p);

}

int f(int n)

{

if(n>1)

return n*f(n-1);

else

return 1;

}

3.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。并在主函数中调用该函数时,使用数组作为实际参数。

参考代码如下:

#define N 3

.

.

int array[N][N];

convert(int array[N][N])

{

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;

}

}

main()

{

int i,j;

printf("Input array(3*3):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");}

convert(array);

printf("convert array:n");

for (i=0;i

{ for(j=0;j

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

printf("n");

}

}

4.设计一个函数,用以计算下面数列前n项之和(以n为形参变量)。

2/1、3/2、5/3、8/5、13/8、21/13、…。

参考代码如下:

#define N 6

main()

{

int n=N,i=1;

float s=0;

while (i<=n)

{

.

.

s=s+(i+1.0)/i;

i++;

}

printf("s(%d)=%.5fn",n,s);

}

5.如果一个数恰好等于它的因子之和,则该数称为“完数”。例如:6的因子是1、2、3,而6=1+2+3。编程序输出1000之内的所有完数。输出形式是:“6它的因子是1,2,3”。

参考代码如下:

main()

{

static int k[100];

int i,j,n,s;

for(j=2;j<1000;j++)

{

n=-1;

s=j;

for(i=1;i

{

if((j%i)==0)

{

n++;

s=s-i;

k[n]=i;

}

}

if(s==0)

{

printf("%d is a wanshu",j);

for(i=0;i

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

printf("%dn",k[n]);

}

}

}

一、选择题

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

.

8参考答案 习题

.

二、填空题

1.pt=s1;

pt->=1001;

2.0,1,2,100,101,102

3.结构体变量

4.Four, Three,Four

三、编程题

1.有10个学生,每个学生的数据包括学号(num)、(name[9])、性别(sex)、年龄(age)、三门课成绩(score[3]),要求在main()函数中输入这10个学生的数据,并对每个学生调用函数count()计算总分。

参考代码如下:

#include

#include

#define N 2

struct student

{ int num;

char name[9];

char sex;

int age;

int score[3];

}stu[N];

main()

{ int count(int s[]);

int i,j;

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

{

printf("num:");

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

printf("name:");

scanf("%s",&stu[i].name);

printf("sex:");

scanf("%s",&stu[i].sex);

printf("age:");

scanf("%d",&stu[i].age);

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

{

printf("score[%d]:",j+1);

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

}

}

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

printf("stu[%d] sum=%dn",i,count(stu[i].score));

}

int count(int s[])

.

.

{

int i,sum=0;

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

sum=sum+s[i];

return sum;

}

2.口袋中有若干红、黄、蓝、白、黑5种颜色的球,每次从口袋中取出3个球,编程打印出得到3种不同颜色的球的所有可能取法。

参考代码如下:

main()

{ enum color{red,yellow,blue,white,black};

enum color i,j,k,pri;

int n=0,loop;

for(i=red;i<=black;i++)

for(j=red;j<=black;j++)

if(i!=j)

{ for(k=red;k<=black;k++)

if((k!=i) && (k!=j))

{ n=n+1;

printf("%-4d",n);

for (loop=1;loop<=3;loop++)

{ switch (loop)

{ case 1:pri=i;break;

case 2:pri=j;break;

case 3:pri=k;break;

default:break;

}

switch (pri)

{ case red: printf("%-10s","red");break;

case yellow: printf("%-10s","yellow");break;

case blue: printf("%-10s","blue");break;

case white: printf("%-10s","white");break;

case black: printf("%-10s","black");break;

default:break;

}

}

printf("n");

}

}

printf("ntotal:%5dn",n);

}

.

.

3.25个人围成一个圈,从第1个人开始顺序报号,凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。

参考代码如下:

#include

main()

{ int *a;

int i,j,position=1,total=0,chage;

a=(int *)malloc(25*sizeof(int));

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

a[i]=i+1;

while(1)

{ position+=2;

while (position>25-total)

position=position-25+total;

chage=a[position-1];

for (j=position;j<25-total;j++)

a[j-1]=a[j];

a[25-total-1]=chage;

total++;

if (total==25)

{

for (i=0;i<25-1;i++)

printf("%d->",a[25-i-1]);

printf("%dn",a[0]);

printf("the last one is %dn",a[0]);

return 0;

}

}

}

4.建立一个链表,每个结点包括:学号、、成绩。

(1)输入一个学号,检索该学生的有关信息;

(2)从链表中删去成绩低于40分的学生。

参考代码如下:

#include

#include

struct stu

{

int no;

char name[9];

int score;

struct stu *next;

};

.

.

struct stu *create()

{ struct stu *head,*p,*q;

int n,s;

head->next=NULL;

p=head;

while(1)

{ printf("no,name,score:");

scanf("%d,%s,%d",&n,&s);

if(n==0&&s==0)

break;

else

{ q=(struct stu *)malloc(sizeof(struct stu));

q->no=n;q->score=s;q->next=NULL;

p->next=q;p=q;

}

}

return head;

}

struct stu *search(struct stu *h,int n)

{ struct stu *p=h->next;

while(p!=NULL&&P->NO!=n)

p=p->next;

return p;

}

struct stu *delete(struct stu *head,char *s)

{

struct stu *p1,*p2;

if(head==NULL)

{

printf("nempty list!n");

goto end;

}

p1=head;

while (pi->score>40 && p1->next!=NULL)

{ p2=p1;p1=p1->next;

free(p1);

}

return head;

}

main()

{ int n;

struct stu *q;

printf("enter number:");

scanf("%d",&n);

.

.

q=create(n);

printf("list:n");

while(q!=NULL)

{

printf("%sn",q->name);

q=q->next;

}

}

习题9参考答案

一、选择题

1.D 2.C 3.A

二、填空题

1.L=18.849558

S=28.274337

三、解答题

预处理命令的功能是什么?包括哪几部分?#include预处理命令的两种格式分别为什么?

答:预处理命令的功能是告诉编译系统在对源程序进行编译之前应该做些什么。预处理命令主要包括文件包含、宏定义和条件编译三个部分。

#include预处理命令

格式一:#include<包含文件名>

格式二:#include”包含文件名”

习题10参考答案

一、选择题

1.C 2.B 3.A

二、填空题

1.二进制文件

2.顺序 随机

3.hello,

4.picursound

三、编程题

1.从键盘输入学生姓名,寻找学生记录是否存在,并输出相应信息。

参考代码如下:

#include

#include

#define N 10

struct student

.

.

{

char name[9];

int num;

int age;

char sex;

}stu[N];

void main()

{ int i;

char s[10];

FILE *fp;

if((fp=fopen("stu","rb"))==NULL)

{ printf("Can not open file!n");

exit(0);

}

gets(s);

for(i=0;i

{ fseek(fp,i*sizeof(struct student),0);

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

while(s==stu[i].name)

printf("%s,%d,%d,%dn",stu[i].name,stu[i].num,stu[i].age,stu[i].sex);

}

fclose(fp);

}

2.有两个磁盘文件a和b,各存放一行字母。要求将两个文件的内容读到内存中,并将其合并到一起(按字母顺序排列),然后输出到一个新文件。

参考代码如下:

#include "stdio.h"

main()

{ FILE *fp;

int i,j,n;

char c[160],t,ch;

if((fp=fopen("A","r"))==NULL)

{ printf("file A cannot be openedn");

exit(0);

}

printf("n A contents are :n");

for(i=0;(ch=fgetc(fp))!=EOF;i++)

{ c[i]=ch;putchar(c[i]);

}

fclose(fp);

if((fp=fopen("B","r"))==NULL)

{ printf("file B cannot be openedn");

exit(0);

.

.

}

printf("n B contents are :n");

for(i=0;(ch=fgetc(fp))!=EOF;i++)

{ c[i]=ch;

putchar(c[i]);

}

fclose(fp);

n=i;

for(i=0;i

for(j=i+1;j

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

{ t=c[i];c[i]=c[j];c[j]=t; }

printf("n C file is:n");

fp=fopen("C","w");

for(i=0;i

{ putc(c[i],fp);

putchar(c[i]);

}

fclose(fp);

}

3.编写将字符串“Turbo C”、“BASIC”、“FORTRAN”、“COBOL”以及“PL_1”写入文件中去的程序。

参考代码如下:

#include

#include

#define N 30

void main()

{ FILE *fp;

char c,file[N];

scanf("%s",file);

if((fp=fopen(file,"w"))==NULL)

{ printf("Can not open filen");

exit(0);

}

c=getchar();

c=getchar();

while(c!='n')

{ fputc(c,fp); putchar(c);

c=getchar();

}

putchar(N);

fclose(fp);

}

.

.

4.设文件中存放着学生的基本情况,这些情况由以下结构体描述:

struct student

{

long int num;/*学号*/

char name[10];/**/

int age;/*年龄*/

char speciality[20];/*专业*/

};

请编写程序,输出学号在97010~97020之间的学生学号、、年龄和专业。

参考代码如下:

#include "stdio.h"

struct student

{ long int num;

char name[10];

int age;

char speciality[20];

};

FILE *fp;

main()

{ struct student st;

fp=fopen("","rb");

if(fp==NULL)

printf("file not foundn");

else

{ while(!feof(fp))

{ fread(&st,sizeof(struct student),1,fp);

if(>=970101&&<=970135)

printf("%ld,%s,%d,%sn",,,,lity);

}

}

}

.

本文标签: C语言类型函数数据类型变量