对于printf(一个库函数):
print(打印) +format(格式化) --> printf 可定制的输出文本格式
使用时要引用头文件 <stdio.h>
1.占位符
占位符的第一个字符一律为%,第二个字符表示占位符的类型。
printf("abcd"); // 打印字符串
printf("%s","abcd");// 这两种写法的效果一样,字符串的末尾自带‘\0'
打印字符 eg.’w‘ (q的ASCII码值是88):
方法一: printf("%c" , 'x');
方法二:printf("%c",88);
方法三:printf("%c",'\130');
(ps.方法二与方法三实质上就是ASCII码值十进制与八进制的表现形式)
PS.因为计算机中的数据均以二进制的形式存储起来,有人就为字符编号码,故字符的本质就是ASCII码值,即用相应的ASCII码值就可以打印相对应的字符。
printf("%d",2); // 打印整型
printf("%f",i); //打印float类型的数据
printf("%lf",i); // 打印double类型的数据 :
printf("%zd",sizeof(int)); //打印sizeof的返回值 ,ps.sizeof的单位是byte
%e 、%E --> 使用科学计数法的浮点数
printf("%e",123.4567); //1.234567e+02
printf("%dE:,123.4567); //1.234567E+02
%hd --> 十进制的short int 类型
%ld --> 十进制的 long int 类型
%lu --> unsigned long int 类型
%Lf --> long double 类浮点类型
%p --> (指针)用来打印地址
%u --> 无符号整型 unsigned int
%x --> 十六进制整数
%zd --> size_t类型 (sizeof的返回值)
2.printf()允许限制占位符的最小宽度
a.%5d --> 表示这个占位符的宽度至少为5,且默认向右对齐。如果元素不足就用空格补上
想要改成向左对齐--> 在 ' % ' 后面添加一个 ' - ' --> %-5d
b.在 ' % ' 后面添加一个 ' + ' 就可以让数值总是显示正负号
printf("%5d",123); // 输出为" 123" 限制了占位符的最小宽度,且默认向右对齐,元素不够,空格来补
printf("%5d",123456) ; 输出为"123456" 当元素的个数比占位符的最小限制数大时,照正常的输出
printf("%-5d",123); //输出为"123 " ;在%之后加一个- ,就可以改成向左对齐
printf("%+5d",123); //输出为" +123"
printf("%+5d",-123); //输出为" -123"
c.对于小数,此限定符会限制所有数字的最小显示宽度。(小数部分的位数与类型有关)
printf("%10f",12.34); //输出为" 12.340000" 小数点之后只有6位,
//而元素不够就会在补空格,默认左对齐
d. 专门限定小数点后的位数(这里与整数不同,小数会四舍五入)
printf("%7.3f",12.3); //输出为" 12.300"
e.动态地定义占位符所控制的宽度 --> 用 ' * '
int i = 0;
int j = 0;
scanf("%d %d", &i , &j );
printf("%*.*f", i , j , 12.3 );
3.printf() 的返回值是成功打印元素的个数
printf("%d",printf("%d",123)); //输出为"1234"
对于转义字符:
1.\? -->三字母词 避免将 ??) 编译成 ] --> 写成\?\?)
2.\' --> printf("%c",'''); 计算机会将前两个’认为一对,而无法成功打印‘ --> 正确写法 printf("%c",'\'');
3.\'' -->与上一点同理
3.\\ -->用于表示一个反斜杠,防止它被解释为一个转义序列符
4.\a -->警报
5.\b -->退格符,光标退回一个字符,但是不会删除这个字符(除非'\b' 后面有元素)
有点像打字时选择了前一个字符,当你要往后继续输入时,后面输入的这个字符会将选择区域的字符给取代,后面输入的这个字符会将\b前一个字符给取代
可以发现 g 没了
6.\f -->换页符:光标移动到下一页,但是在现代的系统上已经反映不出来了,行为改成类似于 \v
7.\n -->换行符
8.\r -->回车符,光标移动到同一行开头
9.\t -->制表符,光标移动到下一个水平制表位,通常是下一个的4或者8倍。相当于按了键盘上的Tab键,通常宽度相当于8个或者4个空格的位置。
这里看到空格的数目在随着\t前面字符的增加而减少
如果\t前的字符数大于8呢?(下面数空格可以根据下排的字符进行对应)
"ilovecho"这8个字符为一组,而后面的"ng"与6个空格为一组.
10.\v -->垂直分割符,光标会移动到下一个垂直指标位,通常是下一行的同一列
11.\ddd -->ddd表示1-3个八进制的数字
eg.
八进制130-->十进制88-->ASCII码值所对应的字符
Tips:要注意八进制的数 :0-7
上图,存在'\61'、'8'、'\223'这三个字符
12.\xdd -->dd表示2个十六进制的数字(与\ddd同理)
关于ASCII码值:
梳理:(按十进制的ASCII码值)
0-31 -->不可打印字符
10 --> '\n'
48-57 -->数字0-9
65-90 -->大写字母A-Z
97-122 -->小写字母a-z
c语言的32个关键字:
1.auto :自动的意思,所有的局部变量之前都会有一个auto,只不过被省略掉了。
int a = 0; --> auto int a = 0 ;
因为局部变量进入它所在的作用域便会自动创建,而出了这个作用域就会自动销毁-->a位自动变量
故而所有局部变量均为auto 类型,且auto 可以省略
2.const :用来修饰变量,表示常属性。(ps.常属性:不能被更改的属性)
3.与类型相关:
内置类型:char short int long long long float double signed unsigned
(Tips: 1.int 默认为 signed int ;而char 要看系统版本,有可能默认char 为signed char 也有可能为 unsigned char
2.signed 表示正负数均可 ;unsigned 只能表示正整数)
自定义类型: enum --枚举
struct -- 结构体
union -- 联合体(共用体)
其他:void -- 无的意思(一般用于函数的返回值类型,函数的参数)
sizeof -- 计算大小(在内存中所占空间)的关键字
typedef -- 类型重命名
4. extern -- 申请外部符号
register -- 寄存器的关键字(限制一个变量-->可以将这个变量存储到寄存器之中)
如上图。CPU作为中央处理器,计算的数据是从寄存器中取得的。当寄存器在处理某些数据的时候,内存中的数据就可以往高速缓存中拿,而高速缓存中的数据也可以往寄存器中拿(保证大部分的数据能在寄存器中被找到)-->这样就可以大大提升CPU的计算速度
我们在编写的时候,可以创建一个register变量,将我们认为会被大量使用的数据放到寄存器之中-->但是仅为一个建议作用,能否将这个数据放到寄存器中还是编译器说了算。
static -- 静态的(可以修饰函数跟变量)-->决定了一个变量的存储位置(若用static,那么此变量就存在静态区)
return -- 函数的返回值
c语言的语句分类:
空语句、表达式语句、函数调用语句、复合语句、控制语句
1.空语句:当格式要求在某个位置需要放置一个语句的时候,但是又不想让它执行任何-->就可以使用空语句-->这个语句不需要做任何事
2.表达式语句 :
int a = 1;
int b = 2;
b = a + 6; //表达式语句,从右往左运算--> b= 7;
3.函数调用语句
#include<stdio.h>
int Add(int a,int b)
{
return a+b;
}
int main()
{
int a = 1;
int b = 2;
int ret = Add(a,b); //函数调用语句
printf("%d",ret); //函数调用语句
return 0 ;
}
4.复合语句
成对括号中的代码所构成的一个代码块
5.控制语句
控制程序的执行流程,以实现程序的各种结构方式
a.条件判断语句(分支语句) : if 语句 , switch 语句
b.循环执行语句 : do while 语句、 while语句 、for 语句
c.转向语句 : goto 语句、break 语句 、continue 语句、 return 语句