全站搜索未启用
跳到主要内容

文本三:结构成员的访问

1.访问结构成员的直接运算符(.):对象.成员

struct Person{char name[10]; int age;};

struct Person p1, p2={"huping", 50};

strcpy(p1.name,"wangming");  //采用点运算符访问成员
p1.age=39;                   //采用点运算符访问成员
int x=p1.age+p2.age;         //x值为89
printf("%s\n", p1.name);

2.访问结构成员的间接运算符(->):指针对象->成员

struct Person *px=&p2;

strcpy(px->name,"LiuXin");

 // px->name等同于(*px).name,均表示访问p2.name

px->age=52;  // px->age等同于(*px).age,均为p2.age

3.结构赋值操作:对象=对象

struct Person x1={"AnJie",60},x2;

x2=x1 //把x1对象的值赋给x2对象中

 使用结构的程序举例

程序1:

#include<stdio.h>{

struct AB{char a[10]; int b;}; //全局作用域类型

struct AB r[5]={{"xxk",35}, {"wrong",45},

 {"xc",23}, {"tsh",18}, {"chs",38}}; //全局数组

void main() {

 int i, k=0;

for(i=1; i<5; i++)

 if(r[i].b<r[k].b) k=i;

printf("%s %d\n",r[k].a,r[k].b);

}  //输出结果:tsh 18

程序2:功能:对学生结构数组中的学生记录按学号进行排序。

首先定义学生记录结构类型

#include<stdio.h></stdio.h>

#include<string.h></string.h>

struct student { //定义学生记录结构

char num[8]; //学号

char name[10]; //姓名

short int grade; //成绩

};

  接着给出结构类型的别名和学生结构数组的定义和初始化。

typedef struct student Studen

Student a[5]={ {"cs102","张平",78},{"ch231","王广敏",69},

  {"ec115","刘文",82}, {"pt327","古明",72}, {"bx214","张文远",65}};

  对数组a[n]进行输出的函数定义

void Output(Student a[], int n) {

  int i;

  printf("显示%d个学生:\n",n);

  for(i=0; i<n; i++) {

   printf("%-8s %-10s %d\n",a[i].num, a[i].name,a[i].grade);

  } //格式符负号(-)为左对齐显示

  printf("\n");

  }

  对a[n]中的记录按学号升序排列

void Range(Student a[], int n) {

  int i,j,k;

  for(i=1; i< n; i++) {

   k=i-1;

   for(j=i; j<n; j++)

    if(strcmp(a[j].num, a[k].num)<0) k=j;

   {Student x=a[i-1]; a[i-1]=a[k]; a[k]=x;}

  }

}

利用下面的主函数来调用上面的输出函数Output()和排序函数Range(),实现程序功能。

void main(){

  Output(a,5);

  Range(a,5);

  Output(a,5);

}

最后修改: 2019年09月26日 Thursday 19:10