栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

小菜鸡的C语言学习记录

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

小菜鸡的C语言学习记录

小菜鸡的C语言学习记录
  • 学习内容:
  • 学习目标:
  • 学习产出:
    • 1:C语言编程的七个步骤
    • 2:C语言源代码到可执行文件过程
    • 3:C语言基本框架
    • 4:C语言数据类型
    • 5:printf() && scanf()
    • 6:运算符
    • 7:表达式
    • 8:副作用 和 序列点 :star:
    • 9:类型转换
    • 10 分支
    • 11:循环

学习内容:
  1. C语言基本语法
学习目标:
  • 下周开始前完成 C语言基础知识
学习产出: 1:C语言编程的七个步骤
  1. 定义程序的目标
  2. 设计程序
  3. 编写代码
  4. 编译
  5. 运行程序
  6. 测试和调试代码
  7. 维护和修改程序
2:C语言源代码到可执行文件过程

3:C语言基本框架
#include 

int main(void)
{
	// 执行语句;
	return 0;
}
4:C语言数据类型

存储方式分为两大类: 1、整数类型 2、浮点数类型


C语言数据类型关键字
int long short unsigned char float double signed void _Bool _Complex _Imaginary

C语言给变量提供值的方法 [ 3种 ]

  1. 赋值 [ 先声明变量,之后赋值 ]

    int x;
    x = 1;
    
  2. 初始化 [ 声明变量的同时对齐赋值 ]

    int x = 1, y = 2;
    
  3. 通过函数获得值 [ 如 scanf() ]

    int x;
    scanf("%d", &x);
    

    ​ 转义序列表

    转义序列含义
    a警报
    b退格
    f换页
    n换行
    r回车
    t水平制表符
    v垂直制表符
    反斜杠
    '单引号
    "双引号
    ?问号
    xx八进制值 [ xx 写要表示的八进制值 ]
    xhh十六进制值 [ hh 写要表示的十六进制值 ]

    C语言基本数据类型

    int 和 其他整数类型
    char
    float | double | long double
    _Bool
    可移植类型
    复数和虚数类型
    

    由于C语言数据类型的大小受各种因素的影响,所以还是用类似下面的语句测试你自己电脑的情况为好。

    #include 
    
    int main(void)
    {
    	// 这边输出的是 int 类型的大小,其他类型类似,大小单位是字节(bytes)
    	printf("int 类型的大小是 %zdn", sizeof(int));
    	printf("short 类型的大小是 %zdn", sizeof(short));
    	printf("long int 类型的大小是 %zdn", sizeof(long int));
    	printf("long long int 类型的大小是 %zdn", sizeof(long long int));
    	printf("unsigned int 类型的大小是 %zdn", sizeof(unsigned int));
    	printf("unsigned long int 类型的大小是 %zdn", sizeof(unsigned long int));
    	printf("unsigned long long int 类型的大小是 %zdn", sizeof(unsigned long long int));
    	printf("unsigned short 类型的大小是 %zdn", sizeof(unsigned short));
    	printf("float 类型的大小是 %zdn", sizeof(float));
    	printf("double 类型的大小是 %zdn", sizeof(double));
    	printf("long double 类型的大小是 %zdn", sizeof(long double));
    	return 0;
    }
    
    
5:printf() && scanf()

​ printf()如果转换说明与实际数据类型不匹配会导致错误的原理

printf()的返回值是其打印字符的个数,如果输出错误返回一个负值

printf() 输出 字符串 太长了想换行
方法1:用反斜杠 ( ) 和 Enter(或 Return) 键组合断行,但是注意第二行要紧贴最左边,不然空格会输出
方法2:根据字符串 “xee"“we1” – > “xeewe1” 这个特性操作

​ printf()转换说明

