初识C语言(四)- 初识C语言

“或许静下心来,慢慢沉淀,才是最好的选择!” 我们今天就从数组开始学习吧!

九.数组

通过前面的学习,我们知道如果想要存储一个数字,那么需要创建一个变量,那么如果我们需要储存十个数,我们应该怎么办呢?这里我们引出数组的定义,即一组相同类型的元素的集合。

9.1数组的定义

    //数组定义:数组类型 数组名 [指定数组的个数];
	int arr[10];
	char ch[8];

9.2数组的初始化

数组的初始化是指在创建数组的同时给数组的内容一些合理初始值(初始化)。
接下来,让我们看一段代码。

    //数组的初始化
	int arr2[2] = {
    
     1,2 };
	int arr3[20] = {
    
     1,2,3,4,5 };//不完全初始化,剩余的元素默认初始化为0
	char arr4[] = {
    
     'a','b','c' };
	char arr5[] = {
    
     "abcde" };

数组在创建时如果想不指定数组的确定的大小就得初始化,数组元素的个数根据初始化的内容来确定。尤其要区分以下两段代码:

    char arr4[] = {
    
     'a','b','c' };//元素个数为3
	char arr5[] = {
    
     "abcde" };//元素个数为6,要注意算上'\0'

上述结果可以通过调试监视得出,大家也可以在自己的编译器上试一试,结果如下。
在这里插入图片描述
在这里插入图片描述

9.3数组的下标

C语言规定:数组的每个元素都有一个下标,下标从0开始。
数组可以通过下标来访问。
比如:

    //数组的下标
	int arr6[5] = {
    
    0};//该段数组共有5个元素,那么下标范围为0~4

在这里插入图片描述

int arr[5] 下标
1 0
2 1
3 2
4 3
5 4

当然,我们也可以通过访问数组的下标,来改变数组元素的值,下面给出示例:

    int arr6[5] = {
    
    0};
	arr6[4] = 10;//给数组的第五个元素赋值为10
	printf("%d\n", arr6[4]);

我们可以看出一开始初始化的时候,数组的第5个元素的值为0,通过下标访问赋值为10后,它的值就随之改变了。那么,如果我们想要把数组中的所有元素都打印出来,应该怎么做呢?这里,我们就需要用到前面的while循环了。

    int i = 0;
	while (i < 5)
	{
    
    
		printf("%d\n", arr6[i]);
		i = i + 1;
	}

在这里插入图片描述

十.操作符

操作符大致可以分为:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号操作符、下标引用、函数调用和结构成员。

这里我们先给大家介绍几种常见的操作符。

10.1算术操作符

+ - * / %(取模)

    printf("%d\n", 17 / 4);//除法得到的是商,如果除号的两端都为整数的话,则执行整数除法,结果为4
	printf("%d\n", 17 % 4);// %-取余,最后得到的是余数,为1
	//%f-打印float型,%lf-打印double型
	printf("%f\n", 17.0f / 4);
	printf("%lf\n", 17.0 / 4.0);
	printf("%.2f\n", 17 / 4.0f);//直接写出的浮点数会被默认为double类型,结果默认保留六位,如果只想两位,则应该在f前面加上.2

在这里插入图片描述

注:取模操作符(%)两端必须是整数

10.2赋值操作符

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

    int a = 0;//初始化,局部变量在不初始化的情况下,里面放的是随机值。
	printf("%d\n", a);
	a = 52;
	//以下两种写法一样
	a = a + 10;
	a += 10;//这里的+=称为复合赋值符,这里我们可以联想到/= *= -=

注:=为赋值操作符, ==为等号,不要把两者混起来!

10.3单目操作符

单目操作符 名称
- 负值
+ 正值
& 取地址
~ 对一个数的二进制按位取反
sizeof 操作数的类型长度(以字节为单位)
- - 前置、后置- -
+ + 前置、后置+ +
(类型) 强调类型转换
* 间接访问操作符(解引用操作符)
逻辑反操作符

那么,大家可能存在疑虑,什么是单目操作符呢?前面我们介绍了算术操作符,就拿3+5这个例子,在这个算术表达式中,+有两个操作数,因此这里的加号(+)称为双目操作符,又称二元操作符。类比可知,只有一个操作数的操作符称为单目操作符。下面简单的介绍几种常见的单目操作符。

1.逻辑反操作符(!)

    int c = 0;
	int b = !c;
	printf("%d\n", b);

在这里插入图片描述
C语言中规定0为假,1为真,逻辑反操作符可以简单理解为:假设a为假,那么!a即为真。

2.sizeof-求操作数的类型长度(以字节为单位)
下面给出示例:

    int e = 10;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(int));

在这里插入图片描述
不难看出int型占4个字节,下面我们给出常用数据类型长度。

数据类型 字节
int 4
char 1
float 4
double 8
long 8
short 2

