数组
声明
和变量一样,要使用一个数组,必须先声明它
int test[6]; //表示变量test里有6个整型值
这里声明了一个名叫test的数组,int表示这个数组中的所有元素类型是整形。方括号中的6表示数组中有6个元素。
一旦定义了一个数组,系统将为它分配一个固定大小的空间,以后不能改变。
数组初始化
声明了数组之后,数组中的值是不确定的,有时候,我们希望在定义数组时就给它的元素赋值,那么可以在定义数组时通过使用以下方法进行赋值:
int test[6]={7,9,13,18,20,25};
这样数组中的元素的值就依次是7,9,13,18,20,25了。
例如
#include <stdio.h>
int main()
{
char test[6];
//数组名会自动转化为数组空间的首地址
test[0] = 'A'; //*test = 'A'
test[1] = 'B'; //*test = 'B'
test[2] = 'C';
test[3] = 'D';
test[4] = 'E';
test[5] = 'F';
//数组是一种存储多个相同类型数据的数据结构
//相对于之前用指针直接分配内存,数组这种方式使用更简单,不容易出错
//数组的大小必须在定义数组时就确定,不可以通过变量来确定数组的大小
printf("%s", test);
//数组是储存在栈上
//数组的内存空间不需要手动释放
//因为栈的空间较小(1M/2M),所以数组不能定义的很大
return 0;
}
对整数型数组的值进行排序
当你无法一部就达成目标时,就把大的目标分解成小目标
当你无法一开始就写出程序,那么你可以先用伪代码(中文)描述你准备要做的事
转换成代码如下
#include <stdio.h>
void swap(int* a, int* b) //此函数为了交换test[0]和与他相比较数的值
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int test[6];
test[0] = 32;
test[1] = 59;
test[2] = -125;
test[3] = 125;
test[4] = 27;
test[5] = 95;
//将数组int test[6];里最大的值找出
if (test[0] < test[1]) swap(&test[0], &test[1]);//比较test[0]和test[1],如果test[1]比test[0]大,则交换他们的值
if (test[0] < test[2]) swap(&test[0], &test[2]);//比较test[0]和test[2],如果test[2]比test[0]大,则交换他们的值
if (test[0] < test[3]) swap(&test[0], &test[3]);//比较test[0]和test[3],如果test[3]比test[0]大,则交换他们的值
if (test[0] < test[4]) swap(&test[0], &test[4]);//比较test[0]和test[4],如果test[4]比test[0]大,则交换他们的值
if (test[0] < test[5]) swap(&test[0], &test[5]);//比较test[0]和test[5],如果test[5]比test[0]大,则交换他们的值
/*
这5个if循环,可以用一个for循环来进行简化
for (int x = 5; x <= 5; x++)
{
if (test[0] < test[x]) swap(&test[0], &test[x]);
}
*/
printf("%d\n", test[0]);
return 0;
}
使用for循环进行全部数值比较
#include <stdio.h>
void swap(int* a, int* b) //此函数为了交换test[0]和与他相比较数的值
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int test[6];
test[0] = 32; //*a=1; 数组名可以转换为数组第一个元素的地址
test[1] = 59;
test[2] = -125;
test[3] = 125;
test[4] = 27;
test[5] = 95;
//将数组int test[6];里的6个值按从大到小排序
for (int x = 1; x <= 5; x++)
{
if (test[0] < test[x]) swap(&test[0], &test[x]);
}
for (int x = 2; x <= 5; x++)
{
if (test[1] < test[x]) swap(&test[1], &test[x]);
}
for (int x = 3; x <= 5; x++)
{
if (test[2] < test[x]) swap(&test[2], &test[x]);
}
for (int x = 4; x <= 5; x++)
{
if (test[3] < test[x]) swap(&test[3], &test[x]);
}
for (int x = 5; x <= 5; x++)
{
if (test[4] < test[x]) swap(&test[4], &test[x]);
}
/*------------------------------
此处代码可再度套for循环进行精简
for (int y = 1; y <= 5; y++)
{
for (int x = y; x <= 5; x++)
{
if (test[0] < test[x]) swap(&test[0], &test[x]);
}
}
------------------------------*/
printf("%d %d %d %d %d %d\n", test[0], test[1], test[2], test[3], test[4], test[5]);
return 0;
}
结构体
数组是将相同类型的多项数据集合在一起的方式,而结构体是将多个不同类型的数据项集合到一起的方法。在此之前我们使用的整形,浮点型都是C语言的内置数据类型,一个变量只能存储一项数据类型,但很多时候我们需要把多项不同类型的数据合并成一个整体来操作。
例如,要存储一个人的基本信息,可以定义下面的变量:
char fullname[257]; //一个字符型数组用于存储姓名
char idno[32]; //一个字符型数组用于存储身份证号码
int age = 0; //一个整型变量用于存储年龄
int gender = 1; //一个整型变量用于表示性别(1 - 男, 2 - 女)
但这四个变量和数组在程序上是独立的,如果需要向一个函数传递一个人的信息,则这个函数需要有四个参数,会程序变得冗长。更麻烦的是,如果未来需要新增一个变量用于存储手机号码,这个函数就必须要增加一个参数,这样需要在程序中的很多地方进行修改。
因此,我们需要一种手段可以将多个关联的变量、数组【打包】成一个变量,这个变量分成多个部分,用于存储不同类型的信息。
这种变量,就是结构体变量。
定义结构体
要使用结构体变量,必须先来定义结构体,在声明结构体变量。
方法很简单,可以在main函数的前面加入它,也可以单独使用一个头文件来定义它,并且在你的程序中包含这个头文件。
struct IDinfo //定义一个名叫IDinfo的结构体
{
char fullname[257]; //一个字符型数组用于存储姓名
char idno[32]; //一个字符型数组用于存储身份证号码
int age = 0; //一个整型变量用于存储年龄
int gender = 1; //一个整型变量用于表示性别(1 - 男, 2 - 女)
}; //注意大括号后面的分号;不能少,这是一条完整的语句。
//给结构体成员赋值
IDinfo.fullname = "张三";
IDinfo.idno = 123456;
IDinfo.age = 18;
IDinfo.gender = 1;
//读取结构体成员的值
printf("%s的身份证号是%d,年龄是%d岁\n", IDinfo.fullname, IDinfo.idno, IDinfo.age);
//使用typedef函数为这个新的结构起了一个别名,叫info_1
typedef struct IDinfo info_1;
//因此,现在你就可以像 int 和 double 那样直接使用info_1定义变量,代码如下
info_1 test1 = {"李四", 987654, 22, 2};
info_1 test2;
版权属于:KrisWi
本文链接:https://blog.aqkx.com/index.php/archives/64/
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。