转换说明输出
%a、%A浮点数、十六进制数和p记数法(大小写的区别)
%c单个字符
%d、%i有符号十进制整数
%e、%E浮点数,e记数法(大小写的区别)
%f浮点数,十进制记数法
%g、%G根据值的不同,自动选择%f或%e。%e格式用于指数小于-4或者大于等于精度时(大小写的区别)
%o无符号八进制整数
%p指针
%s字符串
%u无符号十进制整数
%x、%X无符号十六进制整数(大小写的区别)
%%打印百分号

​ printf()转换说明修饰符

修饰符含义
标记五种: - + 空格 # 0
数字最小字段宽度,不能容纳会自动扩张
.数字精度

各种数据类型的修饰符 如 long long int 写成 printf(“%lld”, x);

有点难理解的一些

修饰符含义
%hhdchar
%zdsizeof()返回的类型 size_t
%hdshort int

​ 修饰符中五个标记的解释

标记含义
-左对齐
+如果为正数在值前面显示正号,负数则显示减号
空格有符号值若为正则在值前面显示前导空格(不显示任何符号);若为负则在值前面显示减号并覆盖一个空格
#把结果转换为另一种显示格式,如转换成八进制显示则 printf(“%#od”, x);这样100就输出成 0144 了
0前导 0 填充字段宽度,对于整数格式如果出现 - 标记或指定精度则忽略该标记

​ scanf()转换说明

和 printf() 基本一样,除了 float 和 double 类型,在 printf() 里float和double都用 %f 而在scanf()里float用%f而double用%lf

​ 转换修饰符

转换说明含义
*抑制赋值
数字最大字段宽度,输入到达最大字段宽度或空白字符停止

之后就是各种数据类型的修饰符,差不多~

*printf() 与 scanf() 的 修饰符的区别

1.printf()里的*是用于代替字段宽度,如 printf(“%d”, 这边写字段宽度, 这边写对应的值)

2.scanf()里的*用于跳过对应的输入项,如 scanf("%*d %d %*d", &x) 这只会把第二个输入的值赋值给x

scanf() 会在第一个空白字符或字段结尾时停止读入,如果scanf()的转换说明和实际输入的不同,scanf() 会无法进行读入并把输入放回输入,所以就会导致下一次输入得到的是上次失败的输入造成奇怪的错误!!!

scanf() 读取的时候会自动跳过空白,但是 char 类型的输入有例外
如 scanf(“%c”, x) 和 scanf(" %c",x)
其中, 第一个是从输入的第一个字符开始读取而第二个是从第一个非空字符开始读取

scanf() 的返回值是 scanf() 函数成功读取的项数,没读取到输出 0, 检测到文件结束输出 EOF

6:运算符

专业术语:数据对象 左值 右值
数据对象: 用于存储值的数据存储区域统称为数据对象
左值( 对象定位符 ):指定一个对象,可以引用内存中的地址,并且是一个可修改的值
右值:能赋值给左值且自身不能满足成为左值的条件

​ 运算符

运算符 - 优先级递减结合律
++ (后缀) --(后缀) () [] {}(复合字面量) . ->从左到右
++(前缀) --(前缀) - (单目的) +(单目的) ! ~ *(解引用) &(取地址) sizeof() _Alignof(类项名)从右到左
(类型名)从右到左
* / %从左到右
+ (二元运算的) -(二元运算的)从左到右
<< >>从左到右
<= >=从左到右
< > <= >=从左到右
== !=从左到右
&从左到右
^从左到右
|从左到右
&&从左到右
||从左到右
? : (条件表达式 三目运算符)从右往左
= *= /= += -= <<= >>= &= |= ^=从右往左
,(逗号运算符)从左往右

注意:

  1. 递增递减运算符( ++ – ) 只能作用于一个左值

  2. 求模 % 的实际操作是 --> a % b == a - (a / b) * b

  3. / 运算是趋向 0 取整,如 3.7 --> 3, -3.7 --> -3

  4. x = (4 + x++) + (3 * x++) 这种语句貌似没问题,但是其实有问题,应为C语言并没有规定是先运算 + 号左边的表达式还是加号右边的表达式,所以当先运算左边 和 先运算右边会出现不同的结果,要避免这样写

