目录
一、常量(const)
二、格式化输入输出
三、运算符(存在优先级)
自变运算符 ++/-- 使变量自动+1或-1
算术运算符 + - * / %
关系运算符 > < >&#61; <&#61; &#61;&#61; !&#61;
逻辑运算符 && || !
三目运算符 运算对象有三个部分
赋值运算符 &#61; &#43;&#61; -&#61; *&#61; /&#61;
位运算符 & | ~ >> <<
四、类型转换
自动类型转换&#xff1a;
强制类型转换&#xff1a;
五、分支语句
六、开关语句(也属于分支语句)
七、循环语句
一、常量(const)
什么是常量&#xff1a;程序运行期间数值不能变化的叫常量
100 默认为 int 类型
100u unsigned int
100lu unsigned long
100llu unsigned long long
100l long
100ll long long
3.14 默认 double 类型
3.14f float
3.14l long double
有符号与无符号运算&#xff0c;全都转为无符号&#xff0c;结果不会小于0
问题&#xff1a;100年有多少秒(忽略闰年)
超出 signed int 范围&#xff0c;使用 unsigned int
#define SEC (3600*24*365*100u)
二、格式化输入输出
%nd 显示n个字符宽度&#xff0c;不够则补空格&#xff0c;右对齐
%-nd 显示n个字符宽度&#xff0c;不够则补空格&#xff0c;左对齐
%0nd 显示n个字符宽度&#xff0c;不够则补0&#xff0c;右对齐(补0没有左对齐)
%n.mf 显示n个字符宽度(小数点算一位)&#xff0c;不够则补空格&#xff0c;m表示小数点后的位数(四舍五入)&#xff0c;(n与m冲突时&#xff0c;以m为准)
%g 不显示小数点后多余的0
三、运算符(存在优先级)
自变运算符 &#43;&#43;/-- 使变量自动&#43;1或-1
前自变&#xff1a;&#43;&#43;num --num 立即有效
后自变 num&#43;&#43; num-- 下一行语句生效
注意&#xff1a;不要在一行内多次使用自变运算符
算术运算符 &#43; - * / %
整数/整数 结果没有小数点(四舍五入)
/ % 除数不为0 出现错误&#xff1a;浮点数例外(核心已转储)
关系运算符 > < >&#61; <&#61; &#61;&#61; !&#61;
比较结果必须是0或1&#xff0c;比较结果还能继续参与运算
int num &#61; -5;
if(1 < num < 10)
永远为真&#xff0c;运算规则与数学不一样
注意&#xff1a;建议常量放左边
逻辑运算符 && || !
会先把运算对象转换成逻辑值&#xff0c;0转换为假&#xff0c;非0转换为真(包括负数)
A && B 一假即假
A || B 一真即真
!A 求反
&& || 具有短路特性&#xff1a;当左边的运算对象已经能够确定整个表达式的结果时&#xff0c;右边的所有运算对象不再计算(可用于精简if判断)
(num !&#61; 0) && (num1 &#61; 100)
if(num !&#61; 0)
{
num1 &#61; 100;
}
三目运算符 运算对象有三个部分
A ? B : C
判断A的值是否为真&#xff0c;如果为真执行B&#xff0c;否则执行C
该语句不能使用流程控制语句&#xff0c;因为必须要有运算结果
赋值运算符 &#61; &#43;&#61; -&#61; *&#61; /&#61;
a &#43;&#61; b; a &#61; a &#43; b;
a -&#61; b; a &#61; a - b;
a *&#61; b;
a /&#61; b;
...
位运算符 & | ~ >> <<
sizeof 也是运算符&#xff0c;但是sizeof括号内的表达式不会计算(只考虑括号内字节数最大的数值)
四、类型转换
自动类型转换&#xff1a;
只有相同类型的数据才能运算&#xff0c;不同类型的数据必须转换成相同的类型才能进行运算
意不丢失数据为基础&#xff0c;适当地牺牲一些空间
转换规则&#xff1a;(存在优先级)
1、字节少的向字节多的转
2、有符号的向无符号的转
3、整型向浮点型转
强制类型转换&#xff1a;
(新类型)数据
有丢失数据的风险&#xff0c;要慎重使用
五、分支语句
if(表达式) //单分支{表达式为真时&#xff0c;执行此处代码}
if(表达式) //双分支{表达式为真时&#xff0c;执行此处代码}else{表达式为假时&#xff0c;执行此处代码}
if(表达式1) //多分支{表达式1为真时&#xff0c;执行此处代码}else if(表达式2){表达式2为真时&#xff0c;执行此处代码}else{表达式都为假时&#xff0c;执行此处代码}
注意&#xff1a;大括号建议上下对齐&#xff0c;当分支语句只有一条时&#xff0c;大括号可以省略&#xff0c;但不建议省略
练习1&#xff1a;输入三个整数&#xff0c;从大到小显示
练习2&#xff1a;输入一个年份&#xff0c;判断是闰年还是平年
四闰百不闰&#xff0c;四百闰
练习3&#xff1a;输入一个年份和月份&#xff0c;判断该月有多少天
练习4&#xff1a;输入一个三位整数&#xff0c;判断是否是水仙花数
abc &#61;&#61; a*a*a &#43; b*b*b &#43; c*c*c
练习5&#xff1a;输入成绩&#xff0c;判断等级
[100,90] A
(90,80] B
(80,70] C
(70,60] D
(60,0] E
other 成绩有误
六、开关语句(也属于分支语句)
switch(n) //n可以使数值、表达式&#xff0c;运算结果必须是整数{case val: //val 必须是整常量&#xff0c;如果val等于n&#xff0c;则打开执行开关...break; //关闭执行开关case val:...break;...default: //如果所有的case都没有匹配成功&#xff0c;则打开该执行开关&#xff0c;并且放在任何位置都会最后执行...break;}
注意&#xff1a;如果每个case后都有break&#xff0c;就形成了分支结构
switch 不能和 continue 配合使用
注意&#xff1a;
case a ... b: 可以表示一个范围a~b&#xff0c;但是属于gnu编译器独有的语法
练习6&#xff1a;输入一个月份&#xff0c;判断季节&#xff1a;
1 2 3 春天
4 5 6 夏天
7 8 9 秋天
10 11 12 冬天
other 月份有误
七、循环语句
循环就是让一段代码反复执行&#xff0c;达到想要的效果
for 循环语句
for 是一种比较灵活且较危险(与其他循环相比)的一种循环
一般用一个变量来引导 for 循环的运行&#xff0c;这个变量叫做循环变量 i (index)
for([1];[2],[3]){[4];}
1、给循环变量赋初值&#xff0c;C99标准才可以在此处定义循环变量
2、判断循环条件&#xff0c;一般判断循环变量是否到达边界
4、如果条件2为真&#xff0c;则执行此处代码&#xff0c;也叫循环体
3、改变循环变量&#xff0c;防止出现死循环&#xff0c;一般对循环变量自加或自减
1 2 4 3 4 3 2 ...
for 循环的多种写法&#xff1a;
for( ; ; ){//死循环}
int i &#61; 0;for( ; i<10; i&#43;&#43;){}
for(int i&#61;0; i<10; ){...i&#43;&#43;;}
while 循环
while(条件) //当前条件为真时执行循环体&#xff0c;为假时结束循环{//循环体}
while 循环相当于 for 循环的精简版本 for(;条件;)
for 循环负责解决明确知道循环次数的问题
while 循环负责解决只知道结束条件而不确定循环次数的问题
do while 循环
do{//循环体}while(条件); //分号不能少
先执行循环体&#xff0c;再判断循环条件是否为真&#xff0c;该循环至少执行一次
适合先干活&#xff0c;再检查的特殊情况&#xff0c;例如&#xff1a;输入判断密码
问题&#xff1a;for、while、do-while 有什么区别
循环嵌套&#xff1a;
循环语句中包含循环语句
外层循环执行1次&#xff0c;内层循环执行n次
作业1&#xff1a;计算出所有的水仙花数
作业2&#xff1a;输入一个正整数&#xff0c;判断是否是素数 只能被1和本身整除
作业3&#xff1a;输入一个正整数&#xff0c;判断是会否是回文数 123321 12321
作业4&#xff1a;输入一个6位密码&#xff0c;正确密码自定&#xff0c;输入正确显示"登陆成功"&#xff0c;输入错误提示"还剩几次机会"&#xff0c;
可以继续输入&#xff0c;最多可以输错3次&#xff0c;否则显示"账号已锁定"&#xff0c;并结束
作业5&#xff1a;输入一个整数&#xff0c;分解显示
-1234 - 1 2 3 4