小小君的C语言第九课

Student.h文件:

#import <Foundation/Foundation.h>


struct student{

   char name[20];

   char gender[10];

   int age;

   float score;

};

typedef struct student Student;



void printfStudent(Student *stu);


 //转首字母大写 空格变下划线

void changeStudent(Student *p);



void printfAllStudent(Student *p,int count);


// 使用指针查找学员数组中性别为男的学员,成绩增加10,超过100的记为100)

void searchStudent(Student *p,int count);



Student.m

#import "Student.h"


void printfStudent(Student *p){

   printf("%s  %s  %d  %.1f\n", p->name, p->gender, p->age, p->score);

    

}




void changeStudent(Student *p){

    

   // 利用ASCII 转换大小写

    p->name[0] = p->name[0] -32;

    

    // 空格转下划线

    

   int i = 0;

   while (p->name[i] !='\0') {

       if (p->name[i] ==' ') {

            p->name[i] ='_';

        }

        i++;

    }

    // 嵌套调用

    printfStudent(p);

}




void printfAllStudent(Student *p,int count){

   for (int i =0; i < count; i++) {

        //嵌套调用 打印单个学生信息的函数

       printfStudent(p + i);

    }


}


void searchStudent(Student *p,int count){

   for (int i =0; i < count; i++) {

       if (strcmp((p + i)->gender,"") ==0) {

            (p + i)->score +=10;

           if ((p + i)->score >100) {

                (p + i)->score =100;

            }

        }

    }

    printfAllStudent(p,3);

}



main.m文件:

#import <Foundation/Foundation.h>

#import "Student.h"


// 1.创建一个学生类

// 2.声明一个结构体成员变量 名字性别 年龄分数

// 3.再主函数中声明一个结构体变量


#define PI 3.14;

// 带参数的宏定义 替换的过程

// 命名规范: 1.以小写k开头后面驼峰 编写宏定义

//          2.全部大写

// 参数使用什么名字后面使用参数的时候 名字要一致

#define kMaxValue(A, B) ((A) > (B) ? (A) : (B))


// 计算两个数的最小值

// 一般宏定义的参数都是以大写来写

#define kMinValue(A, B) (A) > (B) ? (B) : (A)





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

    

    

    //判断 宏定义之前有没有定义过

#ifdef PI

#define ARES(R) PI * (R) * (R)

#else

#define ARES(R) 3.14 * (R) * (R)

#endif

    

    

#ifndef PI

    printf("这个PI没定义过\n");

#else

    printf("这个PI定义过\n");

#endif


    

#if 1

    printf("真的就执行这里\n");

#else

    printf("假的就执行这里\n");

#endif

    

    

   int a = 3, b =5;

   int max = kMaxValue(a, b);

   printf("max = %d\n",max );


   Student stu1 = {"lan ou 12","",23, 88};


    //结构体指针 指向结构体的指针

    Student *p = &stu1;

    

   printf("%s\n", stu1.name);

    // *p取出指针所指向的空间保存的值

   printf("%s\n", (*p).name);

    

    //结构体指针中经常使用 -> 指向符

   printf("%s\n", p->name);

    

    //编写函数打印所有的成员变量

    printfStudent(p);

    

   printf("%p\n", p);

   printf("%p\n", p->name);

    //结构体指针指向结构体变量 就相当于指向结构体变量第一个 成员变量

    

    changeStudent(p);

    

    

    //声明3个学生结构体变量

    //声明一个结构体数组 保存三个学生

    

   Student stu2 = {"dajun","",23, 89};

   Student stu3 = {"mtt","",24, 66};

   Student stu4 = {"cqq","",25, 93};

    

   Student stu[3] = {stu2, stu3, stu4};

    //结构体指针 地址加1相当于 加了一个整个的结构体的字节数

    

   Student *sp1 = stu;

    

    //结构体指针 指向结构体数组 就相当于指向结构体数组的首元素

   printf("%p\n", sp1);

   printf("%p\n", &stu[0]);

    

    //如何利用指针 取出结构体数组中的元素

   printfStudent(sp1 + 1);

   printf("%s\n",(*(sp1 +1)).name);

   printf("%s\n",(sp1 +1)->name);

    

    //编写函数 利用指针打印结构体数组的每一个学生

    

    printfAllStudent(sp1,3);

    

    

    searchStudent(sp1,3);

    

    

    

    return 0;

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值