C语言基础知识练习.pdf
变量及表达式1 单选题:sizeof(float)的执行结果是()。选项:A:一种函数调用B:一个浮点表达式C:一个不合法的表达式D:一个整型表达式答案:【一个整型表达式】解析:l.sizeof运算符功能:获取变量和数据类型所占内存大小(字节数)格式:sizeof表达式sizeof(数据类型名或表达式)例:sizeof(int)其值为 4故 sizeof(float)执行结果为42.整型数据及其所占字节数intshort int(short)long int(long)unsigned int(unsigned)unsigned short int(unsigned short)unsigned long int(unsigned long)char基本整型 4 个字节短 整 型 2 个字节长 整 型 4 个字节2人 31 2A311-2人 15 2Al5-1-2A312A31-1无符号基本整型4 个 字 节 02A32-l无符号短整型 2 个 字 节 02A16-l(65535)无符号长整型 4 个 字 节 02八 32-1字 符 型 1 个字节-2A7-2A7-1floatdoublelong double单 精 度 实 型 4 个 字 节-3.4*10A383.4*10八 38双 精 度 实 型 8 个 字 节-1.7*10A3081.7*10A308长双精度实型8 个字节-1.7*10A308-1.7*10A3082、单选题:下列关于C 语言用户标识符的叙述中正确的是()。选项:A:用户标识符中可以出现下划线和中划线(减号)B:用户标识符中不可以出现中划线,但可以出现下划线C:用户标识符中可以出现下划线,但不可放在标识符开头D:用户标识符中可以出现下划线和数字,它们都可放在用户标识符的开头答案:【用户标识符中不可以出现中划线,但可以出现下划线】解析:标识符:为程序的构成成分命名。如,变量名,函数名,文件名,类型名命名规则:-只能由字母,数字下划线组成;-首字符必须为字母或下划线;-见名知意,区分大小写;-不能使用系统的保留字。如:area,sum,Sum,_stul,lesson_l3、单选题:下列转义字符中,错误的是()。选项:A:0 xa5B:031C:bD:答案:0 xa5解析:接十六进制为xdd4、单选题:字 符 串 abcdn在内存中占用的字节数是()。选项:A:14B:9C:10D:11答案:10解析:十个字节分别是ab cd n (猜的,找不到解释了)5、单选题:以下哪个数字占据的空间最大()。选项:A:32768B:3C:32768.0D:32768.0F答案:32768.0】解析:32768整 型 4 字节3字符常量1 字节32768.0双 精 度 8 字 节(整型常量默认为int型,实型常量默认为double型)32768.0F单 精 度 4 字节6、单选题:以下哪个字母不能在常量数字后面表示类型()。选项:A:FB:UC:LD:X答案:X解析:F 单精度U 无符号L 长整型7、单选题:以下哪个数字的值最大()。选项:A:10B:010C:0 x10D:10.0答案:0 x10解析:全部转为十进制计算分别为 10,8,16,108、单选题:下列哪个不是有效的字符常量()。选项:A:B:C:1D:1答 案:1 解析:字符常量:用单引号括起来的一个字符(在计算机内部存储字符的ASCII码值)例如H、官、S、2字符串常量是双引号括起来9、判断题:当存储单元溢出时,数据的值不会受到影响,只会丢掉超过的部分。选项:A:正确B:错误答案:【错误】解析:如果溢出就从最小值重新开始例:以下程序结果是多少,为什么?#include int main()(inta=4294967295;printf(%d,a);return 0;)因为int表示的范围为-2147483648214748364如果溢出就从最小值-2147483648重新开始10、判断题:当有若干运算符同时出现在表达式中时,运算符的优先级规定了运算的先后次序。选项:A:正确B:错误答案:【正确】补充:优先级*/%高于+-11、填空题:当赋值语句右边表达式类型与左边变量类型不一致时,以 类型为准。答案:【左边变量】12、填空题:若有定义:char c=010;则变量C 中包含的字符个数为 个。答案:1113、填空题:在 C 语言中的实型变量分为float型和double型,按浮点数进行存储,分为数符、和尾数几部分。答案:【阶码】14、填空题:设有变量定义:int i=3,j=5;float x=2.5;double y=5.0;则 表 达 式 y+=i-=j*=+x;的计算结果为答案:-9.0#%_YZPRLFH_%#-9.000000 不知道怎么做15、填空题:表 达 式 a=3*5,a*4,a+5的值为。答案:【20】不知道为什么,什么时候能知道?a=3*5,a*4 表达式的值为60a=3*5,a*4,a+5 表达式的值为20 x=(a=4%3,a+1,a*10)表达式的值为 10z=(2,3,4)这个时候z 的值为4(整个是赋值表达式)z=2,3,4 这个时候z 的值为2(整个是逗号表达式)数据的输入与输出1.单选题:printf(arHappiby);在屏幕上正确的输出形式是()。选项:A:aHappyB:HappyC:HappiD:aHappi答案:【Happy考点:转义字符,感觉,算了吧太多了,就答案一般都挺正常的A=65(ASCII),a=972、单选题:运行下面的程序,正确的输出结果是()。ttinclude int main()doublex=68.7563,y=-789.127;printf(%f,%10.2fn,x,y);return 0;选项:A:68.756300,-789.12B:68.756300,-789.13C:68.75,-789.13D:68.75,-789.12答案:68.756300,-789.133、判断题:输入数据时不能指定数据的精度。选项:A:正确B:错误答案:【正确】4、判断题:输入数据时不可以指定数据的宽度。选项:A:正确B:错误答案:【错误】5、填空题:用 scanf 函数输入数据,使得 x=1.23,y=67.1234o#include#include int main()double x,y,z;scanf(,&x,&y);z=2*x+y/sin(3.1415/4);printf(z=%6.2f,z);return 0;答案:%lf%lf6、填空题:getchar。函 数 只 能 接 收 一 个。答案:【字符】7、填空题:若要将数据以指数形式输出,应该选择 格式符。答案:e#%_YZPRLFH_%#E】8、填空题:在格式说明符中,当 后 边 出 现,表示要跳过相应的数据,是附加说明符。答案:*#%_YZPRLFH_%#星号】逻辑运算符的优先级与结合性优先级:!,&|运算符优先级1、+、-、sizeof 高算术运算符关系运算符&、II赋值运算符 低结合性:逻辑非一右结合逻辑与、逻辑或一左结合算数运算符,/,+,-关系运算符,=,4C:34=0D:654答案:654优先级 高于!二8、单选题:判断char型变量ch是否为小写字母的正确表达式是()。选项:A:(a=ch)|(z=ch)B:a=ch=a)&(ch=a)&(ch=a)&(ch成员选择(指针)对象指针*成员名-负号运算符表达式单目运算符(类型)强制类型转换(数据类型)表达式+自增运算符+变量名变量名+单目运算符2-自减运算符-变量名变量名一右到左单目运算符&取值运算符取地址运算符指针变量&变量名单目运算符单目运算符逻辑非运算符!表达式更目运算符sizeof按位取反运算符长度运算符-表达式sizeof(表达式)单目运笠符3/除表达式/表达式左到右双目运算符*乘表达式表达式双目运算符%余 数(取模)整型表达式整型表达式双目运算符4+加表达式+表达式左到右双目运算符-减表达式-表达式双目运算符5左移变量 表达式双目运苴符6大于表达式 表达式左到右双目运算符双目运算符=大于等于表达式“表达式小于表达式 表达式双目运算符=小于等于表达式“表达式双目运算符7i=等于不等于表达式=表达式表达式!=表达式左到右双目运算符双目运算符8&按位与表达式&表达式左到右双目运算符9A按位异或表达式“表达式左到右双目运算符101按位受表达式|表达式左到右双目运算符11&逻辑与表达式&表达式左到右双目运算符12II逻辑或表达式|表达式左到右双目运苴符13?:条件运算符表达式1?表达式2:表达式3右到左三目运算符14/=赋值运算符除后赋值变量=袤达式变量方表达式右到左,=乘后赋值变量”表达式%=+=取模后赋值加后赋值变量%=表达式变量+=表达式=履后赋值变量=表达式=左移后赋值变量 =表达式&=按位与后赋值变量&=表达式A=按位异或后赋值变量表达式1 =按位或后赋值变到=表达式151逗号运算符表达式,表达式,左到右10、判断题:switch语句嵌套使用时,一条break语句可用于跳出所有嵌套switch语句。选项:A:正确B:错误答案:【错误】不知道哪错了哈哈哈21、判断题:条件运算符的优先级低于算术运算符、关系运算符及逻辑运算符,高于赋值运算符和逗号运算符。选项:A:正确B:错误答案:【正确】这些名词都是什么意思奥0.000001=l/le6=le-6循环结构程序设计1、单选题:关于下面程序段,正确的是()。int k=10;while(!k)k-;选项:A:循环体执行10次B:循环体执行1 次C:循环体一次也不执行D:死循环答案:【循环体一次也不执行】!k是 k=0的意思2、单选题:下 面 程 序 的 运 行 结 果 是()o#include int main()int i=10,s=0;while(i0)if(i%3=0)continue;s=s+i;i-;printf(s=%d,s);return 0;选项:A:死循环B:55C:37D:10答案:【死循环】好深的套路3、单选题:下面程序的运行结果是(),include int main()int i=10,s=0;for(i=l;i=10;i+)if(i%3!=0)continue;s=$+i;printf(%d,s);return 0;选项:A:死循环B:55C:37D:18答案:1 8 可以和上一个题对照看看7、单选题:下面程序的运行结果是()0 include int main()int x=15;do x-while(x-);printf(%d return 0;)选项:A:0B:1C:-1D:-2答案:-1好怪啊那个while(x-)应该是把它当成whHe(x 0)来看一维数组及其应用1、单选题:在 C 语言中,引用数组元素时,其数组下标的数据类型不允许的是()o选项:A:整型常量B:正整型常量表达式C:整型变量表达式D:任何类型的表达式答案:【任何类型的表达式】15、判断题:引用数组元素时,其数组下标的数据类型允许的是:整型常量或整型表达式。选项:A:正确B:错误答案:【正确】哈哈,可能答案有问题吧2、单选题:现 有 如 下 程 序,则 程 序 的 输 出 结 果 为()。include int main()intk30=12,324,45,6,768,98,21,34,453,456;int count=0,i=0;while(ki)if(ki%2=0 II ki%5=0)count+;i+;printf(%d,%dn,count,i);return 0;选项:A:7,8B:8,8C:7,10D:8,10答案:8,10此题倒无事,主要是while()括号中的表达式若为0,自动跳出循环3、单选题:以下能对一维数组a 进行初始化的正确语句是()。选项:A:inta10=(0,0,0);B:int a10=;C:int a=0;D:int a10=0,l,2,3,4,5,6,7,8,9,10;答案:int a=0;C 选项是对数组元素全部赋值可以不指定长度4、单选题:若有以下程序段,则数值为 3 的 表 达 式()。int x12=l,2,3,4,5;6,7,8,9,10;char c=,a,d,f;选项:A:xg-cB:x3C:xd-cD:xtcMo答案:【xd-b1】不知道为什么哈,看看得了14、判断题:如果对数组不赋初值,则数组元素取随机值。选项:A:正确B:错误答案:【正确】17、判断题:数组名的规定与变量名不相同。选项:A:正确B:错误答案:【错误】18、判断题:一个数组可以存放许多不同类型的数值。选项:A:正确B:错误答案:【错误】20、判断题:数组可以声明为任何数据类型。选项:A:正确B:错误答案:【正确】这一连串都看不懂捏二维数组与字符数组1、单选题:下述对C 语言字符数组的描述中错误的是()选项:A:字符数组的下标从0 开始B:字符数组中的字符串可以进行整体输入/输出C:可以在赋值语句中通过赋值运算符=对字符数组整体赋值D:字符数组可以存放字符串答案:【可以在赋值语句中通过赋值运算符=对字符数组整体赋值】不知道为什么2、单选题:对两个数组a 和 b 进行如下初始化char a=ABCDEF;char bQ=7V,B,O E,F 则下述叙述正确是()选项:A:a 和 b 数组完全相同B:a 和 b 长度相同C:a 和 b 都存放字符串D:a 数组比b 数组长度长答案:【a 数组比b 数组长度长】A 长 7,b 长 63、判断题:字符数组不要求它的最后一个字符为“0 ,甚至可以不包含 0。选项:A:正确B:错误答案:【正确】4、判断题:在程序中可以对数值数组中的数据进行整体使用。选项:A:正确B:错误答案:【错误】10、单选题:函数的形式参数系统默认存储类型说明是()。选项:A:staticB:externC:registerD:auto答案:auto21、判断题:宏名没有作用域,在整个文件范围内都有效。选项:A:正确B:错误答案:【错误】23、判断题:带参数的宏定义,进行宏展开时与函数调用主要区别是,只替换,不求值。选项:A:正确B:错误答案:【正确】24、填空题:凡是函数中未指定存储类别的局部变量,其隐含的存储类别关键字为一。答案:auto26、填空题:局部静态变量是在静态存储区分配存储单元的,在整个程序运行期间始终占_ _ _ _ 空间。答案:【内存#%_YZPRLFH_%#存储】13、单选题:以下对静态局部变量的叙述,不正确的是()。选项:A:在一个函数中定义的静态局部变量可以被另一函数调用B:数值型静态局部变量的初值默认为0C:静态局部变量是在编译时赋初值的,故它只被赋值一次D:静态局部变量在整个程序运行期间都不释放答案:【在一个函数中定义的静态局部变量可以被另一函数调用】函数的定义与调用1、单选题:以下函数返回值的类型是()。int fffffloat x)x=x+5;return x;选项:A:void类型B:与参数x 的类型相同C:int类型D:无法确定答案:【int类型】记着吧,应该是函数名前的那个类型2、单选题:下面对函数的叙述,正确的是()。选项:A:函数中没有return语句,说明不带回值B:函数的返回值是通过return语句获得的C:函数中无论是否有return语句,都能返回正确值D:函数不能嵌套定义答案:【函数不能嵌套定义】不知道为什么哈3、单选题:简单变量做实参时,它和对应形参之间的数据传递方式是()。选项:A:由实参传给形参,再由形参传回给实参B:地址传递C:单向值传递D:由用户指定的传递方式答案:【单向值传递】记着4、单选题:若用数组名作为函数的实参,传递给形参的是()。选项:A:数组的首地址B:数组第一个元素的值C:数组元素的个数D:数组中全部元素的值答案:【数组的首地址】记着5、单选题:以下叙述错误的是()。选项:A:函数调用可以作为一个函数的实参B:函数调用可以出现在一个表达式中C:函数调用可以作为一个函数的形参D:函数允许递归调用答案:【函数调用可以作为一个函数的形参】函数的形式参数,在函数未被调用时不被分配存储空间,对函数内不可以嵌套定义函数,对6、单选题:主函数中有声明语句:int a口00,n=5;下列哪组实参和形参的对应是正确的()。选项:A:f(a,n);int f(int a,int n);B:f(a100,n);int f(int a,int n);C:f(a,n);int f(int a,int n);D:f(a100,n);int f(int a100,int n);答案:f(a,n);int f(int a,int n);7、判断题:没有返回值的函数可以进行函数的语句调用。选项:A:正确B:错误答案:【正确】8、判断题:函数的表达式调用必须是有返回值的函数调用。选项:A:正确B:错误答案:【正确】9、判断题:函数通过return语句可以向主调用函数返回多个值。选项:A:正确B:错误答案:【错误】10、判断题:一个函数中有且只能有一个return语句。()选项:A:正确B:错误答案:【错误】11、判断题:C语言规定,程序中各函数之间既允许嵌套定义,也允许嵌套调用。()选项:A:正确B:错误答案:【错误】12、填空题:数组作为函数参数进行函数调用时,实参应当采用()答案:【数组名】13、填空题:在调用一个函数的过程中,直接或间接地调用该函数本身,称为函数的 调用。答案:【递归】1、单选题:关于函数调用的值传递,下列正确的是()。选项:A:值传递的传输方向是单向的,从主调函数到被调函数B:值传递的传输方向是单向的,从被调函数到主调函数C:值传递的数据传输方向是双向的D:值传递时,实参和形参使用相同的存储空间答案:【值传递的传输方向是单向的,从主调函数到被调函数】随堂测验21、单选题:关于函数调用的地址传递,下列正确的是()。选项:A:地址传递的传输方向是单向的,从主调函数到被调函数B:地址传递的传输方向是单向的,从被调函数到主调函数C:地址传递的实参和形参使用相同的变量名D:地址传递时,实参和形参使用相同的存储空间答案:【地址传递时,实参和形参使用相同的存储空间】指 针11、单选题:如有下面的语句说明,则执行语句for(i=O;*s+;i+);后变量i的 值 是()。int i;char*s=an46b;选项:A:5B:6C:7D:8答案:5不知道为什么哈2、单选题:如有下面的语句说明,则正确的赋值语句是()。char a10,*p=a;选项:A:a10=,VC+/;B:a=VC+;C:p=VC+;D:*p=VC+”;答案:p=VC+;3、单选题:若有以下语句,则&a-p的 值 是()o inta3,*p=a;选项:A:2B:3C:1D:不确定答案:2*p=aO4、单选题:若有程序段 intb4,*p,*q;p=&bl;q=&b3;则q-p表示的意义是()。选项:A:表达式错误B:p与q之间数据个数C:p占据的字节数D:p与q之间的字节数答案:【p与q之间数据个数】5、判断题:空指针p是指向地址为0的存贮单元的指针。选项:A:正确B:错误答案:【错误】6、判断题:如有变量的定义char*p=abc;语 句*p=X,;是合法的。选项:A:正确B:错误答案:【错误】7、判断题:如有变量的定义int*r;double x;则 语 句 r=&x;是合法的。选项:A:正确B:错误答案:【错误】8、填空题:若有定义:char ch;使指针p 指向变量ch 的定义语句是答案:char*p=&ch;9、填空题:若已定义char*p;,使指针p 指向变量ch 的赋值语句是答案:【p=&ch;指针21、单选题:以下正确的程序段是()。选项:A:char s=12345,t=6543d21;strcpy(s,t);B:char s20,*t=12345;strcat(s,t);C:char s20=,*t=12345;strcat(s,t);D:char*s=12345,*t=5432I;strcat(s,t);答案:【char s20=,*t=12345;strcat(s,t);嗨,为什么呢2、单选题:若有定义:chard15,*p=d;,则以下正确的赋值语句是()。选项:A:d0=l love China!;B:d=l love China!;C:*p=l love China!;D:p=l love China!;答案:p=l love China!;?记着吧3、判断题:作为函数形式参数时,intx 与 int(*x)两种写法等价。选项:A:正确B:错误答案:【正确】4、判断题:二维M*N数组的名字是一个指向N 元数组的指针常量。选项:A:正确B:错误答案:【正确】5、判断题:可以利用指针实现函数返回多个值。选项:A:正确B:错误答案:【正确】6、填空题:如有定义char z4=MAT,LAB,*pz=&z;则表达式*pz+1的值是答案:M#%_YZPRLFH_%#M#%_YZPRLFH_%#77】不是很理解数组名其实是一个指针?提问,不确定结构与共用体1、单选题:下面结构体的定义语句中,错误的是()。选项:A:struct ord int x;int y;int z;struct ord a;B:struct ord int x;int y;int z;struct ord a;C:struct ord int x;int y;int z;a;D:struct int x;int y;int z;a;答案:struct ord int x;int y;int z;struct ord a;2、单选题:有以下的结构体变量定义语句:struct student int num;charname9;stu;则下列叙述中错误的是()。选项:A:结构体类型名为stuB:num是结构体成员名C:struct是 C 的关键字D:结构体名为student答案:【结构体类型名为stu】方法一:先声明结构类型再定义变量一般形式:struct结构类型名(成员表列;I;struct结构类型名变量名表列;struct student int num;char name20;char sex;int age;char addr30;);struct student s1,s2;5、单选题:有以下定义语句:struct student int num;char name9;则不能正确定义结构体数组并赋初始值的是()。选项:A:struct student stu2=l,zhangsan,2,li si);B:struct student stu2=l,zhangsan,2,li si;C:struct student stu=l,zhangsan),2,li si;D:struct stu=l,zhangsan),2,li si;答案:【struct stu=l,zhangsan),2,li si;J6、填空题:结构体是不同数据类型的数据集合,作为数据类型,必须先定义结构体 再定义结构体变量。答案:【类型】文件1、单选题:在 C 语言中,文件存取的基本单位是:答案:【字节】2、单选题:在 C 语言中,从文件中将数据读到内存中称为:答案:【输入操作】3、单选题:定义fp 为文件型指针变量,以读写方式打开一个已存在的文本文件test.dat,下面fopen函数正确的调用方式是:选项:A:FILE*fp;fp=fopen(test.dat/rb);B:FILE*fp;fp=fopen(test.dat/Hr+);C:FILE*fp;fp=fopen(test.dat,/nr);D:FILE*fp;fp=fopen(test.dat,rb+H);答案:【FILE*fp;fp=fopen(test.dat/r+);4、单选题:定义fp 为文件型指针变量,使用fopen只读方式打开一个已存在的二进制文件,以下正确的调用形式为:选项:A:fp=fopen(my.dat,/r);B:fp=fopen(,my.dat,/rb+);C:fp=fopen(my.datz rb);D:fp=fopen(my.dat/r+);答案:fp=fopen(my.dat,rb,);JMrM(只读)为输入打开一个文本文件“w(只写)为输入打开一个文本文件a(追加)向文本文件尾增加数据 V“rb”(只读)为输入打开一个二进制文件“rw(只读写)为输入打开一个二进制文件“ab”(追加)向二进制文件尾增加数据(读写)为读/写打开一个文本文件“w+”(读写)为读/写建立一个新的文本文件Ma+(读写)为读/写打开一个文本文件“rb+”(读写)为读/写打开一个二进制文件“wb+”(读写)为读/写建立一个新的二进制文件“a+”(读写)为读/写打开一个二进制文件5、单选题:FILE*f p;有两个整型变量a 和 b,若要从文件把数据读到其中,正确的形式是:选项:A:fscanf(fp,%d%d,a,b);B:fscanf(fp,%d%d,&a,&b);C:fscanf(%d%d,&a,&b,fp);D:fprintf(fp,%d,a,b);答案:【fscanf(fp,%d%d,&a,&b);6、单选题:若 fp 已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为:选项:A:-lB:1C:0D:非零答案:0 7、单选题:若执行fopen函数时发生错误,则函数的返回值是:选项:A:EOFB:1C:地址值D:NULL答案:NULL8,单选题:下列关于C 语言数据文件的叙述中正确的是:选项:A:文件由数据流形式组成,可分为二进制文件和ASCII码字符序列组成的文本文件。C 语言可以读/写文本文件和二进制文件。B:文件是由ASCII码字符序列组成的,C 语言只能读/写文本文件。C:文件是由二进制数据序列组成,C 语言只能读/写二进制文件。D:C 语言只能按格式化的方式读/写文件.答案:【文件由数据流形式组成,可分为二进制文件和ASCII码字符序列组成的文本文件。C 语言可以读/写文本文件和二进制文件。19、判断题:“文件”一般指存储在外部介质上的数据集合。选项:A:正确B:错误答案:【正确】10、判断题:C 语言中,文件的存取方式可以是随机存取,也可以是顺序存取。选项:A:正确B:错误答案:【正确】11、判断题:feof(fp)函数用来判断fp 所指向的文件是否结束,若遇到文件结束符,函数feof()的返回值是假(0),否则是真(非0),选项:A:正确B:错误答案:【错误】反了 未结束0 结束非012、判断题:对文件进行读/写操作之前必须打开文件。选项:A:正确B:错误答案:【正确】13、判断题:对文件读写操作之后,程序结束之前必须关闭文件。选项:A:正确B:错误答案:【正确】14、判断题:C 语言中文件的使用方式w 用于文本文件,若文件存在则文件内容被清除,若文件不存在则新建一个文本文件,然后进行写操作。选项:A:正确B:错误答案:【正确】15、判断题:C 语言中文件的使用方式w b用于二进制文件,若文件存在则文件内容被清除,若文件不存在则新建一个二进制文件,然后进行写操作。选项:A:正确B:错误答案:【正确】16、判断题:在 C 语言中,当顺利地执行了关闭文件操作后,文件关闭函数返回值为0。选项:A:正确B:错误答案:【正确】17、填空题:调 用 fopen函数打开一文本文件,在 使用方式 这一项中,向已存在的文本文件尾增加数据需填入。答案:【a#%_YZPRLFH_%#al18、填空题:函数fgetc(FILE*fp)读到文件尾结束符时,返回一个文件结束标志E O F,其值为:答案:-11