c语言概念题

2023-05-16

*任何表达式语句都是表达式加分号组成的。

*C语言程序是从源文件的第一条语句开始执行的。(x) 从main函数开始执行

*C 语言中的变量名区分大小写。

*运算符优先级以及结合方式

   1.初等运算符:()[ ]  .(取结构体变量成员) ->(指针引用结构体变量成员)

   2.单目运算符  + - ++ -- ~ *(取指针内容)&(取地址)sizeof(长度运算符)!

   3.算术运算  * / %

   4.算术运算  + -

   5.移位运算 << >>

   6.关系运算 < > <= >=

   7.==  !=

   8.位逻辑运算 &

   9.                    ^   如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

   10.                  |

   11.                      &&

   12.                     || 

   13.条件运算 ?:

   14.赋值运算 = += *= /= 

   15.逗号运算符 ,

*关于逗号运算符:求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14

* 'a'的ASCII码是97 ,’A‘的是65,'0'是48

*  if(a),表示a为真时执行后续语句(即a为非零的时候)

    if(!a),表示a为假时执行后续语句(即a为零的时候)

* 表达式 (j=3, j++) 的值是 3

* 整数的表示:八进制(开头是0) 十六进制(0-9,a-f,A-F,首位数字前有ox) 十进制

*  If x is a float variable, the value of expression x=10/4 is 2.0

*  位运算(未看懂)

&

按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0


|

按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1


^

按位异或
若参加运算的两个二进制位值相同则为0,否则为1


~

取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1


<<

左移
用来将一个数的各二进制位全部左移N位,右补0


>>

右移
将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,                 高位补0
*  int a=10, b=20; the value of expression!a<b is  1。

*  

According to the declaration:int a; the value of expression (a&3)==(a%4) is  1.(疑问)

表达式(a&3)==(a%4)的值是1
因为无论a的值为多少a&3的结果只保留a的最后2位
如a的值为17,它变为二进制为10001,而3为00011,它们相与的结果只有a的1和2位数字保留下来也就是01,因为与1相与就保留原数据,与0相与就变0 如 a&1=a a&0=0
而a%4也是保留a的最后2位,因为只有最后2位的值为3,小于4,其它都>4
所以上面表达式是成立的,所以为1

*若变量已正确定义并赋值,符合C语言语法的表达式是 A)a=a+7; B)a=7+b+c,a++ C)int(12.3%4) D)a=a+7=c+b
  B正确

正确答案是 B;
首先 是显而易见的错误选项C跟D:
C 求余运算(%)只对整数有效,浮点型数据(12.3)是没有 求余运算的。
D 赋值运算(=)的左边只能是 变量(a),不能为 表达式(a+7)。

下面看看选项B 为什么也符合C语言:
B 项为逗号运算符(表达式1,表达式2,...表达式n),其中最后一个表达式(表达式n)最为整个逗号运算的结果(即 B项的最后结果为 a++);而在此之前,逗号运算符会先对前面的所有表达进行编译操作(即先执行a=7+b+c),最后才将表达式n 作为结果返回。

下面再看看 为什么 A 不符合要求:
A 毋庸置疑,A 的写法完全符合C语言要求,编译绝不会出错。但是 题目要求 却是 “表达式”;
C语言中,语句是由 表达式 加 语句结束符(分号;)组成的。A选项中结尾含有分号,也就是说,A选项 实际上是 C语言语句,而不是表达式;B 选项没有语句结束符,所以 B选项是 表达式,符合题目要求。

*  Among the following expressions in C,  (4) is correct. (2分)(疑问)

  1. 0.5%2
  2. 3&(0.5+0.5)
  3. 4.6<<2
  4. 2==(3/2)

关于字符常量

字符常量有两种:
一种是普通字符,即用单撇号括起来的一个字符,如'b' ,'y',‘?’。字符常量在储存在计算机的储存单元中时,是以其代码(一般采用ASCII代码)储存的。另一种是转义字符,即特殊字符常量。转移字符是C语言中表示字符的一种特殊形式,其含义是将反斜杠后面的字符转换成另外的意义。
使用字符常量需要注意以下几点:
(1)字符常量只能用单撇号括起来,不能使用单引号或其他括号。
(2)字符常量中只能包括一个字符,不能是字符串。
(3)字符常量是区分大小写的。
(4)单撇号只是界限符,不属于字符常量中旳一部分,字符常量只能是一个字符,不包括单撇号。
(5)单撇号里面可以是数字、字母等C语言字符集中除’和\以外所有可现实的单个字符,但是数字被定义为字符之后则不能参与数值运算。

