一、C语言中的几种集合的表达形式
在数学中一般一组数据的集合可以用行列式或矩阵来表示,但在实际编程中
不能够写出矩阵或行列式,那在 C语言中有什么方法来近似的表示这样一类
数据的集合呢?
在本章将具体讲解数据的集合,以及一组不同变量类型的数据存储方式
数组类型
首先我们引入数组的概念数组从名称上便不难理解数组就是一类数据组合在一起,
“一类”在编程中就是指的同一种数据类型的变量先来看一下这种数据类型具体实际的定义是如何定义的
#include <stdio.h>
//int:指定数组内的的数据类型,a:数组变量名称,[50]数组的大小这里指的是存放5个int类型的变量
int a[5];
void main() {
for(int i = 0; i < 5; i++)//采用循环对数组进行遍历
{
printf("初始化前a[%d] = %d ",i,a[i]);
a[i] = 0;
printf("初始化后a[%d] = %d\r\n",i,a[i]);
}
a[3] = 15;//数组的赋值将数组中的第四个数赋值为15
for (int i = 0; i < 5; i++)
{
printf("a[%d] = %d ",i,a[i]);
}
}
整体代码:
运行结果:
由此可以看出对数组的访问一般采用遍历整个数组的
方式进行(使用循环语句对数组内部的数据访问)并且
数组在使用时可以不用初始化(本人使用的为C99标准的C),
同样数组也可以对其进行单独的操作例如:a[3] = 15;
这条语句可以对指定的数组内位置的数据进行改动。
数组扩展
此文的示例为一维数组(一行一列行列式),但在使用中
往往需要更高维度的表示数据如:二维图片中的显示需要使用二
维数据来表示它的每个像素点具体情况。二维数组定义:a[5][5]
如同一维数组一样使用但是在定义赋值时一维数组可以使用
int a[5] = {1,2,3,4,5};语句进行赋值但二维数组需要使用
int a[2][3] = {{1,2,3},{4,5,6}};语句进行赋值
结构体的表示
上面介绍了在相同的类型数据中集合表示方法,但在日常生活中,我们有很多情况是
需要很多不同类型的数据来记录某一件事物的。如:
当记录一名学生的数据需要使用:字符类型记录名字,整型记录他的成绩,浮点型记
录他的年平均成绩等,此时我们便不能够使用简单的数组表示,此时引入结构体与联
合体的概念
#include <stdio.h>
void main()
{
struct student
{
int num;
char name[30];
float score;
}
stu[3] = { { 1,"LiBai",88 },{ 2,"DuFu",72 }, {3,"LiQingZhao",66 }};
//结构体数组的各个元素在内存中连续存放
printf("num:%d name:%s score:%f\n", stu[0].num, stu[0].name, stu[0].score);
//stu[0].num 表示数组stu[0]中的成员num
printf("num:%d name:%s score:%f\n", stu[1].num, stu[1].name, stu[1].score);
}
运行结果
共用体与结构体的定义形式相似。但它们的含义不同:
①结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元;
②共用体变量所占的内存长度等于最长的成员的长度。
联合体的表示
在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。
union 共用体名
{
成员列表
}
变量列表
共用体的应用举例
name |
position |
job/num |
libai |
student |
20202 |
dufu |
teacher |
Chinese |
把这些信息放在同一个表格中,并设计程序输入人员信息然后输出
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct
{
char name[10]; //姓名
char position; //职位
union
{
char job[8]; //科目
int num; //学号
}st; //共用体
}ts[2]; //结构体 输入2次数据
void main()
{
int i;
for (i = 0;i < 2;i++)
{
printf("输入:\n");
scanf_s("%s%c", &ts[i].name,10, &ts[i].position,1);//姓名职位
if (ts[i].position == 's') //如果是学生
scanf_s("%d", &ts[i].st.num);
else //如果是老师
scanf_s("%s", &ts[i].st.job,8); //scanf_s(类型,地址,参数长度);
fflush(stdin); //清空输入缓冲区
}
printf("姓名\t职位\t学号/科目\n");
for (i = 0;i < 2;i++)
{
if (ts[i].position == 's')
printf("%s\t%c\t%d\n", ts[i].name, ts[i].position, ts[i].st.num); //输出信息
else
printf("%s\t%c\t%s\n", ts[i].name, ts[i].position, ts[i].st.job); //输出信息
}
}
运行结果
二、sizeof()的使用
sizeof是计算对象所占的字节数,通常用来查看变量、数组或结构体等所占的字节个数。
sizeof( 计算对象 )
#include <stdio.h>
void main()
{
int a[] = { 1,2,3,4,5 };
char st = 'g';
int b=0, c=0, d=0,e=0,f=0; //变量初始化
//sizeof(a)计算对象a所占的字节数,a通常用来查看变量、数组或结构体等
//分别求字符变量st,数组a[],a[0],int类型,char类型所占的字节数大小
b = sizeof(st);
c = sizeof(a);
d = sizeof(a[0]);
e = sizeof(int);
f = sizeof(char);
printf("b=%d\nc=%d\nd=%d\ne=%d\nf=%d\n", b,c,d,e,f);
}
运行结果
三、指针的使用
指针变量
在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
未完待续。。。
指针与数组