十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
可以将struct定义在头文件里(header file 以.h为后缀名),在其他文件里面引用该头文件就可以。
为建邺等地区用户提供了全套网页设计制作服务,及建邺网站建设行业解决方案。主营业务为成都网站建设、网站制作、建邺网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
例子如下在同一文件夹下创建两个文件point.h和test1.c:
/* point.h
* define the point struct
*/
typedef point{
int x;
int y;
}Point;
/* test1.c
* test the point struct
*/
#include stdio.h
#include "point.h" //你自己写的头文件
int main(){
Point p;
p.x = 3;
p.y = 4;
printf("The point is(%d, %d)\n", p.x, p.y);
return 0;
}
题外话,如果你想定义一个结构,可以继承,可以引用,你可以看看C++关于类的概念,C也可以实现,比较复杂
C++里面
可以这么写,定义类的数据,结构,成员函数等等
/[0] class cell
class PvCell{
//instance
int pos;
bool exist;
double cell_width;
double cell_length;
double distance_topcelledge;
double distance_bottemcelledge;
public:
//constructor;
PvCell();
PvCell (int p, bool e, double cl, double cw, double dt, double db);
//function
void setPos(int m){ pos = m;}
void setExist(bool b){exist = b;}
void setCellLength(double celll){cell_length = celll;}
void setCellWidth(double cellw){cell_width = cellw;}
void setDistanceTopCellEdge(double top ){distance_topcelledge = top;}
void setDistanceBottomCellEdge(double bot){distance_bottemcelledge = bot;}
int getPos(void){return pos;}
bool getExist(void){return exist;}
double getCellLength(void){return cell_length;}
double getCellWidth(void){return cell_width;}
double getDistanceTopCellEdge(void){return distance_topcelledge;}
double getDistanceBottomCellEdge(void){return distance_bottemcelledge;}
void print() const;
void copycellfrom(PvCell sourceCell);
void copycellto(PvCell targetCell);
};
//[0]
CELL是单元数组(Cell Array)将类型不同的相关数据集成到一个单一的变量中,使得大量相关数据的引用和处理变得简单方便;需要注意的是,单元数组仅仅是承载其他数据类型的容器,大部分的数学运算只是针对其中的具体数据进行的,而非针对单元数组本身进行。
定义
1. 细胞型数据的定义:
1)直接赋值定义:细胞型变量在定义时需要使用大括号,元素用逗号隔开
例: B = {1:4,A,‘abcd’}
2)使用cell函数,预先为细胞型变量定义空间
例: A = cell(m,n) 定义一个空的m行n列的cell类型
扩展资料:
C语言是普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,因此相对于其它编程语言,它具有自己独特的特点。具体体现在以下三个方面:
其一,广泛性。C 语言的运算范围的大小直接决定了其优劣性。C 语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。此外,C 语言包含了字符型、指针型等多种数据结构形式,因此,更为庞大的数据结构运算它也可以应付。
其二,简洁性。9 类控制语句和32个KEYWORDS是C语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的操作,提高其工作效率,同 时还能够支持高级编程,避免了语言切换的繁琐。
其三,结构完善。C语言是一种结构化语言,它可以通过组建模块单位的形式实现模块化的应用程序,在系统描述方面具有显著优势,同时这一特性也使得它能够适应多种不同的编程要求,且执行效率高。
参考资料来源:百度百科-CELL
cell数组一般被叫做元胞数组,它的每个单元可以储存不同的数据类型,可以是数值,字符或矩阵或元胞数组等,类似于学过的c语言里的结构体
1.cell数组的创建
可以直接通过{}类似于矩阵的直接赋值:a={'winter',123,'coming','哈哈'};
也可以通过cell函数预分配内存,再赋值:a=cell(1,4);a={'winter',123,'coming','哈哈'};
2.cell数组的访问
与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他操作基本一样。
3.cell数组相关的函数
cell:创建空的元胞数组,预分配内存
celldisp:显示元胞数组所有内容
cellplot:利用图形方式显示内容(因缺思厅!)
cell2mat:将元胞数组成普通矩阵(要求cell元胞数组的所有内容都必须为相同数据类型,可以为字符,会转化为字符矩阵)
mat2cell:将普通矩阵转化成元胞数组
iscell:判断输入是否为元胞数组
cellfun:为cell数组的每个cell单元执行指定的函数,fun可以是特殊的函数或者句柄
b={[1,2,1];[2,1,1];[1,1,2]};
c=cellfun(@(x)(mat2str(x)),b,'un',0)
更一般的例子参见
4.cell单元的删除
我们知道矩阵及矩阵的删除可以通过[]实现:
元胞数组操作类似但和其赋值一样有区别,区别就在于{}和()
a={1,2,3};
a{1}=[];%并不能删除第一个cell单元,只是变成空值
a(1)=[];%删除第一个单元
a(:)=[];%一次性删除所有cell单元
如果p为一个数,那么h(1)=p,是没有问题的。
如果p为一个向量,那么h(1,:)=p是没有问题的。
如果p是一个矩阵的话,上面的两种赋值方法都是会有错误的。
那么要如何处理呢?
这时就用到了cell数据类型了。cell的每个单元都可以存储任何数据,比如传递函数等。当然,存储矩阵更是没有问题的了。但是用cell数据类型之前,要先初始化。
a=cell(n,m)
那么就把a初始化为一个n行m列的空cell类型数据。
如何赋值呢?
a{1,1}=rand(5)
那么a的1行1列的单元中存储的就是一个随机的5×5的方阵了。
那么要用第一个单元中的方阵中的某个值呢?
可以如下引用:a{1,1}(2,3)
就可以了,引用cell单元时要用{},再引用矩阵的某个数据就要用()了。
cell单元中的每个单元都是独立的,可以分别存储不同大小的矩阵或不同类型的数据。
#include stdio.h
#include stdlib.h
struct cell
{
char* name;
int time;
int seat;
int saled;
} a,b,c,d;
int sel=0;
void title();
void saleproc();
int saleThread(struct cell* ce,int dd);
void tiupiaoproc();
int tiupiaoThread(struct cell* ce);
void count();
int init(struct cell* ce,char* name,int time,int seat)
{
ce-name=name;
ce-time=time;
ce-seat=seat;
ce-saled=0;
return 1;
}
int saleThread(struct cell* ce,int dd)
{
if((ce-seat-ce-saled)=dd)
{
ce-saled+=dd;
printf("售票成功!按ESC键返回主菜单\n");
fflush(stdin);
int cc=_getche();
return 1;
}
else
{
printf("售票失败---余票不足!按ESC键返回主菜单\n");
fflush(stdin);
int cc=_getche();
return 0;
}
}
void saleproc()
{
int f=1;
while(f)
{
system("cls");
printf("***********************************\n");
printf("* *\n");
printf("* 厅 影片 时间 余票 *\n");
printf("* *\n");
printf("* A %s %d:%d %3d *\n",a.name,a.time/60,a.time%60,a.seat-a.saled);
printf("* *\n");
printf("* B %s %d:%d %3d *\n",b.name,b.time/60,b.time%60,b.seat-b.saled);
printf("* *\n");
printf("* C %s %d:%d %3d *\n",c.name,c.time/60,c.time%60,c.seat-c.saled);
printf("* *\n");
printf("* D %s %d:%d %3d *\n",d.name,d.time/60,d.time%60,d.seat-d.saled);
printf("* *\n");
printf("***********************************\n");
printf("请选择放映厅(a,b,c,d)和要购的票数(按ESC键返回主菜单)(格式: a 5):\n");
fflush(stdin);
char cc;
int dd;
dd=_getche();
if(dd==27)
{
f=0;
break;
}
else
{
cc=(char)dd;
}
scanf("%d",dd);
switch(cc)
{
case 'a':
saleThread(a,dd);
f=0;
break;
case 'b':
saleThread(b,dd);
f=0;
break;
case 'c':
saleThread(c,dd);
f=0;
break;
case 'd':
saleThread(d,dd);
f=0;
break;
default:
break;
}
}
title();
}
int tiupiaoThread(struct cell* ce)
{
if(ce-saled==0)
{
printf("撞尼玛鬼了 老子一张票都没卖, 哪来的退票???\n");
fflush(stdin);
int cc=_getche();
return 0;
}
ce-saled--;
printf("退票成功! 按任意键返回主菜单\n");
fflush(stdin);
int cc=_getche();
return 1;
}
void tiupiaoproc()
{
int f=1;
while(f)
{
system("cls");
printf("***********************************\n");
printf("* *\n");
printf("* 退 票 *\n");
printf("* *\n");
printf("* A %-20s *\n",a.name);
printf("* *\n");
printf("* B %-20s *\n",b.name);
printf("* *\n");
printf("* C %-20s *\n",c.name);
printf("* *\n");
printf("* D %-20s *\n",d.name);
printf("* *\n");
printf("***********************************\n");
printf("请输入要退的厅(a,b,c,d):\n");
char cc;
fflush(stdin);
scanf("%c",cc);
if(cc==' ')
{
f=0;
break;
}
switch(cc)
{
case 'a':
tiupiaoThread(a);
f=0;
break;
case 'b':
tiupiaoThread(b);
f=0;
break;
case 'c':
tiupiaoThread(c);
f=0;
break;
case 'd':
tiupiaoThread(d);
f=0;
break;
default:
break;
}
}
title();
}
void countproc()
{
int f=1;
while(f)
{
system("cls");
printf("***********************************\n");
printf("* *\n");
printf("* 统 计 *\n");
printf("* *\n");
printf("* A厅: 余票 %3d 上座率 %5.2f%% *\n",a.seat-a.saled,(((float)a.saled/(float)a.seat)*100));
printf("* *\n");
printf("* B厅: 余票 %3d 上座率 %5.2f%% *\n",b.seat-b.saled,(((float)b.saled/(float)b.seat)*100));
printf("* *\n");
printf("* C厅: 余票 %3d 上座率 %5.2f%% *\n",c.seat-c.saled,(((float)c.saled/(float)c.seat)*100));
printf("* *\n");
printf("* D厅: 余票 %3d 上座率 %5.2f%% *\n",d.seat-d.saled,(((float)d.saled/(float)d.seat)*100));
printf("* *\n");
printf("***********************************\n");
printf("按ESC键返回主菜单!\n");
fflush(stdin);
int cc=_getche();
if(cc==27)
{
f=0;
break;
}
}
title();
}
void title()
{
int f=1;
while(f)
{
system("cls");
printf("***********************************\n");
printf("* *\n");
printf("* 欢迎光临牛B电影院 *\n");
printf("* *\n");
printf("* 1. 售 票 *\n");
printf("* *\n");
printf("* 2. 退 票 *\n");
printf("* *\n");
printf("* 3. 统 计 *\n");
printf("* *\n");
printf("* 4. 退 出 *\n");
printf("* *\n");
printf("***********************************\n");
printf("请选择:(1,2,3,4) \n");
fflush(stdin);
scanf("%d",sel);
getchar();
switch(sel)
{
case 1:
saleproc();
f=0;
break;
case 2:
tiupiaoproc();
f=0;
break;
case 3:
countproc();
f=0;
break;
case 4:
system("exit");
f=0;
break;
default:
break;
}
}
}
int main(int argc, char *argv[])
{
init(a,"钢铁侠3",18*60+30,150);
init(b,"致青春",19*60+30,150);
init(c,"姜戈",20*60+30,150);
init(d,"生化危机4",20*60+20,100);
title();
return 0;
}