- 数据类型
数据类型决定在内存当中开辟空间的大小以及运算方式
定义变量:开辟空间、放置内容
char 字符数据类型 1字节
short 短整型 2字节
int 整型 4字节
long 长整型 4字节
long long 更长的整型 8字节
float 单精度浮点数 4字节
double 双精度浮点数 8字节
- 变量的分类
1.作用域
局部变量的作用域是变量所在的局部范围
全局变量的作用域是整个工程
2.生命周期
局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束
全局变量的生命周期:整个程序的生命周期
- 转义字符
例题:
#include <stdio.h>
int main()
{
printf("%d\n",strlen("abcdef”));
//\32被解析成为一个转移字符串
printf("%d\n",strlen("c:\test\328\test.c”));
return 0;
}
【解析】
为什么不解析成为328,因为\ddd中, ddd表示1~3个八进制的数字,而八进制中最大只能到256,328超过最大范围
\xddd中,ddd表示三个十六进制的数字,eg:\x030
- 分支语句和循环语句
bool类取值:!0为true 0为false
1.分支语句:if、switch
(1)if语句例题:
悬空else(就近与if结合)
#include <stdio.h>
int main()
{
int a=1;
int b=2;
if(a==2)
if(b==2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
【解析】
if(b==2)和 else 结合,所以输出的结果为0
(2)switch语句
switch(整型表达式)
{
语句项;//case语句
}
注意:检测条件只能是整型或者运算结果为整型
switch+case只能进行条件判定,break实现真正的分支,把语句列表划分成为不同的部分。(也就是匹配之后,如果连着两个case 都没有break,则会顺着往下执行)
如果表达的值与所有case标签的值都不匹配,结果就是所有语句都被跳过,程序不会终止,也不会报错,C中并不认为适合错误;此时可以在语句列表中加default子句
例题1:
#include <stdio.h>
int main()
{
//输入1~5输出的是“weekday”
//输入6~7输出“weekend”
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday");
break;
case 6:
case 7:
printf("weekend");
break;
default:
break;
}
return 0;
}
switch语句可以进行嵌套,case和break之间只能写语句,不能定义变量,要定义变量则需要加{}
例题2:
#include <stdio.h>
int main()
{
int n = 7;
int m = 8;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{
//switch允许嵌套
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m=%d,n=%d\n", m, n);
return 0;
}
2.循环语句
(1)while循环
死循环:while(1) int k=0;while(k==0)
break:跳出循环(终止循环)
continue:结束本次循环,进行下一次(本次循环中continue后边的代码不往下执行,直接跳转到while语句的判断部分)
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 15)
{
if (i == 5)
continue;
printf("%d", i);
i = i + 1;
}
return 0;
}
(2)for循环
for循环中也有break和continue
注意:for语句的循环控制变量的取值采用“前闭后开区间”写法
for循环中的变种:死循环for(;;){} for(x=0,y=0;x<2&&y<7;++x,y++)
例题:
#include <stdio.h>
int main()
{
//请问循环要循环多少次
int i = 0;
int k = 0;
for (int i = 0, k = 0; k = 0;i++,k++)
{
k++;
}
//循环0次 原因:把0赋值给k,再判断k,k为0,此时为假,for循环不能执行
return 0;
}
(3)do...while()循环
do...while()循环中也有break和continue
特点:循环至少先执行一次
(4)goto语句
适合场景:终止程序在深度嵌套的结构的处理过程,例如一次跳出两层或多层循环
例题:
for (...)
for (...)
{
for (...)
{
if (disaster)
goto error;//goto 到if,再到for
}
}
...
error
if (disaster)//处理错误情况