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

下载本文档

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

文档简介

C语言程序设计习题解答(参考)习题一单项选择题1.D 2.A 3.D二、填空题 1.顺序结构选择结构循环结构 2.算法 3.语言简洁、运算符丰富、结构化语言 4.可移植性强、代码效率高、书写格式自由 5.错误隐蔽、有时会难以理解、有时会难以修改 6.群举法(枚举法)、递推法(迭代法)、递归法 7.做什么怎么做三、应用题 1. include<stdio.h> voidmain() { printf(“*************************\n”); printf(“Clanguageprogram\n”); printf(“*************************\n”); } 2. include<stdio.h> voidmain() { inta,b,c,max; scanf(“%d%d%d”,&a,&b,&c); if(a>b)max=a; elsemax=b; if(max<c)max=c; printf(“Max=%d\n”,max); }

习题二一、单项选择题1.A,D,E 2.B,E 3.B,D,E,F,H 4.B,F 5.A,B,E二、填空题 1.⑴int ⑵char ⑶double ⑷long ⑸char ⑹char ⑺int ⑻long 2.⑴0 ⑵0 ⑶2 ⑷4 ⑸4 ⑹8 ⑺0 ⑻2 3.2 1 1 1 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.D2.B3.D4.C5.B6.C7.B8.A9.C10.D11.D12.D13.B14.A15.A16.B17.C18.C19.B20.B21.D22.C23.C24.D25.C26.C27.D28.D29.B30.A二、填空题1.从标准设备(键盘)上读入一个字符向标准设备(键盘)上输出一个字符#include<stdio.h>2.以十进制形式输入一个整数表示从标准输入设备(键盘)读取输入的3个整型数表示掉过3个整数不读取用来输入一个字符3.以十进制形式输出一个整数以十六进制形式输出一个整数以十进制小数形式输出,输出的数据长度为7位,其中有两位为小数以字符形式输出一个字符4.分程序;; 5.-1 6.非007.a%7==0else 8.3 9.210.forwhiledo-while 11.Continue 12.a=16,y=4213.10 14.y=19 15.2222216.39 17.7 18.5,519.n=4 20.-3 21.8三、程序阅读分析题 4. 567 5.thisnumberisahuiwen四、编程题1.编写一个程序,要求用户输入两个整数,判定其中一个是否能整除另一个。#include<stdio.h>intmain(){ inta,b; while(scanf("%d%d",&a,&b)==2){ if(a%b)printf("不能整除\n");elseprintf("能整除\n"); } return0;}2.编程实现:输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一:①能同时被3,5,7整除;②能被其中两数(要指出哪两个)整除;③能被其中一个数(要指出哪一个)整除;④不能被3,5,7任一个整除。#include<stdio.h>voidmain(){ inta; printf("请输入一个整数\n"); scanf("%d",&a); if(a%3==0&&a%5==0&&a%7==0) printf("%d能同时被3,5,7整除\n",a); elseif(a%3!=0&&a%5==0&&a%7==0) printf("%d能同时被5,7整除\n",a); elseif(a%3==0&&a%5!=0&&a%7==0) printf("%d能同时被3,7整除\n",a); elseif(a%3==0&&a%5==0&&a%7!=0) printf("%d能同时被3,5整除\n",a); elseif(a%3==0&&a%5!=0&&a%7!=0) printf("%d能被3整除\n",a); elseif(a%3!=0&&a%5==0&&a%7!=0) printf("%d能被5整除\n",a);elseif(a%3!=0&&a%5!=0&&a%7==0) printf("%d能被7整除\n",a); elseprintf("%d不能被3,5,7整除\n",a);}3.市郊长途电话收费标准如下:通话时间在三分钟以下收费一角,三分钟以上则每超过一分钟加一角。在7:00—21:00之间通话者,按收费标准全价收费;在其它时间通话者,按收费标准的一半收费。请计算某人在x时间通话y分钟,应缴多少电话费。(通话时间利用整数输入实现)#include<stdio.h>main(){ floatx,y=0; intt; scanf("%f%d",&x,&t);if(t>7&&t<21){if(x<3)y=0.1;elsedo{y=0.2+y;x=x-1;}while(x-3>0); } else {if(x<3)y=0.1/2;elsedo{y=(0.2+y)/2;x=x-1;}while(x-3>0); } printf("%f",y);}4.输入a、b、c三条边,判断它是否构成三角形。若能构成三角形,则计算三角形面积。#include<stdio.h>#include<math.h>main(){ floata,b,c,S=0,x=0; printf("输入三角形三条边的边长:"); scanf("%f%f%f",&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=%.3f\n",S); } Elseprintf("不能构成三角形\n");}5.打印出所有”水仙花数”。所谓”水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如,153是一个”水仙花数”,因为153=13+53+33。#include"stdio.h"#include"math.h"main(){ inti;inta,b,c;for(i=100;i<=999;i++) {a=i%10;/*取个位数*/b=i/10%10;/*取十位数*/c=i/100;/*取百位数*/if(i==a*a*a+b*b*b+c*c*c)printf("%d",i);}}6.编写一个程序,在屏幕上显示如下图形(图形的层数读者自行设定):*************************#include<stdio.h>#include<math.h>main(){inti,j,k;for(i=-3;i<=3;i++){for(j=1;j<=abs(i);j++)printf("%c",32);for(j=1;j<=7-2*abs(i);j++)printf("*");printf("\n");}}7.求斐波那契(Fibonacci)数列:1,1,2,3,5,8,......的前40个数。斐波那契数列的定义:F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n≥3)#include<stdio.h>main(){intf1,f2,f;inti;f1=f2=1;printf("%d\n%d\n",f1,f2);for(i=1;i<=38;i++)/*已经有两个数,只要再产生38个数即可*/{ f=f1+f2; f1=f2; f2=f; printf("%d\n",f);}}8.编程实现求1+2+3+…+n之和,并输出当其和第一次大于或等于100时的值及n值。#include<stdio.h>main(){ inti,s,t=0; i=1;s=0; while(i<=100) { s=s+i; if(s>=100&&t<1)/*设定t只求第一次和大于100的内容*/ { printf("第一次和大于或等于100时和为%d\n",s); printf("第一次和大于或等于100时n为%d\n",i);t+=1; } i=i+1; } printf("s=%d\n",s);}9.整元换零钱问题。把1元兑换成1分、2分、5分的硬币,共有多少种不同的换法?#include<stdio.h>main(){ inti,j,k,n; n=100,k=0; for(i=0;i<=n/5;i++) for(j=0;j<=(n-i*5)/2;j++) { printf("5cent=%d\t2cent=%d\t1cent=%d\n",i,j,n-i*5-j*2); k++; } printf("totaltimes=%d\n",k);}10.编写解鸡兔同笼问题的程序。用户输入头的数目和脚的数目,输出鸡、兔各有多少只。#include<stdio.h>main(){ intx,y,a,b; printf("输入鸡兔头的数目:"); scanf("%d",&x);printf("输入鸡兔脚的数目:"); scanf("%d",&y);a=x-(y-2*x)/2; b=(y-2*x)/2; printf("鸡有%d只,兔有%d只",a,b);}11.打印杨辉三角形,即(x+y)n展开式的各项系数。并且在程序运行开始时,问用户n的值为多少,接着打印如下形式至指定行数。111121133114641...#include<stdio.h>intmain(){ intn,k,j,c; printf("Input="); scanf("%d",&n); for(k=1;k<=n;k++) {//printf("%*s",4*(n-k));/*格式控制语句,有和没有是两种显示方式*/c=1;printf("%4d",c);for(j=1;j<=k-1;j++) {c=c*(k-j)/j;printf("%8d",c); }printf("\n"); } 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.D4.D5.C6.D7.B8.A9.B10.B二、填空题1.一15014float2.83.连续数组名4.按行存储5.046.3507.368.99.710.#include<stdio.h>#include<string.h>三、程序阅读分析题1.i==ja[i][j]a[i][j]printf("\n")2.k=323.gbcdefa4. 012345 123456 234567 345678 456789 56789105.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-1;i>=0&&V[i]>x;i--)/*将V数组中的数据从后往前比较*/ V[i+1]=V[i];/*若大于x,后移一个位置*/ V[i+1]=x;/*将x插入数组V中*/ n++;/*数组中数据个数增1*/ for(i=0;i<n;i++)/*输出数组中的n个数据*/ printf("%d",V[i]); printf("\n");}2.定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数,然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。#include<stdio.h>voidmain(){ intarray[30],average[6]={0}; inti,j; for(i=0;i<30;i++) array[i]=2*(i+1); for(j=0;j<6;j++) { for(i=5*j;i<5*(j+1);i++) average[j]+=array[i]; average[j]/=5; printf("%d",average[j]); } printf("\n");}3.输入一个字符串,在指定位置插入一个字符。#include<stdio.h>voidmain(){ charstr[81],ch; inti,position; printf("输入一个字符串:"); gets(str); printf("输入要插入字符的位置:"); scanf("%d",&position); printf("输入要插入的字符:"); scanf("%*c%c",&ch); for(i=0;str[i]!='\0';i++); while(i>=position-1) { str[i+1]=str[i]; i--; } str[position-1]=ch; printf("在指定位置插入字符后的字符串:%s\n",str);}4.输入一行字符,分别统计其中十个数字字符'0','1',…,'9'出现的次数。#include<stdio.h>voidmain(){ charstr[81]; intcount[10]={0},i; printf("输入一行字符:\n"); gets(str); for(i=0;str[i]!='\0';i++) if(str[i]>='0'&&str[i]<='9') count[str[i]-'0']++; for(i=0;i<10;i++) printf("\'%c\':%d\n",'0'+i,count[i]);}5.输入矩阵A(2行3列)和矩阵B(3行4列),计算它们的乘积C=A·B。(矩阵乘积计算公式:Cij=∑AikBkj)#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("%d",&a[i][j]); printf("输入3行4列矩阵数据:\n"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&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",c[i][j]); printf("\n"); }}6.下面是一个5×5阶的螺旋方阵。试编程打印出此形式的n×n(n<10,顺时针方向旋进)。12345161718196152425207142322218131211109#include<stdio.h>#defineN5voidmain(){ inta[N][N],i,j,k,n; i=0; j=0; n=1; for(k=1;k<=N*N;k++) { if(i==n-1&&j<N-n) a[i][j++]=k; elseif(j==N-n&&i<N-n) a[i++][j]=k; elseif(i==N-n&&j>n-1) a[i][j--]=k; else a[i--][j]=k; if(i==n&&j==n-1) n++; } for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%5d",a[i][j]); printf("\n"); }}7.编一程序,实现字符串复制,不使用strcpy()函数。#include<stdio.h>voidmain(){ charstr1[81],str2[]="Iamastudent."; inti; for(i=0;(str1[i]=str2[i])!='\0';i++); printf("%s\n%s\n",str1,str2);}8.编一程序,求字符串的长度,不使用strlen()函数。#include<stdio.h>voidmain(){ charstr[81]; intn; printf("输入一个字符串:"); gets(str); n=0; while(str[n]!='\0') n++; printf("字符串的长度是:%d\n",n);}9.有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。#include<stdio.h>voidmain(){ charstr[3][81]; charcategory[5][10]={"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][j]!='\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][j]>='0'&&str[i][j]<='9') count[2]++; elseif(str[i][j]=='') count[3]++; else count[4]++; for(i=0;i<5;i++) printf("%s:%d\n",category[i],count[i]);}10.某班期终考试科目为高等数学(MT)、英语(EN)和物理(PH)。有30人参加考试。为评定奖学金,要求统计并输出一个表格,表格内容包括学号、各科分数、总分和平均分,并标出三门课均在90分以上者(该栏标志输出为“Y”,否则为“N”),表格形式如下:NOMTENPHSUMV>90———————————————————197879227692Y29291902739lY390818225384N可以将学生的学号和各科成绩放在数组a[30][4]中,然后进行统计处理。#include<stdio.h>#defineN30voidmain(){ intstu[N][4],sum; inti,j; chargreat90; for(i=0;i<N;i++) { printf("输入第%d个学生的数学、英语和物理成绩(空格分隔):",i+1); stu[i][0]=i+1; for(j=1;j<4;j++) scanf("%d",&stu[i][j]); } printf("NOMTENPHSUMV>90\n"); printf("-----------------------------------\n"); for(i=0;i<N;i++) { sum=0; great90='Y'; printf("%5d",stu[i][0]); for(j=1;j<4;j++) { printf("%5d",stu[i][j]); sum+=stu[i][j]; if(stu[i][j]<90) great90='N'; } printf("%5d",sum); printf("%5d",sum/3); printf("%5c\n",great90); }}

