C语言第一周

一、数据类型

注:

变量:该内存里的内容可被修改(eg:int data)

常量:该内存里的内容初始化后就不能被修改。(eg:100、10.123)

1.1 基本数据类型

char ---- 1字节、short ---- 2字节、int ---- 4字节、
long ---- 4字节(32位系统)/ 8字节(64位系统)、
float ---- 4字节,double ---- 8字节
unsigned (char、short、int、long) ---- 无符号整型
long double ---- 16字节

1.2 计算机为什么要设计这么多的数据类型?

答:合理分配内存,提高内存使用率。

1.3 整型

1.3.1 整型变量

整数类型数据即整型数据,无小数部分的数值。
整型数据类型可分为:char、short、int、long、int8、int16、int32、int64、(无符号整形数:unint8、uint16、uint32、uint64)

注:标识符-命名规则(由字母下划线数字组成,必须是以字母下划线开头,并且不是关键字

1.3.2 整型常量

整型数据 ---- 正整数:1,2,3,4;负整数:-1,-2,-3
整型常量 ---- 八进制:0101;十六进制:0x101

1.4 浮点型

1.4.1 浮点型变量

float data  = 1.1;		//单精度浮点型4字节
double data = 1.1;	//双精度浮点型8字节

1.4.2 浮点型常量

1.0、2.0
科学计数表示法:3141592 ---- 3.1415926e6

1.5 字符型

注:

字符型就是char。字符型是一种数据类型,占用1字节空间;字符是一种符号,用ASCII码表示。

1.5.1 字符变量

char data = ‘a’; // 输出97
char num = 123;

1.5.2 字符常量

字符常量’a’;
字符串常量“a” ---- {‘a’, ‘\0’}

1.6 取值范围计算

数据在计算机中以二进制存储(进制转换)

1.6.1 十进制转二进制、二进制转十进制

浮点数十进制转二进制,分两部分,整数部分除以2取余数,倒序得到正数部分二进制数,小数部分乘以2取整数,顺序得到小数部分二进制数。
浮点数二进制转十进制,小数点前从2的0次方开始乘,小数点后从2的-1次方开始乘,最后加起来即为十进制数。

1.6.2 二进制转十六进制,十六进制转二进制(8421码),一个十六进制位转4个二进制位

十六进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

1.6.3 二进制转八进制,八进制转十六进制(421码),一个八进制位转3个二进制位

1.6.4 unsigned char 取值范围

假如是char类型变量,占1个字节8个位。
最大取值为8个1,255(2^8 - 1)
最小取值为8个0,0
unsigned short 取值范围:0 ~ 2^16 - 1
unsigned int 取值范围:0 ~ 2^32 - 1

1.6.5 char(有符号)

char 类型1字节8位,规定最高位是符号位(0正,1负)
正整数在内存中是用原码存储:数据位的二进制码
负整数在内存中是用补码存储:原码----数据位的二进制码;反码----数据二进制位取反;补码----反码 + 1

char 取值范围:-128 ~ 127

1.6.6 浮点数据取值范围

1.6.6.1 单精度浮点型32位(符号s,阶码e—范围,尾码m—精度)

符号位占用1位(s):0表示正数,1表示负数
阶码位(指数位)占用8位(e):实际的指数为 e - 127 ,解决指数为负数的可能。
尾数位占用23位(m):二进制小数形式表示法(具体格式为1.m)

举例
在这里插入图片描述

1234.125 —> 二进制(100 1101 0010.001)—> 整数部分保留一位有效数1.00 1101 0010001 * 2^10
尾码不够位数后面补0
单精度浮点型取值范围:-1.0 * 2^128 ~ 1.0 * 2^128

1.6.6.2 双精度浮点型64位(符号s,阶码e—范围,尾码m—精度)

符号位占用1位(s):0表示正数,1表示负数
阶码位(指数位)占用 11 位(e):实际的指数为 e - 127 ,解决指数为负数的可能。
尾数位占用 52 位(m):二进制小数形式表示法(具体格式为1.m)

二、 运算符

2.1 算术运算符

2.1.1 最常见算术运算符:+、-、*、/、%

除号/:
(1)整除:5 / 2 = 2
(2)浮点数除:5 / 2.0 = 2.5
取余/求模%:
操作数必须为整数(eg:10 % 3 —> 1)

2.1.2 数据类型转换

在不同类型的数据进行运算时,先自动转换为同一类型(小空间向大空间转换)

char --> short --> int --> long;int --> float【自动转换】
long --> int --> short --> char;float --> int【强制转换】

2.2 关系运算符

大于>,小于<,等于==,大于等于>=,小于等于<=,不等于!=
在算术中 (0 < a < 10),在C语言中要转换为 (a > 0 && a < 10)

2.3 逻辑运算符

逻辑与&&,逻辑或||,逻辑非!
逻辑与&&:遇假则假(遇 0 为 0)
逻辑或||:遇真则真(遇 1 为 1)

2.4 位运算符

位与&,位或|,位非!,位移(左移<<,右移>>),异或^

3 & 4 ----> 0011 & 0100 = 0000(清零用与)
3 | 4 ----> 0011 | 0100 = 0111(置一用或)
~3 ----> ~0011 = 1100
3 << 1 为 6;3 << 2 为 12;3 << 3 为 24【规律:一个数左移n位,结果为这个数乘以2的n次方】
24 >> 1 为 12;24 >> 2 为 6; 24 >> 3 为 3【规律:一个数右移n位,结果为这个数除以2的n次方】
异或^:相同为0,不同为1【规律:一个数A被另一个数B异或两次,结果为A本身】eg :3 ^ 4 ^ 4 ,结果为3.

2.5 特殊运算符

2.5.1 复合运算符 +=、|=、 &=

a += 3 —> a = a + 3;
a += 3 - 10 —> a = a + (3 - 10);
a |= 1 << 10 —> a = a | (1 << 10);

2.5.2 条件运算符(三目运算符)条件表达式?表达式A:表达式B

int a = 10,b = 20;
int max = a > b ? a : b;

2.5.3 自加++、自减–

2.5.3.1 符号在前,++A

符号在前,先加后用,加和用都是A本身。

2.5.3.2 符号在后,A++

符号在后,先用后减,使用的是A的副本。

2.5.4 逗号运算符

int a = 0;
a = (1 + a, 2, 3, 4);	//只取最后一位
printf("%d\n", a); 

2.5.5 运算符优先级表

三、控制流语句

3.1 分支语句 if - else ; switch - case

3.1.1 if - else语句

格式:

//第一种情况只有if,没有else
if(条件表达式){
		//当条件表达式为真才会执行这里
}
//第二种情况有if和else
if(条件表达式){
		//当条件表达式为真会执行这里
}else{
		//当条件表达式为假会执行这里
}
//第三种情况有if-else嵌套
if(条件表达式1){
		//当条件表达式1为真会执行这里
}else if(条件表达式2){
		//当条件表达式2为真会执行这里
}else if(条件表达式3){
		//当条件表达式3为真会执行这里
}else{

}

3.1.2 switch - case 语句(开关语句)

格式:

switch(整型数)
{
	case 常量:语句;break;
	case 常量:语句;break;
	case 常量:语句;break;
	case 常量:语句;break;
	default:语句;
}

3.2 循环语句 for,while,do - while

3.2.1 for 循环

格式:

for(表达式1;条件表达式;表达式2)
{
	循环体
}

3.2.2 while 循环语句

格式:

while(条件表达式)
{
	//表达式为真就进入循环体,为假就退出循环体
}

3.2.3 do - while 循环语句

格式:先执行循环体语句,再判断表达式是否为真

do{
	循环体语句
}while(条件表达式)

3.3 跳转语句 break,continue,goto,return

3.3.1 break语句

break语句应用在 switch 语句中跳出 switch 语句,for、while、do - while 循环中跳出循环。

3.3.2 continue 语句

continue 结束本次循环,继续下一次的循环,只能使用在循环体内。

3.3.3 goto 语句

goto 语句不要跳出函数,在函数内跳转

#include <stdio.h>
int main()
{
	int a = 1, b = 2;
	printf("start1\n");
	if(a == 1)
		goto err2;
	printf("start2\n");
	if(a == 2)
		goto err1;
	{
	
	}
err1:
	printf("stop2\n");
err2:
	printf("stop1\n");
	return 0;
}

四、数组基础

4.1 数组

数组是一种自定义数据类型,它是一段连续的内存空间,用来解决存储同类型的数据

4.1.1 数组格式

数据类型 数组名称 [长度] //定义时必须确定长度。

4.1.2 数组初始化

1、定义时直接初始化

int csore[5] = {99, 91, 89, 100, 95};
int csore[] = {99, 91, 89, 100};	//默认数组长度,长度由初始化个数来决定
int csore[5] = {99};	//部分初始化,未初始化的默认为0

2、先定义后再初始化

int csore[5];	//必须指定数组长度
csore[0] = 99;	//通过数组下标来指定初始化【下标为0 ~ (长度-1)】
csore[4] = 98;

4.1.3 数组特点

1、数组空间连续,存储同类型数据。
2、数组下标从0到(长度 - 1),超出这个访问就越界【数组允许越界】
3、数组名是一个地址,且是数组的首地址,也是第一个元素的地址【地址是常量】

【注:数组名是数组首元素的地址,但是有两个例外】

  • sizeof(数组名)
  • &数组名

4.1.4 生成随机数

#include <stdio.h>
#include <string.h>
#include <time.h>

int main()
{
	int data[10] = {0};
	srandom(time(NULL));
	int num = random() % 100;	//生成100以内的随机数
	......
}
大连理工大学的C语言慕课第六周内容主要涵盖了指针和内存管理的相关知识。在这一周的学习中,我们首先对指针进行了详细的介绍和讲解。 指针是C语言中非常重要的概念之一,它可以用来存储变量的地址。通过指针,我们可以实现对变量的直接访问和操作,从而能够更加灵活地处理数据。在慕课中,我们学习了如何声明指针变量、如何使用指针进行内存地址的引用和解引用等基本操作。 在理解了指针的基本概念后,我们进一步学习了指针的高级应用,比如指针与数组之间的关系。通过指针与数组结合使用,我们能够实现更加高效的数组遍历和操作,减少了程序的运行时间和空间开销。 同时,慕课中还介绍了指针的指针和指针的数组的概念。这些概念的学习使得我们能够更加灵活地处理多维数组和多级指针的情况,拓宽了我们的编程思路和解决问题的能力。 与指针相关的知识点之一就是内存管理。在慕课中,我们学习了动态内存分配的相关函数,比如malloc、calloc和realloc等。这些函数使得我们能够在程序运行过程中动态地分配和释放内存空间,提高了程序的灵活性和效率。 在大连理工大学的C语言慕课第六周中,我们不仅学习了指针的基本概念和操作,还深入了解了指针的高级应用和内存管理的知识。通过学习这些内容,我们能够更加熟练地运用指针进行编程,提高程序的性能和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值