运算符:
-
关系运算符
> >= < <= == !=
=赋值 ==等于
-
赋值运算符
= += -= *= /= %=
a-=5;=====a=a-5;
a++;//a=a+1;
a+=3;//a=a+3;
-
条件运算符(三目运算符)
表达式1?表达式2:表达式3;
运算法则:先判断表达式1是否成立,如果成立则执行表达式2,不成立则执行表达式3;
例:
int a=3,b=6;
c=a>b?a:b;
运算符优先级
单算移关与,异或逻条赋(熟练记忆)
单目运算符
! ++ -- ~
算术运算符
* / % + -
移位运算符
<< >>
关系运算符
< <= > >= == !=
位与运算符
&
异或运算符
^ |
逻辑运算符
&& ||
条件运算符
? :
赋值运算符
= += -= *= /= %=
标点符号
, ; () [] { }
分隔符
空格 tab 换行
变量:
概念:
程序运行过程中发生变化的量
格式:
存储类型 数据类型 变量名
auto int a;
存储类型:
决定变量存储位置
数据类型:
决定开辟的空间大小
变量名:
遵循标识符的命名规则
名称 | 字节大小 | 取值范围(了解) | |
int | 整型 | 4 | |
char | 字符型 | 1 | -2^7~2^7-1 |
short | 短整型 | 2 | |
long | 长整型 | 4 | |
float | 单精度浮点型 | 4 | 有效位数6-7位 |
double | 双精度浮点型 | 8 | 有效位数15-16位 |
printf("%d\n",sizeof(float));
sizeof用于计算字节大小
1个字节等于8位,0-255,256个数
0111 1111=127
-128~127
变量的区别
局部变量 | 全局变量 | |
定义位置 | 函数体内部 | 函数体外部 |
初值 | 未初始化时值为随机值 | 未初始化时值为0 |
存储位置 | 栈区 | 全局区 |
生命周期 | 同函数体共存亡 | 同程序共存亡 |
作用域 | 当前函数体内部 | 整个程序 |
常量:
程序运行过程中不会发生变化
字符常量
用单引号包裹
char a='w';
'w'--->字符
a---->变量
'n'字符n '\n'换行 \转义 \\:\
用双引号包裹,以'\0'作为结束标志
char a[]="hello";
八进制 十进制 十六进制
浮点型常量
float 4字节 double 8字节
标识常量
格式:#define 宏名 常量或表达式或代码段
特点:只是单纯的替换,不进行运算
宏定义:起标识的作用,宏名遵循标识符命名规则,一般用大写表示
#include<stdio.h>
#define N 5
#define M N+2
#define NUM 2+M*2+1 //2+5+2*2+1
int main(int argc, char const *argv[])
{
printf("%d\n",NUM); //12
return 0;
}
结合三目运算符实现求两个数的最大值:
#include<stdio.h>
#define MAX a>b?a:b
int main(int argc, char const *argv[])
{
int a=6,b=9;
printf("%d\n",MAX);
return 0;
}
宏函数 了解
#include<stdio.h>
#define MAX(a,b) a>b?a:b
int main(int argc, char const *argv[])
{
printf("%d\n",MAX(8,6));
return 0;
}
输入输出:
按字符输入输出
输入
int getchar(void);
功能:向终端输入一个字符
参数:无
返回值:输入字符的ASCII值
int res=getchar();
printf("%d\n",res);
输出
int putchar(int c);
功能:向终端输出
参数:输出字符的ASCII值
返回值:输出字符的ASCII值
int res=getchar();
putchar(res);
按格式输入输出
输出
int printf(const char *format, ...);
功能:按格式向终端输出
参数:多参
返回值:输出数据个数
格式:
%d int
%c char
%f float
%lf double
%s 字符串
%p 地址
%o 八进制
%#x 十六进制
浮点型,默认打印小数点后六位
float a=2.3;
printf("hello %.2f\n",a); //保留2位小数
输入
int scanf(const char *format, ...);
功能:按格式向终端输入
参数:多个
返回值:正确输入数据的个数
int a;
scanf("%d",&a);
printf("hello %d\n",a);
垃圾字符回收机制
通过空格回收
可以回收一个或多个空格、tab
char a,b;
scanf("%c %c",&a,&b);
printf("hello %c %c\n",a,b);
*抑制符,可以回收任意一个字符 了解
getchar
while(1)
{
char a;
scanf("%c",&a);
printf("%c\n",a);
getchar();
}
分支语句
if_else
基本结构
if(表达式1)
{
代码段1;
}else
{
代码段2;
}
判断表达式1是否成立,如果成立执行代码段1,不成立执行代码段2;
分层结构
if(表达式1)
{
代码段1;
}else if(表达式2)
{
代码段2;
}else
{
代码段3;
}
嵌套结构
if(表达式1)
{
if(表达式2)
{
}
}
if(s>100||s<0)
{
printf("error\n");
}else
{
//ABC
}
switch_case
switch (表达式)
{
case 常量1:
/* code1 */
break;
case 常量2:
/* code2 */
break;
default:
break;
}
执行顺序:判断表达式的结果,和case后的常量值进行匹配,匹配成功则执行对应语句块,如果没有匹配成功的则执行default的语句块,遇到break结束。
例题:区分学生学习成绩等级:
#include<stdio.h>
int main(){
float score=0;
printf("请输入:");
scanf("%f",&score);
if(!(score>=0&&score<=100))
printf("error");
else{
switch((int)score / 10){
case 10:
case 9:
printf("A:优秀\n");
break;
case 8:
printf("B:良好\n");
break;
case 7:
case 6:
printf("C:合格\n");
break;
default:
printf("D:不及格");
break;
}
}
return 0;
}
注意:
表达式的结果不能是小数,case后的常量值不能是浮点数或字符串。
每个对应的case语句后边要加上break,不加会继续向下执行,直到遇到break结束
课后练习
答案见:day02课后练习-CSDN博客