C程序设计复习(1)

正式开始!

1. 什么是C语言

  1. 广泛应用于底层开发

层次

  1. 标准语法 ANSI C,国际标准。
  2. 计算机语言 二进制语言
  3. 汇编语言 (助记符)
  4. B语言
  5. C语言 国际标准

工具

Clang,GCC,MSVC等

  1. 创建一个项目。
  2. 创建一个源文件。
  3. 写代码
  4. 编译代码

晕了,安装路径改不了;C盘还好够装,但是上网搜了可以用软链接连到D盘什么的,我还没学会。

新建源文件

  1. 源文件(.c)

  2. 头文件(.h)

  3. 写代码

  4. vs2013需要修改项目属性–>控制台显示,

  5. vs2019开始就不需要修改属性了。

  6. 有且仅有一个main函数

    ①一个工程中可以有多个.c文件;

    ②但是多个.c文件只能有一个main函数。

C语言

  1. C实现数据结构;

C++方向

  1. C++(高阶的数据结构);<Linux+操作系统+计算机网络>
  2. 数据库;
  3. 实战项目;

Java测试开发

  1. JavaSE+基础的数据结构
  2. JavaWeb(Web技术+操作系统+计算机网络)+高阶的数据结构;
  3. JavaEE;
  4. 实战项目。

数据类型

   char	     	//字符数据类型
   short  		//短整型
   int		//整型
   long		//长整型
   long long	//更长的整型
   float		//单精度的浮点数
   double		//双精度浮点数
   //数据类型
   //计算机语言-写程序-解决问题
   //C语言 - 浮点数
   //		- 整型
  1. sizeof单位是:字节 - byte。

  2. 计算机中的单位:

    (二进制(0,1) 八进制(0-7) 十进制(0-9))

    ①bit - 比特位 ;

    ②byte - 字节 = 8bit;

    ③kb = 1024byte;

    ④mb = 1024kb;

    ⑤gb = 1024mb;

    ⑥tb = 1024gb;

    ⑦pb = 1024tb。

  3. C语言标准:sizeof(long) >= sizeof(int)

  4. 类型的使用:用来创建变量。

变量,常量

🍖🍦🍇
生活中不变
C语言变量常量

定义变量的方法

  1. 类型 变量名 = 0;

  2. 变量的分类:局部变量,全局变量。

  3. 当局部变量与全局变量名字冲突时,局部优先。不建议把全局变量和局部变量同名。

  4. 使用scanf()报错:

    error C4996: 'scanf': This function or variable may be unsafe. 
    Consider using scanf_s instead. 
    To disable deprecation, use _CRT_SECURE_NO_WARNINGS. 
    See online help for details.
    

    解决方法:

    #define_CRT_SECURE_NO_WARNINGS 1
    //放第一行
    
    1. 用管理员身份打开记事本
    2. 打开这个路径C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCProjectItemsnewC++file文件编辑:
    3. #define _CRT_SECURE_NO_WARNINGS 1
  5. scanf_s()函数是由 -vs提供的,不是C语言标准规定的。不要乱用自己不会的函数就行了。

变量的使用

作用域和生命周期

作用域
  1. 在哪里起作用,哪里就是作用域
  2. 局部变量的作用域:变量所在局部范围
  3. 全局变量的作用范围:整个工程!
生命周期
  1. 变量的生命周期:变量的创建和销毁之间的时间段
  2. 局部变量的生命周期:进入局部范围,生命开始,离开局部范围,生命结束
  3. 全局变量的生命周期:程序的生命周期

常量的类型

  1. 字面常量
  2. const修饰的常量
  3. define定义的标识符常量
  4. 枚举常量
//常量

#define MAX 10000

enum Sex {
	//这种就是枚举类型
	MALE,
	FEMALE,
	SECRET
};

int main() {
//1.字面常量

	//3.14;
	//10;
	//'a';
	//"asdfd";

//2.const修饰的常变量

	//const int num = 10;//常变量 - 具有常属性(不能被改变的属性)
	//num = 20;
	//printf("num = %d\n", num);
	//int arr[10] = { 0 };
	//const int n = 10;
	//int arr2[n] = {0};//n是变量,数组大小不能用变量表示

	//3.#define定义的标识符常量(可以在{}内定义)

	//int n = MAX;
	//printf("n = %d", n);

	//4.枚举常量
	//可以被一一列举的常量
	enum Sex s = MALE;
	printf("%d\n",MALE);
	printf("%d\n",FEMALE);
	printf("%d\n",SECRET);

	return 0;
}

字符串

  1. int main() {
    	//字符数组 - 数组是一组相同类型的元素
    	//字符串结尾的位置隐藏了 \0 的字符
    	//\0是字符串的结束标志
    	//char arr[] = "hello\0";
    	char arr1[] = "abc";
    	char arr2[] = { 'a','b','c' };
    	printf("%s\n",arr1);
    	printf("%s\n", arr2);
    
    	return 0;
    }
    
  2. \0是字符串的结束标志

\0是字符串结束的标志

  1. 出现未定义报错

    strlen未定义报错,解决:引用头文件<string.h>

  2. 字符串的结束标志是一个\0的转义字符 ,而在计算字符串长度的时候\0是结束标志,但不算作字符串内容。

转义字符

转义字符释义
\?书写连续多个问号时使用,防止他们被解析成三字母词 ??) --> ] //会被解析
\'用于表示字符常量'
\"用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止他被解析为一个转义序列符
\a警告字符,蜂鸣
\b退格符
\f
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字。如:\120x
\xdddd表示2个十六进制数字。如:\x30 0

