第一章 C数据类型及语句02

1.2 数据类型

1.2.1 基本类型

char 、short int 、int、long int、float、double

1.2.2 构造类型

由若干个相同或不同类型数据构成的集合,这种数据类型被称为构造类型

1
int a[10];

格式化输出字符:

%d 十进制有符号整数

%ld 十进制 long 有符号整数

%u 十进制无符号整数

%o 以八进制表示的整数

%x 以十六进制表示的整数

%f float 型浮点数

%lf double 型浮点数

%e 指数形式的浮点数

%c 单个字符

%s 字符串

%p 指针的值

特殊应用:

%3d 要求宽度为 3 位,如果不足 3 位,前面空格补齐;如果足够 3 位,此语句无效

%03d 要求宽度为 3 位,如果不足 3 位,前面 0 补齐;如果足够 3 位,此语句无效

%-3d 要求宽度为 3 位,如果不足 3 位,后面空格补齐;如果足够 3 位,此语句无效

%.2f 小数点后只保留 2 位

1.2.3 类型转换

自动转换:

遵循一定的规则,由编译系统自动完成.

强制类型转换:

把表达式的运算结果强制转换成所需的数据类型

自动转换的原则:

1、 占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低.

2、 转换方向:

1691332523358

1.2.4 指针

1.3 运算符

1.3.1 运算符

用运算符将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C表达式运算对象包括常量、变量、函数等

1.3.2 运算符的分类:

1、双目运算符:即参加运算的操作数有两个

例: +

​ a+b

2、单目运算符:参加运算的操作数只有一个

​ ++自增运算符 给变量值+1

​ –自减运算符

​ int a=10;

​ a++;

3、三目运算符:即参加运算的操作数有 3 个

()?():()

1.3.3 算数运算符

+ - _ / % += -= _= /= %=

1.3.4 关系运算符

(>、<、= =、>=、<=、!= )

1.3.5 逻辑运算符

1、&& 逻辑与

两个条件都为真,则结果为真

if((a>b) && (a<c))

2、|| 逻辑或

两个条件至少有一个为真,则结果为真

if((a>b) || (a<c))

3、! 逻辑非

if(!(a>b))

{

}

1.3.6 位运算符

1、&按位与

任何值与 0 得 0,与 1 保持不变

使某位清 0

0101 1011 &

1011 0100

0001 0000

2、| 按位或

任何值或 1 得 1,或 0 保持不变

0101 0011 |

1011 0100

1111 0111

3、~ 按位取反

1 变 0,0 变 1

0101 1101 ~

1010 0010

4、^ 按位异或

相异得 1,相同得 0

1001 1100 ^

0101 1010

1100 0110

5、位移

>>右移

<< 左移

注意右移分:逻辑右移、算数右移

(1)右移

​ 逻辑右移 高位补 0 低位溢出

​ 算数右移 高位补符号位,低位溢出

(2)、左移**<< 高位溢出,低位补 0

​ 5<<1

1.3.7 条件运算符号

()?():()
A?B:C;
如果?前边的表达式成立,整个表达式的值,是?和:之//间的表达式的结果否则是:之后的表达式的结果

1.3.8 逗号运算符

(… , … , …)

例如:A = (B , C , D)

1.3.9 自增自减运算符

++ ++i 先加 ,后用

--

i++ i–

1.3.10 运算符优先级表

1691333205109

1.4 控制语句相关关键字

1、 if 语句

形式:

  1. if(条件表达式)

{ //复合语句,若干条语句的集合

语句 1;

语句 2;

}

如果条件成立执行大括号里的所有语句,不成立的话大括号里的语句不执行

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main()
{
int a=10;
if(a>5)
{
printf("a>5\n");
}
return 0;
}
  1. if(条件表达式)

{

语句块 1

}

else

{

语句块 2

}

