《IOS_作业C语言》高级指针(结构体指针、结构体数组指针、结构体数组指针,作为函数的参数使用、预编译指令)

//1.写一个函数交换两个结构体变量
    Change stu1={"ningning",1,98};
    Change stu2={"huanhuan",3,90};
    Change stus[2]={stu1,stu2};
    Change *p=stus;
    //    for (int i=0; i<2; i++) {
    //        printf("name=%s,num=%d,score=%f\n",(p+i)->name,(p+i)->num,(p+i)->score);
    //
    //    }
    printf("p地址:%p\n",p);
    printf("stus地址:%p\n",&stus[0]);
    Change *p1=&stus[0];
    Change *p2=&stus[1];
    printf("p1地址:%p\n",p1);
    printf("p2地址:%p\n",p2);
    getchange(&stus[0],&stus[1]);
    printf("p1地址:%p\n",p1);
    printf("p2地址:%p\n",p2);
    printf("%s,%s\n",stus[0].name,stus[1].name);
    printf("name=%s,num=%d,score=%f\n",p1->name,p1->num,p1->score);
    printf("name=%s,num=%d,score=%f\n",p2->name,p2->num,p2->score);
    
函数部分以及头文件定义部分:

//第一题
typedef struct stu
{
    char name[40];
    int num;
    float score;
}Change;
void getchange(Change *p1,Change *p2){
    Change  temp=*p1;//用指针变量temp装指针变量p1所指向的值,不是交换地址

    *p1=*p2;//就像交换学生信息一样的道理
    *p2=temp;
    //验证交换地址
    //    printf("temp地址:%p\n",temp);
    printf("p1地址:%p\n",p1);
    printf("p2地址:%p\n",p2);
    //    printf("name=%s,num=%d,score=%f\n",p1->name,p1->num,p1->score);
    //    printf("name=%s,num=%d,score=%f\n",p2->name,p2->num,p2->score);
}   


//2.有一学生数组写一函数打印出指定分数段的学生信息
    student  stu1={1,"wukong",98.3};
    student stu2={2,"bajie",80.5};
    student stu3={3,"shazheng",60};
    student stus[3]={stu1,stu2,stu3};
    student *p=stus;
    printInformantion(p);

函数定义和结构体声明部分:

//第二题
typedef struct stu1
{
    int num;
    char name[40];
    float score;
}student;
void printInformantion(student *p)
{
    for (int i=0; i<3; i++) {
        if ((p+i)->score>=80&&(p+i)->score<=90) {
            printf("name:%s,num:%d,score:%f\n",(p+i)->name,(p+i)->num,(p+i)->score);
        }
    }
}



//3.有一学生数组,包含5个学生,写一个函数,对学生排序(按学号 从小到大),使用结构体指针操作数组元素

    student stu1={5,"wukong",98.3};
    student stu2={2,"bajie",80.5};
    student stu3={1,"shazheng",60};
    student stu4={4,"tangsan",70.5};
    student stu5={3,"zhengzheng",58};
    student stus[5]={stu1,stu2,stu3,stu4,stu5};
    student *p=stus;
    printf("原来的信息:\n");
    print(p);
    sortArray(p,5);
    printf("后来的信息:\n");

    print(p);


函数以及结构体声明部分:

//第三题
typedef struct  stu
{
    int num;
    char name[20];
    float score;
}student;
void print(student *p){
    for (int i=0; i<5; i++) {
        printf("num:%d,name=%s,score=%f\n",(p+i)->num,(p+i)->name,(p+i)->score);
    }
}
void sortArray(student *p,int count){
    for (int i=0; i         for (int j=0; j             if ((p+j)->num>(p+j+1)->num) {//学号比较,交换的是认得信息
                //方法一:
//                student temp=*(p+j);//整个学生的信息值进行交换
//                *(p+j)=*(p+j+1);
//                *(p+j+1)=temp;
                //方法二:
                student temp=p[j];
                p[j]=p[j+1];
                p[j+1]=temp;
                //方法三、四:数组表示法:p[i]=*(p+i)=str[i]=*(str+i)
            }
        }
    }
}

// 4.有一学生数组,包含5个学生,写一个函数,对学生排序(按姓名 从小到大),使用结构体指针操作数组元素
    //使用strcmp()字符串比较>0,交换人的信息
    
    //5.有一学生数组,包含5个学生,写一个函数,对学生排序(按分数 从小到大),使用结构体指针操作数组元素

四五题跟第三题一样的做法,只是姓名比较时,则用strcmp()比较字符串的函数来比较,并且比较的结果是整型的,用一个int a=来接收,判断大于0则交换学生的信息。


六、七题:

在头文件输入的是:

//第六题:求园的面积的宏
#define PI 3.14
#define S(r) (PI*(r)*(r))
//第七题:求两个数的平均值的宏
#define AVERAGE(A,B) ((A)+(B))/2.0


main函数里面输入的是:

int main(int argc, const char * argv[]) {

    //6.定义一个求圆面积的宏
    float r=9;
    float s=S(r);
    printf("圆的面积是:%f\n",s);
    //7.定义一个求2个数平均数的宏
    float result=AVERAGE(2+3, 5+7);
    printf("两个数的平均值是:%f",result);




你可能感兴趣的:(《IOS_作业C语言》高级指针(结构体指针、结构体数组指针、结构体数组指针,作为函数的参数使用、预编译指令))