2025_3_30C语言学习

2025_3_30

今天学习了不少东西,感觉马上猪脑过载

学习了变量的创建、分类、存储,了解了算术操作符、单目操作符、赋值操作符,强制类型转换、printf和scanf的用法

一.变量

1.变量的创建:格式为—数据类型+变量名,在变量创建时给一个值,这种操作叫做初始化(不叫赋值) ,例如unsigned int a = 100;

2.变量的分类:局部变量(大括号内定义)和全局变量(大括号外定义)

当局部变量和全局变量同名的时候,局部变量优先使⽤

  1. 变量的存储:局部变量是放在内存的栈区全局变量是放在内存的静态区,除此之外,内存中还有堆区,用于动态内存管理

二.算术操作符

1.分类:+ - * / %(求模/余)

都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双⽬操作符

2./的注意事项:除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数

例如:#include<stdio.h>

int main()

{

 printf("%d\n", 10 / 4);

 printf("%d\n", 10.0 / 4);

 printf("%f\n", 10.0 / 4);

 return 0;

}       输出结果为2;0;2.500000

3.%的注意事项:这个运算符只能于整数,不能⽤于浮点数负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定

三.赋值操作符

1.分类:=和复合赋值

连续赋值:顺序-从右向左依次赋值

2.复合赋值符:+= -= *= /= %= >>= <<= &= |= ^=

四.单目操作符:++和-- ++是⼀种⾃增的操作符,⼜分为前置++和后置++,--是⼀种⾃减的操作符,也分为前置--和后置--

1.前置++(--):先+1(-1),后使⽤

2.后置++(--):先使⽤,后+1(-1)

例如:int main()

{

 int a = 1;

 int b = 0;

 

 b = a++;

 printf("%d\n", a);

 printf("%d\n", b);

 b = ++a;

 printf("%d\n", a);

 printf("%d\n", b);

 return 0;

}    输出结果:2;1;3;3  (--也是类似)

五.强制类型转换

1.形式:(类型)

2.例如:(int)3.14将3.14强制转换为3

六.printf

1.基础用法是在标准库的头⽂件stdio.h定义的。使⽤这个函数之前,必须在源码⽂件头部引⼊这 个头⽂件。

不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换⾏为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符\n。

2.限定宽度(最小宽度):%5d表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。

输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空格,可以在占位符的%的后⾯插⼊⼀个-号。

对于⼩数,这个限定符会限制所有数字的最⼩显⽰宽度

printf()不对正数显示+号,只对负数显⽰-号。如果想让正数也输出+号,可

以在占位符的%后⾯加⼀个+
3.限定小数位数:希望⼩数点后⾯只保留两位,占位符可以写成%.2f

这种写法可以与限定宽度占位符,结合使⽤:%6.2f

最⼩宽度和⼩数位数这两个限定值,都可以⽤*代替,通过printf()的参数传⼊。

3.输出部分字符串:%m占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤%.ms指定输出 的⻓度,其中m代表⼀个数字,表⽰所要输出的⻓度

七.scanf

1.基础用法:原型定义在头⽂件stdio.h

2.变量前⾯必须加上&运算符(指针变量除外),因为scanf()传递的不是值,⽽是地址, 即将变量的地址指向用户输⼊的值

如果这⾥的变量是指针变量(⽐如字符串变量),那就不⽤加&运算符

3.输入多个变量:scanf(%d%d%d%d\n,&a,&b,&c,&d);处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等

4.解读⽤户输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌

例如:int main()

{

 int x;

 float y;

 scanf("%d", &x);

 printf("%d\n", x);

 scanf("%f", &y);

 printf("%f\n", y);

}      输入:-12.08e-3输出结果:-12;0.000080

  1. scanf的返回值返回值是—个整数,表⽰成功读取的变量个数。如果没有读取任何项,或者匹配失败,则返回0。如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量 EOF (-1)

八.占位符

1.printf的占位符

占位符的第⼀个字符⼀律为百分号%,第⼆个字符表⽰占位符的类型

列举:%a:⼗六进制浮点数,字⺟输出为⼩写。

%A:⼗六进制浮点数,字⺟输出为⼤写。

%c:字符。

%d:⼗进制整数。

%e:使⽤科学计数法的浮点数,指数部分的e为⼩写。

%E:使⽤科学计数法的浮点数,指数部分的E为⼤写。

%i:整数,基本等同于%d

%f:⼩数(包含float类型和double类型)。//float %f double - %lf

%g:6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的e为⼩写。

%G:等同于%g,唯⼀的区别是指数部分的E为⼤写。

%hd:⼗进制 short int 类型。

%ho:⼋进制 short int 类型。

%hx:⼗六进制 short int 类型。

%hu:unsigned short int 类型。

%ld:⼗进制 long int 类型。

%lo:⼋进制 long int 类型。

%lx:⼗六进制 long int 类型。

%lu:unsigned long int 类型。

%lld:⼗进制 long long int 类型。

%llo:⼋进制 long long int 类型。

%llx:⼗六进制 long long int 类型。

%llu:unsigned long long int 类型。

%Le:科学计数法表⽰的 long double 类型浮点数。

%Lf:long double 类型浮点数

%n:已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。

%o;⼋进制整数。

%p:指针(⽤来打印地址)。

%s:字符串。  

%u:⽆符号整数(unsigned int)。

%x:⼗六进制整数。

%zd:size_t类型

%%:输出⼀个百分号。

  1. scanf的占位符:

上⾯所有占位符之中,除了%c以外,都会⾃动忽略起⾸的空⽩字符。%c不忽略空⽩字符,总是返 回当前第⼀个字符,⽆论该字符是否为空格。

%c:字符。

%d:整数。

%f:float类型浮点数。

%lf:double类型浮点数。

%Lf:long double类型浮点数。

%s:字符串。

%[]:在⽅括号中指定⼀组匹配的字符(⽐如%[0=9]),遇到不在集合中的字符,匹配将会停⽌。

如果要强制跳过字符前的空⽩字符,可以写成scanf(%c&ch)%c前加上⼀个空格,表跳过零个或多个空⽩字符

占位符%s,它其实不能简单地等同于字符串。它的规则是,从当前第⼀个⾮空⽩

字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。

因为%s不会包含空⽩字符,所以⽆法⽤来读取多个单词,除⾮多个%s⼀起使⽤。这也意味着,scanf()不适合读取可能包含空格的字符串,⽐如书名或歌曲名。另外,scanf()遇到%s占位符,会在字符串变量末尾存储⼀个空字符\0 

scanf()将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时,很可能会超过数组的边界,导致预想不到的结果。为了防⽌这种情况,使⽤%s占位符时,应该指定读⼊字符串的最⻓⻓度,即写成%[m]s ,其中的 [m] 是⼀个整数,表⽰读取字符串的最⼤⻓度,后⾯的字符将被丢弃。

3,赋值忽略符

如果⽤户输⼊2020-01-01,会正确解读出年、⽉、⽇。那么⽤户可能输⼊其他

格式,⽐如2024/01/01这种情况下,scanf()解析数据就会失败。 为了避免这种情况,scanf()提供了⼀个赋值忽略符* 

只要把*加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值