初识C语言(三)

目录

十一.数组

11.1数组的定义和声名:

11.2数组的初始化:

11.3数组的访问:

十二.操作符

12.1算术操作符:

12.2关系操作符:

12.3逻辑操作符:

12.4位操作符:

12.5赋值操作符:

十三.关键字

1. auto:

2. break:

3. case:

4. char:

5. const:

6. continue:

7. default:

8. do:

9. double:

10. else:

11. enum:

12. extern:

13. float:

14. for:

15. goto:

16. if:

17. int:

18. long:

19. register:

20. return:

21. short:

22. signed:

23. sizeof:

24. static:

25. struct:

26. switch:

27. typedef:

28. union:

29. unsigned:

30. void:

31. volatile:


十一.数组

        数组是按顺序存储的一系列类型相同的值,如10个char类型的字符或15个int 类型的值。整个数组有一个数组名,通过整数下标访问数组中单独的项或元素。

11.1数组的定义和声名:

        在C语言中,数组的定义和声明包括两个主要部分:数据类型数组名。例如,我们可以使用以下方式定义一个整型数组:

int arr[5];

声明arr是一个内含5个元素的数组,每个元素都可以存储int类型的值。

11.2数组的初始化:

        数组可以在定义时进行初始化,也可以在后续的代码中进行初始化。以下是一些常见的数组初始化方式:

a)在定义时初始化数组:

int arr[5] = { 1,2,3,4,5 };

b)逐个元素初始化数组:

int arr[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;

c)使用循环初始化数组:

int arr[5];
for (int i = 0; i < 5; i++)
{
	arr[i] = i + 1;
}

11.3数组的访问:

        数组中的元素可以通过索引来访问,索引从0开始,依次递增。例如:

int arr[5] = { 1,2,3,4,5 };
printf("%d\n", arr[0]);//输出第一个元素:1
printf("%d\n", arr[2]);//输出第三个元素:3
printf("%d\n", arr[4]);//输出最后一个元素:5

数组的第一个元素是arr[0],第二个元素是arr[1],以此类推,直到arr[4]。注意,数组元素的编号从0开始,不是从1开始。

十二.操作符

C语言操作符是用于执行各种操作的符号或关键字。在C语言中,有许多不同类型的操作符,包括算数操作符关系操作符逻辑操作符位操作符赋值操作符等。下面将介绍C语言中常见的操作符及其使用方法:

12.1算术操作符:

算数操作符用于执行基本的数学运算,包括加法减法乘法除法取模等。

  • 加法操作符(+):用于执行两个数的相加操作。
int a = 5;
int b = 3;
int c = a + b;//c的值为8
  • 减法操作符(-):用于执行两个数的相减操作。
int a = 5;
int b = 3;
int c = a - b;//c的值为2
  • 乘法操作符(*):用于执行两个数的相乘操作。
int a = 5;
int b = 3;
int c = a * b;//c的值为15
  • 除法操作符(/):用于执行两个数的相除操作。
int a = 5;
int b = 3;
int c = a / b;//c的值为1(整数除法,舍去小数部分)
  • 取模操作符(%):用于计算两个数的余数
int a = 5;
int b = 3;
int c = a % b;//c的值为2(5除以3的余数)

12.2关系操作符:

关系操作符用于比较两个数的关系,返回一个布尔值(真或假)。

  • 相等操作符(==):用于判断两个数是否相等
int a = 5;
int b = 3;
if (a == b)
{
	//执行代码块
}
  • 不等操作符(!=):用于判断两个数是否不相等
int a = 5;
int b = 3;
if (a != b)
{
	//执行代码块
}
  • 大于操作符(>):用于判断一个数是否大于另一个数。
int a = 5;
int b = 3;
if (a > b)
{
	//执行代码块
}
  • 小于操作符(<):用于判断一个数是否小于另一个数。
int a = 5;
int b = 3;
if (a < b)
{
	//执行代码块
}
  • 大于等于操作符(>=):用于判断一个数是否大于等于另一个数。
int a = 5;
int b = 3;
if (a >= b)
{
	//执行代码块
}
  • 小于等于操作符(<=):用于判断一个数是否小于等于另一个数。
int a = 5;
int b = 3;
if (a <= b)
{
	//执行代码块
}

12.3逻辑操作符:

