C语言前置细碎知识
- C语言常见概念
- main函数
- 字符和ASCII
- 字符串和\0
- 转义字符
- 数据类型和变量
- 数据类型
- 变量
- 算术操作符
- +,-,*
- /
- %
- 赋值操作符
- 单目操作符
- 强制类型转换
- scanf和printf介绍
- ==printf==
- 常见占位符
- 输出格式
- 限制长度
- 控制小数点位数
- 显示正负号
- 输出部分字符串
- ==scanf==
C语言常见概念
好久没有看C语言,决定这个暑假在学新的内容先将前面的复习一下,并补缺之前没有这里的笔记。同时这也是第一次使用Markdown进行写文章,有点不熟练,多多包涵!
main函数
main函数是程序的一个入口,也可以叫做主函数;前面的int代表返回整形的类型值,与return 0相呼应;main函数有且仅有一个。
字符和ASCII
字符是指键盘敲的任意键,每个键都是一个字符。它是由单引号括起来的。每一个字符都有一个ASCII值,以方便字符存储在内存之中。
ASCII需要着重知道的是常见的ASCII值:
A~Z->65~90
a~z->97~122
0~9->0~9
\n->10
可以发现大写字母和小写字母相差32,同时0-31是不可打印字符。
字符串和\0
字符串是指有一系列字符组成的一串字符,用双引号括起来。当然字符串也可以是一个字符组成的的字符串。字符和字符串主要的区别是二者是被单引号还是双引号所包括。
\0是一个转义字符,是隐藏在字符串末尾的一个字符,它是字符串的结束的标志。
转义字符
| 转义字符 | 作用 |
|---|---|
| \r | 让光标回到开头 |
| ? | 表示问号,防止在书写多个问号时,被解析成三字母词 |
| \n | 换行操作 |
| ’ | 表示单引号 |
| " | 表示双引号 |
| \ | 表示一个反斜杠\ |
| \b | 退格键,光标退回一个字符,但不删除这个字符 |
| \t | 移动到下一个制表符,制表符一般是4/8的倍数 |
| \ddd | 表示一到三位的8进制数字 |
| \xdd | 表示两个16进制的数字 |
| \0 | 字符串结束的标志 |
| %% | 表示一个百分号 |
数据类型和变量
数据类型
变量
变量的创建=数据类型+变量名(变量名是由字母、数字、下划线组成的,同时数字不能作为开头)。
变量的类别:分为全局变量和局部变量。遵循局部变量优先原则。
创建变量名的要求:
- 变量区分大小写。
- 变量不能是关键字。
- 变量名尽量有意义
算术操作符
+,-,*
和我们平常数学使用的一样。
/
这个稍有点不一样,如果除号左右两边的操作数均是整数的话,最后的结果就是整数(相当于取整函数的意思);如果左右操作数至少有一个是浮点型,那么最后的结果就是浮点型。
%
取模运算,要求左右操作数必须是整数,运算就是取余。当左右操作数中有负数时,余数的正负要看看左操作数,左操作数是正,那么余数就是正;左操作数是负,那么余数就是负。
赋值操作符
操作符即为=,就是把右边的值赋给左边的值。
int a =10;//初始化 a=20;//赋值- 连续赋值
a=b=c+3;//前提是已经初始化好a,b,c - 复合赋值
a+=3;//等价于 a=a+3;
单目操作符
前置运算和后置运算。前置运算是指:++a/- -a,规则是先计算,后赋值。
后置运算是指:a++/a- -先赋值,后计算。
inta=10;intb=0;intc=0;b=a++;printf("%d\n",a);//11printf("%d\n",b);//10c=++a;printf("%d\n",a);//12printf("%d\n",c);//12强制类型转换
格式:(要强转为的数据类型)变量;
inta=10;floatb=3.2;a=(int)a+b;//这里a+b是浮点型,但是要赋值的a是整型,需要将浮点型强转为整型scanf和printf介绍
printf
inta=0;printf("%d\n;a");常见占位符
| 占位符 | 表示 |
|---|---|
| %d | 十进制整数 |
| %u | 十进制无符号int类型 |
| %ld | 十进制 long int 类型 |
| %hd | 十进制short 类型 |
| %lu | 十进制无符号long int 类型 |
| %lld | 十进制 long long int 类型 |
| %o | 八进制整数 |
| %x | 16进制整数 |
| %c | 代表字符 |
| %s | 字符串 |
| %f | 表示单精度浮点型 |
| %lf | 表示双精度浮点型 |
| %Lf | 表示 long double 类型 |
| %p | 代表地址 |
| %zu | 代表size_t 类型 |
输出格式
限制长度
限制的是最少长度。
inta=123456;intb=123456;intc=1234;printf("%d\n",a);//123456printf("%5d\n",b);//123456printf("%5d\n",c);//_1234printf("%-5d\n",c);//1234_- 当要输出的数字长度大于要求的限制长度,那么就要原样输出。
- 当要输出的数字长度小于要求的限制长度,那么就要补空格。这就分左对齐还是右对齐了。%-5d要求左对齐,%5d要求右对齐。代码中最后两行的结果真实中并不代下划线,只是为了清晰表达是补的空格而使用的这种方法。
控制小数点位数
inta=4.5678;printf("%f\n",a);//4.567800printf("%.2f\n",a);//4.56printf("%3.2f\n",a);//4.56- 小数字点后面小数字可以用来限制小数点的位数,同时也可以结合限定宽度来使用。
显示正负号
inta=10;printf("%+d\n",a);//+10printf("%-d\n",a);//-10- 可以通过在百分号的后面加上正负号来表示这个数的正负。
输出部分字符串
printf("%.5s\n",abcd);//_abcd- %.[m]s其中[m]为一个数字,即限定的宽度。
scanf
inta=0;scanf("%d",&a);- 与printf较为类似均分为两个参数。左边为占位符,右边是要输的值。不同的是printf是将值输出到屏幕上,而scanf是将值输入到计算机内存里,同时第二个参数是必须要加取地址符号&。
- 返回值是成功读取的次数。若在读取之前,发生读取错误或者是读到文件末尾就会返回EOF(-1)。
- scanf 除了%c 会自动忽略空白字符。
- 说一个我新见到的占位符%[ ]在方括号内指定一组字符串,不匹配就会停止。
- scanf 是不会检测字符串是否超出了数组长度。所以通过加上限定,来控制数组防止溢出。
charname[10];scanf("%10s",name);- 赋值忽略符。用户可能会输入不符合规定的字符。例如下方代码,如果输入的是2026-7-5,那么会被正确解析,如果输入的是2026/7/5,那么就不会被正确解析,就会停止。因此提供了赋值忽略符*,来防止出现这种错误。只需要将*放在占位符百分号后面就可以了。
intyear=0;intmonth=0;intday=0;scanf("%d-%d-%d",&year,&momth,&day);scanf("%d%*c%d%*c%d",&year,&momth,&day);//加了赋值忽略符- 要想结束scanf,可以按三次ctrl+z来结束scanf。