习题五一、单项选择题1.B) 2.D) 3.A) 4.D) 5.A) 6.C)二、填空题1.5 2.88 3.24.1212 5.412 6.1行的行地址三、程序分析题1.242.ENGLISHMATHMUSICPHYSICSCHEMISTRY四、编程题(以下题目均要求用指针方法实现)1.#include<stdio.h>#include<string.h>voidmain(){ char*n[]={"china","japan","korea","american","england"},*temp; inti,j,k; for(i=0;i<5;i++) { k=i; for(j=i+1;j<5;j++) if(strcmp(n[k],n[j])>0)k=j; if(k!=i) { temp=n[k];n[k]=n[i];n[i]=temp; } } 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=1;i<10;i++) if(*p>a[i])p=a+i; min_order=p-a; printf("Min=a[%d]=%d\n",min_order,a[min_order]); temp=*p;*p=a[0];a[0]=temp; for(i=0;i<10;i++) printf("%4d",a[i]); printf("\n");}3.略4.#include<stdio.h>voidmain(){ 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+1)=*p; /*从后向前将比x大的数据后移一个位置*/ *(p+1)=x; /*将x插入到数组中*/ for(p=a;p<a+10;p++) /*输出数组中的数据*/ printf("%4d",*p); printf("\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(){ charstr1[81],str2[]="Iamaboy."; char*s,*t; s=str2; t=str1; while((*t=*s)!='\0') { s++; t++; } puts(str1);}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>voidmain(){ charstr[81],*p,*q,qc,pc; printf("输入一个字符串:\n"); gets(str); for(q=str;*q!='\0';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>#include<stdlib.h>#include<time.h>voidmain(){ int*a,n,i; printf("输入一维数据的长度:"); a=(int*)malloc(n*sizeof(int));//动态分配内存空间 printf("%d\n",time(NULL)); srand(time(NULL)); //初始化随机数序列 for(i=0;i<n;i++) a[i]=rand()%100; //产生随机数 for(i=0;i<n;i++) printf("%d",a[i]); //输出数据 printf("\n");}15.略

