成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。
创新互联是专业的绛县网站建设公司,绛县接单;提供成都做网站、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行绛县网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
对每个成员也必须做类型声明。
其形式为:
类型声明符 成员名;
例如:
注意, 最后括号外面的;分号是不可少的 。
结构定义之后,才可以进行变量声明。
凡声明为结构 stu 的变量都由上述4个成员组成。
由此可见,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。
声明结构变量 有以下三种方法。
使用上面定义的stu为例:
如:
也可以用宏定义使一个符号常量来表示一个结构类型。例如:
例如:
这种形式的声明的一般形式为:
例如:
这种声明的一般形式为:
第三种方法与第二种方法的区别在于第三种方法中省去了结构名,而直接给出结构变量。
在程序中使用结构变量时,往往不把她作为一个整体来使用。
在ANSI C中除了允许有相同类型的结构变量相互赋值以外,一般对结构变量的使用,包括 赋值、输入、输出、运算 等都是通过结构变量的成员来实现的。
表示结构变量成员的一般形式为:
结构变量名.成员名
例如: boy1.num boy2.sex
如果成员本身又是一个结构,则必须逐级找到最低级的成员才能使用。如: boy1.birthday.month
结构变量的赋值就是给各成员赋值。
数组的元素也可以是结构类型的。
因此可以构成结构型数组。
初始化赋值:
当然也可以在定义 stu结构 时同时声明 pstu。
赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。
如果 boy 是被声明为 stu类型 的结构变量。
则:
有了结构指针变量,就能更方便地访问结构变量的各个成员。
其访问的一般形式为:
(*结构指针变量).成员名
或
结构指针变量-成员名
例如: (*pstu).num 或 pstu-num
例如:
介绍数组的时候,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。
C语言中不允许动态数组类型。
例如:
但是又有此需求,为了解决这个问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。
常用的内存管理函数有3个:
例子:分配一块区域,输入一个学生数据
上面的例子采用了动态分配的办法为一个结构分配内存空间。
每一次分配一块空间可用来存放一个学生的数据,我们可称之为一个节点。
有多少个学生就应该申请分配多少块内存空间,也就是说要建立多少个节点。
当然用结构数组也可以完成上述工作,但如果预先不能准确把握学生人数,也就无法确定数组大小。
而且当学生留级、退学之后也不能把该元素占用的空间从数组中释放出来。
用动态存储的方法可以很好地解决这些问题。
有一个学生就分配一个节点,无须预先确定学生的准确人数,某学生退学,可删去该节点,并释放该节点占用的存储空间,从而节约了宝贵的内存资源。
另一方面,用数组的方法必须占用一块连续的内存区域。
而使用动态分配时,每个节点之间可以是不连续的(节点内是连续的)。
节点之间的关系可以用指针实现。
即在节点结构中定义一个成员项来存放下一节点的首地址,这个用于存放地址的成员,常把他称为指针域。
可在第一个节点的指针域内 存入第二个节点的首地址,在第二个节点的指针域内 又存入第三个节点的首地址,如此串联下去直到最后一个节点。
最后一个节点因无后续节点连接,其指针域可赋值 0
这种连接方式,在数据结构中称为“链表”。
链表的基本操作主要有以下几种:
例子:建立一个三个节点的链表,存放学生数据。为简单起见,我们假定学生数据结构中只有学号和年龄两项。可编写一个建立链表的函数create。程序如下:
create函数 用于建立一个有 n个节点 的链表,他是一个指针函数,他返回的指针指向 stu结构。
在create函数内定义了三个 stu结构 的指针变量。
head为头指针,pf为指向两相邻节点的前一节点的指针变量。
pb为后一节点的指针变量。
枚举是一种 基本数据类型 ,而不是一种 构造类型 ,因为他不能再分解为任何基本类型。
enum 枚举名{ 枚举值表 };
例如: enum weekday { sun,mou,tue,wed,thu,fri,sat };
enum weeakday a,b,c;
或者为:
enum weekday { sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者为:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;
例子:
说明:
只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如:
a=sun;b=mon; 是正确的
a=0;b=1; 是错误的。
如果一定要把数值赋予枚举变量,则必须使用强制类型转换。
如: a=(enum weekday)2;
还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。
例子:
typedef定义的一般形式为:
typedef 原类型名 新类型名
其中原类型名中含有定义部分,新类型名一般用大写表示,一般用大写表示,以便于区别。
有时也可用 宏定义 来代替 typedef 功能,但是 宏定义 是由 预处理 完成的,而 typedef 则是 在编译时 完成的,后者更为灵活方便。
使用 typedef 定义数组、指针、结构等类型将带来很大的方便,不仅使书写简单而且使意义更加明确,因而增强了可读性。
例如:
又如:
main函数,一般初级编程不用到参数,
例如main(){};
可是牵扯到递归调用和函数返回值的时候就要用到了主函数的参数了,用来记录函数返回值的。
对main()函数始终作为主调函数处理,也就是说,允许main()调用其它函数并传递参数。事实上,main()函数既可以是无参函数,也可以是有参的函数。对于有参的形式来说,就需要向其传递参数。但是其它任何函数均不能调用main()函数。当然也同样无法向main()函数传递,只能由程序之外传递而来。
main()函数的带参的形式:
main(argc,argv)
int argc,char *argv[];
{
};
从函数参数的形式上看,包含一个整型和一个指针数组。当一个C的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件,这是可以在操作系统下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由系统在启动运行时传递参数了。
在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。
格式为:
命令参数1参数2....参数n
此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。
命令行与main()函数的参数存在如下的关系:
设命令行为:program str1 str2 str3 str4 str5
其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6]。
数组的各指针分别指向一个字符串。应当引起注意的是接收到的指针数组的各指针是从命令行的开始接收的,首先接收到的是命令,其后才是参数。
明白不,还不懂,看看谭浩强的那本经典的c语言吧。
祝你成功!
1.算数函数
1.1产生随机数
rand()
1.2取绝对值
fabs()
1.3取复数的绝对值
cabs(struct complex i)
1.4浮点数的绝对值
fabs()/fabsf()/fabsl()
1.5取余
fmod(double, double)
1.6向上取整
ceil()/ceilf()/ceill()
1.7向下取整
floor()/floorf()/floorl()
1.8求最大值
fmax()/fmaxf()/fmaxl()
1.9求最小值
fmin()/fminf()/fminl()
1.10四舍五入
round()/roundf()/roundl()
2.指数与对数
2.1求 n 的 m 次方的值
pow(n, m)/powf(n, m)/powl(n, m)
2.2求 e 的 x 次方
exp(x)/expf(x)/expl(x)
2.3以 e 为底的对数值
log()/logf()/logl()
2.4以10为底的对数
log10()/log10f()/log10l()
2.5开平方(根号)
sqrt()
3.三角函数
3.1正弦值
sin()/sinf()/sinl()
3.2余弦值
cons()/cosf()/cosl()
3.3正切值
tan()/tanf()/tanl()
3.4双曲线正弦值
sinh()/sinhf()/sinhl()
3.5双曲线余弦值
cosh()/coshf()/coshl()
3.4双曲线正切值
tanh()/tanhf()/tanhl()
4.反三角函数
4.1反正弦值
asin()/asinf()/asinl()
4.2反余弦值
acos()/acosf()/acosl()
4.3反正切值
atan()/atanf()/atanl()
4.4反双曲线正弦值
asinh()/asinhf()/asinhl()
4.5反双曲线余弦值
acosh()/acoshf()/acoshl()
4.6反双曲线正切值
atanh()/atanhf()/atanhl()
包括返回值,函数名,形参列表和函数体四个部分。
例如 :
int findmin(int a[],int n){
//函数体
return min;
}
以上函数int 是返回值,findmin是函数名, int a[] int n是形参列表