if else 语句的作用是,如果 if 的条件成立,执行 if 后面{}内的语句,否则执行 else 后的语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main()
{
int a=10;
if(a>5)
{
printf("a>5\n");
}
else
{
printf("a<=5\n");
}
return 0;
}
  1. if(条件表达式)

{

}

else if(条件表达式)

{

}

else if(条件表达式)

{

}

else

{

}

在判断的时候,从上往下判断,一旦有成立的表达式,执行对应的复合语句, 下边的就不再判断了,各个条件判断是互斥的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
int main(void)
{
char ch;
float score = 0;
printf("请输入学生分数:\n");
scanf("%f",&score);
if(score<0 || score >100)
{
printf("你所输入的信息有错\n");
return 0;
}
else if( score<60)
{
ch = 'E';
}
else if ( score < 70 )
{
ch = 'D';
}
else if ( score < 80 )
{
ch = 'C';
}
else if ( score < 90 )
{
ch = 'B';
}
else
{
ch = 'A';
}
printf("成绩评定为:%c\n",ch);
return 0;
}

2、 switch 语句

switch(表达式)//表达式只能是字符型或整型的(short int int long int)

{

case 常量表达式 1:

语句 1;

break;

case 常量表达式 2:

语句 2;

break;

default:

语句 3;

break;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
int main(int argc, char *argv[])
{
int n;
printf("请输入一个 1~7 的数\n");
scanf("%d",&n);
switch(n)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
default:
printf("您的输入有误,请输入 1~7 的数\n");
break;
}
return 0

1.4.2 循环控制语句相关的关键字

1、 for 循环

for(表达式 1;表达式 2;表达式 3)

{//复合语句,循环体

}

第一次进入循环的时候执行表达式 1,表达式 1 只干一次,

表达式 2,是循环的条件,只有表达式 2 为真了,才执行循环体,也就是说

每次进入循环体之前要判断表达式 2 是否为真。

每次执行完循环体后,首先执行表达式 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int main(void)
{
int i;
int sum=0;
for(i=1;i<=100;i++)
{
sum = sum+i;
}
printf("sum=%d\n",sum);
return 0;
}
//例 26:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%d*%d=%d ",i,j,i*j);
}
printf("\n");
}
return 0;
}

2、 while 循环

  1. 形式 1:

while(条件表达式)

{//循环体,复合语句

}

进入 while 循环的时候,首先会判断条件表达式是否为真,为真进入循环体,否则退出循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main(void)
{
/* 2) 形式 1:
while(条件表达式)
{//循环体,复合语句
}
*/
int i=1;
int sum=0;
while(i<=100)
{
sum = sum+i;
i++;
}
printf("sum=%d\n",sum);
return 0;
}
  1. 形式 2 : do

do{//循环体

}while(条件表达式);

先执行循环体里的代码,然后去判断条件表达式是否为真,为真再次执行循环体,否则退出循环

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main(void)
{
int i=1;
int sum=0;
do
{
sum = sum+i;
i++;
}while(i<=100);
printf("sum=%d\n",sum);
return 0;
}

形式 1 和形式 2 的区别是,形式 1 先判断在执行循环体,形式 2 先执行循环体,再判断

break 跳出循环

continue 结束本次循环,进入下一次循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main(void)
{
int i;
int sum=0;
for(i=1;i<=100;i++)
{
if(i==10)
break;//将 break 修改成 continue 看效果
sum = sum+i;
}
printf("sum=%d\n",sum);
return 0;
}
return 0;
//返回函数的意思。结束 return 所在的函数,
//在普通函数中,返回到被调用处,在 main 函数中的话,结束程序

3、 goto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("test000000000000000000\n");
printf("test1111111111111111\n");
goto xiutao;
printf("test222222222222222222\n");
printf("test3333333333333333\n");
printf("test444444444444444444444\n");
printf("test55555555555555555555\n");
xiutao:
printf("test66666666666666666\n");
return 0;
}