C语言 基础理论中易错易忘易忽略知识点 第二节

1> if语句与switch语句

在编程时经常用到 if-else 语句实现多路检测,但是层次太多,容易混淆出错。因此可以使用switch语句来实现。

语句形式:   

switch(表达式

{     case   常量表达式1:      语句1;

      case   常量表达式2:      语句2;

                 ...........

     case   常量表达式n:      语句n;

      default  : 语句 n+1;

}               

每一个case后表达式的值不能相同,否则会出现相互矛盾

当表达式的值与某个常量表达式的值相等时,即执行其后的语句;否则执行default后的语句。

2>   条件运算符

一般形式:   表达式1?表达式2:表达式3

语句含义:先求解表达式1,若非0(真),则求解表达式2,此时表达式2的值作为整个条件表达式的值;若表达式1为假,则求解表达式3的值,表达式3的值就是整个条件表达式的值。

例如:

if(a > b)     max = a ;

else                max = b ;                 这个if-else语句等效于:max = (a > b)? a : b ;

但是需要注意的是一般情况下,if语句不能被条件语句代替,这里的例子只是特殊情况。

注意:条件表达式是三目运算符,要求有三个运算对象,是C语言中唯一的三目运算符,结合方向是自右向左。

3>   for 循环语句

一般形式:for ( 表达式1;表达式2;表达式3 )   {  循环体;  }

执行过程:1)先求解表达式1;     2)求解表达式2 ,若表达式的值非0,则执行循环体语句,再执行表达式3;之后再次执行表达式2,执行循环体,再执行表达式3,这样不断循环,知道表达式2 的值为0 退出循环。

                                                                                   若表达式2 的值为0,则结束循环   

在这里说一个break语句,该语句只能使用在 for循环 和 switch语句 中;其作用是立即退出本层循环。

4>  数组

定义:内存中一块连续的存储单元。(一个存储单元只能存储一个数。连续的存储比离散的存储,在读取时效率高。)

声明形式:数据类型    数组名 [ 元素个数 ] ;(其中元素个数必须是整形常量,不能是变量;也可出现表达式,但其值为整型的常量)

如:1>   int   data[3] ; 

       2>   int   data[3+4];

       3>   int   data[ n ]; 其中 n 为整型变量

注意:以上1>、2>是正确的定义形式,3>是错误的定义形式


数组的地址表示形式有两种:   1>  &数组名 [ 下标 ] ;       2>    数组名  +  下标 ;      注意:下标是从0开始的:0~元数个数-1          eg: 数组的第一个元素的地址: &data[0]; 或者   data  +  0  = data

                数组的第二个元素的地址:  &data[1]; 或者   data +1

注意:不能表示为1+data,这种表示方法是错的,因为这就相当于:下标 + 数组名

数组名用来表示数组的首地址。

在这里提一个没关联出错的地方:scanf(“%d\n”,&x);//这条语句的作用是输入一个值,并将这个值赋给变量 x ,看起来并没有毛病,可是这里的 \n 不应该有,否则即使代码正确,后面也不能得到想要的结果,所以应该去掉 \n ;

                                  正确写法:scanf(“%d”,&x);

5>    字符串处理

字符在内存中是以ASCII码值来存储。字符串必须用双引号“”来定界。

       计算机在存储字符串时,会自动在尾部追加结束标志 \o 。\o:是转义字符(是一个字符,ASCII码值为0,它不是有效字符),用来表示一个字符串的长度,虽然通常是计算机自动追加,但也可以手动添加  \o(手动追加的该符号是结束标志,即 \o 后的字符将不会输出) ,手动追加 \o 之后,系统将不会追加 \o 。

字符串的存储:若用数组定义大小,最小是2字节(1个元素 + 1个\o)。

       定义字符型数组:char  数组名 [ 元素个数 ] ; 其初始化可以是 char  a[60]={"sakhk"};但不能是char  a[60];  a="sakhk";

       一个字符型数组最多存 n-1 个有效字符;  eg: char  a[80];   //最多可以存储79个有效字符。

      可以通过以下语句将一个字符串输入到字符型数组中。

      scanf("%s",数组名);   //  %s用来接收一个字符串,数组名表示驻足的首地址。

      通过键盘输入的每一个字符都是有效字符,输完以回车为结束标志(告诉系统已输入完毕)。

      注意:当输入字符串进行存储时,若遇到空格符,则空格符号的字符将不在存储。

      eg:  输入:chi  na       //chi与na之间有一个空格,那么系统存储的字符只有chi

               存储:chi\o            

       除了scanf()函数之外还有  gets(数组名)  函数,两者功能是一样的。不同的是,gets()函数只以回车作为结束标志,对于空格也照样存储,空格也是一个字符;但gets()函数只能输入字符串,而scanf()函数可以输入任何类型的数据。

     eg:  输入:chi  na

              存储:chi  na\o

字符串的输出:  printf(“%s”,数组名);

                          puts(数组名);


字符串函数:

       strlen(数组名);//检测字符串的有效字符的个数(因此不包括 \0 ),返回值是一个 int 类型的整数。

       strcpy(数组名,“字符串”);//复制字符串,将后面的字符串复制给数组名坐在的空间。

  或 strcpy(数组名1,数组名2);

      strcat(数组名,字符串);  //用于字符串的连接,将字符串连接到数组的尾部,构成一个新的字符串。

      strcat(数组名,数组名);

      strcmp(数组名1,数组名2);//字符串比较大小

或  strcmp("......",".......");












猜你喜欢

转载自blog.csdn.net/czy47/article/details/81017394