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

视频六:使用结构的应用编程举例 视频

例1.结构类型作为函数的参数类型

struct Work{char a[10]; int b;};
int Search(struct Work d[], int n, struct Work x) {
  int i;
  for(i=0; i<n; i++) 
    if(strcmp(d[i].a, x.a)==0) return i; 
  return -1;
}  //从数组d中查找值为x的函数

#include <stdio.h>
#include<string.h>
void main() {
  struct Work s[3]={{"abc",80}, {"def",75}, {"gt",78}};
  struct Work xx={"def"};
  int k=Search(s, 3, xx);
  printf("%-5s %d\n", s[k].a, s[k].b);
}  //def  75

例2. 结构类型作为函数的返回值类型

struct Work{char a[10]; int b;};
struct Work* input(int n) {
  struct Work * s=calloc(n, sizeof(struct Work)); 
  int i;
  printf("输入%d个记录:\n",n);
  for(i=0; i<n; i++)
    scanf("%s %d",s[i].a,&s[i].b);
  return s;  //返回数组的首地址
}

void output(struct Work *s, int n)
{    //struct Work *s同struct Work s[]
  int i;
  for(i=0; i<n; i++)
    printf("%s %d\n", s[i].a,s[i].b);
  printf("\n");
}

#include
#include
void main() {
  struct Work *s; 
  s=input(5); 
  output(s,5); 
}

例3.根据要求编写一个程序

假定要编写一个程序,要求首先从键盘上输入一批学生的学生号和成绩,接着对它们按成绩的升序排列,最后按成绩升序输出所有学生的学生号和成绩。

分析:此程序需要定义一个学生的结构类型,用来存储学生的学生号和成绩。

struct Student {char numb[10]; int grade;};

接着要定义一个一维数组来存储一批学生的记录,假定用N表示待输入的学生的个数。

#define N 20  //设N为20

#define N 20  //设N为20

对学生记录的输入、输出和排序,最好都定义成函数模块,然后通过主函数调用它们实现程序功能。这样能够使程序结构简单、层次分明。

输入学生记录的函数定义如下:

void Input(struct Student a[], int n) {
  int i;
  for(i=0; i<n; i++) {
    printf("输入第%d个学生的记录:",i+1);
    scanf("%s %d",a[i].numb, &a[i].grade);
  }
}

输出学生记录的函数定义如下:

void Output(struct Student a[], int n) {
  int i;
  for(i=0; i<n; i++) 
    printf("%-10s %d\n", a[i].numb,a[i].grade);
}

按成绩排序学生记录的函数定义如下:

void Sort(struct Student a[], int n) {
  int i,j,k;
  struct Student x;
  for(i=1; i<n; i++) {
    k=i-1; 
    for(j=i; j<n; j++) 
      if(a[j].grade<a[k].grade) k=j;
    x=a[i-1]; a[i-1]=a[k]; a[k]=x;
  }
  printf("排序完成!\n");
}

该程序的主函数定义如下:

#include<stdio.h>
void main(void) {
  int n;
  printf("输入待处理的记录数: ");
  scanf("%d",&n);
  Input(List,n);
  Output(List,n);
  Sort(List,n);
  Output(List,n);
}
输入待处理的记录数: 3
输入第1个学生的记录:xxk 82
输入第2个学生的记录:weir 93
输入第3个学生的记录:baoju 74
xxk        82
weir       93
baoju      74
排序完成!
baoju      74
xxk        82
weir       93