day3
1.数据类型的转换
1.隐式转换 --> 操作系统
(1)在表达式中
eg:
5 / 2 = 2
5 / 2.0 = 2.5
(2)在赋值(=) , 等号右边的会自动转换为等号左边的数据类型
2.显示转换(强制数据类型转换) -->程序员
(强制数据类型)数据;
注意转换有要求:
(1)低精度转高进度,没问题
(2)高精度转低精度,需要判断
2.数据类型补充 bool
#include <stdbool.h>
bool
true: 真
false:假
3.常量
常量是指在程序运行期间其数值不发生变化的数据。
3.1整型常量
整型常量通常简称为整数
十进制数 3356
八进制数 06434
十六进制数 0xd1c
3.2浮点型常量
小数
3.14 5.22222 520.99 13.14
指数常量
1.176e+10 表示 1.176×10^10
- 3.5789e-8 表示 -3.5789×10^-8
3.3字符型常量
所谓字符常量是指一个单一字符, 其表示形式是由两个单引号包括的一个字符。
例如,
‘A’, ‘a’, ‘Q’, ‘0’, ‘9’, ‘+’, ‘:’, ‘?’, ‘$’ 都是字符常量。
3.4字符串常量
字符串常量是指用双引号括起来的一串字符来表示的数据。
"a" "xxxx\0" "123456\0" "abc\0"
"hello\0 world"
字符串的结束标志: '\0'
字符串的有效字符:第一个 '\0' 前面的字符
字符串的长度:有效字符的个数
3.5 标识常量
宏定义
4.变量
在程序运行过程中,可以改变的一个量
一般形式:
存储类型 数据类型 变量名;
变量名:
变量名的命名规则和标识符命名规则一致。
数据类型:
char
short
int
long
long long
float
double
存储类型:
1.auto 自动存储类型
由操作系统自动分配空间,自动回收空间
2.static 静态存储类型
(1)修饰局部变量
a、延长局部变量的生命周期,随程序结束而结束
b、只做一个初始化
c、存储位置从栈区变为全局静态区
(2)修饰全局变量
a、限制变量只能在本文件中使用(限制变量作用域只能在本文件中)
3.register 寄存器存储类型
存在寄存器中,优点:快
注意:寄存器资源非常有限,如果申请失败,自动转为 auto
4.extern 外部存储类型
引入其他文件的变量
1.c 2.c
1.c
extern int a;
printf("%d\n", a);
2.c
int a = 1314520;
gcc 1.c 2.c -o app
./app --------------------- 1314520
局部变量:在函数、模块中定义的变量
(1)作用域:在函数内部、模块内部
(2)栈区
(3)生命周期:随函数、模块的结束而结束
(4)未初始化,里面存的值是随机值
全局变量:在main函数外定义
(1)作用域:整个文件
(2)全局静态区(全局变量区)
(3)生命周期:随main函数(程序)结束而结束
(4)未初始化,里面存的值是0
4.1变量的 初始化 和 赋值
1.初始化
int a = 10;
2.赋值
int a; //变量的定义
a = 10; //变量的赋值
练习
1.交换两个变量的值
int a = 10, b = 20;
int temp;
temp = a;
a = b;
b = temp;
printf("%d %d\n", a, b);
5.输入输出函数
5.1 getchar
字符输入函数getchar
函数原型: int getchar(void)
功能:从键盘读一字符
返值:正常,返回读取的ASCII 值;出错或结束键盘输入,返回-1
eg:
char ch;
ch = getchar();
5.2 putchar
函数原型: int putchar(int c);
参数: c为字符常量、变量或表达式
功能:把字符c输出到终端上
返值:正常,为显示的代码值;
eg:
int ch = 'a';
putchar(ch); // a
putchar('a' + 1); //b
putchar('a' - ' '); //A
5.3 printf
格式:printf(“格式控制串”,输出表)
功能:按指定格式向显示器输出数据
输出表:要输出的数据
格式控制串:包含两种信息
格式说明:%[修饰符]格式字符,用于指定输出格式
普通字符:原样输出
int a=567;printf ( "%d",a); //567
int a=255;printf("%x",a); //0xff
int a=65;printf("%o",a); //0101
int a=567;printf("%u",a); //567
char a=65;printf("%c",a); //A
printf("%s","ABC"); //ABC
float a=567.789;printf("%e",a); //5.677890e+02
float a=567.789;printf("%f",a); // 567.789000
float a=567.789;printf("%g",a); // 567.789
printf("%%"); //%
5.4 scanf
格式: scanf(“格式控制串”,地址表)
功能:按指定格式从键盘读入数据,存入地址表指定
存储单元中,并按回车键结束
返值:正常,返回输入数据个数
地址表:变量的地址,常用取地址运算符&
结束标志:
回车、空格、tab、超过域宽、错误输入
5.5 gets
char *gets(char *s);
char str[32];
gets(str);
5.6 puts
int puts(const char *s);
char str[32] = "hello world";
puts(str);
脏字符
前面有一个scanf
有影响的情况
(1)获取字符
(2)字符串输入 --- > gets
解决方式:
(1)getchar()
(2)抑制符 *