0. 注释
// 我是单行注释
/* 我是多行注释 */
1. bool 数据类型
bool 类型的取值是真(true)或假(false)
bool 数据类型和 char 数据类型一样,底层都是整形。true 对应整形 1,false 对应整形 0。
#include <stdio.h>
int main(void)
{
bool bool_1 = true;
bool bool_2 = false;
printf("bool_1: %d , bool_2: %d\n" , bool_1 , bool_2);
return 0;
}
注意将一个非 bool 类型的算数值(整形,字符型)赋给 bool 类型时,初始值为 0,则结果为 false,否则结果为 true。
#include <stdio.h>
int main(void)
{
bool bool_1 = 0;
bool bool_2 = 6;
printf("bool_1: %d , bool_2: %d\n" , bool_1 , bool_2);
bool_1 = 'a';
bool_2 = '\0';
printf("bool_1: %d , bool_2: %d\n" , bool_1 , bool_2);
return 0;
}
2. 运算符
运算符包括算数运算符,关系运算符,逻辑运算符
1.1 算数运算符
基本算数运算符有:+ - * / %
#include <stdio.h>
int main(void)
{
int num_1 = 10;
int num_2 = 4;
int result = 0;
// +
result = num_1 + num_2;
printf("+: %d\n" , result);
// -
result = num_1 - num_2;
printf("-: %d\n" , result);
// *
result = num_1 * num_2;
printf("*: %d\n" , result);
// /
result = num_1 / num_2;
printf("/: %d\n" , result);
// %
result = num_1 % num_2;
printf("%%: %d\n" , result);
return 0;
}
注意:整数除法和浮点数除法不同。浮点数除法的结果是浮点数,整数除法的结果是整数。这使得 10 除以 4 很让人头痛,因为实际结果有小数部分。在C/C++ 中,整除除法结果的小数部分被丢弃,这一过程被称为截断。
浮点数除以整数,或整数除以浮点数,编译器会将整数转换为浮点数,所以结果是浮点数
#include <stdio.h>
int main(void)
{
double num_1 = 2.0;
int num_2 = 10;
printf("%lf\n" , num_1 / num_2);
printf("%lf\n" , num_2 / num_1);
return 0;
}
优先级
/ * % 的优先级比 + - 的优先级高,优先级相同根据在语句中出现的顺序来执行。可以使用括号 ()来改变优先级
#include <stdio.h>
int main(void)
{
int num_1 = 5;
int num_2 = 10;
int num_3 = 0;
num_3 = num_1 * num_2 % 3;
printf("%d\n" , num_3);
num_3 = num_1 * (num_2 % 3);
printf("%d\n" , num_3);
return 0;
}
// +=、-=、*=、/=、%=
#include <stdio.h>
int main(void)
{
int num_1 = 1;
num_1 += 1;
printf("Num_1: %d\n" , num_1);
num_1 -= 1;
printf("Num_1: %d\n" , num_1);
num_1 *= 8;
printf("Num_1: %d\n" , num_1);
num_1 /= 2;
printf("Num_1: %d\n" , num_1);
num_1 %= 3;
printf("Num_1: %d\n" , num_1);
return 0;
}
1.2 关系运算符
关系运算符有: < <= > >= == !=
#include <stdio.h>
int main(void)
{
int num_1 = 1;
int num_2 = 2;
bool result = 0;
result = num_1 > num_2;
printf("Res: %d\n" , result);
result = num_1 >= num_2;
printf("Res: %d\n" , result);
result = num_1 < num_2;
printf("Res: %d\n" , result);
result = num_1 <= num_2;
printf("Res: %d\n" , result);
result = num_1 == num_2;
printf("Res: %d\n" , result);
result = num_1 != num_2;
printf("Res: %d\n" , result);
return 0;
}
1.3 逻辑运算符
逻辑运算符有:&&(与) ||(或) !(非)
exp1 和 exp2 都为真,exp1 && exp2 才为真
exp1 或 exp2 为真,exp1 || exp2 就为真
exp1 为真,! exp1 为假
#include <stdio.h>
int main(void)
{
int num_1 = 1;
int num_2 = 2;
bool result = 0;
result = num_1 > num_2 && num_1 < num_2;
printf("%d\n" , result);
result = num_1 > num_2 || num_1 < num_2;
printf("%d\n" , result);
result = ! (num_1 > num_2);
printf("%d\n" , result);
return 0;
}
当算数运算符,关系运算符,逻辑运算符结合在一起,对优先级感到困惑时,使用括号()是一个明智的选择
递增运算符 ++
递增运算符执行简单的任务,将其运算对象递增 1。该运算符以两种方式出现。
- ++ 出现在其作用的变量前面,这是前缀模式
- ++ 出现在其作用的变量后面,这是后缀模式 两种模式的区别在于递增行为发生的时间不同
#include <stdio.h>
int main(void)
{
int num_1 = 0;
printf("num_1 : %d\n" , ++num_1);
printf("num_1 : %d\n" , num_1++);
printf("num_1 : %d\n" , num_1);
return 0;
}
在前缀模式和后缀模式都能使用的场景,使用前缀模式,前缀模式的效率更高。
递减运算符 --
和递增运算符相似
#include <stdio.h>
int main(void)
{
int num_1 = 7;
printf("num_1 : %d\n" , --num_1);
printf("num_1 : %d\n" , num_1--);
printf("num_1 : %d\n" , num_1);
return 0;
}
作业
1.将讲义中的程序自己敲一遍,理解程序为何会这样运行
2.要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.
例如,字母"A"后面第4个字母是"E".“E"代替"A”。因此,“China"应译为"Glmre”。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
3.输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9,取位2小数。