结构体练习题

----------------结构体指针变量-------------
声明:结构体类型名 *结构体指针变量名(     Student *pstu;     )
访问形式:
-(*结构体指针变量).成员名       (    (*pstu).num;     )
-结构体指针变量->成员名          (   pstu->num   )

1.学生信息

typedef struct {
    int num;
    char *name;
    char sex;
    double score;
}student;
void func1(){
    student stu;//声明学生变量类型
    student *pstu=&stu;//声明结构体指针指向stu变量
    pstu->name ="wangw";//使用结构体指针操作结构体成员
    stu.num=10;
    stu.sex='m';
    stu.score=90;
    printf("%d,%s,%c,%.2f\n",(*pstu).num,pstu->name,pstu->sex,pstu->score);
}
int main(int argc, const char * argv[]) {
    func1();
    printf("--------------------------\n");
    return 0;
}
2.求已知两个复数的和

<span style="color:#000000;">//整个结构体作为参数
typedef struct{
    int real;
    int xu;
} complex;
void func2();
complex addCom(complex n1,complex n2);
void func2(){
    complex num1={10,3},num2={5,4};
    complex reslt=addCom(num1,num2);
    printf("运算结果:%d+%di\n",reslt.real,reslt.xu);
}
complex addCom(complex n1,complex n2){
    complex result;
    result.real=n1.real+n2.real;
    result.xu=n1.xu+n2.xu;
    return result;
}
<span style="font-size:18px;color:#FF0000;"><span style="color:#000000;"></span></span></span><pre name="code" class="plain">int main(int argc, const char * argv[]) {
    func2();
    printf("--------------------------\n");
    return 0;
}

 
 
结构体指针作为参数 

<span style="color:#000000;">typedef struct {
    int num;
    char *name;
    char sex;
    double score;
}student;
void func3(){
    student stu={10,"a",'m',98};//声明结构体函数并赋值
    student stu2={10,"b",'m',80};
    double max=func3_1(stu.score,stu2.score);  //调用func3_1,传入  值
    printf("%.2f\n",max);
    //student *pstu=&stu2;  //定义结构体指针指向stu2
    func3_2(&stu2);             //调用func3_2,传入stu2结构体变量的地址
    printf("%.1f\n",stu2.score);
}
double func3_1(double n1,double n2){      //传入参数值
    return  n1>n2?n1:n2;
}
void func3_2(student *ps){                      //结构体指针作为参数,传入地址
    ps->score=100;
}
<span style="font-size:18px;color:#FF0000;"></span></span><pre name="code" class="plain"><span style="color:#000000;"></span><pre name="code" class="plain">int main(int argc, const char * argv[]) {
    func3();
    printf("--------------------------\n");
    return 0;
}

 
 

闰年

-------------------第一题-------------------
定义一个结构体(包括年、月、日等成员变量)并初始化。然后计算该日在本年中是第几天?注意闰年问题。
typedef struct{
    int year;  //年
    int month;  //月
    int day;  //日
}date;
int main(int argc, const char * argv[]) {
    date d={2016,3,14};
    int days=0;
    switch (d.month-1) {
        case 12:
            days+=31;
        case 11:
            days+=30;
        case 10:
            days+=31;
        case 9:
            days+=30;
        case 8:
            days+=31;
        case 7:
            days+=31;
        case 6:
            days+=30;
        case 5:
            days+=31;
        case 4:
            days+=30;
        case 3:
            days+=31;
        case 2:   //判断是否为闰年
            if ((d.year%4==0&&d.year%100!=0)||d.year%400==0) {
                days+=29;
            }else{
                days+=28;
            }
        case 1:
            days+=31;
    }
    days+=d.day;
    printf("%d年%d月%d日是本年的第%d天\n",d.year,d.month,d.day,days);
    printf("------------------------\n");
    return 0;
}
----------------------------------------------------
----------------第二题-------------------------
2、编写函数days实现上一题目,由主函数将年、月、日传递给days函数,计算后结果返回主函数输出
typedef struct{
    int year;  //年
    int month;  //月
    int day;  //日
}date;
int func2(date *p);
int main(int argc, const char * argv[]) {
    date da={2016,3,14};
    int days=func2(&da);
    printf("%d年%d月%d日是本年的第%d天\n",da.year,da.month,da.day,days);
    printf("------------------------\n");
    return 0;
}
int func2(date *p){
    int days=0;
    switch (p->month-1) {
        case 12:
            days+=31;
        case 11:
            days+=30;
        case 10:
            days+=31;
        case 9:
            days+=30;
        case 8:
            days+=31;
        case 7:
            days+=31;
        case 6:
            days+=30;
        case 5:
            days+=31;
        case 4:
            days+=30;
        case 3:
            days+=31;
        case 2:   //判断是否为闰年
            if ((p->year%4==0&&p->year%100!=0)||(*p).year%400==0) {
                days+=29;
            }else{
                days+=28;
            }
        case 1:
            days+=31;
    }
    days+=(*p).day;
    return days;
}





随堂笔记为个人学习笔记,若有错误,望指出,谢谢!!

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,结构体是一种用户自定义的数据类型,可以用来存储不同类型的数据。对于结构体练习题,可以通过定义结构体、声明结构体变量、给结构体成员赋值以及使用结构体变量进行操作来实践。 首先,我们需要定义一个结构体,可以根据需要定义多个成员变量,例如一个学生的结构体可以包含学生的姓名、年龄、性别等信息。 ```c struct Student { char name[20]; int age; char gender; }; ``` 然后,我们可以声明一个结构体变量,用来存储具体的数据。 ```c struct Student student1; ``` 给结构体成员赋值的方式有两种,一种是使用点运算符,另一种是使用指针和箭头运算符。下面是使用点运算符的示例: ```c student1.age = 18; strcpy(student1.name, "张三"); student1.gender = 'M'; ``` 使用结构体变量进行操作时,可以直接使用结构体成员或者通过结构体指针来操作。 ```c printf("姓名:%s\n", student1.name); printf("年龄:%d\n", student1.age); printf("性别:%c\n", student1.gender); ``` 除了单个结构体变量外,我们也可以创建结构体数组或者在结构体中嵌套其他数据类型,来实现更复杂的功能。 如此,我们就可以通过结构体练习题来熟悉和掌握结构体的使用方法,包括定义结构体、声明结构体变量、给结构体成员赋值以及使用结构体变量进行操作。结构体的使用可以帮助我们更方便地管理一组相关的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值