PTA选择判断题笔记
2.Ascii完整码表(256个)_ascii码对照表-优快云博客)
先大写字母再小写字母
‘A’ 65 ‘a’ 97
3.C语言程序运行的起点
c语言程序运行的起点主函数(main函数),而并非从源文件的第一条语句开始执行。
4.表达式 (3<x<5)的值恒为1是否正确
正确,因为<和<优先级相同,从左到右计算,3<x真为1,假为0都比5小,所以这个表达式值恒为1,与x没有关系。
5.break语句只能用于循环语句中。(F)
解析:对break只能用在循环体内和switch语句体内,不能单独使用或用于其它语句中。
6.表达式 !!6的值是6。(F)
==C语言里非0数是真,0是假。==6是非0数,对应是真。
"!"是非运算符,代表取反
!6是0,!!6是1
7.若有定义:char ch='\105’;则变量ch中包含4个字符。(F)
\105是八进制转义字符,1个字符
8.在C语言中转义字符可以算是多个字符,如’\101’。(F)
‘\101’被视作一个字符,是‘A’
9.定义变量 int a;,则表达式 a = 3, 5;执行过后,a的值和表达式的值分别是: A
A.3 , 5
B.5 , 3
C.3 , 3
D.5 , 5
解析:a=3,5;执行的时候是 (a=3),(5);,3会赋值给a,一个语句执行的顺序是从左往右,最后执行到5,所以表达式的值是5。
10.对于循环while(!e) 语句,!e等价于 A 。
A.e==0
B.e!=0
C.e==1
D.e!=1
while(e) 等价于 while(e != 0)
while(!e) 等价于 while(!e != 0)
!e != 0 等价于 e= =0;
所以
while(!e) 等价于while(e==0)
!x= x==0;
11.若a=1;b=2;c=3;d=4;m=1;n=2;则执行语句(m=a>b) && (n=c>d)后,m的值为0,n的值也为0。(F)
首先 > 比 = 优先级高 ,a>b先执行,m被赋值为0
**&&**是短路运算符
第一个操作数为false,则不会执行第二个操作数
||也是短路
第一个操作数为真,则第二个表达式不执行
所以n不会被赋值,它的值仍为2
12.判断两个浮点数是否相同的运算虽然符合C语言规则,但是应该尽量避免。(T)
对两个浮点数判断大小和是否相等不能直接用==来判断,会出错!明明相等的两个数比较反而是不相等!
对于两个浮点数比较只能通过相减并与预先设定的精度比较,记得要取绝对值!C语言中比较两个浮点数是否相等的方法,fabs和abs_浮点数变量与确定数比较不相同c语言-优快云博客
13.字符常量 ‘ ’单引号
14.下面这段代码,将打印输出2020.00
。(F)
#include <stdio.h>
int main(){
int year=2020;
printf("%.2f", year);
return 0;
}
没有强制类型转换,打印0.00
15.printf函数输出数据时会根据格式控制符自动进行数据类型转换(F)
这句话的意思为
将x转为int类型输出
double x=1.22;
printf("%d",x);//你这样看肯定不行啊
16.语句printf("%.2f",1.0/3);
输出为0.33
。
语句printf("%.2f",1/3);
输出为0.00
。
17.gets()只接受一个地址
scanf(“%s%s”,a,b)一维数组数组名即是地址
18.函数的形参属于局部变量,仅在定义的函数内有效,函数返回后失效。
- i++和++i
1、如果当做运算符来说,就是a = i++ 和 a = ++i这样的形式,情况就不一样了。
a = i++的意思是,先把i的值赋给a,即a = i,再执行i = i + 1;
a = ++i是先执行 i = i+1,再把i的值赋给a;
举个例子来说,如果一开始i=4。
那么执行a=i++这条语句之后,a=4,i=5;
那么执行a=++i这条语句之后,i=5,a=5;
同理,i–和–i的用法也是一样的。
2、另外在循环体中的区别
①for循环中,for(int i = 0;i < 6;i++)和for(int i = 0;i < 6;++i)效果一样
② while(i++)是先用i的初始化值做循环变量再i+1
而while(++i)是先用i的初始值+1,再循环
20.数组大小不要用变量
21.强制类型转换括号与否
int a = (int)(1.99 * 3);
//这里是将1.99*3=5.97取舍为5
和
int a = (int)1.99 * 3;
//这里是将1.99取舍为1
22.设有程序段
int m=20; while (m=0) m=m++;
则下面描述中正确的是( )。
A.
while
循环执行 10 次
B.
循环是无限循环
C.
循环体语句一次也不执行
D.
循环体语句执行一次
选C
这会导致 m
被赋值为 0
,并且由于 0
在条件判断中被视为假,因此循环条件为假,循环体将不会执行。
23.函数形参的存储单元是动态分配的。(T)
24.在对数组全部元素赋初值时,不可以省略行数,但能省略列数。(F)
不能省略列数,能省略行数
25.数组名作为参数时,以下叙述正确的是( C)。
A.
函数调用时是将实参数组的所有元素值传给形参。
B.
函数调用时是将实参数组的第一个元素值传给形参。
C.
函数调用时是将实参数组的首地址传给形参。
D.
函数调用时是将实参数组的所有元素的地址传给形参。
26.函数调用语句function((a,b),c)中含有的实参个数为(C )。
A.1
B.3
C.2
D.语法有误
function((a,b),c), (a,b)中b算一个参数,c算一个参数
括号的括号中最后一个变量算一个参数
C语言函数的调用语句fun((exp1,exp2),(exp3,exp4,exp5))中含有的实参个数有多少个?
2个实参,分别是exp2和exp5。
逗号表达式,它将以逗号为界,从左到右依次计算每个表达式(有括号则后面也需要括号)的值,最后返回最右边的表达式的值
27.不正确的赋值或赋初值的方式是___C_。
A.
char str[]=“string”;
B.
char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’};
C.
char str[10];str=“string”;
D.
char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, '\0’};
char str[10];str是字符串,"string"相当于另一个字符串,字符串之间不能直接=赋值,可以用strcat
28.strlen统计换行符(空格也算字符)
29.函数默认返回类型为int类型
30.若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量 t 没定义,所以此宏定义是错误的。请问这句话的说法是正确的吗?
答案:错 宏定义不作类型检查
31.pow函数返回数据类型默认为double类型
32.字符串读取不用&,C语言中只存在字符数组,所以数组名就代表首地址
33.若定义:char s[20]=“programming”,*ps=s ;则不能表示字符‘o’的是() 。
A. ps+2
B. s[2]
C. ps[2]
D.*(ps+2)
正确答案:选A。
A项,ps为指针,ps+2为一个地址,因此不能表示字符‘o’。
B项和C项,当ps为指针时,ps[2]等价于s[2],表示的都是数组中的第3个元素。前者表示指针名称加下标引用元素,而后者表示数组名称加下标来引用元素。因此B和C正确。
D项,*(ps+2),取到了ps[2]的值,因此为‘o’。因此D正确。
34. fgets(buffer, sizeof(buffer), stdin);
scanf遇到空格,Tab,回车会停止读取
读取长串字符最好用fgets
puts遇到’\0’会转为’\n’换行
35.若有 int i=10, j=2; 则执行完 i=j+8; 后 i 的值为 28。*(F)
表达式相当于 i = i * (j + 8),即 i = 10 * (2 + 8) = 100。
36。对于定义 char str[] = "abc\000def\n"
(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是:
(C)
A.12 ,13
B.3 ,11
C.3 ,9
D.3 ,4
\000
(转义字符)和 \0
是一样的,都代表空字符
sizeof包括 ‘ \0’ , strlen 不包括 ‘\0’
对于定义 char str[] = “abc\000def\n”;,数组 str 中的元素包括:
1.‘a’
2.‘b’
3.‘c’
4.‘\0’(空字符)
5.‘d’
6.‘e’
7.‘f’
8.‘\n’(换行符)
9.‘\0’(字符串结束符)
所以数组 str 的大小(size)为 9,包括了这些元素及结尾的空字符和换行符。
37.abs()返回类型 int
fabs() double
38.函数形参的存储单元是动态分配的。(T)
在c语言中,全局变量分配在内存中的静态存储区,
非静态的局部变量(包括形参)是分配在内存的动态存储区,该存储区被称为栈。
39.C语言中018
是合法的八进制整数。(F)
8应该进一了啊
40.在C语言中这个表达式是正确的:‘a’+2(T)
在C语言中,字符是以ASCII码的形式存储的。字符 ‘a’ 的ASCII码是97。因此,表达式 ‘a’ + 2 将对 ‘a’ 的ASCII码进行加法运算,即 97 + 2。结果是99。
41.double a = 5E-3;
是非法语句(F).
这语句是合法的。在C语言中,5E-3 表示科学计数法,即5*10-3,也就是0.005。因此,这条语句将 a 初始化为0.005,是合法的C语言语句。
42.‘b’ - ‘9’ * ‘?’ 是合法的表达式。(T)
字符常量可以进行整数运算
43.运行包含以下代码段的程序将可能进入死循环。(F)
int i = 1;
while(i>0){ i++; printf("%d ",i); }
当 i 达到 INT_MAX(整数类型的最大值)时,再执行 i++ 将导致溢出。在C语言中,整数类型(如 int)有限,INT_MAX 是其最大正数值。当 i 等于 INT_MAX 时,再执行 i++ 将导致 i 的值溢出变为负数,即 INT_MIN(整数类型的最小值,通常为 -INT_MAX - 1)。
在这种情况下,循环条件 i > 0 将不再满足,因为 i 的值已经变成了负数 -INT_MIN(即 INT_MAX + 1),所以循环将退出。
因此,这个循环不会进入死循环,而是会在 i 超过 INT_MAX 的值后退出。所以,答案是 F(False),不会导致死循环。
44.假设scanf
语句执行时输入ABCDE
<回车>,能使puts(s)
语句正确输出ABCDE
字符串的程序段是__。(D)
A.
char s[5]={"ABCDE"}; puts(s);
B.
char s[5]={'A', 'B', 'C', 'D', 'E'}; puts(s);
C.
char *s; scanf("%s", s); puts(s);
D.
char *s; s="ABCDE"; puts(s);
C. 没有分配内存来存储输入的字符串。因此,这个选项会导致未定义的行为,不会输出正确的结果。
45.数组初始化时,初始值个数小于数组元素的个数,C语言自动将剩余的元素初始化为初始化列表中的最后一个初始值。(F)
肯定默认初始为0啊
编译预处理
基础知识:
C语言提供的编译预处理命令三种:宏定义、文件包含、条件编译
宏定义: #define 宏名或常量标识符 替换字符串 #define N 100010
-
宏名一般用大写字母
-
宏定义不存在类型问题,宏名无类型,它的参数也无类型。
-
#under取消宏定义
#define E 2.7 void main(){ ... } #under E //以上是E的作用域范围 fun(){ s=E*2 //程序会报错 }
-
宏定义可以嵌套定义(和函数区分开,函数不可以嵌套定义)
#define R 3 #define S 5 #define Z R*S*S
-
若宏名出现在一个被双括号括起来的字符串中,不会发生宏替换
#define L 1.2 main(){ printf("L=%f",L) } //运行结果L=1.2
-
要注意宏定义式子有无括号
#define N(a,b) a/b N(x+5,y+5)相当于 x+5/y+5 #define N(a,b) (a)/(b) N(x+5,y+5)相当于 (x+5)/(y+5)
题目:
1.C语言中,编译预处理后,所有的符号常量名和宏名都用相应的字符串替换。(T)
没说字符串里的
2.#define ADD(X,Y) X+Y
的效果完全等同于定义一个函数ADD(X,Y)
。(F)
在C语言中,宏定义和函数定义虽然可以完成相似的任务,但是它们之间存在一些重要的区别。
宏定义使用指令,它是一种简单的文本替换。例如,对于给定的宏定义 ,所有的 将在编译前被替换为 。这意味着宏定义是一种简单的文本替换机制,没有实际的函数调用开销。
函数定义则是定义了一组执行特定任务的语句,并且在程序执行时会发生函数调用。函数具有自己的作用域,参数传递和返回值等特性。与宏定义相比,函数通常更安全、更易读、更易调试。
3.下列选项中不会引起二义性的宏定义是( )。(D)
A.
#define POWER(x) x*x
B.
#define POWER(x) (x)*(x)
C.
#define POWER(x) (x*x)
D.
#define POWER(x) ((x)*(x))
假设有可能是a+b*c+d , 那么为了防止不出错应该为(a+b)*(c+d) ,又因为宏名只有x,因此 ((a+b)*(c+d) ) 即 ( (x) * (x) )
4.38、若程序中有宏定义行:#define N 100
则以下叙述中正确的(B)
A.宏定义行中定义了标识符N的值为整数100
B.在编译程序对C源程序进行预处理时用100替换标识符N
C.上述宏定义行实现将100赋给标示符N
D.在运行时用100替换标识符N
(关键词:编译预处理)
5.#define fun(x,y) x*y则fun(3+2,4+5)的值为( A)。
A.16
B.45
C.21
D.25
带进去是 3+2*4+5, 没有括号,所以是16
,函数通常更安全、更易读、更易调试。