3.前置、后置++

	//前置、后置++
	int m = 10;
	int n = m++;//后置++计算口诀为:先使用,后+1
	printf("%d\n", n);//n = m = 10
	printf("%d\n", m);//m = m + 1 = 10 + 1 = 11
	int v = 2;
	int s = ++v;//前置++计算口诀为:先+1,后使用
	printf("%d\n", v);//v = v + 1 = 2 + 1 = 3
	printf("%d\n", s);//s = v = 3

在这里插入图片描述
4.前置、后置- -

    //前置、后置--
	int u = 10;
	int k = u--;//后置++计算口诀为:先使用,后-1
	printf("%d\n", k);//k = u = 10
	printf("%d\n", u);//u = u - 1 = 10 - 1 = 9
	int p = 2;
	int o = --p;//前置++口诀为:先-1,后使用
	printf("%d\n", p);//p = p - 1 = 1
	printf("%d\n", o);//o = p = 1

在这里插入图片描述

5.强制类型转换()

	int a = (int)3.14;//把3.14的浮点型转换成整型
	printf("%d\n", a);

在这里插入图片描述

10.4关系操作符

> >= <= !=(用于测试不相等) ==(用于测试相等)

10.5逻辑操作符

&& (逻辑与) ||(逻辑或)

a b a&&b

在这里插入图片描述
注:不难看出,只有当a和b都为真时,a&&b才为真。而对于a||b,只要有一个为真,则a||b为真。

下面我们给出示例:判断某一个月是属于夏天还是春天

	//&& ||
	int month = 0;
	scanf("%d", &month);
	if (month >= 6 && month <= 8)//6~8为夏天
		printf("Summer!\n");
	scanf("%d", &month);
	if (month == 3 || month == 4 || month == 5)//3~5为春天
		printf("Spring!\n");

运行结果如下:
在这里插入图片描述

10.6条件操作符

exp1?exp2:exp3

不难看出,条件操作符是由?和:组成,规则如下:根据表达式1的计算返回一个true或false,如果是true,就把表达式2作为结果;如果是false,就把表达式3作为结果。下面给出一个示例:

//三目操作符?:
	int a = 1;
	int b = 2;
	int m;
	if (a > b)
		m = a;
	else
		m = b;
	printf("%d\n", m);
	//下面这种写法更加简洁,利用了三目操作符?:与上面一段代码运行结果及表达意义相同
	m = (a > b ? a : b);
	printf("%d\n", m);

在这里插入图片描述

10.7逗号表达式

exp1,exp2,exp3,exp4,exp5,...expN
逗号表达式就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

下面给出示例:

//逗号表达式
	int c = 1;
	int d = 7;
	int e = 4;
	int n = 8;
	int t = (c + d, e = c - d,c = d * e + n, n = c + e + n);
	//         8      e = -6       c = -34       n = -32
	printf("%d\n", t);//逗号表达式依次计算,结果等于最后一个表达式的值为-32

在这里插入图片描述

10.8下标引用操作符

[](下标引用操作符)

//[]下标引用操作符
	int arr[3] = {
    
     1,2,3 };
	printf("%d\n", arr[2]);

在这里插入图片描述

十一.常见关键字

C语言给自己预留的一些特殊符号,有特殊的意义,被称为关键字。程序员不能自己创建关键字,接下来让我们一起看一下关键字有哪些?

1、数据类型关键字
A基本数据类型(5个)
void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
char:字符型类型数据,属于整型数据的一种
int:整型数据,通常为编译器指定的机器字长
float:单精度浮点型数据,属于浮点数据的一种
double:双精度浮点型数据,属于浮点数据的一种

B类型修饰关键字(4个)
short:修饰int,短整型数据,可省略被修饰的int。
long:修饰int,长整形数据,可省略被修饰的int。
signed:修饰整型数据,有符号数据类型
unsigned:修饰整型数据,无符号数据类型

C复杂类型关键字(5个)
struct:结构体声明
union:共用体声明
enum:枚举声明
typedef:声明类型别名
sizeof:得到特定类型或特定类型变量的大小

D存储级别关键字(6个)
auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配
static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的对象的一个“引用“
const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值

2、流程控制关键字
A跳转结构(4个)
return:用在函数体中,返回特定值(或者是void值,即不返回值)
continue:结束当前循环,开始下一轮循环
break:跳出当前循环或switch结构
goto:无条件跳转语句

B分支结构(5个)
if:条件语句
else:条件语句否定分支(与if连用)
switch:开关语句(多重分支语句)
case:开关语句中的分支标记
default:开关语句中的“其他”分治,可选。

C循环结构(3个)
for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2…循环,其中2为循环条件
do:do循环结构,do 1 while(2);的执行顺序是1->2->1…循环,2为循环条件
while:while循环结构,while(1) 2;的执行顺序是1->2->1…循环,1为循环条件
以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环

以上关键字暂且做一个了解就行!

好啦,今天就学到这里啦,欢迎大家关注、点赞和评论!

猜你喜欢

转载自blog.csdn.net/qq_73121173/article/details/131578993