C语言程序设计知识点及示例11.docx
- 文档编号:3635142
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:23
- 大小:30.16KB
C语言程序设计知识点及示例11.docx
《C语言程序设计知识点及示例11.docx》由会员分享,可在线阅读,更多相关《C语言程序设计知识点及示例11.docx(23页珍藏版)》请在冰豆网上搜索。
C语言程序设计知识点及示例11
C语言程序设计知识点及示例
知识点1:
C语言程序总含有main函数,程序执行时,总是从main函数开始,在main函数结束。
示例1:
C语言程序一定包含 函数。
参考答案:
main
示例2:
C语言程序执行时,如下叙述中正确的是 。
A)总是从main函数开始,在main函数结束
B)从main函数开始,在程序的最后一个函数中结束
C)从程序的第一个函数开始,在main函数结束
D)从程序的第一个函数开始,在程序的最后一个函数中结束
参考答案:
A
知识点2:
C语言的main函数可以调用所有其他函数,其他函数可以相互调用,但其他函数不能调用main函数,在正常性情况下每个函数都可以被编译。
示例3:
C语言的函数 调用main函数。
示例4:
以下关于函数的叙述中正确的是 。
A)每个函数都可以被其他函数调用(包括main函数在内)
B)main函数可以调用所有其他函数
C)在一个函数内部可以定义另一个函数
D)前面都是错误的
参考答案:
B
知识点3:
C语言的标识符由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线,标识符包括关键字(共32个,例int,if,…),系统预定义的标识符(库函数名,例printf,scanf,…)和用户标识符。
示例5:
按照C语言规定的用户标识符命名规则,标识符中 包含正负号。
参考答案:
不能
示例6:
按照C语言规定的用户标识符命名规则,下面 是标识符。
A)1x B)x$ C)_for D)for
参考答案:
C
示例7:
下列定义变量的语句中错误的是 。
A)int_if;B)intINT;C)charfor%;D)float_float;
参考答案:
C
知识点4:
在C语言中,整常数可用以下三种形式表示:
十进制整数;八进制整数。
以0开头的数是八进制数;十六进制整数。
以0x开头的数是16进制数。
示例8:
以下选项中可作为C语言合法常量的是 。
A)0xabgB)-0819C)xab8D)0xabc
参考答案:
D
示例9:
在C语言中,八进制整常数以 开头。
参考答案:
0
示例10:
在C语言中,十六进制整常数以 开头。
参考答案:
0x
知识点5:
在C语言的实常数的指数表示法中,字母e(或E)之前必须有数字,且e后面的指数必须为整数。
示例11:
在C语言的实常数的指数表示法中,字母e(或E)之前必须有数字,且e后面的指数必须为 。
参考答案:
整数
示例12:
以下选项中 是合法的C语言合法常量。
A)-80B)-08C)-1e6.0D)1.68e
参考答案:
A
知识点6:
在C语言中,以l或L结束的常整数为长整型常数。
示例13:
在C语言中,如果一个整常数以 结束,则此常数为长整型常数。
参考答案:
L或l
知识点7:
在C语言中,定义变量可以为量常初值,但其初值应是常量表达式,不能包含变量。
示例14:
以下能正确定义且赋初值的语句是 。
A)intx=y=16;B)charch=98;
C)inta=a+6;D)doublex=1.68e-8.0
参考答案:
B
知识点8:
在C语言中,任何非零的数值被认作“真”,零值表示“假”。
示例15:
设有定义:
“intm=1,n=6;”,则以下选项中值为1的表达式是 。
A)(m==1)&&(!
n==0)B)(m C)! m&&! nD)! m||! n 参考答案: A 示例16: 表达式“(E)? (x+1): (y+1)”中的条件表达式(E)等价的是 。 参考答案: E! =0或E<0||E>0 知识点9: break语句可用于switch语句和循环体中,continue只能用于循环体中,用于结束本次循环。 示例17: continue只能用于 中。 参考答案: 循环体 示例18: 下列叙述正确的是 。 A)break语句只能用于switch语句 B)continue语句只能用于switch语句 C)break语句必须与switch语句中的case配对 D)break可用于switch语句和循环体中 参考答案: D 知识点10: 在定义数组时可为其赋初始,并且第一维元素个数可以不写。 示例19: 下面正确定义一维数组的选项是 。 A)inta[2]={1,2,3};B)chara[]={1,2,3,4,5}; C)chara={'a','b','c'};D)inta[3]="abc"; 参考答案: B 示例20: 下面正确定义二维数组的选项是 。 A)inta[2][3]={1,2,3};B)chara[][2]={1,2,3,4,5}; C)chara[2][2]={'a','b','c','d','e'};D)inta[2][4]={"abc","123"}; 参考答案: B 示例21: 以下二维数组定义中错误的是 。 A)intx[][3]={0,1,2,3,4,5,6,7,8};B)intx[2][3]={{0,1},{2,3},{4,5}}; C)intx[][3]={{1},{2}};D)intx[2][2]={1,2,3,4}; 参考答案: B 知识点11: 函数返回值类型取决于定义函数时的函数首部所说明的函数类型。 示例22: 函数返回值类型取决于定义函数时的函数首部所说明的 。 参考答案: 函数类型 示例23: 在C语言中,函数返回值的类型与 相同。 A)函数原型中的函数类型B)return语句中表达式的类型 C)函数的实参类型D)函数的形参类型 参考答案: A 示例24: 已定义以下函数“intfun(int*p){return*p;}”,则fun函数返回值是 。 参考答案: 一个整型数 知识点12: 在调用函数时,不写函数的返回值类型与实参类型。 示例25: 有以下函数定义“voidf(inta){…}”,如果以下选项中的变量都已经正确定义并赋值,则对函数f的正确调用语句是 。 A)f(inta);B)f(1.0);C)f("123");D)voidf(a); 参考答案: B 知识点13: 如果指针变量p指向x,则可用*p间接访问x。 示例26: 若有定义: “intx=18,*p=&x;”,则*p的值是 。 参考答案: 18 知识点14: 指针变量不能被赋值为整型值。 只能被赋值为地址值。 示例27: 设已有定义: “floatx;”,则以下对指针变量p进行定义且赋初值的语句中正确的是 。 A)float*p=1024;B)int*p=(int)x+1; C)floatp=&x;D)float*p=&x; 参考答案: D 知识点15: 调用scanf函数时,应写输入项的地址值。 示例28: 若有定义: “intx=18,*p=&x;”,则通过p输入x的语句是“scanf("%f", );”。 参考答案: p 如有定义“inta[10],*p=a;”,则p指向a[0],p+i指向a[i],*(p+i)=*(a+i)=a[i]=p[i]。 示例29: 若有定义“inta[10],*p=a;”,当执行“p++;”后,p指向 。 参考答案: a[1] 知识点16: 结构体变量所占内存长度是各成员占的内存长度之和。 共用体变量所占的内存长度等于最长的成员的长度。 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。 示例30: 若有以下定义: union { inta; charb; doublec; }data; 以下叙述中错误的是 。 A)data的每个成员起始地址都相同 B)变量data所占的内存字节数与成员c所占字节数相等 C)程序段“data.a=16;printf("%fln",data.c);”输出结果为16.000000 D)data可作为函数的实参 参考答案: C 示例31: 若有以下定义: union { shortinta; charb; doublec; }data; 变量data所占的内存字节数为 。 参考答案: 8 示例32: 若有以下定义: struct { shortinta; charb; doublec; }data; 变量data所占的内存字节数为 。 参考答案: 11 知识点17: 用typedef声明新的类型名来代替已有的类型名。 一般使用格式为“typedwf已有类型新类型;”。 示例33: 设有以下语句: typedefstructDateType { intmonth; intday; intyear; }DATE; 则下面叙述中正确的是 。 A)不能用structDateType定义结构体变量 B)DATE是struct类型的变量 C)可以用DATE定义结构体变量 D)DATE是structDateType类型的变量 参考答案: C 示例34: 声明STRING为字符指针类型的语句为 。 参考答案: typedefchar*STRING; 知识点18: 宏定义和文件包含都属于预处理命令,在源程序的一行上只能写一条预处理命令,对源程序编译之前做一些处理,生成扩展C源程序,都不占用程序运行时间。 示例35: 宏替换命令 程序的运行时间。 参考答案: 不占用 示例36: 以下叙述中正确的是 。 A)在源文件的一行上只能有一条预处理命令 B)宏名必须用小写字母表示 C)宏替换要占用程序的运行时间 D)前面都是错语的 参考答案: A 示例37: 若程序有宏定义"#defineN168;",则以下叙述中正确的是 。 A)在预编译时,对C源程序用168替换标识符N B)在编译时,用168替换标识符N C)在运行时,用168替换标识符N D)前面都是错误的 参考答案: A 知识点19: 数据块读写函数(fread()和fwrite())的调用函数调用“fread(buffer,size,count,fp);”与“fwrite(buffer,size,count,fp);”中的buffer是指针,对fread来说,它是读入数据的存放地址,对fwrite来说,是要输出数据的地址(均指起始地址)。 示例38: 读取二进制文件的函数调用形式为“fwrite(buffer,size,count,pt);”,其中buffer是 。 A)一个文件指针B)一个内存块的首地址,表示读入数据存放的地址 C)一个内存块的字节数D)一个内存块的首地址,表示输出数据存放的地址 参考答案: D 知识点20: 如到文件末尾,则函数feof的函数值为真 (1),否则函数值为假(0)。 示例38: 设fp为指向一二进制文件的指针,且还未读到此文件末尾,则函数feof(fp)的返回值为 。 A)EOFB)1C)0D)NULL 参考答案: C 示例39: 设fp为指向一二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为 。 参考答案: 1 知识点21: 指针变量的值是地址,不能赋一个整数作为指针变量。 示例40: 以下叙述中错误的是 。 A)通过函数形参的值可以改变对应实参的值B)函数可以返回地址值 C)可以将一个整数赋给一个指针变量D)函数的形参可以为结构体类型 参考答案: C 知识点22: 对于逻辑表达式,并不是所有的逻辑运算符都要被执行。 例如a&&b,只有a为真时,才需要判断b的值,又如a||b,只要a为真,就不必判断b的值。 示例41: 已有定义“floatx=6;intn=8,k;”,执行“k=x||n++”以后,n的值为 。 参考答案: 8 示例42: 已有定义“intm=6,n=8,k;”,执行“k=! m&&--n”以后,n的值为 。 参考答案: 8 示例43: 有以下程序: #include intmain(void) { inta,b,c; a=2;b=3; c=(a/b<1)||(a%b>1); printf("%d%d%d\n",a,b,c); return0; } 运行结果是: 参考答案: 231 点评: 由于“a/b<1”为值,所以“(a/b<1)||(a%b>1)”也为真(值为1),所以c=1。 知识点23: 对数值型或字符型数组在定义时可进行初始化,如所给初值的小于数组元素个数,则未赋初值的元素的值为0(或'\0')。 示例44: 设有定义语句: “inta[][168]={{1},{2}};”,则数组元素a[1][16]的值为 。 参考答案: 0 示例45: 设有定义语句: “inta[16]={1,2};”,则数组元素a[6]的值为 。 参考答案: 0 知识点24: 对于“intn,*p=&n;”,则*p为p所指向变量n的值,&n为n的地址。 示例46: 对于“intn=8,*p=&n;”,则*p的值为 。 参考答案: 8 示例47: 已有定义“inta=1024;”,a的地址为1026,则&a= 。 参考答案: 1026 知识点25: 打开文件语句“fopen(文件名,使用文件方式);”,使用文件方式为字符串,对于打开文本文件,“r”表示(只读)为输入打开一个文本文件,“w”表示(只写)为输出打开一个文本文件,“a”表示(追加)向文本文件尾增加数据。 示例48: 设有定义: “FILE*fp;”,将以下打开文件的语句补充完整,以便为输出打开一个文本文件。 fp=fopen("test.txt", ); 参考答案: "w" 示例49: 以下程序建立一个名为test.txt的字符文件(文本文件),将从键盘输入的一行字符存入文件中。 请填空。 #include #include intmain(void) { FILE*fp; charch; if((fp=fopen("test.txt",[1]))==NULL) { printf("Cannotopen! \n"); exit(0); } printf("Enterdata\n"); while((ch=getchar())! ='\n')fputc(ch,fp); fclose(fp); return0; } 参考答案: [1]"w" 点评: 文件操作方式是字符串,注意"w"应用双引号括起来。 知识点26: malloc的函数原型为“void*malloc(unsignedintsize);”,一般使用格式为“(基类型*)malloc(sizeof(基类型))”。 示例50: 已有指针定义“float*p;”,请写出完整的语句,利用malloc函数使p指向一个动态存储单元 。 参考答案: p=(float*)malloc(sizeof(float)) 知识点27: 通过关键定extern声明将外部变量的作用域在本文件范围内扩充也可将用作域扩充到其他程序文件中。 示例51: 用关键字extern声明的变量为。 参考答案: 外部变量 知识点28: 通过关键定static声明将外部变量的作用域在仅限于所在文件中。 示例52: 在多文件程序中,要将外部变量的作用域仅限于所在文件,应使用关键字 。 参考答案: static 知识点29: 枚举类型用于将变量的值一一列举出来,变量的值只限于列举出来的值的范围内,声明枚举类型用enum。 示例53: 声明枚举类型使用的关键字是 。 参考答案: enum 知识点30: 对于ifelse结构,else一般与最接它的if相匹配,编程时最好采用恰当的缩进格式。 示例54: 有如下程序: #include intmain(void) { intx=16,y=30,z=40,flag=9,p=80; if(x if(z elseif(! p)x=p+flag; elsex=y+z+p; printf("%d\n",x); return0; } 运行结果是: 参考答案: 150 点评: 上面程序ifelse结构缩进格式恰当,容易看出else与if的匹配关系,由于关系表达式“x>y”为假,所以直接出跳if结构,显示x的值16。 知识点31: switch语句执行时,首先计算switch的判断表达式,并以此值去依次找与之相等的case标号值,找到后就将流程转到该标号处,执行后面各语句。 示例55: 有如下程序: #include intmain(void) { intn=0,x=0,y=0; switch(n) { case0: y++; case1: x++; break; case2: x++; y++; } printf("%d,%d\n",x,y); return0; } 运行结果是: 参考答案: 1,1 点评: 由于n=0,所以从case0后面的语句开始执行,执行到break时跳出switch结构。 知识点32: 逗号表达式的一般形式可以扩展为“表达式1,表达式2,表达式3,……,表达式n”,它的值为表达式n的值。 示例56: 有如下程序: #include intmain(void) { inta=10; a=(3,6,++a,a+9); printf("%d\n",a); return0; } 运行结果是: 参考答案: 20 知识点32: 对于C语言的表达式,如果表达式的值为0,表示逻辑假,如果表达式的值非0,表示逻辑真。 示例57: 有以下程序: #include #include intmain(void) { intk=8; while(--k)printf("%d\n",k-=6); return0; } 运行结果是: 参考答案: 1 点评: 第1次循环时,“--k”值为7,为真,并且k的值为7,经过“k-=6”后,k的值为1,所以显示1,第2次循环时,“--k”值为0,循环结束。 示例58: 有以下程序: #include intmain(void) { intx=-6; while(x++); printf("%d\n",x); return0; } 运行结果是: 参考答案: 1 点评: 当while条件“x++”为假时,“x++”的值为0,也就是取出x的值为0,然后再将x的值加1,所以x的值变为1。 示例59: 有以下程序: #include intmain(void) { inti=1; do printf("%d",i); while(--i); printf("%d\n",i); return0; } 运行结果是: 参考答案: 1 点评: 第1次循环时,i的值为1,显示1,条件“--i”的值为0,i的值也变为0,所以第2个printf语句显示0。 知识点33: 简单递归函数通常对应数学中递推式,可简单地将递推式中的递推条件用if语句表示来进行编程。 示例60: 试用递归编程实现求阶乘n! 的函数,并编写测试程序。 分析: 求阶乘函数f(n)=n! =1*2*…*n可用递推式表示如下: 具体递归函数及测试程序如下: #include intf(intn) { if(n==0)return1; elsereturnn*f(n-1); } intmain(void) { printf("%d\n",f(6)); return0; } 示例61: 试用递归编程实现求累加和1+2+3+…+n的函数,并编写测试程序。 分析: 求求累加和1+2+3+…+n的函数可用递推式表示如下: 具体递归函数及测试程序如下: #include ints(intn) { if(n==0)return0; elsereturnn+s(n-1); } intmain(void) { printf("%d\n",s(10)); return0; } 知识点34: 函数返回值类型由函数首部说的函数类型决定,与“return表达式”中的表达式类型无关。 示例62: 有以下程序: #include intf(doublex,doubley) { returnx+y; } intmain(void) { intw=f(1.3,2.6); printf("%d\n",w); return0; } 运行结果是: 参考答案: 3 点评: 调用函数f(1.3,2.6)时,“returnx+y;”表达式的值为3.9,由于函数类型为整型,所以将3.9转抽为整型3作为函数的返回值。 知识点34: 通常采用推递方式在求递推函数的值。 示例63: 有以下程序: #include intfun(intx) { if(x==0)return2; elseif(x==1)return5; elseif(x==2)return9; elsereturnx+fun(x-3); } intmain(void) { printf("%d\n",fun(6)); return0; } 运行结果是: 参考答案: 11 点评: fun(6)=6+fun(3)=6+3+fun(0)=6+3+2=11。 知识点35: 不能通过函数形参改变实参的值。 示例64: 有以下程序: #include voidf(int*p){p=p+2;} intmain(void) { inta[]={1,2,3},*p=a; f(p); printf("%d\n",*p); return0; } 运行结果是: 参考答案: 1 点评: 调用函数“f(p);”后,实参p的值不变,也为a,由于数组名变指向下标为0的元素的指针,也就是p=&a[0],所以*p=a[0]=1。 知识点36: 对于数组,通常采用依次比较方式求最大值(最小值)。 示例65:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 知识点 示例 11