一、 基本运算:
1、算术运算
a、加法运算 +(可以表示正号)
b、减法运算 -(可以表示负号)
c、乘法运算 *
d、除法运算 / (整数/整数=整数 例 1/2=0)
e、取余运算% (也叫模运算,%两侧只能是整数,正负性取决于%左侧的数值)
注意:
(1)、自动类型转换 (double —> int) int a =10.5+1.7;
(2)、强制类型转换 (double —> int) int a = (int)10.6;
将大类型转换成小类型会丢失精度
(3)、自动类型提升 将小类型提升为大类型 double a = 5.2 + 3;
double b= 1.0 / 2; 解决除法的精度问题。
2、赋值运算
a、简单赋值 int a = 1;
b、复合赋值 复加减乘除余 例如:a += 4 + 5;
3、自增自减运算符
a、a++, ++a, a--, --a (a只能是变量)
b、a++ 是表示先使用a的值然后再使a的值递增1,而++a是先使a递增1再使用a的值
4、sizeof
a、作用:用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
b、形式:(1) 、sizeof(变量\常量)
(2)、sizeof 变量\常量
(3)、sizeof(数据类型) (括号不能去除)
5、关系运算(比较运算)
a、条件判断:成立执行代码,不成立不执行
b、真假:条件成立为’真’,不成立为’假’,任何非0的值都为“真”,只有0才为“假”。
c、关系比较:==、!=、>、>=、<、<=;条件成立返回1,不成立返回0;
(1)、优先级:(==,!=)相等< (>,>=,<,<=)相等,且前者小于后者;关系运算符的优先级小于算术运算符。
(2)、关系运算符的结合方向是“从左到右”:4 >3>2
6、逻辑运算
a、逻辑与:条件A && 条件B 两个条件只要有一个不成立,结果都为0,也就是’假’;
(1)、判断的时候,先判断第一个条件是否成立,不成立则不再判断第二个条件是否成立,直接返回假;成立则继续判断第二个条件是否成立,成立返回真,不成立返回假。
(2)、判断a的值在(3,5)的正确方法是(a>3) && (a<5)
(3)、结合方向:“从左至右”
b、逻辑或: || 两个条件只要有一个成立,结果就为1,也就是’真’;
(1)、判断的时候,先判断第一个条件是否成立,成立则不再判断第二个条件是否成立,直接返回真;不成立则继续判断第二个条件是否成立,成立返回真,不成立返回假。
(2)、判断a的值在(-∞,3)或者(5,+∞)的正确方法是(a<3)|| (a>5)
(3)、结合方向:“从左至右”
c、逻辑非:对条件取反,若条件成立,返回假;若条件不成立,返回真。
(1)、结合方向:“从右至左”
7、三目运算符
a、条件 ? 数值1 : 数值2; 条件成立返回数值1,条件不成立返回数值2;
b、例:取a、b、c最大值
#include <stdio.h>
Int main()
{
int a = 100 , b = 90 , c = 500 ;
int abMax = a > b ? a : b;
int max = abMax > c ? abMax : c;
printf(“最大值为%d\n”,max);
return 0;
}
二、流程控制
(一)、选择结构
1、if
a、语句结构
(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;
b、使用注意:
(1)、If (条件)语句1;语句2;语句2与if无关;if只控制是否执行语句1;
(2)、同一时刻,只有一个大括号里的代码会被执行
(3)、比较大小时,常量值放左边,变量放右边;例:if (0 == a)
(4)、赋值运算符,不要写成两个=;
(5)、如果要在if后面的语句中定义新的变量,必须用大括号{};
例:if(1) int a = 1; 这个是错误的,因为作用域不明确;应改为if(1) { int a = 1;}
2、switch
a、语句结构
switch(数值)
{
case 数值1:
执行语句;
break;
case 数值2:
执行语句;
break;
default:
执行语句;
break;
}
b、特点:
(1)、默认情况下,只有一个case后面的代码会被执行break作用是退出整个switch语句
(2)、如果一个case后面没有break,而且这个case成立,就会按顺序执行后面所有case中的语句,直到遇到break为止。
(3)、如果要在case后面定义一个新的变量,必须要用大括号{}包住;
c、if和switch
(1)、if语句能完成的功能,switch并不一定能完成;int a = 10; if (a>100){};
(2)、有些情况下,两种语句可以互换;
(3)、switch能完成的功能,if语句都能完成
(二)、循环结构
1、while
a、语句结构
While (条件)
{
循环体
}
b、运行原理
A、如果一开始条件就不成立,永远不会执行循环体
B、如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立,往复循环。
#include <stdio.h>
int main()
{
int n = 0;
while ( n <= 0 )
{
printf(“请输入一个正整数:\n”);
scanf(“%d”,&n);
}
printf(“此正整数为%d\n”,n);
return 0 ;
}
(3)、最简单的死循环: while(1);
2、do while
a、语句结构
do
{
循环体
}
While(条件);
b、特点:不管一开始的条件是否成立,至少会执行一次循环体;while(条件)后面有“;”。很多情况下,while和do while可以互换
3、for
a、语句结构
for (语句1; 条件; 语句2)
{
循环体
}
语句1:初始化语句;
语句2 :增量语句(执行完循环体后再执行的语句);
b、运行原理
(1)、for一开始就会执行一次语句1(整个for循环只会执行一次语句1);
(2)、判断条件是否成立,如果成立,就会执行一次循环体,然后就会执行语句2,再次判断条件是否成立,往复循环;
(3)、语句1,语句2,语句3;逗号表达式(逗号运算符);
(4)、for循环的变量定义在内部,循环完毕变量回收;while循环只能使用外部变量,变量一直存在。
c、循环嵌套实例:
#include <stdio.h>
int main()
{
for ( int i=1 ; i<10 ; i++ )
{
for ( int j=1 ; j<10 ; j++ )
{
Int sum = i * j;
printf(“%d*%d=%d ”,i,j,sum);
}
printf(“\n”);
}
return 0 ;
}
d、使用注意
(1)、for()后不要写分号;
(2)、错误写法: for ( int i=0 ; i<3 ;i++) int a=10; 作用域不明确;
(3)、for ( int i=0 ; i<3 ;i++) { int i=10;}这个是正确的,因为for()内的i的作用域比代码块中的i的作用域要大。
(4)、最简单的死循环: for(;;);
4、如何选择循环
a、一般优先选择for循环
b、然后再考虑while (比如验证用户输入的数是否为正整数)
c、最后在考虑do while
5、break和continue
a、break
(1)、使用场合:switch语句:退出整个switch语句;循环结构:退出整个循环结构。
(2)、注意点:只对最近的循环结构有效
b、continue
(1)、使用场合:循环结构:结束当前这次的循环体,进入下一次循环体。
(2)、注意点:只对最近的循环结构有效