C语言程序设计呼克佑课后习题答案_第1页
C语言程序设计呼克佑课后习题答案_第2页
C语言程序设计呼克佑课后习题答案_第3页
C语言程序设计呼克佑课后习题答案_第4页
C语言程序设计呼克佑课后习题答案_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计习题解答(参考)

习题一

一、单项选择题

LD2.A3.D

二、填空题

1.顺序结构选择结构循环结构

2.算法

3.语言简洁、运算符丰富、结构化语言

4.可移植性强、代码效率高、书写格式自由

5.错误隐蔽、有时会难以理解、有时会难以修改

6.群举法(枚举法)、递推法(迭代法)、递归法

7.做什么怎么做

二、应用题

include<sldio.h>

voidmain()

printf("*********************A***\n"),

printff4Clanguageprogram'n");

printf(“**********朱*************

I

2.

include<stdio.h>

voidmain()

(

inta,b,c,niax;

scanfC%d%d%d,\&a,&b,&c);

if(a>b)max=a;

elsemax=b;

if(niax<c)max=c;

printf(t4Max=%d\n,,,max);

习题二

一、单项选择题

l.A,D,E2.B,E3.B.D,E,F,H4.B,F5.A,B,E

二、填空题

l.(l)int⑵char⑶double(4)long⑸char(6)char(7)inl(8)long

2.(D0(2)0(3)2(4)4(5)4(6)8(7)0(8)2

3.211I

4.不做

5.sin(25*3.14159/180)+cos(30*3.14159/180)

6.2

8.5

三、给出各个程序的运行b结果

1.运行结果如下:

3

21

5

5

2.运行结果如下:

6,9

9,27

习题三

一、单项选择题

1.1)2.B3.1)4.C5.B6.C7.B8.A9.C1().I)

11.D12.D13.B14.A15.A16.B17.C18.C19.B20.B

21.1)22.C23.C24.D25.C26.C27.1)28.D29.B30.A

二、填空题

1.从标准设备(键盘)上读入•一个字符向标准设备(键盘)上输出一个字符

#include<sidio.h>

2.以十进制形式输入一个整数表示从标准输入设备(键盘)读取输入的3个整型数

表示掉过3个整数不读取用来输入一个字符

3.以十进制形式输出一个整数以十六进制形式输出一个整数

以十进制小数形式输出,输出的数据长度为7位,其中有两位为小数

以字符形式输出一个字符

4.分程序:;5.-16.非00

7.a%7==0else8.39.2

10.forwhiledo-while11.Continue12.a=16,y=42

13.1014.y=1915.22222

16.3917.718.5,5

19.n=420.-321.8

3.04.5675.thisnumberisahuiwen

四、编程题

1.编写一个程序,要求用户输入两个整数,判定其中一个是否能整除另一个。

#include<stdio.h>

intmain()

(

inta,b;

while(scanf("%d%d",&a,&b)==2)

(

if(a%b)printfi"不能整除\n");

elseprintf("能整除\n");

)

return0;

)

2.编程实现:输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一:

①能同时被3,5,7整除;

else

if(x<3)

y=0.1/2;

else

do

{

y=(0.2+y)/2;

x=x-l;

}while(x-3>0);

}

prinlf("%3y);

}

4.输入a、b、c三条边,判断它是否构成三角形。若能构成三角形,则计算三角形面积。

#include<stdio.h>

#includc<math.h>

main()