合法的:'b' ,'y',‘?’,'\n','\b','\a','\t',’\x43‘ ,

不合法:”\0”(字符串不需要写结束符。)

According to the declaration: char ch; the assignment expression ______is correct.
A.ch=’\412’ B.ch=255 C.ch=’\08’ D.ch=’\’

选B(需确认
A中'\412'表示八进制的412,转化为十进制是266,超出了ascII的范围(0~255)
C,八进制不可能有8
D '\' 表示错误,应该是'\\'表示斜杠‘\’

*  2,900不是正确的整形常量

*  若变量已正确定义并赋值,表达式( 2)不符合C语言语法。 (2分)

  1. 5&&3
  2. int(5.5)         (int)5.5为强制类型转换
  3. +a

  4.a=b=c=5

*  -k++ 等价于-(k++).

*  合法标识符由字母、下划线、数字这三个方面组成,但开头必须是字母或下划线。另外,关键字不能是标识符,如main等。

*  已知int i, a; 执行语句i=(a=2*3,a*5),a+6;后,变量i的值是  30

*  Which one is completely correct among the following program fragments? (c)    (疑问)

*  设xyt均为int型变量,则执行语句:x=y=3; t= ++x || ++y; 后,y的值为  3.

*   逻辑运算符两侧运算对象的数据类型(可以是任何类型的数据)

  1. int *p; scanf("%d", &p);
  2. int *p; scanf("%d", p);
  3. int k, *p=&k; scanf("%d", p);
  4. int k, *p; *p= &k; scanf("%d", p);
int m=20; while (m=0) m=m++;

则下面描述中正确的是(3 )。 (2分)

  1. while 循环执行 10 次
  2. 循环是无限循环
  3. 循环体语句一次也不执行
  4. 循环体语句执行一次

*  C语言中函数返回值的类型是由(定义函数时所指定的函数类型 )决定的

*   函数的定义不能嵌套,但函数调用可以嵌套

*  关于return语句

  1. 被调用函数中可以不用 return 语句
  2. 被调用函数中可以使用多个 return 语句
  3. 被调用函数中,如果有返回值,就一定要有 return 语句

*  

According to the declaration: int p[5], *a[5];the expression ( 3 )is correct. (2分)

  1. p=a
  2. p[0] = a
  3. *(a+1)=p
  4. a[0]=2

*  

对于以下结构定义,++p->str中的++加在___1_。 (2分)

struct { 
    int len; 
    char *str;
} *p;
  1. 指针str上
  2. 指针p上
  3. str指的内容上
  4. 以上均不是

*  

According to the declaration: int (*p)[10];, p is a pointer;

*  

In the following declarations, the correct assignment expression is _3_. (2分)

int *p[3], a[3];
  1. p = a
  2. p = &a[0]
  3. *p = a
  4. p[0] = *a

*  

有说明语句int a[4][5];,则a[2]+3表示__。 (2分)

  1. a数组行下标为2、列下标为3的元素的地址

*  

According to the declaration: int a[10], *p=a; the expression (4)is wrong. (2分)

  1. a[9]
  2. p[5]    (重点)
  3. *p++
  4. a++

*  设变量定义为 int a[2]={1,3}, *p=&a[0]+1;,则*p的值是 3。

*  printf("%f%%",1.0/3);输出为 0.333333%

   最后二个连续的%%就是实际输出一个%符号  

*  若有定义和语句: int a; char c; float f; scanf("%d,%c,%f",&a,&c,&f);

   若通过键盘输入: 10,A,12.5 则a=10,c='A',f=12.5。(注意字符)

*  预处理命令的前面必须加一个“#”号。

*  在对数组全部元素赋值,行可省,列不可省。

* 文件指针和位置指针都是随着文件的读写操作在不断改变。 (x)

     位置指针指向文件内部的字节位置,随着文件的读取会移动

     文件指针如果不重新赋值将不会改变指向别的文件。

*  任何表达式语句都是表达式加分号组成的

*  在switch语句中,每一个的case常量表达式的值不可以相同。

*  C语言函数返回类型的默认定义类型是int

*  可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数.

*  函数形参的存储单元是动态分配的

*  结构体变量可以作数组元素

*  二进制文件可以随机存取,文本文件顺序存取

*  函数strcmp从头至尾顺序地将其对应字符比较,遇到两个字符不等时,两个字符相减得到一个int型值,两个字符串完全相同  时,则返回0。

*  C语言的书写格式会影响程序的可读性

*  if(a=5) 是允许的

*  函数返回值的类型是由在定义函数时所指定的函数类型决定的

*  逻辑表达式的值只能为1或0

*  变量被定义后 , 它不仅有一个确定的地址值 , 而且还会有一个确定的本身值(x)

*  结构体数组中可以包含不同结构体类型的结构体变量  (x)

*  以“r”方式打开一个文件时,文件指针指向文件首

*  使用static k定义的变量属于静态变量

*  文件指针用于指向文件,文件只有被打开后才有对应的文件指针

*  在switch语句中,多个case可以共用一组执行语句。

* 表达式语句和表达式没有什么区别

 在程序设计语言中,语句指的是执行单元,通常以行为单位,表达式指的是可用于计算的式子

,即可能产生一个值的式子。语句可以包含有表达式,表达式也可以单独形成一个语句。

*  fseek函数一般用于文本文件  (x)

*  枚举类型中的元素都具有一个整型值

*  在多层循环中, 一个break语句只向外跳一层。

*  局部变量如果没有指定初值,则其初值不确定。

*  文件的读函数是从输入文件中读取信息,并存放在内存中。

*  结构体类型本身不占用内存空间,结构体变量占用内存空间

*  char *s="C Language";表示s是一个指向字符串的指针变量,把字符串的首地址赋予s

*  在C语言中,逗号既可以作为运算符,也可以作为分隔符。

*  不允许把一个数值或字符赋予指针变量

*  两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。

*  两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。

*  语句 printf("%02d",1/3);输出为 00

*  条件运算符?和:是一对运算符,不能分开单独使用

*  如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素

*  C 语言程序实现与其他高级语言一样也要经过编辑、编译连接和运行这样的三步曲

*  在同一个作用域中不可定义同名变量 , 在不同的作用域中可以定义同名变量

*  直接访问就是直接利用变量的地址直接进行访问

*  指向结构体变量的指针可以作函数参数,实现传址调用

*  凡在函数中未指定存储类别的全局变量其默认储存类型都是extern , 而局部变量的默认储存类型是 auto

C语言中的全局变量如果没有指定初值,则其初值自动设置为0。 

*  指针变量可以存放指针(地址)、数值和字符 (x)

*  函数的实参传递到形参有两种方式值传递和地址传递

*  字符串在内存中的起始地址称为字符串的指针,可以定义一个字符指针变量指向一个字符串。

*  一个C源程序可以有多个main函数 (x)

*  表达式 (j=3, j++) 的值是3

*  标准格式输入函数scanf()可以从键盘上接收不同数据类型的数据项

*  C 语言标准格式输入函数 scanf() 的参数表中要使用变量的地址值

C 语言标准格式输出函数 printf() 的参数表是由若干个表达式组成

*  int *p[4]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。
int (*p)[4]; //定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。

区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。
int *p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组。
int (*p)[n]; 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。

*  变量被定义后 , 它的作用域和寿命就被确定了 , 并且不可改变

*  在 C 语言程序中 , 凡是没有出现存储类说明符的变量都是自动类的。

* 数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量

*  while(条件表达式)
while后面的条件表达式,不能省略

for(;条件表达式;)
for语句中的条件表达式可以省略

*  指针变量和它指向的变量之间的关系,可以用指针运算符“*”表示

*  内部静态变量的作用域和寿命与自动变量的相同(x)

静态局部变量的生存周期虽然延续到整个程序执行完毕,但其作用域仍与自动变量相同,即只能在定义该变量的函数或语句块内使用。退出该函数或语句后,尽管该变量还存在,但其他的程序代码不能使用它,这是静态局部变与全局即外部不同之处。

*  内部静态变量的寿命与自动变量的不同

*  声明数组时,数组名后是用大括号括起来的常量表达式(x)

*  C语言源程序的扩展名是c

*  可以在一个函数中定义另一个函数(x)

* 文件是否打开是可以判断的

*  a=(b=4)+(c=6) 是一个合法的赋值表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言概念题 的相关文章

随机推荐