C语言结构体

原创 2013年12月06日 10:31:59
1、struct 的嵌套结构体
#include<stdio.h>
struct date
	{
		int month;
		int day;
		int year;
	};
struct student
	{
		char *name;
		int age;
		char sex;
		struct date birthday;
		float score;
}boy1,*boy2,boy3={"wjy",22,'W',11,13,1991,80};
main(){
boy1.name = "yzmin";
boy1.age = 22;
boy1.sex = 'M';
boy1.score = 80;
boy1.birthday.year = 1991;
boy1.birthday.month = 5;
boy1.birthday.day = 10;
printf("Name = %s\nAge = %d\nSex = %c\nScore = %2.1f\nBirthday = %d-%d-%d\n",boy1.name,boy1.age,boy1.sex,boy1.score,boy1.birthday.year,boy1.birthday.month,boy1.birthday.day);
boy2 = &boy1;
printf("Name = %s\nAge = %d\nSex = %c\nScore = %2.1f\nBirthday = %d-%d-%d\n",boy2->name,boy2->age,boy2->sex,boy2->score,boy2->birthday.year,boy2->birthday.month,boy2->birthday.day);
printf("Name = %s\nAge = %d\nSex = %c\nScore = %2.1f\nBirthday = %d-%d-%d\n",boy3.name,boy3.age,boy3.sex,boy3.score,boy3.birthday.year,boy3.birthday.month,boy3.birthday.day);
}


2、结构体的数组方式

#define NUM 3
struct mem
{
    char name[20];
    char phone[10];
};
main()
{
    struct mem man[NUM];
    int i;
    for(i=0;i<NUM;i++)
     {
      printf("input name:\n");
      gets(man[i].name);
      printf("input phone:\n");
      gets(man[i].phone);
     }
    printf("name\t\t\tphone\n\n");
    for(i=0;i<NUM;i++)
      printf("%s\t\t\t%s\n",man[i].name,man[i].phone);
}


3、计算学生的平均成绩和不及格的人数。

struct stu
{
    int num;
    char *name;
    char sex;
    float score;
}boy[5]={
          {101,"Li ping",'M',45},
          {102,"Zhang ping",'M',62.5},
          {103,"He fang",'F',92.5},
          {104,"Cheng ling",'F',87},
          {105,"Wang ming",'M',58},
        };
main()
{
    int i,c=0;
    float ave,s=0;
    for(i=0;i<5;i++)
    {
      s+=boy[i].score;
      if(boy[i].score<60) c+=1;
    }
    printf("s=%.2f\n",s);
    ave=s/5;
    printf("average=%.2f\ncount=%d\n",ave,c);
}

本例程序中定义了一个外部结构数组boy,共5个元素,并作了初始化赋值。在main函数中用for语句逐个累加各元素的score 成员值存于s之中,如score的值小于60(不及格)即计数器C加1,循环完毕后计算平均成绩,并输出全班总分,平均分及不及格人数。


4、结构体的指针

struct stu
    {
      int num;
      char *name;
      char sex;
      float score;
    } boy1={102,"Zhang ping",'M',78.5},*pstu;
main()
{
    pstu=&boy1;
    printf("Number=%d\nName=%s\n",boy1.num,boy1.name);
    printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);
    printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);
    printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);
    printf("Number=%d\nName=%s\n",pstu->num,pstu->name);
    printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);
}

    本例程序定义了一个结构stu,定义了stu类型结构变量boy1并作了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1。然后在printf语句内用三种形式输出boy1的各个成员值。从运行结果可以看出:
      结构变量.成员名
      (*结构指针变量).成员名
      结构指针变量->成员名
这三种用于表示结构成员的形式是完全等效的。


5、用指针变量输出结构数组

struct stu
{
    int num;
    char *name;
    char sex;
    float score;
}boy[5]={
          {101,"Zhou ping",'M',45},
          {102,"Zhang ping",'M',62.5},
          {103,"Liou fang",'F',92.5},
          {104,"Cheng ling",'F',87},
          {105,"Wang ming",'M',58},
        };