ASCII码,

int main() {
	printf("%c\n", '\130');//八进制的130就是十进制88
	//输出:X - ASCII码值为88
	printf("%c\n", '\101');//A - 65 - 八进制:101
	return 0;
}

注释

解释代码

/*
    int a = 10;
*/
//C语言的注释风格

C的注释,不支持嵌套注释。

选择语句

循环语句

  1. while循环
  2. do…while循环
int main() {
	//数组
	int arr[10] = { 0 };
	//输入
	int i = 0;
	for (i = 0; i < 10; i++) {
		scanf("%d", &arr[i]);
	}

	//找最大值
	int max = arr[0];//假设
	for (i = 0; i < 10; i++) {
		if (max < arr[i]) {
			max = arr[i];
		}
	}
	//输出
	printf("max = %d", max);

	return 0;
}

函数,数组

  1. 数组 - 一组相同类型元素的集合
  2. //	char ch[5] = { 'a','b','c' };
    //不完全初始化,剩余的默认为0
    

操作符

  1. 算术操作符
int main() {
int a = 9 / 2;
float b = 9.0 / 2;
int c = 9 / 2.0;
printf("a=%d\nb=%f\nc=%d",a,b,c);
}

+ - * / %

  1. 移位操作符

>> <<

int main() {
	int a = 2;
	int b = a << 1;
	printf("%d\n", b);

	return 0;
}

a - 2 左移操作符 - 移动二进制位

移位,右边补0

  1. 位操作符

& | ^

按位与 按位或 按位异或

  1. 赋值操作符

= += -= /= &= ^= >>= <<=

  1. 单目操作符(只有一个操作数)
符号含义
逻辑反操作
-负值
+正值
&取地址
sizeof操作数的类型长度(单位:byte)
~对一个数的二进制按位取反(无所谓正负数)
前置,后置--
++前置,后置++
*间接访问操作符(解引用操作符)
(类型)强制类型转换
int main() {
	//sizeof是一个操作符不是函数!
	//计算类型或变量的大小
	printf("%d\n", sizeof(int));
	int a = 10;
	printf("%d\n", sizeof a);
}
int main() {
	int arr[10] = {0};
	printf("%d\n", sizeof(arr));
	//计算数组的总大小,单位字节
	printf("%d\n", sizeof(arr[0]));
	int sz = sizeof(arr) / sizeof(arr[0]);//求元素个数
	printf("%d\n", sz);
	printf("%d\n", sizeof(arr) / 10);
	return 0;
}
int main() {
	int a = 0;
	printf("%d\n",~a);
	//~ - 按位取反
	return 0;
}
//所以 0 按位取反 最终得到 -1

~:按二进制位取反,把所有二进制位中的数字:“1”–>“0”,“0”–>“1”

  1. 双目操作符(有两个操作数)
  2. 关系操作符

> >= < <= != ==

  1. 逻辑操作符 逻辑与:&& ,逻辑或:||

  2. 条件操作符(三目操作符)

    exp1 ? exp2 : exp3
    exp1成立:exp2计算,整个表达式的结果是exp2的结果;
    exp1不成立:exp3计算,整个表达式的结果是exp3的结果。

  3. 逗号表达式:逗号隔开的一串表达式。

    int main() {
    	//(2, 3, 4, 5, 6 + 1);
    	int a = 0;
    	int b = 3;
    	int c = 5;
    	int d = (a = b + 2, c = a - 4, b = c + 2);
    	//逗号表达式,从左到右依次计算
    	//整个表达式的结果是最后一个表达式的结果
    	printf("d = %d\n", d);
    
    	return 0;
    }
    
  4. 下标引用,函数调用,结构成员

    下标引用

    //[] - 下标引用操作符
    int main() {
    	int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    	printf("arr[5] = %d\n",arr[5]);
    	return 0;
    }
    

. -> & *

原码,反码,补码

整数a:0

二进制:00000000000000000000000000000000

~a: 11111111111111111111111111111111(按位取反)

整数在内存中存储的是补码。

一个整数的二进制表示有三种:

原码

反码

补码

-1:

10000000 00000000 00000000 00000001(原码)

11111111 11111111 11111111 11111110(反码)

11111111 11111111 11111111 11111111(补码)

对于负数:

最高位:符号位

反码:符号位不变,原码按位取反

补码:反码+1

对于正数:

原码,反码,补码相同

常见关键字

auto	break	case	char	const	continue
default	do	double	else	enum	extern
float	for	goto	if	int	long
register	return	short	signed	sizeof
static	struct	switch	typedef	union	unsigned
void	volatile	while
  1. auto - 是自动的 - 每个局部变量都是auto修饰的。

    自动创建,自动销毁 - 自动变量

    auto省略掉了

int main() {
	{
	int a = 10;//自动变量
	//auto 新的C语言语法中也有其他用法

	}
		return 0;
}
  1. extern - 是用来声明外部符号的。
  1. register - 寄存器关键字。

    大量/频繁地被使用地数据,放在寄存器中,提升效率

    计算机中数据存储:

    寄存器()(更小),高速缓存(几十MB),内存(8~16G),硬盘(500G),网盘(2T)

    造价越高,速度越快,空间越小(<——)

    int main() {
    	register int num = 100;//建议放在寄存器中
    
    	return 0;
    }
    
  1. CPU - 中央处理器 —— 内存
  1. signed 有符号的 - 20,10
  1. unsigned 无符号的
  1. static 静态的!
  1. union 联合体。
  1. void
  1. volatile

不是关键字,而是预处理指令:

① define

② include

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'calmdown

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值