运用结构数组
本实例要求输入N个整数,记录对应的顺序以及对应的序号,并按照从小到大的顺序输出,要求当输入的两个整数相等的时候,整数的排列顺序由输入的先后顺序决定。通过本实验要求学生掌握结构数组的初始化及使用方法。
,-..运行结果:input 5 data:6 5 3 7 6
data 3,pos 2
data 5,pos 1
data6,pos 0
data 6,pos 4
data 7,pos 3
我的思路如下:
1、先定义一个结构用于存储每一项数据的信息,两个成员变量,一个用于记录整数,一个用于记录输入序号,
定义输入的N个整数为几个
2、定义一个结构数组,用于存储输入的N个整数及其序号
3、用一个while循环,获取输入的N个整数及其序号到结构数组
4、用两个for循环,逐一比较结构数组当前位置的元素的整数是否比后面的元素的大,如果大就交换这两个元素,
如果两个元素的整数相等,但是序号前面的比后面的大,则交换两个元素,经过这个步骤,达到排序结构数组的目的
5、打印结构数组信息
代码如下:
#include <stdio.h>
#define N 5
struct numMsg{
int data;
int pos;
};
int main(void){
struct numMsg nm[N];
int i=0;
printf("input %d data:",N);
while(i<N){ //获取N个整数到结构数组nm中,并把其序号存入成员变量pos中
scanf("%d",&nm[i].data);
nm[i].pos=i;
i++;
}
int j;
int temp;
int tpos;
//将结构数组的按其存入的整数从小到排序
for(i=0;i<N-1;i++){
for(j=i;j<N;j++){
//如果结构数组前面的数比后面的大,则交换这两个元素
//实现从小到大排序
if(nm[i].data>nm[j].data){
temp = nm[i].data;
nm[i].data = nm[j].data;
nm[j].data = temp;
tpos=nm[i].pos;
nm[i].pos=nm[j].pos;
nm[j].pos=tpos;
}
//如果结构数组前面和后面的数一样大,但前面的序号比后面的大,则交换这两个元素
//实现整数相等时,按其输入顺序决定先后
if(nm[i].data==nm[j].data&&nm[i].pos>nm[j].pos){
temp = nm[i].data;
nm[i].data = nm[j].data;
nm[j].data = temp;
tpos=nm[i].pos;
nm[i].pos=nm[j].pos;
nm[j].pos=tpos;
}
}
}
//打印结果
for(i=0;i<N;i++){
printf("data %d,pos %d\n",nm[i].data,nm[i].pos);
}
return 0;
}