main()
{
 struct stu *ps;
 printf("No\tName\t\t\tSex\tScore\t\n");
 for(ps=boy;ps<boy+5;ps++)
 printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);
}

在程序中,定义了stu结构类型的外部数组boy并作了初始化赋值。在main函数内定义ps为指向stu类型的指针。在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy数组中各成员值。

应该注意的是,一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,但是,不能使它指向一个成员。也就是说不允许取一个成员的地址来赋予它。因此,下面的赋值是错误的。
    ps=&boy[1].sex;
而只能是:
    ps=boy;(赋予数组首地址)
或者是:
    ps=&boy[0];(赋予0号元素首地址)

6、计算一组学生的平均成绩和不及格人数。用结构指针变量作函数参数编程。

struct stu
{
    int num;
    char *name;
    char sex;
    float score;}boy[5]={
        {101,"Li ping",'M',45},
        {102,"Zhang ping",'M',62.5},
        {103,"He fang",'F',92.5},
        {104,"Cheng ling",'F',87},
        {105,"Wang ming",'M',58},
      };
main()
{
    struct stu *ps;
    void ave(struct stu *ps);
    ps=boy;
    ave(ps);
}
void ave(struct stu *ps)
{
    int c=0,i;
    float ave,s=0;
    for(i=0;i<5;i++,ps++)
      {
        s+=ps->score;
        if(ps->score<60) c+=1;
      }
    printf("s=%f\n",s);
    ave=s/5;
    printf("average=%f\ncount=%d\n",ave,c);
}

本程序中定义了函数ave,其形参为结构指针变量ps。boy被定义为外部结构数组,因此在整个源程序中有效。在main函数中定义说明了结构指针变量ps,并把boy的首地址赋予它,使ps指向boy数组。然后以ps作实参调用函数ave。在函数ave中完成计算平均成绩和统计不及格人数的工作并输出结果。
由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。

7、分配一块区域,输入一个学生数据。

main()
{
    struct stu
    {
      int num;
      char *name;
      char sex;
      float score;
    }  *ps;
    ps=(struct stu*)malloc(sizeof(struct stu));
    ps->num=102;
    ps->name="Zhang ping";
    ps->sex='M';
    ps->score=62.5;
    printf("Number=%d\nName=%s\n",ps->num,ps->name);
    printf("Sex=%c\nScore=%f\n",ps->sex,ps->score);
    free(ps);
    ps = NULL;
}
本例中,定义了结构stu,定义了stu类型指针变量ps。然后分配一块stu大内存区,并把首地址赋予ps,使ps指向该区域。再以ps为指向结构的指针变量对各成员赋值,并用printf输出各成员值。最后用free函数释放ps指向的内存空间。整个程序包含了申请内存空间、使用内存空间、释放内存空间三个步骤,实现存储空间的动态分配。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C语言----结构体

一、结构体赋值数组本身是不能直接相互赋值的; 可以通过把 数组 放在 结构体里 ,用结构体去赋值,因为结构体是可以相互赋值的。二、 结构体内存对齐1、以最⼤大成员变量类型所占空间的最小整数倍为分配单...

C语言结构体实现方法

  • 2015-03-21 01:24
  • 548KB
  • 下载

C语言结构体

  • 2013-03-27 15:50
  • 508KB
  • 下载

c语言结构体的偏移、c++

c语言中关于结构体的位置偏移原则简单,但经常忘记,做点笔记以是个记忆的好办法 原则有三个: a.结构体中的所有成员其首地址偏移量必须为器数据类型长度的整数被,其中第一个成员的首地址偏移量为0, 例如,...

c语言结构体

  • 2013-01-09 13:03
  • 1.40MB
  • 下载

c语言结构体

  • 2013-12-08 13:47
  • 704KB
  • 下载

C语言中将结构体写入文件

可以使用fwrite()将一个结构体写入文件:   fwrite(&some_struct,sizeof somestruct,1,fp); 对应的fread函数可以再把它读出来,此处fwrite...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)