




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、全国计算机等级考试二级Email: 主讲:胡晓丽高频考点Company Logo第12章C语言中用户标识符的作用Top76局部变量的定义及其作用域与生存期Top77全局变量的定义及其作用域与生存期Company LogoTop76局部变量的定义及其作用域与生存期考点局部变量:在函数或复合语句内容定义的变量,按存储类别分为:自动型寄存器型静态型外部参照型局部变量的作用域与生存期静态局部变量是在程序开始时就分配了固定的存储空间,在程序运行时并不释放,直到程序运行结束才释放它所占的空间。静态局部变量只能在本程序文件中使用,对未赋值的静态局部变量,C编译程序自动对其赋初值为:0Company Logo
2、真题分析(2013年3月)Top76局部变量的定义及其作用域与生存期BCompany Logo真题分析(2013年3月)Top76局部变量的定义及其作用域与生存期DCompany Logo真题分析(2006年9月)有以下程序,执行后的结果是A、5,5B、5,11 C、11,11 D、11,5Top76局部变量的定义及其作用域与生存期main( ) int j=1,m=1,k;k=fun(j,m);printf(“%d”,k);k=fun(j,m);printf(“%dn”,k);fun(int x,int y)static int m=0,i=2;i+=m+1;m=i+x+y;return m
3、;BCompany Logo真题分析(2013年3月)有以下程序,程序运行后的结果是A、45B、50C、60D、55Top76局部变量的定义及其作用域与生存期int fun(int x ,int n) static int sum=0,i;for(i=0;in;i+ +) sum+ =xi;return sum;main( ) int a =1,2,3,4,5,b =6,7,8,9,s=0;s=fun(a,5)+fun(b,4); printf(%dn,s);CCompany Logo真题分析(2005年4月)以下程序的运行结果是Top76局部变量的定义及其作用域与生存期fun(int a)
4、int b=0; static int c=3;b+ +; c+ +;return(a+b+c);main( ) int i, a=5;for(i=0;i3;i+ +)printf(%d%d,i,fun(a);printf(n);010111212Company Logo考点全局变量:在函数之外定义的变量称为外部变量,外部变量是全局变量,可以为本程序中所有其它函数所公有。有效范围是从定义变量的位置开始到本源文件结束。全局变量的作用域与生存期全局变量只有静态类别。可以使用extern 和static两种说明符。Top76全局变量的定义及其作用域与生存期全局变量的生存期是整个程序的运行期间,因此在
5、整个运行期间都占内存。若全局变量和某一函数的局部变量重名,则在该函数中,全局变量被屏蔽。Company Logo真题分析(2013年3月)Top76全局变量的定义及其作用域与生存期DCompany Logo真题分析(2013年3月)Top76全局变量的定义及其作用域与生存期DCompany Logo真题分析(2007年4月)以下程序的运行结果是_ Top76全局变量的定义及其作用域与生存期int k=0;void fun(int m) m+=k; k+=m; printf(m=%dn k=%d ,m,k+);main() int i=4; fun(i+); printf(i=%d k=%dn,
6、i,k);m=4 k=4 i=5 k=5Company Logo真题分析(2007年4月)有以下程序,程序运行后的输出结果是A、24B、28C、32D、36Top76全局变量的定义及其作用域与生存期#include “stdio.h”int a=4;int f(int n)int t=0; static int a=5;if(n%2) int a=6; t+=a+;else int a=7; t+=a+;return t+a+;main()int s=a,i=0;for(;i2;i+)s+=f(i);printf(“%dn”,s);BCompany Logo真题分析(2013年3月)Top76
7、全局变量的定义及其作用域与生存期DCompany Logo第13 章 编译预处理和动态存储分配Top77 不带参数的宏替换Top78 带参数的宏替换Top79 对编译预处理的一些说明Top80 动态存储分配Company LogoTop77 不带参数的宏替换考点一般定义形式为:#define 宏名 字符串说明:宏定义与一般变量定义含义不同,它只作字符替换,并不分配内存空间,也不能认为是赋值。“#”表示这是一要预处理命令define为宏定义命令宏名为一个合法的标识符字符串可以是常数、表达式或语句,或是多条语句2.宏展开:预编译时,用宏体替换宏名-不作语法检查3.引号中的内容与宏名相同也不置换例
8、#define PI 3.14159 printf(“2*PI=%fn”,PI*2);宏展开:printf(“2*PI=%fn”,3.14159*2);4.宏定义可嵌套,不能递归例 #define MAX MAX+10 ()5.宏定义中使用必要的括号()例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2;宏展开:var= 80+40 *2;例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2;宏展开:var= 80+40 *2;( )( )Company LogoTop78 不
9、带参数的宏替换真题分析(2013年3月)ACompany LogoTop78 不带参数的宏替换真题分析(2005-9)下列程序的功能是:给r 输入数据后计算半径为r 的圆面积s。程序在编译时出错,出错的原因是A、注释语句书写位置错误B、存放圆半径的变量r 不应该定义为整型C、输出语句中格式描述符非法D、计算圆面积的赋值语句中使用了非法变量Dmain( )/* Beginning */ int r; float s;scanf(%d,&r);s=*r*r;printf(s=%fn,s);Company LogoTop78 不带参数的宏替换真题分析(2005-4)下列程序的输出结果是A、192B、
10、29C、25D、编译出错#define P 3void F(int x) return(P*x*x); main( ) printf(%dn,F(3+5); ACompany LogoTop78 带参数的宏替换带参数宏定义一般形式: #define 宏名(参数表) 宏体例 #define S (r) PI*r*r相当于定义了不带参宏S,代表字符串“(r) PI*r*r” 宏展开:形参用实参换,其它字符保留宏体及各形参外一般应加括号()例 #define S(a,b) a*b . area=S(3,2);宏展开: area=3*2;不能加空格例 #define POWER(x) x*x x=4;
11、 y=6; z=POWER(x+y);宏展开:z=x+y*x+y;一般写成: #define POWER(x) (x)*(x)宏展开: z=(x+y)*(x+y);Company LogoTop78 带参数的宏替换真题分析(2013年3月)ACompany LogoTop78 带参数的宏替换真题分析(2013年3月)BCompany LogoTop78 带参数的宏替换真题分析(2007年4月)有一个名为init.txt的文件,内容如下#define HDY(A,B) A/B#define PRINT(Y) printf(“y=%dn”,Y)有以下程序#include “stdio.h”#inc
12、lude “init.txt”main()int a=1,b=2,c=3,dd=4,k;k=HDY(a+c,b+d);PRINT(k);下面针对该程序的叙述正确的是:编译出错A.运行出错D.运行结果为y=0C.运行结果为y=6B.DCompany LogoTop78 带参数的宏替换真题分析(2005年9月)有下列程序,程序运行后的输出结果是A、64,28B、4,4C、4,3D、64,64#define f(x)=(x*x)main( ) int i1,i2;i1=f(8)/f(4); i2=f(4+4)/f(2+2);prinft(%d,%dn,i1,i2);CCompany LogoTop7
13、8 带参数的宏替换真题分析(2005年4月)下列叙述中正确的是A、预处理命令行必须位于源文件的开头B、在源文件的一行上可以有多条预处理命令C、宏名必须用大写字母表示D、宏替换不占用程序的运行时间DCompany LogoTop79 对编译预处理的一些说明考点:在C语言中,凡是以“#”开头的行,都称为“编译预处理”命令行种类宏定义 #define文件包含 #include条件编译 #if-#else-#endif等格式:“#”开头占单独书写行语句尾不加分号Company LogoTop79 对编译预处理的一些说明真题分析(2013年3月)BCompany LogoTop79 对编译预处理的一些说
14、明真题分析(2013年3月)DCompany LogoTop79 对编译预处理的一些说明真题分析(2006年4月)下列叙述中正确的是A、预处理命令行必须位于C 源程序的起始位置B、在C 语言中,预处理命令行都以#开头C、每个C 程序必须在开头包含预处理命令行:#includeD、 C 语言的预处理不能实现宏定义和条件编译的功能BCompany LogoTop80动态存储分配静态存储分配:用于存储数据的变量和数组都是在说明部分定义的,C编译系统通过定义语句了解它们所需要的空间,并预先为其分配适当的存储单元。这些存储单元一经,在变量或数组的生存期内是固定不变的。动态存储分配:在程序执行期间,通过”
15、申请“得到指定的内存单元;当有闲置不用的空间时,可以随时将其释放,由系统另作它用。四个和动态存储分配有关的函数:(1)malloc(2)calloc(3)free(4)realloc使用这些函数时,要包含头文件”stdlib.h“Company LogoTop80 动态存储分配(1)malloc函数,其返回值类型为void。调用形式为:malloc(size)要求size的类型为unsigned int作用:用来分配size个字节的存储空间,返回一个指针指向存储区首地址的基类型为void的地址。例:short int *pi;float *pf;pi=(short *)malloc(2);pf
16、=(float *)malloc(4);说明:(1)因为malloc是void型的,所以需要强制转换类型(2)强制转换类型括号中的不可少,否则就变成了普通类型。if(pi!=NULL) *p=6;if(pf!=NULL) *pf=3.863.8pipfCompany LogoTop80 动态存储分配注意:由动态存储分配得到的存储单元没有名字,只能靠指针来引用它。一旦指针改变指向,则原存储单元及所存数据都将无法引用。通过调用malloc函数所分配的单元动态存储单元中没有确定的初值。在动态申请存储空间时,若不能确定数据类型所占字节数,可通过sizeof运算符来求得。例如: pi=(int *)ma
17、lloc(sizeof(int); pf=(float *)malloc(sizeof(float);由系统来计算指定类型所占的字节数,有利于程序的移植。Company LogoTop80 动态存储分配(3)calloc函数,返回值类型为void。调用形式:calloc(n,size)要求n和size都是unsigned int。作用:用来给n个同一类型的数据项分配连续的存储空间,每个数据项长度为size字节。(2)free函数,没有返回值。调用形式为:free(p);p必须是指向由动态存储分配函数malloc或calloc分配的地址。作用:将使指针p所指的存储空间释放,使这部分空间重新归系统
18、支配。Company Logo通过calloc函数所分配的存储单元,系统自动赋初值0。例如:char *ps;ps=(char *)calloc(10,sizeof(char);说明:以上函数调用语句开辟了10个连续的存储单元,由ps指向存储单元的首地址。每个单元可以存储一个字符。用calloc函数开辟的动态存储单元相当于开辟了一个一维数组。函数的第一个参数是数组的大小,第二个是数组元素的类型。函数的返回值就是数组的首地址。使用该函数分配的地址,同样可以用函数free来释放。Top80 动态存储分配Company LogoTop80 动态存储分配真题分析(2007年4月)以下程序的输出结果是#
19、includemain()char *s1,*s2,m;s1=s2=(char*)malloc(sizeof(char);*s1=15; *s2=20; m=*s1+*s2;printf(%dn,m);s1与 s2指向同一个存储单元40Company LogoTop80 动态存储分配真题分析(2005年9月)已有定义:double *p;,请写出完整的语句,利用malloc 函数使p 指向一个双精度型的动态存储单元p=(double *)malloc(sizeof(double)Company Logo第14章结构体、共用体和用户定义Top81结构体变量的定义与初始化Top82结构体数组和指针
20、Top83结构体变量的引用Top84结构体与函数Top85用户定义类型的定义方法与应用Top86链表结点的访问Top87共用体类型数据的定义、初始化Top88共用体类型数据的引用Company Logo1.定义结构体的一般形式:struct 结构体变量标识名类型名1 结构成员名表1;类型名2 结构成员名表2;。类型名n 结构成员名表n;;struct dataint year ;int month ;int day;struct student char name8; char sex ; struct data birthday; float score4;;int year,month,d
21、ay;struct student char name8; char sex ; struct int year;int monthint day birthday; float score4;;Top81 结构体变量的定义与初始化Company Logo(1).紧跟着结构体类型说明之后进行定义struct student char name8; char sex ; struct data birthday; float score4;std;8个字节1个字节6个字节16个字节namesexbirthdayscorestdTop81 结构体变量的定义与初始化2、结构体变量的定义和初始化Com
22、pany Logo(2).说明一个无名结构体类型的同时进行定义struct char name8; char sex ; struct data birthday; float score4;std;student省略结构体变量名,通常用在不需要再次定义此类型结构体变量的情况。用无名结构体直接定义变量只能一次struct 类型标识符 成员名; 类型标识符 成员名; .变量名表列;Top81 结构体变量的定义与初始化Company Logo(3).先说明结构体变量类型,再单独进行变量定义struct char name8; char sex ; struct data birthday; flo
23、at score4;;studentstruct student std;Top81 结构体变量的定义与初始化Company LogoTop81 结构体变量的定义与初始化(1)给结构体变量赋初值struct stduentchar name8;char sex;struct data birthday;float score4;std=“LIMING”,M,1962,5,10,88.0,76.5,85.5,90.0;初始化可用输入语句或赋值语句来完成,或在定义时进行初始化赋值。Company LogoTop81 结构体变量的定义与初始化真题分析(2013年3月)DCompany LogoTop
24、81 结构体变量的定义与初始化真题分析(2007年4月)设有说明struct DATEint year;int month; int day;请写出一条定义语句,该语句定义d为上述结构体变量,并同时为其成员year、month、day 依次赋初值2006、10、1:_struct DATA d=2006,10,1;Company LogoTop81 结构体变量的定义与初始化真题分析(2005年4月)以下对结构体类型变量td的定义中,错误的是A、typedef struct aa int n;float m; AA; AA td;B、struct aa int n;float m;td;stru
25、ct aa td;D、Struct int n;float m;td;C、struct int n; float m; aa; struct aa td;CCompany LogoTop82 结构体数组和指针考点结构体数组和指针的定义与结构体变量一样,对于结构体数组的初始化,与前面数组赋初值的规则一样,只是由于数组中的每个元素都是一个结构体,因此通常将其成员的值依次放在一对大括号中,以便区分各个元素。Company LogoTop82 结构体数组和指针2013-3ACompany LogoDCompany LogoTop82 结构体数组和指针真题分析(2005年4月)下列程序运行后的输出结果是
26、stuct NODE int k;struct NODE *link;main( ) struct NODE m5,*p=m,*q=m+4;int i=0;while(p! =q) p-k=+ +i; p+ +;q-k=i+ +; q-;q-k=i;for(i=0;i成员名(*指针变量名).成员名.称为成员运算符-称为结构指向运算符Company Logo(2)对结构体变量中的成员进行操作例:struct stduentchar name8;char sex;struct data birthday;float score4;std,per5,*ps;ps=&std;scanf(“%s”,st
27、);for(i=0;iname);for(i=0;i4;i+)scanf(“%d”,&persi.birthday.year);for(i=0;i4;i+)for(j=0;j2级运算符: + - * &DCompany LogoTop83 结构体变量的引用真题分析(2006年4月)有下列程序段,下列选项中表达式的值为11 的是struct st int x;int *y;*pt;int a =l,2,b =3,4;struct st c2 = 10,a,20,b;pt=c;A、*pt yB、pt xC、+ +pt xD、(pt+ +)-xCCompany LogoTop84 结构体
28、与函数真题分析(2007-4)有以下程序,程序运行后的输出结果是A、 2,3B、2,4C、1,4D、1,2#include “stdio.h”typedef struct int b,p; Avoid f(A c) /* 注意c是结构变量名*/int j;c.b+=1; c.p+=2;main()int i;A a=1,2;f(a);printf(“%d,%dn”,a.b,a.p);DTop84 结构体与函数D真题分析(2013-3)Top84 结构体与函数D真题分析(2013-3)Top84 结构体与函数D真题分析(2013-3)Company LogoTop84 结构体与函数B真题分析(2
29、013-3)Company LogoTop84 结构体与函数D真题分析(2013-3)Company LogoTop85 用户定义类型的定义方法和应用typedef 类型名标识符;例:typedef int INTEGER;INTEGER m,n;m=9;n=0;习惯用大于字母int m,n;m=9;n=0;例:typedef char * CHARP;CHARP p;char * p;说明:1.typedef 没有创造新数据类型2.typedef 是定义类型,不能定义变量3.typedef 与 define 不同 define typedef预编译时处理 编译时处理简单字符置换 为已有类型命
30、名 Top85 用户定义类型的定义方法和应用真题分析(2013年3月)DTop85 用户定义类型的定义方法和应用真题分析(2013年3月)ATop85 用户定义类型的定义方法和应用真题分析(2013年3月)BTop85 用户定义类型的定义方法和应用真题分析(2013年3月)DCompany LogoTop85 用户定义类型的定义方法和应用真题分析(2007年4月)有以下程序段,以下叙述中正确的是typedef struct node int data; struct node *next; *NODENODE p;A、p是指向struct node结构变量的指针的指针B、 NODEp;语句出错
31、C、 p是指向struct node结构变量的指针D、 p是struct node结构变量CCompany LogoTop85 用户定义类型的定义方法和应用真题分析设有以下语句,则下列叙述中正确的是A、可以用TT定义结构体变量B、TT是结构类型的变量C、可以用CIN定义结构体变量D、CIN是struct TT类型的变量typedef struct TTchar c;int a4;CIN;CCompany LogoTop86 结构体类型-链表1.结构体中含有可以指向本结构体的指针成员struct linkchar ch;struct link *p;a;1000100110021003a.cha
32、.p地址Company LogoTop86 结构体类型-链表例:一个简单的单链表#include stdio.hstruct nodeint data;struct node *next;typedef struct node NODETYPE;main()NODETYPE a,b,c,*h,*p;a.data =10;b.data =20;c.data =30;h=&a;/*将结点相连*/a.next =&b; b.next =&c; c.next =0;p=h;while(p)printf(%4d,p-data );p=p-next ;printf(n);100010041008100Ba
33、.dataa.next10108010881084b.datab.nextc.datac.next2030hFF88FF8BP100010081080010001000101008201080300abc1000h10001008108010081080Company Logo3.单向链表结点的类型定义:struct slistint data;struct slist *next;typedef struct slist SLIST;/0head单向链表的基本算法:链表建立、结点数据域的输出、结点的插入和删除。Top86 结构体类型-链表Company LogoTop86 结构体类型-链表真
34、题分析(2013年3月程序设计题)Company LogoTop86 结构体类型-链表真题分析(2013年3月程序设计题)#include #include #define N 8struct slist double s; struct slist *next;typedef struct slist STREC;double fun( STREC *h )STREC * creat( double *s) STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeof(STREC);p-s=0; while(is=si; i+; p-next=q; p
35、=q; p-next=0; return h;outlist( STREC *h) STREC *p; p=h-next; printf(head); do printf(-%4.1f,p-s);p=p-next; while(p!=0); printf(nn);Company LogoTop86 结构体类型-链表真题分析(2013年3月程序设计题)main() double sN=85,76,69,85,91,72,64,87,ave;STREC *h; h=creat( s ); outlist(h); ave=fun( h ); printf(ave= %6.3fn,ave);doubl
36、e fun( STREC *h )STREC *p;double ave=0;int count=0;p=h-next ;while(p!=0)ave+=p-s;p=p-next;count+;return ave/count;Top86 结构体类型-链表真题分析(2013年3月程序设计题)N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头 节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 #include #i
37、nclude #define N 8 struct slist double s; struct slist *next; ; typedef struct slist STREC; double fun( STREC *h ) STREC * creat( double *s) STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeof(STREC);p-s=0; while(is=si; i+; p-next=q; p=q; p-next=0; return h; Top86 结构体类型-链表真题分析(2013年3月程序设计题)outlist( S
38、TREC *h) STREC *p; p=h-next; printf(head); do printf(-%2.0f,p-s);p=p-next; while(p!=0); printf(nn); main() double sN=85,76,69,85,91,72,64,87, max; STREC *h; h=creat( s ); outlist(h); max=fun( h ); printf(max=%6.1fn,max); double fun( STREC *h ) STREC *p;double max;p=h-next ;max=p-s ;p=p-next ;while(p
39、!=NULL)if(p-s max)max=p-s ;p=p-next ;return max; Company LogoTop86 结构体类型-链表真题分析(2013年3月)DCompany LogoTop86 结构体类型-链表真题分析(2006年9月)下列程序中fun()函数的功能是:构成一个如图所示的带头结点的单向链表,在结点的数据域中放入了具有两个字符的字符串。Disp()函数的功能是显示输出该单链表中所有结点中的字符串。请填空完成disp()函数Company LogoTop86 结构体类型-链表#include typedef struct node /*链表结点结构* char
40、sub3;struct node *next;Node;Node fun(char s) *建立链表* void disp(Node *h) Node *p;p=h next;while( 【19】 )printf(%sn,P sub); p= 【20】 ; main( ) Node *hd;hd=fun( ); disp(hd); printf(n);p!=NULLp-nextTop86 结构体类型-链表真题分析(2006年9月)程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q 均已正确定义,并用于指向链表结点,指针变量s 总是作为头指针指向链表的第一个结点.若有下列程序
41、段q=s; s=s-next; p=s;while (p-next) p=p-next;p-next=q; q-next=NULL;该程序段实现的功能是( )。B、首结点成为尾结点C、尾结点成为首结点A、删除首结点D、删除尾结点BCompany LogoTop86 结构体类型-链表真题分析(2005年4月)有下列结构体说明和变量定义,如图所示,指针p、q、r 分别指向此链表中的三个连续结点struct nodeint data;struct node *next;*p,*q,*r;Company LogoTop86 结构体类型-链表现要将q 所指结点从链表中删除,同时要保持链表的连续,下列不能
42、完成指定操作的语句是_A、 p-next=q-next;B、p-next=p-next-next;C、p-next=r;D、 p=q-nextDCompany LogoTop87 共用体数据类型的定义与初始化构造数据类型,也叫联合体用途:使几个不同类型的变量共占一段内存(相互覆盖)共用体类型定义定义形式:union 共用体名 类型标识符 成员名; 类型标识符 成员名; .;例 union data int i; char ch; float f; ;fchi类型定义不分配内存Company LogoTop87 共用体数据类型的定义与初始化真题分析(2006年9月)若有下列定义和语句,则下列语句
43、正确的是A、 x=10.5;B、x.c=101C、y=x;D、printf(“%dn”,x);union data int i; char c; float f; x;int y;BCompany LogoTop87 共用体数据类型的定义与初始化真题分析(2005年4月)若有下列说明和定义,下列叙述中错误的是_A、 data 的每个成员起始地址都相同B、变量data 所占内存字节数与成员c 所占字节数相等C、程序段:data.a=5;printf(%fn,data.c);输出结果为5.000000D、 data 可以作为函数的实参union dt int a; char b; double c
44、;data;CCompany Logo第15章位运算Top88位运算符及简单的位运算Top89 位运算符的优先级Company LogoTop88位运算符及简单的位运算C语言提供的6种位运算符及其运算功能运算符含义优先级按位求反1(高)右移2&按位与3按位异或4|按位或5(低)Company LogoTop88位运算符及简单的位运算扩展的赋值运算符扩展运算符表达式等价的表达式a=2a=ab=nb=bn&a&=ba=a&ba=ba=ab|a|=ba=a|bCompany LogoTop88位运算符及简单的位运算1.“按位取反”运算是唯一一个单目运算符,功能是按运算对象的内容按位取反。01按位取反
45、10例:0115八进制数01151011001001001101按位取反二进制数0262Company LogoTop89位运算符及简单的位运算2.“左移”运算是双目运算符,左边是运算对象,右边是整型表达式,代表左移的位数。左移时,右端(低位)补0,左端(高位)移出的部分舍弃。例:char a=6,b;b=a2;6=110=00000110左移2位000110000024左移2位Company LogoTop89位运算符及简单的位运算小结:(1)左移时,若左端移出的部分不包含1,则每左移1位,相当于乘以2.某些情况下,可以代替乘法运算,加快运算速度。(2)如果左端移出的部分包含1,这一特性就不
46、再合适了。例:a=64,b;b=a是双目运算符,左边是运算对象,右边是整型表达式,代表左移的位数。右移时,右端(低位)移出的部分舍弃。左端(高位)移入的二进制数分两种情况(因为负数在机器内用补码表示)无符号整数和正整数,高位补0;负整数,高位补1例:a=8,b;b=a2;8=00001000左移2位00001000002右移2位Company LogoTop89位运算符及简单的位运算3.“右移”运算例:a=-8,b;b=a2;-8右移2位111111111111100011-2右移2位=-0000000000001000=1111111111110111=1111111111111000111
47、1111111111000-8Company LogoTop89位运算符及简单的位运算小结:(1)右移时,和左移相对应,若右端移出的部分不包含有效数字1,则每移出1位,相当于除以2.(2)如果左端移出的部分包含1,这一特性就不再合适了。Company LogoTop89位运算符及简单的位运算4.”按位与“运算功能:把参加运算的两个数按对应的二进制位分别进行“与”运算,当两个相应的位都是1时,该位为1,否则为0.例:int a=12,b=10,c; c=a&b;12=0000110010=0000101000010000c=8Company LogoTop89位运算符及简单的位运算5.”按位异或
48、“运算功能:把参加运算的两个数按对应的二进制位分别进行“异味或”运算,当两个相应的位不同时,该位为1,否则为0.例:int a=12,b=10,c; c=ab;12=0000110010=0000101001100000c=6结论:如果要使某位的数翻转,只要使其和1进行“异或”操作;要使某位保持原数,只要使其和0进行异或操作。Company LogoTop89位运算符及简单的位运算例:char a=0152,若希望a的高4位不变,低4位取反,则如何操作?015201101010异或0000111110000110结果为0145Company LogoTop89位运算符及简单的位运算6.”按位或
49、“运算功能:把参加运算的两个数按对应的二进制位分别进行“或”运算,当两个相应的位都是0时,该位为0,否则为1.例:int a=12,b=10,c; c=ab;12=0000110010=0000101001110000c=12结论:如果要使某一位上的数置成1,其余位不变,则将希望置1的位与1进行“或”运算,希望保持不变的位与0进行“或”运算。Company LogoTop89位运算符及简单的位运算例:char a=0152,若希望a的高4位不变,低4位置1,则如何操作?015201101010或0000111111110110结果为0145Top89位运算符及简单的位运算真题分析(2013年3
50、月)CTop89位运算符及简单的位运算真题分析(2013年3月)ATop89位运算符及简单的位运算真题分析(2013年3月)DTop89位运算符及简单的位运算真题分析(2013年3月)DCompany LogoTop89位运算符及简单的位运算真题分析(2007年4月)有以下程序,程序运行后的输出结果是A、3B、4C、5D、6#include “stdio.h”main()unsigned char a=2,b=4,c=5,d;d=a|b; d&=c; printf(“%dn”,d);01000010|011001101010&0010BCompany LogoTop89位运算符及简单的位运算真
51、题分析(2005年9月)下列程序的功能是进行位运算,程序运行后的输出结果是A、4 3B、7 3C、7 0D、4 0main( ) unsigned char a,b;a=73; b=4 & 3;printf(%d%dn,a,b);A11101100001011011100&1100Company LogoTop89位运算符及简单的位运算真题分析(2005年4月)下列程序的输出结果是_A、0B、70C、35D、1main( ) int c=35; printf(%dn,c&c);CCompany LogoTop89位运算符及简单的位运算真题分析(2007年4月)若变量已经正确定义,则以下语句的输
52、出结果是A、-1B、0C、1D、32s=32; s=32;printf(“%d”,s);BCompany LogoTop90 位运算符的优先级考点位运算符只能作用于整型或字符型数据,不能是实型数据。优先级顺序为: &|Company LogoTop90 位运算符的优先级真题分析设有以下语句,执行后c的值为A、6B、7C、8D、9int a=1,b=2,c;c=a(b2);100000011001DCompany Logo第16章文件Top91C语言文件的相关概念Top92文件的打开和关闭Top93文件的读写Top94文件的定位与出错的检测Company LogoTop91 C语言文件的相关概念
53、文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。使用数据文件的目的1、数据文件的改动不引起程序的改动程序与数据分离2、不同程序可以访问同一数据文件中的数据数据共享3、能长期保存程序运行的中间数据或结果数据文件分类按文件的逻辑结构:记录文件:由具有一定结构的记录组成(定长和不定长)流式文件:由一个个字符(字节)数据顺序组成按存储介质:普通文件:存储介质文件(磁盘、磁带等)设备文件:非存储介质(键盘、显示器、打印机等)按数据的组织形式:文本文件: ASCII文件,每个字节存放一个字符的ASCII码二进制文件:数据按其在内存中的存储形式原样存放Company Logo如 int型数100
54、000010011100010000内存存储形式0010011100010000二进制形式00 00000011000000110000ASCII形式文本文件特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果Top91 C语言文件的相关概念Company LogoTop91 C语言文件的相关概念真题分析(2006年9月)下列叙述中正确的是A、C 语言中的文件是流式文件,因此只能顺序存取数据B、打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖C、在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1 个数据D、当对文
55、件的读(写)操作完成之后, 必须将它关闭,否则可能导致数据丢失DCompany LogoTop91 C语言文件的相关概念真题分析(2005年9月)下列叙述中错误的是A、在C 语言中,对二进制文件的访问速度比文本文件快B、在C 语言中,随机文件以二进制代码形式存储数据C、语句FILE fp;定义了一个名为fp 的文件指针D、C 语言中的文本文件以ASC码形式存储数据CCompany Logo文件结构体FILE 缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为FILE的结构体描述FILE定义在stdio.h中typedef struct int _fd; /文件号 int
56、 _cleft; /缓冲区中剩下的字符数 int _mode; /文件操作方式 char *_next; /文件当前读写位置 char *_buff; /文件缓冲区位置FILE;Top92 文件的打开与关闭Top92 文件的打开与关闭(2013-3)DCompany Logo文件类型指针指针变量说明: FILE *fp;用法:文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件文件关闭后,它的文件结构体被释放文件名文件使用方式文件类型指针C程序操作系统磁盘Top92 文件的打开与关闭Company LogoTop92 文件的打开与关闭打开文件fop
57、en函数原型: FILE *fopen(char *name,char *mode)功能:按指定方式打开文件返值:正常打开,为指向文件结构体的指针;打开失败,为NULL例 文件打开与测试 FILE *fp; fp=fopen(“aa.c”,“w”); if(fp=NULL) printf(“File open error!n”); exit(0); 例 FILE *fp; fp= fopen (“c:fengyibkctest.dat”,”r”); 例 FILE *fp; char *filename=“c:fengyibkctest.dat” fp= fopen(filename,”r”);
58、 Company LogoTop92 文件的打开与关闭“r+/rb+” (读写)“a/ab” (追加)“w/wb” (只写)“r/rb” (只读)“w+/wb+” (读写)“a+/ab+” (读写)为输入打开一个文本/二进制文件为输出打开或建立一个文本/二进制文件为读/写打开一个文本/二进制文件为读/写建立一个文本/二进制文件为读/写打开或建立一个文本/二进制文件向文本/二进制文件尾追加数据文件使用方式含义Company LogoTop92 文件的打开与关闭文件关闭fclose函数原型:int fclose(FILE *fp)作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针功能:关
59、闭fp指向的文件返值:正常关闭为0;出错时,非0磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:fclose不关闭文件可能会丢失数据Top92 文件的打开与关闭Company Logo给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构!#include #includ
60、e void fun(char *s, int a, double f) /*found*/ _1_ fp; char str100, str1100, str2100; int a1; double f1; fp = fopen(file1.txt, w); fprintf(fp, %s %d %fn, s, a, f); /*found*/ _2_ ; fp = fopen(file1.txt, r); /*found*/ fscanf(_3_,%s%s%s, str, str1, str2); fclose(fp); a1 = atoi(str1); f1 = atof(str2); p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建材相关责任标准协议
- 2025年FRM金融风险管理师考试风险管理报告撰写专业试卷
- 2025年辅导员考试题库:学生社团活动策划与评估标准试题
- 2025年特种设备安全管理人员考试题库(安全防护)试题
- 2025至2030年不锈钢耐压软管项目投资价值分析报告
- 云计算服务采购与运维合同
- 2025年防白水项目可行性研究报告
- 2025年透明PS注塑冰箱件项目可行性研究报告
- 2025年芒果冰咖啡项目可行性研究报告
- 网络教育平台版权许可使用协议
- 2025年重庆联合产权交易所集团股份有限公司招聘笔试参考题库附带答案详解
- 汽车维修工(初级)技能理论考试核心题库(职校考试500题)
- 2024年版《输变电工程标准工艺应用图册》
- 《军事理论与军事技能》全套教学课件
- Theme and Rheme 主位与述位(课堂PPT)
- pocib预算工具(进出口)
- 《群监员培训》PPT课件.ppt
- 压力容器设计计算书
- 尿毒症脑病ppt课件
- 部编版四年级下册语文课件-第三单元-单元解读-共64张PPT)
- 岗位说明书公安处民警
评论
0/150
提交评论