1、心 C语言复习 上机考试要求上机考试注意事项1、上机考试为 闭卷考试,只带笔和有效身份证 件(学生证、身份证等)即可。未带证件一律 不能参加考试。2、不准携带草稿纸,考试时我们将统一发放草 稿纸。3、按指定机器就坐,不得私自更换机位。请大 家进入考场后首先检查各自的机器,开始考试 的时间由系统统一设置。编程考试时,可以反复提交程序,以最后一次 提交的程序为准进行测试。试卷基本情况,选择题单项选择题。选一,答案唯一。内容:基本概念,基本运算阅读程序写 出程序运行结果 内容:基本运算,基本算法程序填空在程序的空格处填入适当的内容,使程序完整 正确。内容:数组,字符串,函娄攵、递归,指针、结构 和文
2、件等重点要求基本概念字符集、标识符、关键字各种常量的表示方法变量的说明 标识符:C程序各种对象的名字。标识符的组成:由字母或下划线开头的字母、数 字或下划线序列。abc,all,_laq a*3,laq,int X关键字在C语言中有特定含义的定义符。int,case,switch(见p326)scanf,define,include等不是C语言关键字重点要求整型常量的表示10进制常量的表示 128进制常量的表示:01216进制常量的表示 0 x12019 X0 x2k X 实型常量的表示小数形式:1.2,1.0,1.5 1.0,.1指数形式:2e3,12e-2,e2X 1.2eX 3el.2X
3、重点要求 字符型常量的表示 W,%、8AB5X 转义字符 nJ tJ rJ b,.(P49),W,7,*(1到3位8进制数)如:081 X,1013 x*(1到2位16进制数)重点要求 有运算符与I/。操作数据类型:编码形式、占用内存字节、表示范围 全部运算符:运算规则、优先级、结合性 位运算(,I)能够进行简单的表达式计算 基本的I/O函数的使用方法和功能:pri ntfsca nt、g etcha r putcha r整型:名称占内存字节表示范围基本整型 2-215215-1短整型 2无符号整型 2长整型 4无符号长整型4同上0-216-1(65535)-231-231-10-232-1说
4、明方法 i nt a,b;short a,b;unsi g ned a,b;long a,b;unsi g ned long a;重点要求:度度精 型称精精双 实名单双长存储字节表示范围4-1038 10388-1O308 1O308I 16-104932-104932说明方法 有效位f loa t a;7d ouble a;16long d ouble a;19字符型:占一个字节,存放字符的ascii码,cha r a=6d9;重点要求iWj(),,.,*,/,%+,一,,=,=二二,!二&-,&,*,(类型),sizeof(右结合)算术运算符移位运算符关系运算符位运算符&逻辑运算符9 =(
5、+=,(右结合)(右结合)重点要求 i=l,j=3+i+j+i+的值是7 i=3 j=2 x=3,y=4;+x=y-?x+:一y的值是4x=5 y=3 5/2的值是2 5/2.0的值是2.5 pri ntf(“%d”,5.4%2);出错pri ntf(66%dw,(i nt)5.4%2);的执行结果是 1 a=3,b=10 i f(a=b)b=a+5;a=10 b=15 a=l,b=2,c=3a|c-&+b 的值是 1 a=l b=2 c=3!a&(a二c-)的值是0 a=l c=3 a=l,b=2,c=3 a+=b-=c*=3+a;a=-9 b=T 0 c=12 a=l,b=2 ma x=a
6、b?a:b ma x=2mi n=ab?b:(a d o-whi le)brea k 和 conti nue 语句 其它语句 g oto语句不要求 语句之间的嵌套关系和规定 7.最基本的多重循环程序的编写方法重点要求 i f语句 if(P)s if(p)sielse s2 if(pl)sielse if(p2)s2else if(p3)s3else s4p,pl,p2,p3是任何表达式,非0为真,0为假.x=0;if(x=O)sl;s2;s3;执行s2、s3 x=0;if(x=0)sl;s2;s3;执行1、s2、s3 x=0;if(x=l)sl;s2;s3;执行si、s2、s3 if(n)si
7、;其中ii等价于:n!=0if(!n)si;其中!n等价于:!n!=0或n=0重点要求 else如何与if配对 if(x=0)if(x0)y=l;else y=0;else y=-l;eke与其前最近且尚未与eke配对的if配对重点要求switch 语句switch(K)case KI:SI case K2:S2case Kn:Sndefault:Sn+1;K整型或字符型表达式Ki整型或字符型常量表达式Si语句重点要求switch(k);/*不能出现分号*/easel:j=1;/*case 和1 应分开:case 1:*/case 1.2:j+;/*case后为整型或字符型常量7 case 1
8、+1:k+;case 2:h;/*不能出现相同case*/case a:g+;/*不能出现变量7int i=10,j=0;switch(j=i)case 0:i+=1;/*(1)*/case 10:i/=2;/*(2)*/default:i%=3;i=2若在,(2)后加break;,则i=5重点要求ma i n()/*嵌套swi tch*/i nt y,x,z;sca nf(%d,%d,%d”,&x,&y,&z);swi tch(x)ca se 0:swi tch(y=0)ca se 1:pri ntf(*”);brea k;ca se 0:pri ntf(“+);ca se 1:swi tc
9、h(z)d ef a ult:pri ntf(#);brea k;ca se 1:pri ntf($);brea k;ca se 0:pri ntf(“#);d ef a ult:pri ntf(“!n);输入0,2,3 输出+#!输入3,2,0 输出!重点要求 3种循环语句while(p)循环体do 循环体 while(p);for(kl;k2;k3)循环体i=0;while(i+3);循环3次,循环后i=4i=0;while(+i 3);循环2次,循环后i=3i=0;do s+=i;while(i+3);i=0;do s+=i;while(i+3);循环4次for0=0;j6;j+)s+=
10、j;for(j=0;k=0;j6&k!=4;k+,j+)s+=j;循环4次 for(j=0;j+)s+=j;死循环重点要求 continue与break语句区别 continue只能出现在循环语句中break 出现在循环语句或switch语句中 continue结束本次循环,开始下次循环的判断break 结束整个循环for(i=0;i8;i+)if(i5)continue;/*break;*/printf(“5d”,i);输出5 6 7若continue;换成break;输出?无输出重点要求多重循环求水仙花数:3位数且各位数字的立方和等于它本身。如:371=33+73+13main()int
11、a,b,c,n;for(a=l;a10;a+)for(b=0;b10;b+)for(c=0;c10;c+)if(a*a*a+b*b*b+c*c*c=a*100+b*10+c)printf(“5d”,a*100+b*10+c);重点要求数组-重点 数组的概念,数组说明,数组元素起始下标,如 何引用数组元素,数组名的意义 多维数组元素的标识方法,存放方式。多维数组 只要求到二维 数组与函数的关系:在函数之间传递数组中的一 个元素,在函数之间传递整个数组 基本算法:排序(冒泡、选择),求最大(小)值,矩阵乘法,矩阵转置数组定义#define N 2int a35bN2;intck;X a3=23;X
12、数组名代表数组首地址:a=&aOstatic int a5=l,2,3,4,5,b23=032,10,ll,12,c=1,25 d2=l,2,3;char d=china”;int a4=l,2,3,4,5X初值个数不能多于数组元素个数 char a5=12345”;X 字符串共有6个字符,即china O a=l,2,3,4,5X 数组名是地址常量在函数间传递数组(元素)pr(int ak)/*判断素数*/int i;for(i=2;iak;i+)if(ak%i=O)return 0;return 1;main()/*输出素数*/int k,a9;for(k=0;k9;k+)scanf(66
13、%d&ak);if(pr(ak)!=0)printf(66%5d,5,ak);重点要求pr(int a)/*a*/int i,j,k;for(j=0;j9;j+)k=l;for(i=2;iaj;i+)/*(a+j)*/if(aj%i=O)k=0;/*(a+j)*/if(k=l)printf(“5d”.aj);/*(a+j)*/main()/*输出素数*/int k 闺9,*p=a;fo r(k=0;k9;k+)scanfC%d9&ak);pr(a);/*pr(p);刃重点要求排序(气泡法)ttd ef i ne N 10ma i n()/*气泡法排序,大小*/i nt i,j,m,a N;f
14、or(i=0;i N;i+)sca nf(吸d”,&a i);f or(j=l;j=N-l;j+)/*NT轮处理*/f or(i=0;i N-j;i+)/*N-J次比较*/i f(a i a i+l)/*顺序未对时交换*/m=a i ;a i=a i+l;a i+l=m;f or(i=0;i N;i+)pri ntf(哪5d”,a i);重点要求排序(选择法)d ef i ne N 10ma i n()/*选择法排序大小*/i nt i,j,m,p,a N;f or(i=0;i N;i+)sca nf(哪d,&a i);f or(j=0;j N-l;j+)/*NT轮处理*/p=j;/*p记录最
15、大值的下标*/f or(i=j+l;iN;i+)/*找第J轮最大值下标P*/i f(a pa i)p=i;m=a p;a p=a j ;a j =m;Aa p,*/)f or(i=0;i N;i+)pri ntf(哪5d”,a i);重点要求矩阵(乘法)#ma i n()/*矩阵乘积*/sta ti c i nt i,j,k,c22;sta ti c i nt a 2=2,3,4,5,6,b3 2=2,l,0,4,3,2);f or(i=0;i 2;i+)f or(j=0;j 2;j+)ci j=0;f or(k=0;k=2;k+)ci j=ci j+a i k*bk j ;pri ntf(“
16、|%4d%4d|n,c00,c01);pri ntf(“%4d%4d n,c10,c11);重点要求矩阵(转置)#ma i n()/*矩阵转置*/i nt i,j,k;sta ti c i nt a 3 3=1,2,3,4,5,6,7,8,9;f or(i=0;i 3;i+)f or(j=0;j i;j+)/*矩阵转置*/k=a i j ;a i j=a j i;a j i=k;f or(i=0;i3;i+)/*按行输出*/f or(j=0;j 3;j+)pri ntf(吸5d”,a i j);pri ntf(“n);重点要求字符串重点 字符串:基本概念,串结束标记0 串输入/输出函数:g e
17、ts,puts 串的基本操作(非递归/递归算法):复制、连接、求长、比较、反向、求子串、查 找、合并、排序重点要求字符串字符串常量:用双引号括起的一串字符,系统自动在串尾加0(串结束标记).“chi na“,“1”用字符数组存放字符串cha r a10=chi na”,b4=1234 X串输入/输出函数g ets(s)从键盘上输入字符串并存入s数组puts(s)输出S串,并换行串的基本操作复制、连接、求长度、比较、反向、查找、合重点要求字符串复制#include“stdio.hmain()/*b串复制到a串*/char b=china”,a10=Beijing”;int k=0;while(b
18、k!=6 0,)/*依次复制bk到ak*/ak=bkj;k+;ak=6 0,;puts(a);重点要求#include“stdio.hmain()/*用指针法实现b串复制到a串*/char b=china”,a10=Beijing,*p=a,*q=b;while(*q!=6 0)*p+=*q+;*p=,(F;/*或 while(*p+=*q+)*/puts(a);重点要求字符串连接strcatl(char a20,char b)int k=O,j=O;while(ak!=0,)k+;/*找a串尾*/while(bj!=t O,)/*将b串接在a串尾*/ak=bj;k+;j+;ak=6 O9;)
19、maiii()/*用循环实现字符串连接*/char a 20=66china,b =6Beij ingw;strcat l(a5b)printf(a+b=%s n9 a);/*用指针法实现字符串连接*/char strcatl(char*a,char*q)char*p=a;while(*p!=0,)p+;/*找a串尾*/while(*q!=,(F)*p=*q;p+;q+;/*将b串接在a串尾*/*p=4(T;/*或 while(*p+=*q+)*/return a;)main()char a 20=6china,b =60)puts(nabn);else puts(na0)puts(nabn)
20、;else puts(HabH);字符串反向#i nclud e stri ng.h#i nclud e“std i o.hvoi d revstr(cha r a)cha r c;i nt s=0;p=strlen(a)-1;whi le(sp)/*对称位置字符交换位置*/c=a s;a s=a p;a p=c;_ _s+;p-;/*下标s加1,下标p减1*/ma i n()cha r str80;g ets(str);/*输入字符串到str数组*/revstr(str);/*调用函数实现字符串反向*/puts(str);/*输出反向后的字符串*/#i nclud e“stri ng.h#i
21、 nclud e“std i o.hvoi d revstr(cha r*p)/*指针法实现字符串反向*/cha r c,*q=p+strlen(p)-1;whi le(pq)/*对称位置字符交换位置*/c=*p;*p=*q;*q=c;p+;q-;/*p加l,q减 1*/ma i n()cha r str80;g ets(str);/*输入字符串到str数组*/revstr(str);/*调用函数实现字符串反向*/puts(str);/*输出反向后的字符串*/重点要求两个升序字符串合并include“stdio.hmain()char si 80,s280,s080;int i,j,n;get
22、s(sl);gets(s2);for(i=0,j=0,n=0;sli!=,(F&s2j!=,0,;)/*串合并*/if(sli s2j)s0n+=sli+;/*将较小字符存入s0*/else s0n+=s2j+;while(sli!=6 09)s0n+=sli+;/*继续处理si剩余字符*/while(s2j!=a 09)s0n+=s2j+;/*继续处理s2剩余字符*/s0n=,(F;/*最后补上结束符*/puts(sO);重点要求字符串中字符排序ma i n()/*选择法排序大小*/i nt i,j,n,p;cha r a 80,m;sca nf(哪s,a);n=strlen(a);f or
23、(j=0;j n-l;j+)/*nT轮处理*/p=j;/*p记录最大值的下标*/f or(i=j+l;i n;i+)/*找第J轮最大值下标P*/i f(a pa i)p=i;m=a p;a p=a j;a j=m;pri ntf(哪sn,a);重点要求在字符串中查找字符include“stdio.hmain()char a20,ch;int i=0;gets(a);ch=getchar();/*要找的字符*/while(ai!=T 0T)if(ch=ai)/*找到 ch*/pintf(6%c=a%d=%c n?,ch,i,a i);break;else i+;if(ai=!0!)printf(
24、66%c not found!n66,ch);重点要求在多个字符串中查找字符串include“stdio.hmain()char*a4=“BASIC”,ALGOL”,CPL,int i=0;gets(s);while(i4)if(strcpm(s,a i)=0)pintf(66%s=a%d=%s n,s,i,a i);break;else i+;if(i=4)printf(s not found!n;重点要求求字符串中子串include“stdio.hmain()/*求字符串从位置b开始的n个字符组成的子串*/char a80=66BAS ICALG0LCPLC,s20;int b,n,i,j
25、=0;scanf(“d,%d”,&b,&n);for(i=b;ib+n;i+)sj+=ai;sj=(F;printf(66%s,s n”,a,s);重点要求_函数 函数的概念,函数的定义与说明,函数调用,函 数的返回值与函数定义之间的关系 函数之间进行参数传递的特点(值传递)传递一般变量:形参一般变量,实参一般变量传递变量地址:形参变量地址,实参指针变量在函数之间传递:数组,结构函数的返回值:简单类型,指针,结构,voi d 掌握变量的存储类型和作用域,变量初始化 函数递归的概念,递归调用的一般过程。能够编 写直接递归程序,掌握递归程序设计方法:针对 数值问题和非数值问题使用不同的方法。重点要
26、求定义float f(int x)/*函数首部*/int y;/*函数体*/y=x*x;return y;不能嵌套定义调用函数float max(int x,int y)/*x,y是形式参数*/c=max(a,b);/*a,b 是实际参数*/实际参数和形式参数:个数相等,类型一致函数返回值的类型取决于函数类型int f()/*f()*/float x=2.3;return x+1.3;/*返回3*/float*f().返回float指针 void f().无返回值k=f()+2;X struct node f().返回 struct node 值参数的传递实参形参传递的值常量,变量,表达式数组
27、变量地址结构地址变量数组,指针变量指针变量结构指针变量值(单向值传递)数组的首地址 地址结构地址void f(int s)void f(int*s)void f(struct k*s)main()int a10;f(a);main()int a=10;main()struct k a;swap(int x,int y)int temp;temp=x;x=y;y=temp;printf(d,%d if=x,y);swap(int*px,int*py)int temp;temp=*px;*px=*py;*py=temp;p r intf(d,%d n”px,*py);main()int a=5,b
28、=10;swap(a5b);printf(6%d,%d nw,a,b);结果:10,55,10?main()int a=5,b=10;swap(&a5&b);printf(6llong f(int n)/*求n!*/if(n=l)return 1;else return n*f(n-l);main()int n=5;printfC6%ld,;f(n);递归法求字符串长度strlenl(char*s)/*求s为首地址的串长*/if(*s=0)return 0;else return l+strlenl(s+l);/*strlenl(s+l)是以(s+1)为首地址的串长*/main()char s
29、80;scanf(“s”,s);printf(66%d n,strlenl(s);递归法反向输出整数各位数字f(int n)if(n=0&n=9)printf(%d,n);/*一位数字直接输出*/else printf(%d,n%10);/*先输出个位数字*/f(n/10);/*输出个位以前的各位数字*/main()int n=12345;printfC6%ld,;f(n);变量存储类型存储类型作用域auto 函数内或复合语句内register 同上static 函数内或复合语句内(函数内)static 从定义点到本文件尾(函数外)其他文件不能存取它 extern 从定义点到本文件尾其他文件进
30、行外部 说明后可以存取它生存期动态存储,出了函数消失同上静态存储,始终存在 出了函数不能存取 静态存储,始终存在静态存储,始终存在int f(int a)auto int b=0;static int c=3;b+;c+;return a+b+c;main()int c5a=l;for(c=l;c3;c+)pr intf(66%d nw,f(a);b01034 645 7重点要求指针-重点指针变量的基本概念与基本运算:取地址运 算,取内容运算指针变量与一般变量的关系指针与函数的关系数组与指针的关系,指针的3种基本运算与意义 指针与整数进行加减运算(指针变量与自增+、自减一运算的关系)指针之间进
31、行关系运算 指针之间求差值、指针数组与数组指针,ma i n函数的参数指针指针变量专门存放地址.指向变量的指针int a,*p;p=&a;*p=a 指向数组元素的指针int a10,*p=a;p+i=&ai=a+ipi=*(p+i)=ai=*(a+i)如:a口aj n t=*(a+i);*(a+i)=*(a+j);*(a+j)=t;t=ai;ai=aj;aj=t;指向2维数组元素的指针int a3 3/p;指针变量p的基类型是intp=aO;(p=&aOO;)p+i*n+j o 是列数)*(p+i*n+j)o aiU 指向一维数组的指针inta33,rp)3;指针变量p的基类型是int 3P=
32、a;*(p+i)+jo&aij=*(a+i)+j=ai+j*(*(p+i)+j)=aij字符指针char s=china”,*p;指针变量p的基类型是charP=s;p+i=&si*(p+i)=siprintf(“c,%s n”,*(s+2),s+2);输出i,ina字符数组与字符指针的异同同:char s=china,*p=123”;printf(6%s,%s n,s,p);异:p=abc”;p是指针变量s=,xyzw;X s是地址常量指针的3种基本运算与意义1.指针与整数进行加减运算i nt a 10,*p=&a 3;p+1 o&a4 p_l o&a2+p f p=p+l f p:&a 4
33、*p+f*(9+)T*p 和 p=p+lp=&a 2;pri ntf(哪d n,*p+);输出a 2pri ntf(哪d n,*p);输出a 3*+p f*(+p)f p=p+l 和*pp=&a 2;pri ntf(哪d n”,*+p);输出 a 3pri ntf(哪d n,*p);输出 a 32.指针之间进行关系运算两个指针指向同一数组的元素时才能进行指针关系运算i nt a 10,p=&a2;q=&a4;pri ntf(“%d”,pq);输出 1f or(p=a,q=a+9;p=q;p+)pri ntf(哪d n,*p);3.指针减法运算a0a1 a2a3 a40&Pp-a的值为5,是p,
34、a之间元素的个数。即“china”的长度 计算s 串长度#i nclud e std i o.h strlenl(cha r*s)/*计算s 串长度*/cha r*p;P=s;whi le(*p!=t0,)p+;/*p指向串尾*/return p-s;/*返回串长度*/ma i n()cha r a 80;g ets(a);pri ntf4stri ng leng th=%d n,strlenl(a);函数指针函数指针:函数的入口地址(用函数名表示)int max(a,b),(*p)();指针变量p的基类型是int()用函数指针调用函数p=max;t=(*p)(a,b);=t=max(a5b)
35、;指针数组char*a3=china”,“beijing;nanjing;ai存放第i个字符串的首地址.如:al存放 beijing”的首地址.用途:处理多个字符串(如:排序、求最大(小)串等)main()char*a3=china”,“beijing”,“nanjing;int k;for(k=0;k=0;k-)printf(“d,%s*,k,avk);输出 3,a3*2,a2*l,al*0,fl.exe重点要求结构 定义结构类型、结构变量,结构占用的内存 与结构变量有关的运算符:访问结构成员的方法 结构与函数的关系:函数间传递结构 结构与数组的关系,结构数组 结构与指针的关系,结构指针与+
36、、一运算的关系联合定义联合类型、联合变量,联合占用的内存访问联合成员的方法结构定义struct stuint num;char name10;a=1001 Jli”,b5,*p=&a;struct stu d,e5。*q=e;sizeof(struct stu)的值是?2+10=12结构指针p=&a.num;X p是结构型指针,而a.num是int型O引用结构成员引用结构成员的3种方法:结构变量.成员 如:a.num(*结构指针).成员 如:(*p).num结构指针-成员 如:p-num函数间传递结构数据方法:1.参数用结构指针(地址)2.参数用结构变量3.参数用结构变量各成员以传递结构指针最
37、方便输入书的书名和单价,并输出struct bookcha r na me 20;/*书名*/f loa t pri ce;/*单价*/ma i n()struct book,books10;i nt k;0:(1=010;1na me,p-pri ce);struct percha r na me20;i nt c;a 3=“wa ng,10,“f un,2,“li,4,*j,*p=a;a+i=&a i p+i=&a i p+-c;(p+)-C;+p-c;(+p)-c;p-c+;n pc,p=p+ln pc,p=p+ln+(p-c)n p-c+=ln p=p+l,p-cn(p-c)+n p-
38、c+=lstruct si nt x,*y;i nt d a ta5=10,20,30,40,50);struct s a rra y5=100,&d a ta 0,200,&d a ta l,300,&d a ta2,400,&d a ta3,500,&d a ta4,*p;ma i n()p=a rra y;pri ntf(%d”,p-x)/*输出 100*/pri ntf(“d”,(*p).x)/*输出 100*/pri ntf(“%d”,*p-y)/*输出*&d a ta 0:10*/pri ntf(“%d”,*(*p).y)/*输出 10*/pri ntf(“%d”,+p-x)/*输
39、出 101*/pri ntf(%d”,(+p)-x)/*输出 p=&a rra y 1:200*/pri ntf(%d,p-x+)/*输出 200 p-x=201*/文件L文件种类,读和写概念2.打开文件文件指针,打开文件的函数无须用户打开就可使用的文件3.关闭文件4.文件读写读写一个字符,读写一个字符串,格式化读写,无格式读写数据块5.文件定位rewind,fseek6O错误检测,7feof(fp),ferror(fp)1.两种文件:ASCII文件和2进制文件读和写读:把磁盘文件中的数据取到内存写:把内存中的数据存到磁盘文件2.打开文件文件指针 FILE*fp;(在stdio.h文件中定义)
40、打开文件的函数FILE*fopen(文件名,操作方式)例如:以只读方式打开ASCH文件”if(fp=fopen(66fl,r,)=NULL)printf(ucaan not open fl n);exit(O);)操作方式ASCII文件:r(只读)一文件已存在,只能读不能写 w(只写)一建立新文件,只能写不能读 a(追加)一在文件尾写数据 r+(读写),w+(写读),a+(追加读)2进制文件:rb(只读),wb(只写),ab(追加)rb+(读写),wb+(写读),ab+(追加读)无须用户打开就可使用的文件的文件指针:stdin(标准输入:键盘)stdout(标准输出:屏幕)stderr(错误信
41、息文件)3.关闭文件fclose(fp);4.文件读写读写一个字符fgetc(fp)从fp文件中读一个字符fputc(ch,fp)把字符ch写到fp文件中while(!feof(fl)ch=fgetc(fl);/*从fl文件中读一个字符,存放到ch*/fputc(ch,f2);/*把字符ch写到f2文件*/n+;/*统计字符个数*/读写一个字符串char*fgets(char buffer,int n,FILE*fp)从fp文件中读一个字符串(遇到换行或EOF为止,至多n-1个字符),存入首地址为buffer的存储区并在串尾加0.int fputs(char buffer,FILE*fp)bu
42、ffer存放要写字符串的存储区首地址fp 文件指针将首地址为buffer的字符串写入fp文件(不写0).if(fp=fopen(66fl,w,)=NULL)printf(6can not open fl nw);exit(0);for(i=0;i3;i+)fputs(si,fp);fputs(66 nw,fp);fclose(fp);if(fp=fopen(66fl,r,)=NULL)printf(6can not open fl nw);exit(0);for(i=0;i3;i+)fgets(si,20,fp);printf(6%s nw,si);fclose(fp);格式化读写int fs
43、canf(FILE*fp,char*format,输入地址表)从fp文件中按格式读入数据并赋给输入表中各项int fprintf(FILE*fp,char*format,输出表)将输出表中各项数据按格式依次写入fp文件printf(66%d,%s,a,s);o fprintf(stdout,66%d,%s,a,s);scanf(“d,%s”,&a,s);o fscanf(stdin,66%d,%s9,&a,s);注意:使用格式化读写函数的文件以ASCH方式打开读写格式要一致无格式读写数据块int fread(void*buffer,int size,int count,FILE*fp)从fp文
44、件中读入count块数据(每块为size个字节)并 存入首地址为buffer的存储区int fwrite(void*buffer,int size,int count,FILE*fp)从地址buffer开始的count块数据(每块为size个字节)写入fp文件.使用无格式读写函数的文件以二进制方式打开例:输入3个学生的数据(学号、年龄和姓名),并存 盘,然后从盘文件中读学生数据并在屏幕上显示。/include“stdio.hstruct stuint num,age;char name20;s3;#define L sizeof(struct stu)main()int i;for(i=0;i
45、3;i+)scanf(“%d,%d,%s”,&s i.num,&s i.age,s ij.name);save();/*存盘*/load();/*读盘并显示*/save()FILE*fp;int i;if(fp=fopen(66fl,wb,)=NULL)printf(6can not open fl nw);exit(O);for(i=0;i3;i+)fwrite(&si,L,l,fp);fclose(fp);load()FILE*fp;int i;if(fp=fopen(“fl”Jrb)=NULL)printf(66can not open fX n);exit(0);for(i=0;i0
46、向文件尾方向移动0 向文件头方向移动=0 不移fseek(fp45L90);从文件头开始向文件尾方向移动15个字节fseek(fp,-15L,2);从文件尾开始向文件头方向移动15个字节fseek(fp,-10,l);从当前位置开始向文件头方向移动10个字节 使文件位置指针定位在文件头的方法:打开文件 rewind(fp);fseek(fpOO);6.错误检测文件尾检测feof(fp)返回值=0未到文件尾 M 到文件尾while(!feof(fp)/*feof(fp)=0*/.读fp文件.文件操作错误检测ferror()返回值=0正确 却出错fread(&s,4?l?fp);if(ferror
47、(fp)if(feof(fp)printf(6to end of file!n);else printf(66file read eiror!n);1.要打开一个新的二进制文件,该文件既能读也能写,则文件操作方式字符串是 O2.函数调用语句:fseek(fp,-20L,2);的含义是。3.函数rewind(fp)的作用是。4.下列程序的功能是.#include“stdio.hmain()FILE*fp;int count=0;if(fp=fopen(66fl,r,)=NULL)printf(6cannot open fl n?,);exit(0);while(!feof(fp)fgetc(fp
48、);count+;printf(count=%d n”,count);fclose(fp);5.下列程序将文件fl的内容先在屏幕上显示,然后复制到 文件2在处填空,使程序正确#include“stdio.h main()FILE*fpl,*fp2;if(fpl=fopen(66fl,r,)=NULL)printf(6cannot open fl nw);exit(0);if(fp2=fopen(66f2,w,)=NULL)printf(6cannot open f2 nw);exit(0);while(!feof(fpl)putchar(fgetc(fpl);_A while(!feof(fp
49、l);fclose(fpl);fclose(fp2);笔试试卷样题-选择题1 一个C语言程序是由_组成的。A)主程序 B)子程序C)函数 D)过程11答案:C2 C语言中cha r型数据在内存中是以_形式存储。A)原码 B)补码 C)反码 D)AS CH码【2】答案:D3 C的运算符按运算对象的数目可以分为_。A)单目算符一种 B)单目和双目算符0单目、双目和三目算符D)单目、双目、三目和四目算符 73答案:C笔试试卷样题-选择题【4】在C语言中,错误的i nt类型的常数是 一A)32768 B)0 C)037 D)OxAF4答案:A【5】以下选项中属于C语言的数据类型是_。A)复数型 B)逻
50、辑型C)双精度型D)集合型【5】答案:C6设i nt类型的数据长度为2个字节,则unsi g ned i nt类型数据的取值范围是_。A)0至255 B)0至65535C)-32768至32767 D)-256至255 6答案:B笔试试卷样题-选择题7 已知:cha r w;i nt x;f loa t y;d ouble z;则表达式W*x+z-y的结果为_类型。A)f loa t B)cha r C)i nt D)d ouble【7】答案:D【8】下列可以正确表示字符型常数的是_。A)a B)C)n D)297【8】答案:B9已知:i nt a,b;使用语句:sca nf(、%d%d,&a