
例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