理学C语言总复习资料填空选择部分.docx
《理学C语言总复习资料填空选择部分.docx》由会员分享,可在线阅读,更多相关《理学C语言总复习资料填空选择部分.docx(103页珍藏版)》请在冰豆网上搜索。
理学C语言总复习资料填空选择部分
第一章C语言的结构
一、C语言的基本词法
基本词法中的转义字符、标识符的命名规则和保留字是经常考到的内容。
“\”后加上一些特定的字母形成的字符组合可以表示C中的特定字符,这就是转义字符。
一般用于不可打印字符,如换行、跳格、回车等。
也用于\、’、”等
转义字符还有另外两种引申形式:
”\ddd”和”\xnn”。
”\”后的ddd是三位八进制数,nn是两位十六进制数。
可表示ASCII码表中的任意字符。
标识符不要与保留字同名,最好也不要与库函数同名。
应记住常用的转义字符和32个保留字。
二、练习题
a)C语言源程序的最小单位是()
D选项
A)程序行B)语句C)函数D)字符
2、C语言程序的基本单位是()
C选项
A)子程序B)过程C)函数D)主程序和子程序
3、以下说法正确的是()
D选项
A)C语言中,要调用的函数必须在main()函数中定义
B)C语言程序总是从第一个定义的函数开始执行。
C)C语言程序中,main()函数必须放在程序的开始位置。
D)C语言程序总是从main()函数开始执行。
4、在C语言中,下列哪个字符为合法的字符常量()
B选项
A)‘\084’B)‘\x43’C)“ab”D)“\0”
5、在C语言中,不可表示的字符是()
C选项
A)换行符B)响铃符C)求和符D)垂直制表符
6、C语言提供的合法关键字是()
C选项
A)AUTOB)includeC)unsignedD)deafult
7、如果下面的变量都是整型变量,则执行一下程序片断后的输出结果是()
A选项
Sum=i=j=5;sum=(j--,i++,++i);
printf(“%d”,Sum);
A)5B)6C)7D)4
8、C语言字符集中,只有,,,才能用来构造标识符。
9、下列可作为C语言赋值语句的是()
C选项
A)x=3,y=5B)a=b=6
C)i--;D)y=int(x);
10、设有如下的变量定义
inti=8,k,a,b;
unsignedlongw=5;
doublex=1.42,y=5.2;
则以下符合C语言语法的表达式是()
A选项
A)a+=a-=(b=4)*(a=3)B)x%(-3);
C)a=a*3=2D)y=float(i)
第二章数据类型
一、知识点
1、C语言的数据类型
(1)数据类型的概念
数据类型是一类数据的抽象表示,这类数据具有相同的形式,遵从相同的运算规则。
(2)数据类型的分类
包括基本类型和用户自定义类型(构造类型)等。
指针类型既不是基本类型,也不是构造类型。
(3)数据类型的理解
应从形式和运算规则两方面来理解,例如整型数据类型有十进制、八进制、十六进制等,可进行加、减、乘、除、取余等运算。
(4)数据类型的长度
不同的数据类型在内存中占用的字节数是不同的。
(5)溢出处理
每种数据类型都有其对应的数据量变化范围。
当整型数据超出计算机的表示范围时,溢出处理的的操作是将该数减去整型数据类型的模。
如无符号整型数据65536,溢出处理时得到的是65536-65536=0,有符号整型数据32768,溢出处理时得到的是32768-65536=-32768。
2、常量和变量
(1)常量
常量根据数据类型可分为:
整型常量、实型常量、字符常量和字符串常量。
整型常量有三种形式:
十进制形式、八进制形式和十六进制形式。
实型常量有两种形式:
一般实数形式和指数形式。
对字符串常量要注意当字符串中出现转义字符时字符串长度的确定。
另外还需注意字符串结束标志’\0’的使用。
’\0’占用内存空间,但不算在字符串长度中。
C中可以定义符号常量。
(2)变量
变量必须先定义、再使用。
定义一个变量的过程实际上就是向内存申请一个符合该类数据类型空间的过程。
任一变量都有确定的数据类型,对变量的使用必须该类数据类型的规则。
根据存储方式的不同,可以将变量划分为自动型、静态型、外部参照型和寄存器型。
可以在变量定义时指出变量的存储类别,如果不指明,默认为是自动型。
不同存储类别的变量具有不同的作用域与生存期。
作用域指出变量在那些地方有效。
生存期指出变量的存活期,它从系统为变量分配内存空间开始,到系统收回此内存空间为止。
自动型变量在堆栈中分配,其作用域为所在函数内部,生存期也仅仅是所在函数存活的时间。
程序在未进入函数之前和退出函数之后,其内部所定义的所有自动型变量都没有意义。
静态型变量在内存的数据区分配,生存期是整个程序的执行时间。
静态型局部变量的作用域与自动型变量一样。
静态型外部变量的作用域是其所在的文件。
外部参照型变量用于多个编译单位之间的数据传递。
它的生存期就是整个程序的执行周期,作用域是整个源程序。
寄存器型变量的作用域与生存期与自动型变量相同。
根据变量定义的位置可以将变量区分为内部变量和外部变量。
根据变量的生存期可以将变量区分为局部变量和全局变量。
可以将一种类型的数据转换为另一种类型的数据,转换遵循以下规则:
1双目运算符两侧的运算对象类型不一致时,低级别类型的数据要转换为高级别类型的数据。
2赋值表达式中,右边表达式的值自动转换为左边变量的类型。
3需要时可进行强制类型转换。
4转换的规则是:
字符型到整型是取字符的ASCII码;整型到字符型、长整型到整型是去掉多余的高位;实型到整型要去掉小数;双精度实型到单精度实型是舍入的。
5表达式中的所有实型数据都是转换为双精度型后才参加运算的。
注意:
长整型常量也有三种形式,只是其后必须加上’L’或’l’,如0317l,18L,0X10L等。
书写实型常量时可以作些省略,省略规则:
小数部分和整数部分可以省略,但不能同时省略;小数点不能省略;指数形式中的’E’或’e’不能省略。
实型常量的有效位为7位,实型常量中超过7位的部分是无效的。
转义字符是一个字符常量。
单个汉字不是字符常量,而是字符串常量。
用双引号括起来的单个字符是字符串常量,而不是字符常量。
在复合语句中定义的自动型变量和寄存器变量,其作用域仅仅限于该复合语句。
外部变量之间不可重名;不同函数或复合语句中的内部变量可以重名,但在同一函数或复合语句中不可重名;外部变量可以和内部变量重名。
外部参照型变量不允许初始化,内部静态型变量仅在第一次执行时有效。
3、运算符
C语言的运算符根据运算对象的个数可分为单目运算符、双目运算符和三目运算符。
根据运算对象和运算结果的数据类型可分为算术运算符、关系运算符、逻辑运算符、赋值运算符、逗号运算符等。
每种运算符都有其特定的运算规则,其操作对象的数据类型必须符合该运算符的要求。
在多个运算符的表达式中,要按照运算符优先级的高低进行运算。
优先级相同的运算符则按照结合性确定运算次序。
运算符的优先级和结合型有以下规则:
1在双目运算符中,算术运算符的优先级高于关系运算符,关系运算符的优先级高于逻辑运算符(逻辑非运算符!
例外)。
2条件运算符的优先级高于赋值运算符,赋值运算符的优先级高于逗号运算符,这三种运算符的优先级都低于其它所有运算符。
3除了单目运算符、条件运算符和赋值运算符(包括复合赋值运算符)的结合性是自右向左外,其它运算符都是自左向右。
4位运算符和逻辑运算符的优先级低于关系运算符。
自增自减运算符的操作对象必须是整型变量,不允许对常量、表达式和其它数据类型的变量操作。
自增自减运算符作为前缀操作符和后缀操作符时,运算顺序是不同的,运算结果可能不同。
当仅对整型变量操作时,前缀与后缀的运算结果是一样的。
求余运算符’%’的操作对象只能是整型数据。
位运算符的操作对象只能是整型数据。
除运算符’/’运算结果的数据类型和运算对象的类型有关,如两个运算对象都是整型,运算结果位整型;如有一个或两个运算对象都是实型,则运算结果为实型。
逗号运算符’,’的优先级比赋值运算符的优先级低,所以a=b,c和a=(b,c)的值不同。
‘=’是赋值运算符,’==’才是相等运算符。
4、表达式
表达式是由常量、变量、函数通过运算符连接起来的式子。
仅一个常量、一个变量或一个函数也可以看成是表达式。
根据表达式值的数据类型和所使用的运算符的功能,可将表达式分为算术表达式、赋值表达式等。
表达式实际上是一个数据加工的过程。
表达式代表了一个具体的值,求这个值的时候要注意表达式中各个运算符的优先级和结合性。
二、练习题
1、不是C语言基本数据类型的是()
A选项
A)指针类型B)整型C)无符号长整型D)单精度型
2、不是C语言整型常量的是()
C选项
A)01B)0x11C)081D)–32768
3、正确的实型常量是()
B选项
A)0x12B)–12345.e-3C)1e0.5D)e-5
4、若有以下定义语句,则sizeof(x)和sizeof(y)的值是()
A选项
struct{inthour;intminute;intsecond;}x,*y;
y=&x;
A)6,2B)6,6C)3,2D)3,3
5、下面字符串的长度为()
A选项
char*s=“\xab\107\\A\””;
A)5B)13C)8D)9
6、执行下面程序后的输出结果是()
A选项
#include
intx=10;
main()
{char*s=”\\ABCD\\”;
count(s);
printf(“%d”,x);
}
count(char*s)
{char*p=s;intx;
while(*p)p++;
x=p-s;
printf(“%d,”,x);
return(x);
}
A)6,10B)10,6C)10,10D)6,6
7、运行以下程序,输出结果是()
C选项
#include
main()
{inta=1,b=2;
printf(“%d,“,func(a,b));
printf(“%d,“,func(a,b));
}
func(intx,inty)
{staticinta=0,b=1;
a=b*2;
b=a+x+y;
return(b);
}
A)5,5B)4,7C)5,13D)5,7
8、在C语言中,只能用于整型数据操作的运算符是()
D选项
A)!
B)9、表达式!
2+1>2&&15%5+2的值是()
A选项
A)0B)1C)2D)3
10、假定有以下变量定义
intk=7,x=12;
则能使值为3的表达式是()
D选项
A)x%=(k%=5)B)x%=(k–k%5)
C)x%=k–k%5D)(x%=k)–(k%=5)
11、设x,y,z均为int型变量,则执行以下语句后,t的值为()
C选项
x=y=z=0;t=++x||y++&&z++;
A)不定值B)2C)1D)0
第三章基本语句
一、知识点
1.基本语句
C语言的语句可分为表达式语句、空语句、函数调用语句、复合语句和流程控制语句五大类。
表达式语句的形式是:
表达式;。
C中的”;”是语句结束符,是语句不可缺少的部分。
复合语句是以”}”为结束标志的,其后不必加语句结束符。
2.输入输出函数
C语言本身不提供输入输出语句,输入输出是通过标准库函数中定义的一系列输入输出函数实现的。
C语言提供了两个可以进行格式转换的输入输出函数printf和scanf。
格式转换符必须牢记。
使用这两个函数时可以不必将头文件包含进来。
C语言还提供了两个专门用于输入输出字符的函数getchar和putchar,使用这两个函数时必须将头文件stdio.h包含进来。
使用scanf函数时,如果在格式符之间有其他字符,则输入数据时,必须在相应位置输入这些字符。
printf的格式控制串中允许出现转义字符。
若要输出”%”,则输出格式为”%%”。
3.goto语句和语句标号
goto语句是非格式化语句,一般不提倡使用。
其作用是使程序的执行无条件转移到某处。
标号只在其所在函数的内部起作用。
二、练习题
1、下列语句中符合C语言语法的语句是()
C选项
A)a=7+b++=a+7;
B)a=7+b,b++,a+7
C)a=7+b,c=a+7;
D)a=7+b+c=a+7;
2、设inta=10,则执行语句a+=a*=a/5+10后,a的值是()
A选项
A)240B)120C)30D)60
3、执行下面程序片段后的输出结果是()
D选项
inta=15;
printf(“a=%d,a=%o,a=%x\n”,a,a,a);
A)a=15,a=15,a=15
B)a=15,a=017,a=0xf
C)a=15,a=17,a=0xf
D)a=15,a=17,a=f
4、执行下面程序片段后的输出结果是()
A选项
floatf1=111.111;
printf(“%%ff1=%8.3f\n”,f1);
A)%ff1=111.111
B)%ff1=111.111
C)f1=111.111
D)f1=111.111
5、设x,y为int型变量,z为float型变量,有以下语句:
scanf(“%2d%*2d%2d%f”,&x,&y,&z);
printf(“%d,%d,%f”,x,y,z);
现从键盘上输入12345678,则输出结果为()
B选项
A)12,34,5678.000000
B)12,56,78.000000
C)12,56,78.0
D)输出格式有误,不能通过编译
6、设有一数学运算式=1/(1*2*3),能够正确求出x值的C语言表达式是()
D选项
A)1/1*2*3B)1/(1*2*3)
C)1/1/2/(float)3D)(1.0)/1/2/3
7、若x是int型变量,且有下面的程序片段:
for(x=1;x<4;x++)
printf((x%2)?
(“**%d”):
(“##%d\n”),x);
则执行上述程序片段后的输出结果是()
D选项
A)**1B)##1
##2**2
**3##3
C)##1D)**1##2
**2##3**3
8、有以下输入语句scanf(“c=%c,a=%d”,&c,&a),现在要输入字符’c’和整数10到变量c,a中,则正确的输入形式为()
A选项
A)c=c,a=10<回车>
B)c10<回车>
C)c,10<回车>
D)c=ca=10<回车>
9、有以下程序,请问执行后i的值和语句i++的执行次数分别为()
B选项
main()
{inti=0;
loop:
i++;
if(i++<10)gotoloop;
}
A)11,6B)12,6C)12,10D)12,11
10、设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:
scanf("i=%d,f=%f",&i,&f);
为了把100和765.12分别赋给i和f,则正确的输入为()
B选项
A)100<空格>765.12<回车>B)i=100,f=765.12<回车>
C)100<回车>765.12<回车>D)x=100<回车>,y=765.12<回车>
11.以下叙述中正确的是:
D选项
A)输入项可以是一个实型常量,例如:
scanf("%f",3.5);
B)只有格式控制,没有输入项也可以正确输入数据到内存,例如:
scanf("a=%d,b=%d");
C)当输入一个实型数据时,格式控制部分可以规定小数点后位数,例如:
scanf("%4.2f",&f);
D)当输入数据时,必须指明变量地址,例如:
scanf("%f",&f);
12.以下程序的输出结果是()
B选项
#include
main()
{inti=1,j=3;
printf("%d,",i++);
{inti=0;
i+=j*2;
printf("%d,%d,",i,j);
}
printf("%d,%d",i,j):
}
A)1,6,3,1,3B)1,6,3,2,3
C)1,6,3,6,3D)1,7,3,2,3
第四章选择结构程序设计
一、知识点
1、条件分支语句
条件分支语句的形式为:
if(表达式)语句1else语句2,其中else子句可以不选。
书写条件分支语句时,要注意语句1和语句2都必须带有分号。
语句1和语句2如果是多条语句,则必须以复合语句的形式出现,既必须以大括号括起来。
若是复合语句,则在复合语句的大括号后无须再加”;”。
语句1和语句2也可以是条件分支语句,这样就形成了分支中又有分支的结构。
这时可能出现以下形式:
if(表达式1)
if(表达式2)语句1
else语句2
在这种形式中,else与最近的if配套。
若要改变这种配套结构,可以利用大括号。
2、开关语句
开关语句的格式为:
swith(变量)
{
case常量1:
语句1或空;
case常量2:
语句2或空;
…
case常量n:
语句n或空;
default:
语句n+1或空;
}
执行switch语句时,将变量逐个与case后的常量比较,若与其中一个相等,则执行该常量下的语句,如与任何一个常量都不相等,则执行default后的语句。
switch中的变量和case后的常量表达式都必须是整型(或字符型)。
case后的常量表达式的值必须互不相同。
每个case或default后可以有多个语句,且不需要用大括号括起来。
由于在执行一个case语句后,控制将自动转移到语句后的下一个语句,因此,在一个case结束,下一个case开始前,使用break语句经常是必要的。
二、练习题
1、已知a,b,c的值分别为1,2,3,则执行下列语句后,a,b,c的值分别为()
D选项
if(a++
elsea=b=c=0;
A)0,0,0B)1,2,3C)1,2,1D)2,2,2
2、以下if语句中格式正确的是()
B选项
A)if(a>b)b++elsea++;
B)if(a>b){b++;printf(“%d”,b);}
else{a++;printf(“%d”,a);}
C)if(a>b){b++;printf(“%d”,b)}
else{a++;printf(“%d”,a);}
D)if(a>b)b++;printf(“%d”,b);
elseprintf(“%d”,a);
3、有以下程序,运行后的输出结果是()
A选项
main()
{inta=2,b=0,c=-1;
if(a=b+c)
if(a>0)b=c=a;
elseif(a==0)a=b=c=0;
elsea=b=c=1;
elsea=b=c=-1;
printf(“%d,%d,%d”,a,b,c);
}
A)1,1,1B)0,0,0C)–1,-1,-1D)2,2,2
4、以下程序的输出结果是()
A选项
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
}
printf(“a=%d,b=%d\n”,a,b);
}
A)a=2,b=1B)a=1,b=1
C)a=1,b=0D)a=2,b=2
5、有以下程序片断,其表示的代数关系是()C选项
y=-1;
if(x!
=0)
if(x>0)y=1;
elsey=0;
-1(x<0)1(x<0)
A)y=0(x=0)B)y=-1(x=0)
1(x>0)0(x>0)
0(x<0)-1(x<0)
C)y=-1(x=0)D)y=1(x=0)
1(x>0)0(x>0)
6、设a,b,w为整型变量,ch为字符型变量,用if语句改写以下的程序段:
switch(ch)
{case‘+’:
w=a+b;break;
case‘-‘:
w=a–b;break;
case‘*’:
w=a*b;break;
case‘/’:
w=a/b;break;
}
在下列写法中,错误的是()
C选项
A)if(ch==‘+’)w=a+b;B)if(ch==‘*’)w=a*b;
if(ch==‘-‘)w=a–b;elseif(ch==‘/’)w=a/b;
if(ch==‘*‘)w=a*b;if(ch==‘+’)w=a+b;
if(ch==‘/‘)w=a/b;elseif(ch==‘-’)w=a-b;
C)if(ch==‘+’)w=a+b;D)if(ch==‘+’)w=a+b;
elseif(ch==‘-‘)w=a–b;elseif(ch==‘-’)w=a-b;
if(ch==‘*‘)w=a*b