C语言基础(容易误解的一些题)

程序结构是三种 : 顺序结构 、 选择结构(分支结构) 、 循环结构 。

标识符

标识符由字母,数字,下划线组成,并且数字不能放在第一位。这个很重要哦,每年都会考。

标识符分为关键字、预定义标识符、用户 标识符。

关键字:(不可以 作为用户标识符号)

auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,inline,long,register,restrict,return,short,signed,sizeof,static,struct,switch,typedef,unsigned,union,void,volatile,while,_Bool,_Complex,_Imaginary,_Alignas,_Alignof,_Atomic,_Static_assert,_Noreturn,_Thread_local,_Generic 

 而main define scanf printf 都不是关键字 ,大家注意区分。

对于一些题目会迷惑学生,比如把关键字换了换字母,或者改了大小写,那就不是关键字了,比如For,不是关键字,可以用做标识符。

预定义标识符:define scanf printf include ,预定义标识符可以做为用户标识符。

用户 标识符:几乎每年都考,大家牢记!

数组

一维数组:

int a[5]={1,2,3 , }; 也是合法的

可以忽略数组长度,但是对于int a[];该初始化是错的,只有在对数组初始化(即赋值)的时候才可以省略数组的长度没有初始化便不可以这么命名。

二维数组:

int a[3][]={1,2,3,4,5,6}; 不合法

二维数组初始化时可以省略行数,但不能省略列数!!!

特殊转义字符

前导0不写,与八和十六进制数字区分

八进制转义字符:‘\ddd’, 前导的0是不能写的。
十六进制转义字符:'\xdd ’,前导的0不能写,并且 x 是小写 。

输出占位符

%o 八进制   %#o 带前导的八进制  
%x 十六进制 %#x 带前导的十六进制

         int x=017 ;
         printf (“ %d ”, x  ); 15
         printf (“ %o ”, x  ); 17               printf (“ %#o ”, x ); 017
         printf (“ %x ”, x ); 11                 printf (“ %#x ”, x ); 0x11

逻辑运算符

C语言基础(容易误解的一些题)_第1张图片

表达式的数值只能为 1(表示为真),或 0(表示假)。这个概念真的非常非常要!!!大家一定要牢记。

逗号表达式优先级别最低 ,表达式的数值逗号最右边 的那个表达式的数值,(2,3,4)的表达式的数值就是4 。

关于按位运算符,!>&&>||

 一定记住“=”就是赋值,“ = = ”才是等号。

 ++ 在前先加后用 , ++ 在后先用后加

在初始化的时候,不可以连续赋值。比如int a=b=9;是不对的。

题目:

设整型变量 n 的值为 2,执行语句“n+=n-=n*n;”后,n 的值是( )。

A. 0     B. 4     C. - 4      D. 2

让我们逐步分析这个语句:

  1. 最内层的运算是 n * n,即 2 * 2,得到 4。
  2. 接下来是 n-=4相当于 n = n - 4,即2-4,得到 -2。
  3. 最后是 n += -2,相当于 n = n + (-2),即2+(-2)得到 0。

因此,执行完语句后,整型变量 n 的值为 0。所以,正确的选项是 A. 0。

在 C 语言中,& 操作符表示按位与操作,| 操作符表示按位或操作。按位与操作对两个二进制数的相应位执行逻辑与运算,如果两个相应位都为 1,则结果位为 1,否则为 0。

让我们计算 x & y,其中 x=2,y=3:

  x: 0 1 0 (2的二进制表示)
  y: 0 1 1 (3的二进制表示)
---------------- 
x&y: 0 1 0 (按位与的结果)

所以,x & y 的结果是 2,因此正确的选项是 B。

让我们计算 x | y,其中 x=2,y=3:

  x: 0 1 0 (2的二进制表示)
  y: 0 1 1 (3的二进制表示)
---------------- 
x|y: 0 1 1 (按位或的结果)

所以,x | y 的结果是 3。

strlen 和 sizeof 的区别

strlen是一个库函数,使用的时候需要引用头文件string.h,

而sizeof计算的是所占空间的大小,单位是字节。

当读数的时候,strlen计算的是‘\0’之前的字符个数,而sizeof计算的是所占空间的大小,包括‘\0’。

题目:

设有数组定义:char array[]=“China”;则数组所占的存贮空间为()。
A.4 个字节   B. 5 个字节   C. 6 个字节   D. 7 个字节

从题目上来看,China是字符串,后面隐藏来一个结束语‘\0,它在内存中也占一个字节,因此一共是6个字节,答案选C。

 关于除法/和余法%的一些运算:

一定要区分余法和除法。

“/ / ” 两边 都是 整型的话,结果就是一个 整型 。 2 3/2 的结果就是 1.
“/ / ” 如果 有一边是 小数,那么结果就是 小数 。 0 3/2.0 的结果就是 0.5

题目

输入123 ,输出 321 逆序输出数据
int i=123;
while (i ! =0 )

printf (“ %d ”, i%10);
i=i/10}

循环

大家可以自己调试计算一下哦。

int k=1;                 int k=1 ;
while(- -k);          while(k - -);  printf(“ %d ”,k ), printf(“ %d ”,k );               
结果为 0                  结果为 -1         

而对于for循环          

for(int i=0;i<200;i++)

printf("%d",i);         结果为200

1.除法(正常运算)

int i=5;
int j=2;
printf("%d",i/j);

答案为:2

int i=-5;
int j=2;
printf("%d",i/j);

答案为:-2

int i=5;
int j=-2;
printf("%d",i/j);

答案为:-2

int i=-5;
int j=-2;
printf("%d",i/j);

答案为:2

2.余法(不正常运算)

int i=5;
int j=2;
printf("%d",i%j);

答案为:1

int i=-5;
int j=2;
printf("%d",i/j);

答案为:-1

int i=5;
int j=-2;
printf("%d",i/j);

答案为:1

int i=-5;
int j=-2;
printf("%d",i/j);

答案为:-1

后期会再进行改善的,谢谢大家的观看!

 

 

 

 

 

 

你可能感兴趣的:(c语言,算法,开发语言,c#)