习题六单项选择题ADBDB6-10BAACD填空题1.从定义变量处到程序结束局部变量2.auto3.return(表达式)void4.returns;5.*p1>*p2;*p1=*p2;6.floata[],intns+=a[i];7.*s-*t8.w[i-1]9.>(b!=0)10.i<10array[i]average(score)三、程序阅读分析题maxis22.100,200,3003.last=644.51095.12四、编程题1.函数root2如下:voidroot2(floata,floatb,floatc,floatroot[]){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[]){inti,n=0;for(i=0;array[i]!='\0';i++)if(array[i]>='A'&&array[i]<='Z')n++;return(n);}3.解:函数link如下:intlink(chars1[],chars2[],chars3[]){inti,j;for(i=0;s1[i]!='\0';i++)s3[i]=s1[i];for(j=0;s2[i]!='\0';j++,i++)s3[i]=s2[j];s3[i]='\0';return(i);}4.#include<stdio.h>voidfun(floata[],intn,float*pmax,float*pmin,float*pave){ inti;*pmax=*pmin=*pave=a[0];for(i=1;i<n;i++){ if(*pmax<a[i])*pmax=a[i];if(*pmin>a[i])*pmin=a[i];*pave+=a[i];}*pave/=n;}voidmain(){ floata[10],max,min,ave; intn,i; printf("pleaseinputdata:\n"); for(i=0;i<10;i++) scanf("%f",&a[i]); printf("pleaseinputnnumber:\n"); scanf("%d",&n); fun(a,n,&max,&min,&ave); printf("max=%f,min=%f,ave=%f",max,min,ave);}5.#include<stdio.h>intage(intn){ intc; if(n==1)c=10; elsec=age(n-1)+3; returnc;}voidmain(){ intn=5; printf("%d\n",age(5));}6.#include<stdio.h>floatp(intn,intx){ floatu,v,w; if(n==0)return1; elseif(n==1)returnx; else {u=(2*n-1)*x*p((n-1),x); v=(n-1)*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.#include<stdio.h>voidtriangle(intx,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 printf("Can'tcompositiontriangle!");}voidmain(){ intx,y,z; printf("Inputx,y,z:\n"); 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;for(i=1;i<=n;i+=2)s+=1.000000/i;return(s);}floatcall(float(*fp)(int),intn){return((*fp)(n));}voidmain(){floatsum;intn;scanf("%d",&n);printf("sum=");if(n%2==0)sum=call(ou,n);elsesum=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.typedef 2.union 3.使用字节数最大 4.p=&x三、程序分析题1.10,x四、编程题1.#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN10typedefstructnode{ intvalue; structnode*next;}Node;voidmain(){ Node*head,*t,*p; inti,x; srand((unsigned)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(sizeof(Node)); t->value=x; p=head; while(p->next!=NULL&&p->next->value<x) p=p->next; t->next=p->next; p->next=t; } printf("\n"); p=head->next; while(p!=NULL) { printf("%d",p->value); p=p->next; } printf("\n");}2.#include<stdio.h>#include<string.h>#defineN3structstudent{ intnum; charname[11]; charsex[3]; intage; floatscore;};voidmain(){ structstudentstu[N]; intnan=0,nv=0,i; floatpjnl=0,pjcj=0; for(i=0;i<N;i++) { printf("输入第%d个学生的数据:\n",i+1); printf("学号:");scanf("%d%*c",&stu[i].num); printf("姓名:");gets(stu[i].name); printf("性别:");gets(stu[i].sex); printf("年龄:");scanf("%d",&stu[i].age); printf("成绩:");scanf("%f",&stu[i].score); } for(i=0;i<N;i++) { if(strcmp(stu[i].sex,"男")==0)nan++; elsenv++; pjnl+=stu[i].age; pjcj+=stu[i].score; } pjnl=pjnl/N; pjcj=pjcj/N; printf("男生人数:%d,女生人数:%d,平均年龄:%.2f,平均成绩:%.2f\n",nan,nv,pjnl,pjcj); for(i=0;i<N;i++) if(stu[i].score<pjcj) printf("%s%.2f\n",stu[i].name,stu[i].score);}3.略

