PTA选择判断题笔记

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.函数的形参属于局部变量,仅在定义的函数内有效,函数返回后失效。


  1. 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取舍为5int 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

  1. 宏名一般用大写字母

  2. 宏定义不存在类型问题,宏名无类型,它的参数也无类型。

  3. #under取消宏定义

    #define E 2.7
    void main(){
        ...
    }
    #under E
    //以上是E的作用域范围
    fun(){
        s=E*2  //程序会报错
    }
    
  4. 宏定义可以嵌套定义(和函数区分开,函数不可以嵌套定义)

    #define R 3
    #define S 5
    #define Z R*S*S
    
  5. 若宏名出现在一个被双括号括起来的字符串中,不会发生宏替换

    #define L 1.2
    main(){
    	printf("L=%f",L)
    }
    //运行结果L=1.2
    
  6. 要注意宏定义式子有无括号

    #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
,函数通常更安全、更易读、更易调试。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JaneHan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值