




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c语言第1章c语言的历史、特点 第2章c语言程序的基本结构数据类型.运算符、表达式与基本语句 程序设计三种基本结构 数组与函数 指针 编译预处理、结构体、共用体、位运算与文件操作第1章c语言的历史、特点1. 1978年美电话电报公司(at&t)的贝尔实验室正式发表了 c语言。2. c语言把括号、赋值、强制类型转换等作为运算符处理。3. c语言的数据类型有整型、实型、字符型、数组型、指针型、结构体类型、共用体 类型等。(树、栈、链表等为数据构)4. c语言允许直接访问物理地址,能进行位(bit)操作。第2章c语言程序的基本结构2. 1c语言的基本结构注意事项:1. 程序的构成,main函
2、数和其它函数2. 头文件,数据说明,函数的开始和结束标志函数的返回类型函数名(参数1,参数2参数n)变量参数部分;执行过程部分;返冋值;3. 源程序的书写格式(1)c语言中有32个关键字,关键字是具有规定的意义,不能作为一般的标识使用。(2)c语言程序的编写是严格区分大小写的,一般大字母是表示常量。例题:一、选择题【例3】源程序中应包含一些内部文档,以帮助阅读和理解程序,源程序的内部文档通 常包括选择合适的标识符/注释和()oa. 程序的视觉组织b. 尽量不用或少用goto语句c. 检查输入数据的有效性d. 设计良好的输出报表【答案】a (源程序文档中主耍包括标识符命名,注释和视觉组织。)【例
3、5】以下选项中合法的用户标识符是()。a. longb. 2tcstc. 3dmaxd. a. dat【答案】b【例7】若已定义的函数有返回值,则以下关于该函数调用叙述错误的是()。a. 函数调用可以作为独立的语句存在。b. 函数调用可以作为一个函数的实参。c. 函数调用可以出现在表达中。d. 函数调用可以作为一个函数的形参。【答案】d在c语言中,当函数有返回值时可以作为表达式或表达式的一部分,而函数调用 只能作为实参,不能作为形参。第3章3. 1数据类型数据类型、运算符、表达式与基本语句注意事项:1. c语言的数据类型当整数的第一位是o时,则是八进制; 的则是十进制。而实型则是浮点小数。2.
4、 整体数据的存储长度和范围 的数据存储长度和范围,女口:当前两位为ox时,则是十六进制表示;其它数据类型位数基本整形(int)16短整形(short)16长整形(long)32无符号整形(unsign)16无符号短整形(unsigned short) 16无符:号长(unsigned long)323.常用的转义符字符形功能字符形n换行tv竖向跳格br回车f反斜线字符“",ddd1到3位八进制字符xhh数值范围-3276832767-3276旷32767-21474836482147483647"6553506553504294967295功能水平制表(跳到下一个tab位置
5、) 退格走纸换页单引号1到2位十六进制字符例题:一、选择题:【例2】以下只有在使用时才为该类型变量分配内存的存储类说明是()。a. auto和 staticb.auto和 rcgisterc. register和 staticd.extern和 register【答案】b【例4】以下选项中合法的实型常数是()。a. 5e2.0b. e-3c.2e0d. 1.3e【答案】c【例5】已知大写字母a的ascii码的值是65,小写字母a的ascii码是97,则用八进制表c.字符ed.非法的常量示字符常量aior是()。a. 字符ab. 字符a【答案】a【例6】c语言中,函数值类型的定义口j以缺省,此时
6、函数值的隐含类型是()。a. void【答案】bb. intc-f loa td. double【例7】以下选项中可作为c语言合法整数的是()。d. x2a2d. c 二“聲a. 10110bb. 0386c. oxffa【答案】c【例8】已定义c为字符变量,则下列语句中正确的是()oa. c»97,b. c 二“97”c. c=97答案c【例1】乙002年4月)设有以下变量定义,并已赋确定的值 char w; int x; float y; double z;则表达式:w*x+z-y所求得的数据类型为() 【答案】double32运算符注意事项:1.运算符种类运算符的种类可以分为算
7、术运算符、关系运算符和逻辑运算符。注意区分:/和/ (整除)对int型、float型和double型变量都适用,例如:8/3的结果是2, 10/6 的结果是1,如果整除是对于浮点数进行操作时,则其除法运算结果是一个浮点数,例如: & 0/3. 0=2. 0o% (取余数)运算符只适用运算,不允许对浮点数)float或double)操作,对 浮点型数进行操作会引起编绎错误。例如:7%4二3。(2)增1减1运算符分为前辍和后辍两种方式,前辍方式时运算符的作用在变量的前面,而 后辍方式时运算符的作用在变量的后面,无论前辍还是后辍,运算后变量的都增1) 或减1),但运算的顺序不同,例如:int
8、 a, b, c;a=2; b=+a;)相当于执彳亍:a二a+1 ;b=a;) 结果b=3。c=a+;(相当于执行:c=a;a=a+l;)结果c=2。变量a的值都变为3了。关系运算符逻辑运算符运算符名称!逻辑非&&逻辑与ii逻辑或优先级次序是:!级别最高,&&次之,丨|最低。运算符的主体可以是一个变量,也可以是一个表达式。例如:(1) int a=l; int b=0; a&&b; (2) int a=0; int b=l; int c=l; int d=l; (a+b)&&(c+d);逻辑运算符的值也是一个逻辑值,也就是1或0。
9、其它运算符:位运算符:-(按位求反)、& (按位与)、i (按位或)、八(按位异或)、 (左移)、(右 移)。赋值运算符:二(赋值运算符)+二、-二、*二、/二、二、&二、|二、八二、二、»=o逗号运算符:表达式1,表达式2,表达式n三目运算符:(条件表达式)?(条件为真时的表达式):(条件为假时的表达式)例题a. 3b 4c. 11【答案】a【例2】设intx=l, y=l;表达式(!x 一)的值是(人a. 0b. 1c. 2【答案】b一、选择题:【例1】设有int x=ll;则表达式(x+*l/3)的值是()o【例4】c语言中运算对象必须是整型的运算符是()oa.
10、 %二b. /c.二【答案】ad. 12d. -1d. <=【例5】若已定义x和y为double类型,则表达式x=l, y=x+3/2的值是()。a. 1b. 2c. 2.0d. 2 5答案b【例6】整2变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是()。 a. x | | yb. x | yc- x & yd x " y【答案】d【例7】已有定义:int x=3, y=4, z=5;,则表达式!(x+y)+zt && y+z/2的值是()。a. 6b. 0c. 2d. 1【答案】d【例8】设a和b均为double型变量,且a=55、b
11、=2.5,则表达式(int)a+b/b的值是()。a. 6.500000b. 6 c. 5.500000 d. 6.000000【答案】d【例9】下列关于单口运算符+、一的叙述中正确的是()。a. 它们的运算对象可以是任何变量和常量。b. 它们的运算对象可以是chor型变量和int型变量,但不能是floot型变量。c. 它们的运算对彖可以是int型变量,但不能是double型变量和float型变量。d. 它们的运算对象可以是char型变量、int型变量和float型变量。【答案】d【例10】有以下定义语句double a, b; int w;long c;若各变量已正确赋值,则下列选项中正确的
12、表达式是()oa. a=a+b=b+b. w%(int)a+b)c. (c+w)%(int)ad. w二 a 二二 b【答案】c【例11$若x和y代表整型数,以下表达式屮不能正确表示数学关系丨x-y i10的是()。a. abs (x-y) <10c. ! (x-y)<-101|!(y-x)>10 【答案】c【例12】设有定义语句:char cl=92, a. cl c2b. cl&c2【答案】ab. x-y>-10&&x-y<10d. (x-y)*(x-y) <100c2=92;则以卜表达式中值为零的是()。c. clc2d. cl
13、 c23. 3表达式一、选择题【例1】若变量已正确定义并赋值,下而符合c语言语法的表达式是()oa. a:二b+1b.a二b二c+2c. int 18. 5%3d.a=a+7=c+b【答案】b【例2】若a为int类型,且其值为3,则执行完表达式a+二a-二后,0的值是()a. -3b. 9c. -12d. 6【答案】c【考点解析】这题中,有多个赋值关系。从右到左计算,可以这样理解:首先a*a 等于9,再计算a=a-9,得到a=-6,再计算a=a+ (-6),所以最后答案是-12。【例6】以下选项中,与k二n+完全等价的表达式是()oa. k=n, n=n+l b. n=n+l, k=nc. k
14、 二+nd. k+二 n+1【答案】a第4章 程序设计三种基本结构4. 1顺序结构注意事项:1.表达式语句、空语句、复合语句2数据的输入与输出,输入输出函数的调用在齬言程序设计中并没有独立出来专用于输入、输出的语句,而是要调用系统提供的输入、输出函数来完成。 scan® 数、 print® 数 参数意义%*起始符号 赋值抑制符 域宽说明域1/41输入长度修正符参数m n1/h意义指定输出对齐方式 指定空位是否填0 域宽及精度输出长度修正符3复合语句例题:一、选择题:【例1下面的程序的输出结果是()o#include<stdio. h>main ()int i=0
15、10, j=lqprintf卄i, w;a11, 10b 9, 10c010, 9d 10? 9【答案】b【例3】以下程序的输出结果是()0 main ()int 4, tr=5, c=0, qcm b| |! c;printfcd;a 1b 0d -1c非啲数 【答案】a【例®若有以下程序main ()int a2, i=2, rqrrf;printf (“n i);执行后的结果是()oa 8, 6b 8, 3c 6, 4d 7, 4【答案】c【例13】设有以下程序段: int 尸2002,)=2003;printf (“,区妙); 则结果是(2003).【例同有以下程序main
16、()jnt 石电尸2,曰; printf必&易;程序运行后的输出结果是()。a 3b 2c 1d 0【答案】d【例有以下程序main ()int itf6? 0=4 x;x=-mhprintf (“h# ,力;程序运行后的输出结果是()oa 3e 5c -1d -2【答案】d【例2j有以下程序main ()unsigned int a;int lfi;ahd;printf (“f , 3);程序运行后的输出结果是()oa -1e 65535c 32767d -32768【答案】b【考点解析】在本题中,有一无符号变量和一整型变量,它们的值都是一1,在计算机整型的存储是以二进制存在,即是1
17、000000000000001,输出函数的要求输出无符号啲值,即要把 100000000000000化为十进制,得 65535b二、填空题:【例24】以下程序的输岀结果是omain()int a二0;a+= (a=8);printf(t4%dn,j a);答案16【考貞解析】在程序是用printf函数输出十进制的整数,表达式经过复合运算: a=a+a=8+8=16,则结果是 16。【例25】以下程序的输岀结果是omain()int 3二5, b二4, c二3, d;d=(a>b>c);printf (%drt, d);答案o【例27】以下诂序运行后的输出结果是。main ()int
18、 p=30;printf (,z%dn,z, (p/3>0?p/10:p%3);【答案】34. 2选择结构注意事项:例题:一、选择题:【例1】有以下程序main ()int a=15, b=21, m=0;switch(a%3)case 0:m+ ;break;case l:m+;switch(b%2)default:m+;case 0:m+;break;printf (%drt, m);程序运行后的输岀结果是()oa. 1b. 2c3d4【答案】a【例3】有以下程序main ()int i=l, j=l, k=2;if(j+| k+)&&i+)printf (d, %d
19、, %dn,i, j, k);执行后输出结果是()oa.1, 1, 2b. 2, 2, 1c.2, 2, 2d. 2, 2, 3【答案】c【考点解析】在本题中,先计算if语句后面表达式(j+| |k+)&&i+,当j二j+1二2成立时,程序并不继续运行k+, 分别是2, 2, 2o即22,再运行i=i + l=2,最后输出i、j> k的值【例4】有以下程序main ()int a=5, b=4, c=3, d二2;if (a>b>c)printf (drt, d); elseif (ct> 二 d)二二 1)printf(drt, d+1); elsep
20、rintf (dn,d+2);执行后输岀结果是()oa. 2b.3c. 4【答案】bd.编译时有错,无结杲【考点解析】在c语言屮if总是与离它最近的else语句配对。首先执行第一个if语句,判断表达式(a>b>c), -r运算符为左结合性,即ab>c的值为假,所以执 行else后而的语句。jfljelse后而语句又是if else语句,判断表达式 (c-l>=d)=l),整个表达式成立,则执彳亍输tbd+1二3。【例12】有以下程序main ()int n=0, m=l, x=2;if (!n)x-=l;if (m)x-二2;if (x)x-二 3;printf(%dn
21、,x);执行后输出结果是 。【答案】-4【考点解析】在本题中,是多个if构成的选择结构o !n=!0为真执行x二xt二2t二1, m=l,而ni又为真,执行x=x-2=l-2=-l,再x的值为真,执行x二x-3二-1-3二-4。4. 3循环结构注意事项:1. for循环结构for(表达式1;表达式2;表达3)语句;2. wh订e和do while循环结构do while语句至少执行一次。3continue语句与break语句continue语句是用于循环语句中,当执行到该语句时,重新跳到循环语句的开始位 置继续执行程序。而break语句则是跳岀循环语句,执行循环体外的语句。4.循环的嵌套例题一
22、、选择题:【例1】以下程序中,while循环的循环次数是()omain()int i二0;while (i<10)if(i<l) continue;if (i=5) break;i+;a. 1b. 10c. 6d.死循环,不能确定次数【答案】d【考点解析】在题目中,首先给整型变量i赋初始值为0,接着进行循环语句while 判断,判断为真则进入循环体,在循环体屮执行选择结构的if语句,这里有两 个if语句,第一个if成立,则执行重新回到while语句重新判断,因为变量i的 值没有发生改变,则程序会一直在这两条语句间执行,而造成死循环。【例2】以下程序的输岀结果是()omain()in
23、t a=0, ifor(i=l;i<5;i+)swit ch(i)case 0:case 3:a+二2;case 1:case 2:a+=3; default:a+=5;printf (,z%dn a);a. 31b. 13c. 10d. 20【答案】a【考点解析】当i为1时,a二a+3+5二&当i二2时,a二a+3+5二16;当i二3时, 沪a+2+3+5二26;其余的为a=a+5=31,即答案为31。【例3】以下程序的输出结果是()。ttinclude <stdio.h>main ()int i=0, a=0;while(i<20)for(;)if(i%10
24、)=0) break;else i一-;i+=ll;a+=i;printf("%dn,a);a. 21c. 33b.d.3211【答案】b【例5】有以下程序 main ()int i=0,s=0; dowhile(i<7); printf (%drt,s); 执行后输岀结果是a. 16c. 28b.d.1221【答案】a【例7】有以下程序 main ()int k=4,n=0;for (;n<k;)n+;if (n%3!=0)continue; k;printf ('%d, %drt, k, n);程序运行后的输出结杲是()ob. 2,d. 4,a. 1, 1c.
25、 3, 3【答案】c【例12】有以卜程序main()int i,n=0;for (i=2;i<5;i+)doif(i%3) continue; n+;while(! i);n+;printf("n=%drt,n);程序执行后的输岀结果是()oa. n二 5b. n=2c.n二 3d.n 二4【答案】d第5章数组与函数51数组数组是一个有序的数据集合,数组里每个元索都属于同一个数据类型,用一个统一 的数组名和卜标來确定数组中的元素。注意事项:1 一维数组的定义、初始化和引用(1) 一维数组的定义方式:类型标识符数组名数组长度数组名命名规则和标识符命名规则一致。(2) 维数组的初始
26、化方法: 在定义数组时对数组初始化,如:int array 8 = 1, 2, 3, 4, 5, 6, 7, 8 可以只给一部分元素赋值,如:int array8 = 1, 2, 3, 4即:int array8 = l, 2, 3, 4, 0, 0, 0, 0 若要数组里所有元素为0,可以写成:int array8=0 在对数组中全部元索赋初值时,可以不指定数组长度,女口:int array = 1, 2, 3, 4, 5与int array5 = l, 2, 3, 4, 5意义相同。(3) -维数组的引用:数组名下标2多维数组的定义、初始化和引用3字符数组的定义、初始化和引用char数组名
27、数组长度4.字符串在(:语言中字符串是作为字符数组来处理。系统对字符串常量口动加入一个'0,作 为结束符。例如hello world"共有11个字符,但在内存中占有12个字节的空间,第十二个字符为0'又系统动加上去的。例题一、选择题【例1】若已定义:int a = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *p=a, i;中0wiw9,则对a数组元素不正确的引用是()。a. ap-ab. *(&ai)c. pid. a10【答案】d【例2】卜列程序执行后的输出结果是()。main()char arr10;strcpy (arr, your);
28、 strcat (arr, me);air3=' &'printf (s n, arr);a. you&meb.youc. med.err答案】a【爲3】当执行下而的程序时,如呆输入abc,则输岀结果是()oinclude "stdio.h#include "string, h"main ()char ss10=l, 2, 3, 4, 5;gets(ss) ; strcat(ss, ”6789); printf(srt, ss);a. abc6789b.abc67c.12345abc6d. abc456789【答案】a【考点解析】g
29、etso函数的从终端输入一个字符串到字符数组,题目输入abc后数组ss 内容为abc0,strcat0作用是在数组ss后面连接上字符串6789,所以答案选a。【例6】以下程序的输岀结果是()。main ()int i,x3 3 = 1,2, 3, 4, 5, 6, 7, 8, 9;for(i=0;i<3;i+) printf(%d, “,xi2-i);a.1,5,9b.1,4,7c. 3, 5, 7d.3,6,9答案】c【考点解析】题目输出的是x0、xll和x20。【例7】以卜程序的输出结果是()。main()int a3 3 = 1,2, 3,4, 5, 6, i, j, s二0;fo
30、r(i=l;i3;i+)f or (j=0;j <=i;j+)s+=aij;printf (%dn,s);a. 18b.19c. 20d.21【答案】a【考点解析】初始化时只把数组里部分元素赋值,没冇赋值的默认为0,题目把al0、 all、a2 0、a2l和a22累加到s。【例8】(2001年4月)以下程序的输出结果是()。main ()char w 10 = abcd,“efgh,“ijkl,mnop, k; for(k=l;k<3;k+)printf(srt, wk);a. abcdb. abcdfgi1efgkl1jmc. efgd. efghjktjkl0【答案】i)【考点
31、解析】题目输出的是讥1和w2o【例11】以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序 void sort(int a, int n)int i, j, t;for (i=0;i<nl;i+)for(j=i+l, j<n;j+)if (ai<aj) t=ai ;ai=ajmain ()int aa10 = l,2, 3, 4, 5, 6, 7, 8, 9, 10, i;sort(&aa3,5);for(i=0;i<10;i卄)printf(%d, ,aai);printf (rt);程序运行后的输出结果是()oa. 1, 2, 3, 4,
32、5, 6, 7, 8, 9, 10 b. 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,c. 1, 2, 3, 8, 7. 6. 5. 4. 9, 10d. 1, 2, 10, 9, 8, 7, 6, 5, 4, 3【答案】c【考点解析】题中sort(&aa3,5)把数组观中的第四个元素的地址传递给形式参数,利 用sort函数把数组中第4至8进行排序,所以正确答案选c。【例12】以下程序中函数reverse的功能是将a所指数组中的内容进行逆置void reverse(int a ,int n)int i, t;for (i=0;i<n/2;i+)t=ai; ai=a
33、n_i;an_l-i二t;main()int b10 = l,2, 3,4, 5,6, 7, 8, 9, 10: int i, s=0;reverse (b,8);for(i=6;i<10;i+) s+二bi;printf (%dn,s);程序运行后的输出结果是()。a. 22b.10c. 34d. 30【答案】a【考点解析】通过reverse把数组b前8个元素逆置为8, 7, 6, 5, 4, 3, 2, 1,再对数组b最后4 个元素求和。【例5】以下程序运行后的输岀结果是。main ()int a4 4 = 1,2, 3, 4, 5, 6, 7,8, 11, 12, 13, 14,
34、15, 16, 17, 18;int i二0, j二0, s二0;while (i+4)if(i=2|i=4) continue;j=0;do s+二 ai j; j+; while(j<4);printf (%drt, s);【答案】92【考点解析】题口中两个循环语句,第一个while语句的条件是i+<4,先进行了自增1 在判断是否符合循环条件,所以在while循环体内i的初值是1,当i为2或4时回到循环的 开头,所以在do while循环体内i的值只能是1和3,所以s=al 0+al l+al 2+al 3+a3 0+a3 l+a3 2+a3 3二92。4. 2函数函数是组成c
35、程序的基本单位,一个c程序可由一个主函数和若干个了函数组成,每 个子函数可以完成特定的功能。注意事项:1. 库函数的正确调用2. 函数的定义方法函数定义的一般形式:类型标识符函数名(形式参数列表)数据声明部分3.4.语句 局部变量和全局变量。变量的存储类别(自动、静态、寄存器、外部),变量的作用域和生存期。变量的存储类别,是指变量在内存中的存储方式。可以分为:自动(auto).静态 (static)、寄存器(register)、外部(extern)四个类型。自动(auto):这种类型的变量是动态分配存储空间的,数据存放在动态存储区中。 函数的形式参数和函数体内的形式参数都属于这种类型。在函数调
36、用时分配存储空间, 当调用结束就释放存储空间。静态(static):这种类型的变量占用着存储空间不释放,在下次访问该变量时,该 变量的值是上次修改的值。寄存器(register):这种存储方式跟自动(auto)方式都是相同,当使用完变量以后 会自动释放空间。外部(extern):这种类型的变量就是全局变量. 变量的作用域是指变量能够发挥作用的范围. 变量的生存期是指变量在程序执行的过程中存在、拥有分配的存储空间的时期。例题一、选择题【例3】下列程序执行后的输岀结果是()。 void funcl (int i);void func2(int i);char st二hello, friend!&q
37、uot;void fund (int i)printf(%c,sti);if(i<3) i+=2;func2(i);void func2(int i)printf(%c, sti);if(i<3) i+=2;funcl(i);main ()int i二o;funcl (i) ; printf (rt);a. hellob. helc hlod. him【答案】c【考点解析】这道题中两个函数里面都发生了嵌套调用,过程如下,i二0,调用funcl(o) 函数输出st0, i二2,调用func2(2)输出st2, i二4,调用fund (4)输出st4。【例4】有如下函数调用语句 fun
38、c(reel, rec2+rec3, (rec4, rec5); 该函数调用语句中,含有的实参个数是()。a. 3b.4c. 5d.有语法错【答案】a【例6】有如下程序 long fib(int n) if (n>2) return (fib (nl)+fib (n2);else return(2);main () printf (,z%dn,z, fib (3) ; 该程序的输出结果是()o a. 2b4c. 6d8【答案】b【考点解析题目中fib (3)二fib (2) +fib (1)二2+2二4。【例7】在c语言中,函数的隐含存储类别是()。a. autob. staticc.
39、externd.无存储类别【答案】c【例8】有以下函数 char fun(char *p) return p; 该函数的返冋值是()o a.无确切的值。b.形参p中存放的地址值。c. 一个临时存储单元的地址。d.形参p自身的地址值。答案】b【策点解析】题目中,p是一个字符型指针作为形式参数,在调用函数的时候存放实际 参数的地址,所以返冋是返冋p中存放的地址而不是p自身的地址。【例10】当调用函数时,实参是一个数组名,则向函数传送的是()。a.数组的长度。b.数组的首地址。c.数组每一个元素的地址。d.数组每个元素中的值。【答案】b【例11】以下只有在使用时才为该类型变量分配内存的存储类说明是(
40、)。a. eiuto和 staticb. eiuto和 rcgisterc register和 staticd extern和 register【答案】b【例13】在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是()。a.地址传递。b.单向值传递。c.由实参传给形参,再由形参传冋实参。d.传递方式由用户指定。答案b【胡点解析】在c语言中,函数的传递方式只有单向值传递。【例17】在c语言中,形参的缺省存储类别是()。a. autob. registerc. staticd. ext ern【答案】a【例18】以下叙述中正确的是()。a. 全局变量的作用域一定比局部变量的作用域范
41、围大。b. 静态(static)类别变量的生存期贯穿于整个程序的运行期间。c. 函数的形参都属于全局变量。d. 未在定义语句屮赋初值的auto变量和static变量的初值都是随机值。【答案】b【例19】若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是()。a.调用可以作为独立的语句存在。b.调用可以作为一个函数的实参。c.调用可以出现在表达式中。d.调用可以作为一个函数的形参。答案d【胡点解析】调用函数有三种方式:作为独立语句、作为一个函数的实际参数和在表达 式中参加运算。第6章指针注意事项:1. 指针与指针变量的概念,指针与地址运算符。仃)指针与指针变量的概念。c语言中的指针是指一
42、个变量的地址,存放这个地址的变量就是指针变量。指针变量跟普通变量占用一定的存储空间,不同的是存储在指针变量存储空间中的不是普通数 据而是一个地址。当指针得到某一地址时,称指针指向该存储区域。可以通过指针对它所指向的内存区域 屮的数据进行处理。指针所指向的内存区域屮的数据称为指针的口标,指针ii标用指针 名前面加*符号表示。(2)指针与地址运算符。c语言中与指针有关的运算符有两个:&:取地址运算符,例如:&a表示变量a的地址。*:指针运算符,例如:*p表示p所指向的变量。2. 变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、 结构体的指针变量。通过指针引用
43、以上各类型数据。(1) 指针的声明形式:数据类型*指针名(2) 数组与指针。c语言中的指针可以指向数组元素,同时可以通过指针引用数组,通过指针引用数 组能捉高程序的质量。定义指向数组元素的指针变量形式与定义指向变量的指针变量和同,如int a10;int *p;p二&a0;或卩二 a;p的初值为&a0,则: p+i和a+i就是ai的地址。 * (p+i)或* (a+i)是p+i或a+i所指向的数组元素ai。 指向指针的变量也可以带下标,如讥i和*(p+i)等价。(3) 字符串与指针。(4) 指向函数的指针。数据类型(*指针名)()这里的数据类型是指函数的返冋类型。3. 用指针作
44、函数参数。用指针作为函数参数可以实现“传址''方式的参数传递,使得主调用函数得到多个在 被调用函数处理过程中所修改了的值。4. 返回指针值的指针函数。函数的返冋值可以是指针,这种函数的定义形式如下:数据类型*两数名(参数表)这里数据类型是指返回指针的数据类型。5. 指针数组,指向指针的指针,main函数的命令行参数。(1) 指针数组。指针数组是-个数组,数组里面每个元素都是-个指针变量,其定义形式如下: 数据类型*数组名数组长度与二维字符数组相比指针数组用于处理多个字符吊更方便。如杲用二维字符数组來处理 多个字符串时,数组的列数是相同的,但并不能保证每个字符串的长度都相同,这样
45、就 会造成存储空间的浪费,而用字符型的指针数组处理多个字符串就不存在这样的问题, 因为并不需要规定字符串的长度。(2) 指向指针的指针。当一个指针变量指向另一个指针是,称该指针变量为指向指针的指针变量,简称指 向指针的指针。定义一个指向指针的指针一般形式如下:数据类型*指针名(3) main函数的命令行参数。指针数组的一个重要的应用是作为main函数的形式参数。nmin函数带参数的形式如k:main(int argc, char *argv)这两个形参的值不能从程序中得到,而是和命令一起给出。用帯形参的main函数可 以直接从命令行得到参数值,在程序运行吋可以根据输入的命令进行不同的处理。利用
46、带形参的nieiin函数增加了一条系统向程序传递数据的途径。例题一、选择题【例1】卜列程序执行后的输出结果是()。void func(int *a, int b)b0=*a+6;main ()int a, b5;a=0; b0二3;func (&a, b);printf (dn,b0);a. 6b. 7c. 8d 9【答案】a【考点解析】题-pfunc函数的两个形式参数分别为指针和数组,分别接受一个地址和一 个数组名作为实际参数。实际参数&“把"的地址传递给形式参数使形参指向变量a,所以 函数中畑是q的值0,数组作为函数实际参数时传递给函数的是数组的首地址,数组元素
47、在函数中的修改会影响到函数外的值。【例2】下列程序执行后的输出结果是()omain () int a3 3, *p, i;p二&a0 0;for(i=0; i<9; i+)pi二i+1;printf(%dn,al 2);a. 3b. 6c. 9d.随机数【答案】b【考点解析】al2是数组a的第2行第3个元素,即讥5二6。【例6】设已有定义:char *st二how are you",下列程序段中正确的是()。a. char all,*p; strcpy(p=a+l, &st4);b. char all; st rcpy (+a, st);c. char all;
48、 strcpy(a, st);d. char a ,*p;strcpy(p二&al,st+2);答案a【胡点解析】a选项是把st所指向的字符串的第五个字符开始以后的字符串赋值给数组a 第二个元素开始后面的元素;b选项中数组名是地址常量,不能进行口加;c选项形式是 正确但st所指字符串有12个字符,a数组只有11个元素,不能进行赋值;d选项数组a没 有指定长度。【例7】假定下列程序的可执行文件名为prg. exe,则在该程序所在的子口录下输入命令 彳亍:prg hello good<回车后,程序的输出结果是()。main(int argc, char *argv) int i;if
49、 (argc<=0)return;for(i=l;i<argc;i+) printf(c, *argvi);a. hello goodb. hgc. held. hellogood【答案】b【考点解析】nrnir)函数第一个参数argc是指命令行中的参数个数,argv是一个指向字符 串的字符数组,数组里的元素指向命令行中的字符审。题中,命令行有三个字符串所以 肚gc值为3,输出的是第二个字符串和第三个字符串的第一个字母。【例8】有如下程序段int *p, a二 10, b二 1;p二&ai; a二*p+b;执行该程序段后,3的值为()。a. 12b. 11c. 10d.编译
50、击错【答案】b【考点解析】题中3把地址赋值给指针变量p,*p就是8的内容,所以4二10+1二11。【例9】以卜函数返回er所指数组中最小的值所在的卜标值fun(int *a, int n) int i, j=0, p;p二 j;for(i=j;in;i+)if (ai<ap);return (p);在下划线处应填入的是()oa. i 二pb. ap=aeic. p=jd. p=i答案d【穆点解析】首先让p=0设第一个元素最小,通过循环使数组的毎个元素都与当前最小 元素ap比较,如果ai<ap就更新p的值p=i。【例11】有如下程序main () char s =abcd, *p;f
51、or (p=s+l; p<s+4; p+)printf (srt, p);该程序的输岀结果是()oa. abcdb. ac. bd. bcdbcdcdcddd【答案】d【考点解析】字符指针p先指向s+1,通过四次循环使p分别指向s+1、s+2、s+3、s+4并 输出。【例13】下列程序的输岀结果是()。main()char a 10二9, 8, 7, 6, 5, 4, 3, 2, 1,0), *p=a+5;printf (%d,*-p);a.非法b. a 4的地址c. 5d. 3答案c【胡点解析】p是指向字符的指针并初始化为“5的地址。输出时先进行自减使p指向°4 再输出。4中
52、的内容。【例14】下列程序的运行结果是()ovoid fun(int *a, int *b)int *k;k=a; a=b; b=k;main()int a=3, b=6, *x二&“,*y二&b;fun(x, y);printf (d%d,a, b);a. 63b. 36c.编译出错d. 0 0【答案】b【考点解析】nmin函数中定义了两个整型指针x、y分别指向变量a、b,将x、y作为实际 参数调用fun,在fun里实现把x跟y的值调换,使得x指向b, y指向a,但是并没有改变a 和b的值。【例20】若有定义:int aa8;贝u以下表达式中不能代表数组元aal的地址的是()。 a. &aa0+lb. & aalc. & aa0+d. aa+1答案】c【爲21】在说明语句:int*f();,标识符f代表的是()。a. 一个用于指向整型数据的指针变量。b. 一个用于指向一维数组的行指针。c. 一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考试题中题及答案
- 分类招生考试题型及答案
- 防雷知识考试题目及答案
- 儿科考试题及答案解释
- 跌倒考试题及答案问卷星
- 白酒生产项目可行性研究报告
- 电气识图考试题目及答案
- 中国防火石膏板行业市场前景预测及投资价值评估分析报告
- 2025年中国叔丁基对苯二酚项目投资计划书
- 2025年甲酸生产装置可行性研究报告管理资料
- 北京市海淀区2023-2024学年七年级上学期数学期中考试试卷(含答案)
- 医院感染管理科十五五发展规划
- 【历年真题】2023年4月00688设计概论自考试卷(浙江)
- 幼儿园中班数学《坐船游览》
- 2016年上外杯-初赛英语试题(原卷版)
- 道路工程测量实习报告
- PKPM系列之-PKPT项目管理软件使用说明
- GB/T 37546-2019无人值守变电站监控系统技术规范
- GB/T 32381-2015全地形车辆轮胎
- GB/T 17505-2016钢及钢产品交货一般技术要求
- 建筑工地电动车辆安全检查验收表
评论
0/150
提交评论