逻辑操作符用于执行逻辑运算,包括逻辑与逻辑或逻辑非等。

  • 逻辑与操作符(&&):用于判断两个条件是否同时满足
int a = 5;
int b = 3;
int c = 7;
if (a > b && a < c)
{
	//执行代码块
}
  • 逻辑或操作符(||):用于判断两个条件是否有一个满足
int a = 5;
int b = 3;
int c = 7;
if (a > b || a < c)
{
	//执行代码块
}
  • 逻辑非操作符(!):用于取反一个条件的值。
int a = 5;
int b = 3;
if (!(a > b))
{
	//执行代码块
}

12.4位操作符:

位操作符用于对二进制位进行操作。

  • 按位与操作符(&):对两个数的二进制位进行按位与操作。
int a = 5;
int b = 3;
int c = a & b;//c的值为1(二进制位运算)
  • 按位或操作符(|):对两个数的二进制位进行按位或操作。
int a = 5;
int b = 3;
int c = a | b;//c的值为7(二进制位运算)
  • 按位异或操作符(^):对两个数的二进制位进行按位异或操作。
int a = 5;
int b = 3;
int c = a ^ b;//c的值为6(二进制位运算)
  • 按位取反操作符(~):对一个数的二进制位进行按位取反操作。
int a = 5;
int b = ~a;//b的值为-6(二进制位运算)
  • 左移操作符(<<):将一个数的二进制位向左移动指定的位数。
int a = 5;
int b = a << 2;//b的值为20(将a的二进制位向左移动2位)
  • 右移操作符(>>):将一个数的二进制位向右移动指定的位数。
int a = 5;
int b = a >> 2;//b的值为1(将a的二进制位向右移动2位)

12.5赋值操作符:

赋值操作符用于将一个值赋给变量。

  • 简单赋值操作符(=):将一个值赋给变量。
int a = 5;
int b;
b = a;//将a的值赋给b
  • 复合赋值操作符(+=,-=,*=,/=,%=):将一个值与变量进行运算,并将结果赋给变量。
int a = 5;
int b = 3;
a += b;//相当于a = a + b,a的值为8

十三.关键字

1. auto

用于声明自动变量,即在函数内部定义的变量。这些变量的生命周期与函数的执行周期相同。

void func()
{
	auto int num = 10;
	printf("%d", num);
}

2. break

用于跳出循环或switch语句。当程序执行到break语句时,会立即终止当前循环或switch语句的执行。

for (int i = 0; i < 10; i++)
{
	if (i == 5)
	{
		break;
	}
	printf("%d\n", i);
}

3. case

用于定义switch语句中的分支条件。每个case语句后面都必须跟一个唯一的常量值或常量表达式。

int num = 2;
switch (num)
{
case 1:
	printf("One");
	break;
case 2:
	printf("Two");
	break;
default:
	printf("Other");
	break;
}

4. char

用于声明字符类型的变量。char类型的变量通常用于存储单个字符。

char ch = 'A';
printf("%c", ch);

5. const

用于声明常量。const修饰的变量的值在程序运行期间不可修改。

const int MAX = 100;
printf("%d", MAX);

6. continue

用于跳过当前循环的剩余部分,进入下一次循环。

for (int i = 0; i < 10; i++)
{
	if (i == 2)
	{
		continue;
	}
	prinrf("%d\n", i);
}

7. default

用于定义switch语句中的默认分支。当switch的表达式的值与任何case都不匹配时,会执行default分支。

int num = 2;
switch (num)
{
case 1:
	printf("One");
	break;
case 2:
	printf("Two");
	break;
default:
	printf("Other");
	break;
}

8. do

用于定义do-while循环。do-while循环会先执行循环体,然后再判断循环条件。

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

9. double

用于声明双精度浮点数类型的变量。double类型的变量可以存储更大范围的浮点数。

double num = 3.14;
printf("%lf", num);

10. else

用于定义if语句中的条件不成立时的执行代码块。

int num = 5;
if (num > 10)
{
	printf("Greater than 10");
}
else {
	printf("Less than or equal to 10");
}

11. enum

用于定义枚举类型。枚举类型是一种用户自定义的数据类型,它由一组常量值组成。

enum Color 
{
	RED,
	GREEN,
	BLUE
};
enum Color color = GREEN;
printf("%d", color);

12. extern

用于声明外部变量或函数。extern修饰的变量或函数可以在其他文件中使用。

