本实例要求输入N个整数,记录对应的顺序以及对应的序号,并按照从小到大的顺序输出,要求当输入的两个整数相等的时候,整数的排列顺序由输入的先后顺决定

运用结构数组

本实例要求输入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;
}

img