习题八一、单项选择题1.A2.A3.B4.B5.A6.C7.B8.D9.A10.A二、填空题1.文本文件二进制文件542.文件型指针变量stdio.h3."D:\\abc.dat""r"4.getchar()5.puts(buff)6.rewind(fp)fseek(fp,72L,SEEK_SET)7.将数组a中的10个整数写入fp文件8.二进制9.fprintf(stdout,…)10.新建一个文件三、应用题1.为什么要打开和关闭文件?答:通过打开操作可以建立程序和文件之间的通讯通道,并为文件操作建立缓冲区,使程序中的一个文件型指针变量代表一个文件。而关闭操作可以释放相关的资源,如缓冲区等。2.使用读写函数对文件读或写操作后,文件位置指针将如何变化?答:使用读写函数对文件读或写操作后,文件位置指针将指向所读或写数据之后的数据。3.有两个磁盘文件data1和data2,各存放若干整数,并且这些整数是按从小到大的顺序存放的。将这两个文件中的数据合并输出到文件data中,data中的数据要求有序。假设是文本文件,且文件中的数据是用空格或Tab或回车分隔的(也可考虑是二进制文件)。#include<stdio.h>#include<stdlib.h>voidmain(){ FILE*fr1,*fr2,*fw; inti1,i2,s1,s2; fr1=fopen("data1","r");/*打开文件data1*/ fr2=fopen("data2","r");/*打开文件data2*/ fw=fopen("data","w");/*打开文件data*/ s1=fscanf(fr1,"%d",&i1);/*从文件data1读第一个数据,不成功返回EOF*/ s2=fscanf(fr2,"%d",&i2);/*从文件data2读第一个数据,不成功返回EOF*/ while(s1!=EOF&&s2!=EOF)/*文件data1和data2均未结束,循环*/ { if(i1<i2) { fprintf(fw,"%d",i1);/*从文件data1读的数据写入文件data*/ s1=fscanf(fr1,"%d",&i1);/*从文件data1读下一个数据*/ } else { fprintf(fw,"%d",i2);/*从文件data2读的数据写入文件data*/ s2=fscanf(fr2,"%d",&i2);/*从文件data2读下一个数据*/ } } while(s1!=EOF)/*文件data1的剩余数据写入文件data*/ { fprintf(fw,"%d",i1); s1=fscanf(fr1,"%d",&i1); } while(s2!=EOF)/*文件data2的剩余数据写入文件data*/ { fprintf(fw,"%d",i2); s2=fscanf(fr2,"%d",&i2); } fcloseall();}4.输入N个学生的信息(包括:学号,姓名,5科成绩,总分),统计所有学生的总分,存入二进制文件stu_sc.dat中。然后读取该文件,查找总分最高的学生,并输出该生的所有信息。#include<stdio.h>#defineN3typedefstruct{ intnum; charname; intscore[5]; inttotal;}STUDENT;voidmain(){ FILE*fp; STUDENTst,smax; inti,j; fp=fopen("stu_sc.dat","wb+"); for(i=0;i<N;i++) { printf("输入学生的学号和5门课成绩:"); scanf("%d",&st.num); st.total=0; for(j=0;j<5;j++) { scanf("%d",&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),1,fp); if(st.total>smax.total) smax=st; } printf("%d",smax.num); for(j=0;j<5;j++) printf("%d",smax.score[j]); printf("%d\n",smax.total); fclose(fp);}5.将上题stu_sc.dat中的数据,按总分排序(降序),写入新

温馨提示

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

评论

0/150

提交评论