{

floata,b,c,S=0,x=0;

printf("输入三角形三条边的边K:");

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

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

(

x=(a+b+c)/2.0;

S=sqrt(x*(x-a)*(x-b)*(x-c));

printf("area=3);

)

Else

printf("不能构成三角形\n");

)

5.打印出所有“水仙花数“。所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数

本身。例如,153是一个“水仙花数”,因为153=13+53+3是

#include"stdio.h"

#include"math.h"

main()

{

inti;

inta.b.c;

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

(

a=i%10;/*取个位数号

b=i/10%l0;/*取十位数号

c=i/100;/*取百位数*/

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

printf("%d",ii;

)

)

6.编写一个程序,在屏幕上显示如下图形(图形的层数读者自行设定):

*

***

*****

*****

***

*

#include<stdio.h>

#include<math.h>

inain()

{

inti,j,k;

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

(

for(j=hj<=abs(i);j++)

printf("%c",32);

for(j=l;j<=7-2*abs(i);j++)

printfC'*");

printf(n\n");

)

1

7.求斐波那契(Fibonacci)数列:1,1,2,3,5,8,……的前40个数。

斐波那契数列的定义:

Fi=l(n=1)

F2=l(n=2)

Fn=Fn.|+Fn-2(n>3)

#include<stdio.h>

main()

(

intfl,f2,f;

inti;

fl=f2=l;

printf("%d\n%d\n”,fl,f2);

for(i=l;i<=38;i++)/*已经有两个数,只要再产生38个数即可可

{

■l+f2;

flM2;

f2=f;

printf("%d\ii",f);

)

8.编程实现求1+2+3+…+n之和,并输出当其和第一次大于或等于10()时的值及n值。

#include<stdio.h>

main()

(

inti,s,t=0;

i=l;s=0;

while(i<=100)

(

s=s+i;

if(s>=100&&«1)/*设定l只求第一次和大于100的内容*/

(

printff第一次和大于或等于100时和为%d\n”,s);

prinlff第一次和大于或等于100时n^%d\n",i);

t+=l;

)

i=i+l;

)

printf("s=%d\nH,s);

)

9.整元换零钱问题。把I元兑换成I分、2分、5分的硬币,共有多少种不同的换法?

#include<stdio.h>

main()

{

inti,j,k,n;

n=100,k=0;

fbr(i=0:i<=n/5;i++)

for(j=0j<=(n-i*5)/2y++)

{

printf("5cent=%d\t2cent=%d\tIcent=%d\n",i,j,n-i*5-j*2);

k++;

)

prinlf("totallimes=%d\n",k);

}

10.编写解鸡兔同笼问题的程序。用户输入头的数目和脚的数目,输出鸡、兔各有多少只。

#include<stdio.h>

main()

{intx,y,a,b;

printf("输入鸡兔头的数目:");

scanf(M%d",&x);

printf("输入鸡兔脚的数目:“);

scanf("%d”,&y);

a=x-(y-2*x)/2;

b=(y-2*x)/2;

printf("鸡有%(1只,兔有%d只”,a,b);

)

11.打印杨辉三角形,即(x+yF展开式的各项系数,并且在程序运行开始时,问用户n的值为多

少,接着打印如下形式至指定行数。

121

1331

14641

#include<stdio.h>

intmain()

{intn,k,j,c;

printf("Input=");

scanf("%d",&n);

for(k=l;k<=n;k++)

{

〃printf(”%*s”,4*(n-k));/*格式控制语句,有和没有是两种显示方式*/

c=l;

printf("%4d",c);

for(j=l;j<=k-l;j++)

(

c=c*(k-j)/i;

printf("%8d",c);

)

printfC'Xn");

)

return0;

)

12.个位数是6,且能被3整除的五位数共有多少个?

#include<stdio.h>

main()

{inta,count=0;

longi;

for(i=10000;i<100000;i++)

{

a=i%10;

if(a==6&&i%3==0)

count++;

printf("这样的数共计:%d",count);

习题四

一、单项选择题

1.C2.D3.1)4.D5.C6.1)7.B8.A9.B1().B

二、填空题

1.—15014float2.8

3.连续数组名4.按行存储

5.046.350

7.368.9

9.710.#include<stdio.h>#include<string.h>

三、程序阅读分析题

1.i==ja[i][j]a[i][j]printf(*\n*)

2.k=32

3.gbcdefa

4.012345

123456

234567

345678

456789

5678910

5.you&me

四、编程题

1.设数组V中的数据元素递增有序,现将x插入到数组V的适当位置,使数组元素的值仍保持有序。

#include<stdio.h>

voidmain()

intV[15]={65,70,73,75,79,81,85,88,90};/*有9个初值,有序*/

intn=9,x=77;/*数组中当前有n个数据,将x插入数组V中,仍保持有序*/

inti;

for(i=n-l;i>=0&&;'[i]>x:i—)/*将V数组中的数据从后往前比较*/

V[i+l]=V[i];/*若大于x,后移一个位置*/

V[i+l]=x;/*将x插入数组V中*/

n++;/*数组中数据个数增1*/

for(i=0:i<n:i++)/*输出数组中的n个数据*/

printf(线d”:V[i]);

printf("\n");

)

2.定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数,然后按顺序每五个数求

出一个平均值,放在另一个数组中并输出。

#include<stdio.h>

voidmainO

intarray[30],average[6]={0};

inti,j;

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

array[i]=2*(i+l);

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

(

for(i=5*j;i<5*(j+l);i++)

average[j]+=array[i];

average[j]/=5;

prinlf("%daverage[j]);

)

printf("\n");

)

3.输入一个字符串,在指定位置插入一个字符。

#include<stdio.h>

voidmain()

(

charstr[81],ch;

inti,position;

printf("输入一个字符串:”);

gets(str);

printf(〃输入要插入字符的位置:”);

scanf&position);

printf("输入要插入的字符:〃);

scanf(飞*c%c”,&ch);

for(i=0;str[i]!=:\0';i++);

whi1e(i>=position-1)

|

str[i+l]=str[i];

i—;

)

str[position-l]=ch;

printf(〃在指定位置插入字符后的字符串:断An",str);

)

4.输入一行字符,分别统计其中十个数字字符O,T,…,9出现的次数。

#include<stdio.h>

voidmain()

(

charstr[81];

intcount[10]={01,i;

printf("输入一行字符:\n");

gets(str);

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

if(str[i]>=0,&&str[i]<=9')

count[strEi]-*0*]++;

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

printf('\'%c\':%d\n",'O'+i,count[i]);

)

5.输入矩阵A(2行3列)和矩阵B(3行4列),计算它们的乘积C=ABO

(矩阵乘积计算公式:CrEAlkBkj)

#include<stdio.h>

voidmain()

(

inta[2][3],b[3][4],c[2][4]:

inti,j,k;

printf(〃输入2行3列矩阵数据:\n〃);

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

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

scanf&a[i][j]);

printf(〃输入3行4列矩阵数据:\n");

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

for(j=0;j<4;j«i)

scanf&b[i][j]);

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

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

(

c[i][j]=0;

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

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

)

printf("两矩阵的乘积矩阵是:\n");

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

(

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

printf(飞5d",Mi][j]);

printf("\n");

)

)

6.下面是一个5X5阶的螺旋方阵。试编程打印出此形式的nXn(nV10,顺时针方向旋进)。

12345

161718196

152425207

142322218

131211109

#include<stdio.h>

^defineN5

voidmain()

inta[N][N],i,j,k,n;

i=0;

j=0;

n=l;

for(k=l;k<=N*N;k++)

(

if(i==n-l&&j<N-n)

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

elseif(j=N-n&&i<N-n)

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

elseif(i==N-n&&j>n-l)

a[i][j—]=k;

else

a[i—][j]=k;

if(i==n&&j==n-l)

n++;

)

for(i=();i<N;iii)

(

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

printf(飞5d”,a[i][j]);

printfC\n*);

)

}

7.编一程序,实现字符串复制,不使用sircpyO函数。

#include<stdio.h>

voidmain()

(

charstrl[81],str2[]=z,Iamastudent.";

inti;

for(i=0;(strl[i]=str2[i])!='\0';i++);

printf(,,%s\n%s\nv,strl,str2);

)

8.编一程序,求字符串的长度,不使用strlenO函数。

#include<stdio.h>

voidmain()

(

charstr[81];

intn;

printf("输入一个字符串:");

gets(str);

n=0;

while(str[n]!='\0')

n++;

printf("字符串的长度是:刎\n”,n);

)

9.有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、

数字、空格以及其他字符的个数。

#include<stdio.h>

voidmain()

(

charstr[3][81];

charcategory[5][l0]={〃UPPER〃,“LOWER","DIGIT","SPACE","OTHER"};

inti,j,count[5]={0};

printf("输入3行文字:\n");

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

gets(str[i]);

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

for(j=0;str[i][]]!=>\0';j++)

if(str[i][j]>=A*&&str[i][j]<=Z')

count[0]++;

elseif(str[i][j]>=>a'&&str[i][j]<=*z*)

count[1]++;

elseif(str[i]O'&&str[i][j]<=,9')

count[2]++;

elseif(str[i][j]==*)

count[3]++;

else

count[4]++;

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

printf(w%s:%d\n/z,category[i],count[i]);

)

10.某班期终考试科目为高等数学(MT)、英语(EN)和物理(PH)。有3()人参加考试。为评定奖学金,

要求统计并输出一个表格,表格内容包括学号、各科分数、总分和平均分,并标出三门课均在90分

以上者(该栏标志输出为“Y”,否则为“N”),表格形式如下:

NOMTENPHSUMV>90

197879227692Y

292919027391Y

390818225384N

可以将学生的学号和各科成绩放在数组a[30][4]中,然后进行统计处理。

#include<stdio.h>

^defineN30

voidmain()

(

intstu[N][4],sum;

inti,j;

chargreat90;

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

(

printf(〃输入第%d个学生的数学、英语和物理成绩(空格分隔):〃,i+1);

stu[i][O]=i+1;

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

scanf&stu[i][j]);

)

printfCNOMTENPHSUMV>90\n");

printf('-------------------------------------\n");

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

(

sum=0;

great90=,YJ;

printfstu[i][0]);

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

(

printf(飞5d”,stu[i][j]):

sum>=stu[i][j];

if(stu[i][j]<90)

grcat90=,N';

)

printf(飞5d“:sum);

printfsum/3);

printf(,/%5c\n,/,great90);

)

}

习题五

一、单项选择题

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

二、填空题

1.52.883.2

4.12125.4126.1行的行地址

三、程序分析题

1.24

2.ENGLISH

MATH

MUSIC

PHYSICS

CHEMISTRY

四、编程题(以下题目均要求用指针方法实现)

1.#include<stdio.h>

#include<string.h>

voidmain()

(

char*n[]={"china","japan","korea","american","england"},*temp;

int

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

(

k=i;

for(j=i+l;j<5;j++)

if(strcmp(n[k],n[j])>0)k=j;

if(k!=i)

{

temp=n[k];n[k]=n[i];n[i]=tcmp;

)

)

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

printf("%s\n",n[i]);

)

2.#include<stdio.h>

voidmain()

(

inta[10]=)87,78,69,79,98,86,91,75,71,95),*p,temp;

inti,min_order;

P=a;

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

if(*p>a[i])p=a+i;

min_ordcr=p-a;

printf(,zMin=a[%d]=%d\nz,,min_order,ci[min_order]);

temp=*p;*p=a[Oj;a[0]=temp;

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

printfa[i]);

printf("\n");

)

3.略

4.#include<stdio.h>

voidmainO

{

inta[10]={10,20,30,40,50,60,70,80,90};/*数组中9个数有序*/

int*p,x=35;/*x为待插入的数据*/

for(p=&a[8];(p>=a)&&(*p>x);p-)

*(p+D=*p;/*从后向前将比x大的数据后移一个位置*/

*(p+l)=x;/*将X插入到数组中*/

for(p=a;p<a+10;p++)/*输出数组中的数据*/

prinlf*p);

printfC\n*);

)

5.#include<stdio.h>

voidmain()

(

chars[255],prrior=,',*p;

printf(〃输入一行英文:\n〃);

gets(s);

for(p=s;*p!=>\0";p++)/*扫描字符串*/

(

if(prrior==,*&&*p)='a'&&*p<='z')/*单词开始且是小写字母*/

*p-=32;/*将单词的第一个字母改为大写*/

prrior=*p;

)

puts(s);

)

6.#include<stdio.h>

voidmain()

(

charstrl[81j,str2amaboy.*;

char*s,*t;

s=str2;

t=strl;

while((*t=*s)!='\0')

(

s++;

t++;

}

puts(strl);

)

7.略

8.略

9.编写程序,实现输入月份号,输出相应的英文月份名。

10.略

11.略

12.#include<stdio.h>

voidmain()

(

charstr[81],*p,*q;

printf("输入一个字符串:\n");

gets(str);

for(q=str;*q!=>\0*;q++);

for(p=str,q—;(p〈q)&&(*p==*q);p++,q—);

if(p<q)printf("字符串:%s不是回文串!\n”,str);

elseprintf("字符串:%s是回文串!\n”,str);

}

13.#include<stdio.h>

voidniain()

(

charstr[81],*p,qc,pc;

printf(〃输入一个字符串:\n〃);

gets(str);

for(q=str;*q!=,\0J;q++);

for(p=str,q—;p<q;p++,q—)

(

pc=(*p>=,a,&&*p<='z')?*p-32:*p;

qc=(*q>=,a'&&*q<='z)?*q-32:*q;

if(pc!=qc)break;

)

if(p<q)printf("字符串:用s不是回文串!\n”,str);

elseprintf("字符串:%s是回文串!\n",str);

)

14.#include<stdio.h>

#includc<stdlib.h>

#include<time.h>

voidmain()

(

int*a,n,i;

printf("输入一维数据的长度:〃);

a=(int*)malloc(n^sizeof(int));//动态分酉己内存空间

printf("%d\n",tine(NULL));

srand(time(NULL):;〃初始化随机数序列

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

a[i]=rand()%100;//产生随机数

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

printf(z,%d”,a[i]);〃输出数据

printf("\n");

)

15.略

习题六

一、单项选择题

1-5ADBDB6-10BAACD

二、填空题

1.从定义变量处到程序结束局部变量

2.auto

3.return(表达式)void

4.returns;

5.*pl>*p2;*pl=*p2;

6.floata[],intns+=ali];

7.*s-*t

8.w(i-l]

9.>(b!=0)

10.i<10array!i]average(score)

三、程序阅读分析题

1.maxis2

2.100,200,300

3.last=64

4.5109

5.12

四、编程题

1.函数root2如下:

voidroot2(floata,floatb,floatc,floatroot[J)

{floatd;

d=b*b-4*a*c;

root[0]=(-b+sqrt(d))/(2*a);

root[1]=(-b-sqrt(d))/(2*a);

)

2.函数countc如下:

intcountc(chararrry[J)

{inti.n=0;

for(i=0;array[ij!-\0';i++)

if(array[i]>='A'&&array[i]<-Z')n++;

return(n);

)

3.解:函数link如下:

intlink(charsll],chars2[],chars3[])

{inti,j;

forCi=0;sl[i]!='\0';i++)s3[i]=sl[i];

fora=0;s2[i]!='\0';j++,i++)s3[i]=s2[j];

s3[i]='\0';

return(i);

)

4.#include<stdio.h>

voidfun(floata[].intrefloat*pmax,float*pmin,float*pave)

inti;

*pinax=*pinin=*pave=alOJ;

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

{

if(*pmax<a[i])*pinax=a[i];

if(*pmin>a[i])*pniin=a[i];

*pave+=a[i];

I

*pavc/=n;

)

voidmain()

{

floata[10],niax,min,ave;

intn,i;

printf("plcascinputdata:\n");

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

scanf("%r;&a[i]);

piintf("pleaseinputnnuEiberiVi");

scanf(M%d'\&n);

fun(a.n,&max,&min,&ave);

printf("max=%f,niin=%f,avc=%f',niax,min,ave);

}

5.#include<stdio.h>

intage(intn)

(

intc;

if(n==l)c=10;

elsec=age(n-i)+3;

returnc;

)

voidmain()

(

intn=5;

printf("%d\n",age(5));

I

6.#include<stdio.h>

floatp(intn,intx)

floatu,v,w;

if(n==O)returnI;

elseif(n==l)returnx;

else

{u=(2*n-1)*x*p((n-1),x);

v=(n-l)*p((n-2),x);

w=(u-v)/n;

returnw;

)

}

voidmain()

{

inta,b;

floatc;

printf("Inputn,x:\n");

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

c=p(a,b);

printf("theresultis%f',c);

}

7.#includc<stdio.h>

void(riangle(inlx,inty,intz)

{

if(x+y>z&&y+z>x&&x+z>y)

{if(x==y&&y==z)printf("Thisisaequilateraltriangle."):

elseif(x==y||y==z||x==z)printf("Thisisaisoscelestriangle.");

)

else

printt'C'Can'lcompositiontriangle!");

}

voidmain()

(

intx,y,z;

printf("Inputx,y,z:\iT);

scanf("%d,%d,%d",&x,&y,&z);

triangle(x,y,z);

}

8.

#include<stdio.h>

floatou(intn)

(

floats=0;

inti;

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

s+=1.000000/i;

return(s);

floatji(intn)

(

floats=0;

inti;

fdr(i=l;i<=n;i+=2)

s+=1.000000/i;

retum(s);

}

floatcall(floal(*fp)(inl),intn)

{

retum((*fp)(n));

}

voidmain()

(

floatsum;

intn;

scanf("%d",&n);

printf("sum=");

if(n%2==0)

sum=call(ou,n);

else

sum=call(ji,n);

printf("%f',sum);

习题七

一、单项选择题

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

二、填空题

1.typedef2.union3.使用字干数最大4.p=&x

三、程序分析题

1.10,x

四、编程题

1.#include<stdio.h>

#include<stdlib.h>

#include<time.h>

^defineN10

typedefstructnode{

intvalue;

structnode*next;

}Node;

voidmain()

(

Node*head,*t,*p;

inti,x;

srand((unsigncd)time(NULL));〃初始化随机数序列

head=(Node*)malloc(sizeof(Node));

head->next=NULL;〃建立带头节点的空单链表

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

(

x=rand()%100;

printf('%d”,x);

t=(Node*)malloc(sizcof(Node));

t->value=x;

p=head;

while(p->next!=NUI.L&&p->next->va1ue<x)

p=p->next;

t->next=p->next;

p->next=t;

}

printf(,z\nz,);

p=head->ncxt;

while(p!=NULL)

(

printf(^d",p->/alue);

p=p->next;

}

printf("\n");

)

2.#include<stdio.h>

#includc<string.h>

#defineN3

structstudent{

ininum;

charname[11];

charsex[3];

intage;

floatscore;

);

voidinain()

(

structstudentstu|Nl;

intnan=0,nv=0,i;

floatpjnl=O,pjcj=O;

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

(

printf("输入第%d个学生的数据:\n”,i+l);

printf(“学号:");scanf("%d%*c”,&siu[i].num);

printf("姓名丁");gets(stu[i].name);

printf("性别:");gets(stu[i].sex);

printf("年龄:");scanf("%d",&stu[i].age);

printf("成绩:");scanf("%F',&stu[i].scorc);

)

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

(

if(strcmp(stu[i].sex,"男")==0)nan++;

elsenv++;

pjnl+=stu[il.age;

pjcj+=stu[i].score;

}

pjnl=pjnl/N:

pjcj=pjcj/N;

print,男生人数:%d,女生人数:%d,平均年龄:%.2f,平均成绩:%.2f\n",nan,nv,pjnl,pjcj);

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

if(stufil.score<pjcj)

printf("%s%.2f\n,',stu[i].name,stu[iJ.score);

}

3.略

习题八

一、单项选择题

LA2.A3.B4.B5.A6.C7.B8.D9.A10.A

二、填空题

1.文本文件二进制文件542.文件型指针变量stdio.h

3."D:\\abc.dat"4.getchar()

5.puts(buff)6.rewind(fp)fseek(fp,72L,SEEK_SET)

7.将数组a中的10个整数写入fp文件8.二进制

9.fprintf(stdout,,•,)10.新建一个文件

三、应用题

I.为什么要打开和关闭文件?

答:通过打开操作可以建立程序和文件之间的通讯通道,并为文件操作建立缓冲区,使程序中的一

个文件型指针变量代表一个文件。而关闭操作可以释放相关的资源,如缓冲区等。

2.使用读写函数对文件读或写操作后,文件位置指针将如何变化?

答:使用读写函数对文件读或写操作后,文件位置指针将指向所读或写数据之后的数据。

3.有两个磁盘文件datal和data2,各存放若干整数,并且这些整数是按从小到大的顺序存放的。将

这两个文件中的数据合并输出到文件data中,data中的数据要求有序。

假设是文本文件,且文件中的数据是用空格或Tab或回车分隔的(也可考虑是二进制文件)。

#include<stdio.h>

#include<stdlib.h>

voidmain()

(

FILE*frl,*fr2,*fw;

intil,i2,si,s2;

frl=fopen("datal","r");/*打开文件datal*/

fr2=fopen(〃dala2","r");/*打开文件data2*/

fw二fopen("data",;/*打开文件data*/

sl=fscanf(frl,&i1);/*从文件datal读第一个数据,不成功返回EOF*/

s2:fscanf(fr2,&i2);/*从文件data2读第一个数据,不成功返回EOF*/

whi1e(s1!=E0F&&,s2!=EOF)/*文件datal和data2均未结束,循环*/

(

if(il<i2)

(

fprintf(fw,”,il);/*从文件datal读的数据写入文件data*/

sl=fscanf(frl,"刎",&i1);/*从文件datal读下一个数据*/

)

else

(

fprintf(f\v,"%d",i2);/*从文件data2读的数据写入文件data*/

s2=fscan「(fr2,〃%d〃,&i2);/*从文件data2读下一个数据*/

)

)

while(sl!=EOF)/*文件datal的剩余数据写入文件data*/

{

fprintf(fw,*%d*,il);

sl=fscanf(frl,"%d",&i1);

)

while(s2!=E0F)/*文件data2的剩余数据写入文件data*/

(

fprintf(fw,*%d",⑵;

s2=fscanf(fr2,&i2);

)

fcloseal1();

)

4.输入N个学生的信息(包括:学号,姓名,5科成绩,总分),统计所有学生的总分,存入二进制

文件stu_sc.dat中。然后读取该文件,查找总分最高的学生,并输出该生的所有信息。

#include<stdio.h>

^defineN3

typedefstruct{

intnum;

charname;

intscore[5];

inttotal;

}STUDENT;

voidmain()

(

FILE*fp;

STUDENTst,smax;

inti,j;

fp=fopen(,zstu_sc.dat","wb+”);

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

{

printf("输入学生的学号和5门课成绩:");

scan&st.num);

st.total=0;

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

(

scanf(W,&st.score[j]);

st.total+=st.score[j];

)

fwrite(&st,sizeof(STUDENT),1,fp);

)

rewind(fp);

fread(&smax,sizeof(STUDENT),1,fp);

while(feof(fp))

fread(&st,sizeof(STUDENT),l,fp);

if(st.total>smax.total)

smax=st;

)

printf(“%d”,smax.num);

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

printf(^d*.smax.score[j]);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论