学历课程
例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