7:表达式

表达式是有值的,很奇怪的一句话但是看完实例就懂了,最好不要这样写但是要看得懂这样的(我觉得嵐)

#include 
int main(void)
{
	int x = 1, y = 2, z;
	z = x + (z = x + y);
	printf("%d", z);
	return 0;
}
// z 的结果是 4,应为表达式 (z = x + y)是有值的,是 3, 加上 x 之后就是 4 了
8:副作用 和 序列点 ⭐️

副作用其实就是语句得到的效果

序列点有意思了,在过序列点前所有的副作用都是会发生的
那么哪些东西是序列点呢

  1. 分号
  2. 完整表达式的结束( 完整表达式指的是这个表达式不是别的表达式的子表达式 )
  3. 逗号运算符
9:类型转换

类型转换分为两大类,隐式转换和强制转换

隐式转换

  1. 当两种不同类型的数据进行运算结果是数据类型大的那个的数据类型
  2. char 和 short 出现在表达式或函数参数时都会被升级成 int, float 在表达式和函数参数值会被升级成 double
  3. 赋值语句可能会出现把double类型的值赋值给float,这时候会出现降级赋值,升级还好,降级要尽量避免,应为他接不住啊
  4. 如果待转换的值与目标类型不匹配
    • 如果目标类型是无符号整型且待赋的值是整数时,额外的位将被忽略。例如如果目标类型是unsigned char(8 位的),则待赋的值就是原始值求模 256, 2的8次方,应为目标类型是 8 位
    • 如果目标类型是整形但是待赋的是浮点数,这个是 未定义的!!

强制转换

(类型) 值的格式 如 (int)1.6 – > 1

10 分支
if ( 关系表达式 ) {
	执行语句
} else if ( 关系表达式 ) {
	执行语句
} else {
	执行语句
}

逻辑运算符

  1. 与 ( && ) 左右全为真整个表达式为真,否则为假
  2. 或 ( || ) 左右全为假整个表达式为假,否则为真
  3. 非 ( ! ) 原来是真就变假,原来是假就变真

条件运算符 ? : (一行的if else)

x = (1 > 2) ? 2 : 1; 这个意思是如果 1 > 2是真则x = 2否则x = 1

switch

switch(整型表达式)  //必须是整数值
{
	case 常量1:
		语句;
		[break];
	case 常量2:
		语句;
		[break];
	default:
		语句;
}
// 这边的break是可有可无的,有的话整型表达式得到的值匹配后直接跳出switch,否则顺着执行下去直到遇到break,如果全没找到执行default下面的语句,case理论上比if块,应为case是直接跳到对应值执行而if是顺着走下去的
11:循环

while循环

//	while循环格式
while ( 关系表达式 ) 
{
	循环执行语句
} 
// 如果关系表达式为真则执行 循环执行语句,否则退出循环
// 注意了,C语言中除了 0表示假,其他都是真

do while循环

do {
    循环执行语句
} while (关系表达式)
// 和 while 基本一致,就是这个会保证执行一次

for循环 (C语言的for好灵活洛)

// for循环圆括号内的三个值都是完全表达式,所以副作用在离开后都会产生
for ( 初始化(还可以写printf()); 测试条件; 表达式更新值) 
{
	循环语句
}
// 为什么说for非常灵活,应为for圆括号里的三个值只有分号不能省略,而且不管是初始化还是表达式更新值都两块都能"写出有意思的东西"

for初始化里常常用到逗号运算符,这就不得不提一下逗号运算符

逗号运算符也是一个序列点,他保证被他分隔的表达式从左往右求值

#include 
int main(void)
{
	printf("%d", (2,3));  // 圆括号这样得到的是逗号右边的值 3
	return 0;
}

continue: 退出当前一次的循环

break: 退出整个 for 或 while 或 do while

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/862452.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号