// 文件1.c    extern int num;

// 文件2.c    int num = 10;

13. float

用于声明单精度浮点数类型的变量。float类型的变量可以存储较小范围的浮点数。

 float num = 3.14;
    printf("%f", num);

14. for

用于定义for循环。for循环由三个部分组成:初始化表达式、循环条件和循环后表达式。

for (int i = 0; i < 5; i++) 
{
        printf("%d\n", i);
}

15. goto

用于无条件地跳转到程序中的标签位置。goto语句通常被认为是一种不良的编程风格,应尽量避免使用。

for (int i = 0; i < 10; i++) 
{
	if (i == 5) 
	{
		goto end;
	}
	printf("%d\n", i);
}
end:
printf("Loop ended");

16. if

用于定义条件语句。if语句根据条件的真假来执行不同的代码块。

int num = 5;
if (num > 10) 
{
	printf("Greater than 10");
}
else 
{
	printf("Less than or equal to 10");
}

17. int

用于声明整数类型的变量。int类型的变量可以存储整数值。

int num = 10;
    printf("%d", num);

18. long

用于声明长整数类型的变量。long类型的变量可以存储更大范围的整数。

long num = 1000000000;
    printf("%ld", num);

19. register

明寄存器变量。register修饰的变量会尽量存储在CPU的寄存器中,以提高访问速度。

register int num = 10;
    printf("%d", num);

20. return

用于从函数中返回值。return语句会终止当前函数的执行,并将一个值返回给调用者。

int add(int a, int b) 
{
	return a + b;
}
int sum = add(2, 3);
printf("%d", sum);

21. short

用于声明短整数类型的变量。short类型的变量可以存储较小范围的整数。

short num = 100;
    printf("%d", num);

22. signed

用于声明有符号数类型的变量。有符号数可以表示正数负数

signed int num = -10;
    printf("%d", num);

23. sizeof

用于获取变量或数据类型的大小(以字节为单位)。

int arr[5] = { 1, 2, 3, 4, 5 };
int size = sizeof(arr) / sizeof(arr[0]);
printf("%d", size);

24. static

用于声明静态变量或函数。静态变量的生命周期与程序的执行周期相同,但作用域仅限于声明它的函数内部。

void increment() 
{
	static int num = 0;
	num++;
	printf("%d\n", num);
}
increment(); // 输出:1    
increment(); // 输出:2

25. struct

用于定义结构体类型。结构体是一种用户自定义的数据类型,它可以包含多个不同类型的成员变量。

struct Person 
{
	char name[20];
	int age;
};
struct Person p;
strcpy(p.name, "John");
p.age = 30;
printf("%s, %d", p.name, p.age);

26. switch

用于定义多分支选择语句。switch语句根据表达式的值选择执行不同的分支。

int num = 2;
switch (num) 
{
case 1:
	printf("One");
	break;
case 2:
	printf("Two");
	break;
default:
	printf("Other");
}

27. typedef

用于为已有数据类型定义一个新的别名。typedef可以提高代码的可读性和可维护性。

typedef int Number;
Number num = 10;
printf("%d", num);

28. union

用于定义联合类型。联合是一种特殊的数据类型,它可以在同一内存空间存储不同类型的数据。

union Data 
{
	int num;
	float value;
};
union Data d;
d.num = 10;
printf("%d", d.num);

29. unsigned

用于声明无符号数类型的变量。无符号数只能表示非负整数。

 unsigned int num = 10;
    printf("%u", num);

30. void

用于声明无类型或函数无返回值。void类型的指针可以指向任何类型的数据。

void greet() 
{
	printf("Hello");
}
greet();

31. volatile

用于声明易变变量。volatile修饰的变量表示它的值可能在不同的时间点被修改。

int main() 
{
	volatile int count = 0;

	while (count < 5) 
	{
		printf("Count: %d\n", count);
		count++;
	}

	return 0;
}

        在上面的示例中,我们声明了一个`volatile`修饰符的整数变量`count`。这意味着编译器不会对`count`进行任何优化,以确保每次循环都会检查`count`的实际值。如果我们没有使用`volatile`关键字,编译器可能会认为`count`的值在循环中没有变化,因此可能会对循环进行优化,导致循环只执行一次。

你可能感兴趣的:(C语言从入门到精通,c语言,算法,学习方法)