黑马程序员-C语言笔记(二)scanf函数 基本运算 选择语句

时间:2022-01-15 00:26:01

一、 scanf 函数:

scanf函数时,会等待用户的键盘输入,并不会往后执行代码。 

数值之间的分隔符是任意的,不一定要用中划线-,可以是逗号、空格、星号*、井号#等等,甚至是英文字母

scanf("%d %d%d", &a, &b, &c);3个%d之间是用空格隔开的,我们在每输入一个整数后必须输入一个分隔符,分隔符可以是空格、tab、回车 

注意scanf的第一个参数中不要包含\n,比如scanf(“%d\n”,&a); 这将导致scanf函数无法结束

二、 基本运算

1 类型转换  

1>  自动类型转换

int a = 10.6;

int b = 10.5 1.7;

自动将大类型转换为了小类型,会丢失精度

2>  自动类型提升

int b = 10.5 10;

将右边的10提升为了double类型

double b = 1.0 2;

解决除法的精度问题

3>  强制类型转换

double a = (double)1 2;

double b = (double)(1 2);


2 赋值运算  

“=” 不是等于  等于是“==”   等号左边不能是常量  

 a += 4 + 5;    等于  a = a + (4 + 5);

a++, ++a  都等价于  a = a + 1  不能 5++ 

++a  是 先a+1 然后 再用a的值进行运算  a++  是  先 用a的值进行运算 再 a+1


3 关系运算符

关系运算符中==、!=的优先级相等,<、<=、>、>=的优先级相等,且前者的优先级低于后者:2==3>1

等价于  2== (3>1)

关系运算符的结合方向为“从左往右”: 4>3>2

关系运算符的优先级小于算术运算符:3+4>8-2   等价于  (3+4)>(8-2)

4 逻辑运算 

1>逻辑与

使用格式     “  条件 A && 条件 B ”   

 功能

条件A为假  那么 不会 执行条件 B

   判断 a的值 在 (3, 5) 的正确 式子 是   (a>3)  &&  (a<5)     条件A和 条件B都为真才对

2>逻辑或

使用格式  “ 条件 A || 条件 B ”  

功能

条件 A 为 真 那么 不会执行 条件B

判断 a 的值 在  (-∞, 3) 或者 (5, +∞) 正确式子 (a<3) || (a>5) 

3>逻辑非

使用格式:   ! 条件A     

功能

真的变假  假的变真!! 

逻辑非的 结合方向 是 “ 自右至左 ”   比如 !(A>5)      先判断 A>5  的值  然后 才取反!

 

5 三目运算符条件运算符 


 是 C 语言 唯一的 三目运算符 
使用格式
表达式 1? 表达式 2: 表达式3
1> 先求解 表达式1  如果为真 那么执行表达式 2,为零 执行表达式 3     2>  条件运算符 优先于 赋值运算 低于关系运算符 低于 算术运算符
3> 结合方向  自右 至左    a>b? a: c>d? c:d  相当于  a>b? a: (c>d? c: d)
 
4> 表达式 2和3  可以是 数值表达式 还可以是 赋值表达式   如 a>b? (a= 100):(b =100) 或a>b? printf("%d", a): printf("%d", b) 

5>  表达式 2 和 3 的 类型可以不同    这时,表达式1 的值的类型为二者中较高的类型。


三、选择结构 switch

1 使用格式

 swithc(表达式)
   case   常量表达式 1:   语句 1 
     case   常量表达式 2:   语句 2    
      ……    
     case    常量表达式 n:     语句 n  
     default  :                        语句 n+ 1 
}

2 注意

1>括号中的表达式 ANSI标准允许它为任何类型

2> 当表达式的值与某一个case后面的常量表达式的值相等时,就执行此 case 后面的语句,否则执行 default 后面的语句。

3> 每一个 case 后面的值 必须互不相等 

4> 各个 case 和 default 出现的次序不影响执行结果。可以先出现 default 再出现  case 'D'

5> 执行完一个 case 后面的语句 直接转移到下一个 case  直到 遇到 break 

6>  多个 case  可以共用一组 执行语句 

四、选择结构 if


1 if的使用格式

 1.if的第1种结构

 if(条件)

 {

    语句1;

    语句2;

    ......

 }

 

 2.if的第2种结构

 if(条件1)

 {

     语句1;

     语句2;

     ......

 

 else

 {

    

 }

 

 3.if的第3种结构

 if(条件1)

 {

     语句1;

     语句2;

     ......

 }

 else if(条件2)

 {

 

 }

 else if(条件3)

 {

 

 }

 else if(条件4)

 {

 

 }

 else 

 {

 

 }

 

 4.if的第4种结构

 if (条件)

   语句1;


2 if 的使用注意


 注意    if和else 只在同一个大括号包括下配对。  else    是与最接近的if  且没有 else 的 语句 匹配  

if (条件) 语句1;语句2;   语句2与if无关;if只控制是否执行语句1;

同一时刻,只有一个大括号里的代码会被执行

A、比较大小时,常量值放左边,变量放右边

B、赋值运算符,不要写成两个=;

C、如果要在if后面的语句中定义新的变量,必须用大括号{};


3 if和switch的比较

     1> if语句能完成的功能,switch并不一定能完成

     int a = 10;

     if (a>100)

     {

     

     }

     

     2> 在有些情况下,if语句和switch语句可以互换

     

     3> switch能完成的功能,if语句都能完成