我要成为嵌入式高手之1月31日第十五天!!

学习笔记

用变量a给出下面的定义:

a) 一个整型数                // int a;
(An integer)

b) 一个指向整型数的指针                // int *a ;
(A pointer to an integer)

c) 一个指向指针的的指针,它指向的指针是指向一个整型数                // int * *a;(二级指针)
(A pointer to a pointer to an integer)

d) 一个有10个整型数的数组                // int a[10];                
(An array of 10 integers)

e) 一个有10个指针的数组,该指针是指向一个整型数的        // int * a[10];(存放了指针的数组)
(An array of 10 pointers to integers)

f) 一个指向有10个整型数数组的指针               // int (*a)[10];(数组的指针)
(A pointer to an array of 10 integers)

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数     // int (*a)(int)(函数指针)
(A pointer to a function that takes an integer as an argument and returns an integer)

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
( An array of ten pointers to functions that take an integer argument and return an integer )

函数类型语法特殊

// int (*a[10])(int)(函数指针的数组)

结构体、公用体、枚举

结构体 struct

描述一些 原先 基本数据类型不好描述的这种复杂数据类型

语法:

struct 结构体类型名

{

        数据成员列表;

};// 定义了一个“数据类型”——用户自定义的数据类型

eg:

描述学生这种类型:

struct  student(学生数据类型)

{

        // name——char name [20];  // 成员变量  各个成员变量用分号隔开

        // age——int age;

        // score——float score;

};// 结束时也需要写个分号,表示:结构体类型定义完成

struct  student s;(s这种类型的一个变量)

注意:

1、结构体——用来实现自定义数据类型

2、用结构体

        a、先构造出 数据类型

        b、用数据类型  定义变量/数组/指针

3、访问结构体:

        .   // 结构体成员运算符

结构体变量名.成员变量名 // 结构体变量中的变量

练习1:

        描述老师数据类型:名字、工资、工号

#include<stdio.h>

struct teacher
{
    char name[20];
    int tno;
    int reward;
};

void PrintTeacherInfo(struct teacher *t)
{
    printf("name  = %s\n",t->name);
    printf("no    = %d\n",t->tno);
    printf("reward= %d\n",t->reward);
}

int main(void)
{
    struct teacher s = {"Jerry",20200131,10000};

    printf("name: ");
    scanf("%s",s.name);
    printf("tno: ");
    scanf("%d",&s.tno);
    printf("reward: ");
    scanf("%d",&s.reward);

    PrintTeacherInfo(&s);
    return 0;
}

练习2:

定义学生类型的变量

练习3:

找出成绩最高的学生,输出他的信息 // 函数

练习4:

将学生以各项指标进行排序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student
{
    char name[20];
    int sno;
    float score;
};

void Input(struct student *p,int len)
{
    int i = 0;
    for (i = 0; i < len; ++i)
    {
        printf("name:");
		scanf("%s",(p+i)->name);
		printf("sno :");
		scanf("%d",&(p+i)->sno); //p[i].name
		printf("score:");
		scanf("%f",&(p+i)->score);
    }
}

void Output(struct student *p,int len)
{
    int i = 0;
    printf("|%10s|%10s|%10s|\n","name","sno","score");
    for (i = 0; i < len; ++i)
    {
        printf("%10s",p->name);
        printf("%10d",p->sno);
        printf("%10.2f\n",p->score);
        ++p;
    }
}

void printMenu(void)
{
	printf("-----Welcome Use Student info System-----\n");
	printf("1 选择输入的学生人数\n");
	printf("2 输入信息\n");
	printf("3 查看学生信息\n");
    printf("4 查看最高分学生信息\n");
	printf("0 退出 \n");
	printf(">");
}

void MaxScore(struct student *p,int len)
{
    int i = 0;
    int j = 0;
    float max = p->score;
    for (i = 0; i < len; ++i)
    {
        if ((p+i)->score > max)
        {
            max = p->score;
            j = i;
        }
    }

    printf("max score studentinfo: %s sno(%d) score(%.2f)\n",p[j].name,p[j].sno,p[j].score);
}

int CompareName(const void *a,const void *b)
{
    const struct student *p1 = a;
    const struct student *p2 = b;

    int t = strcmp(p1->name,p2->name);
    return t;
}

int CompareNumber(const void *a,const void *b)
{
    const struct student *p1 = a;
    const struct student *p2 = b;
    
    return p1->sno - p2->sno;
}

int main(void)
{
    struct student s[3] = {{"tom",111,88},{"jerry",112,77},{"rose",113,99}};
    Output(s,3);
    qsort(s,3,sizeof(struct student),CompareName);
    Output(s,3);
    qsort(s,3,sizeof(struct student),CompareNumber);
    Output(s,3);

    return 0;
}


#if 0
int main(void)
{
    int n;
    int len = 0;
    struct student *s;

    while (1)
    {
        printMenu();
        scanf("%d",&n);
        switch(n)
        {
        case 0:
            printf("exit----\n");
            return 0;
        case 1:
            printf(">");
            scanf("%d",&len);
            s = malloc(len*sizeof(struct student));
            break;
        case 2:
            Input(s,len);
            break;
        case 3:
            Output(s,len);
            break;
        case 4:
            MaxScore(s,len);
            break;
        }
    }
    return 0;
}
#endif

homework

有一个班的4个学生,有5门课程。

1、求第一门课的平均分;

2、找出有两门以上课程不及格的学生, 输出他们的学号和全部课程成绩及平均分

        1).统计学生不及格课程数

        2).打印学生信息

        3).求平均分的功能

3、找出平均分在90分以上或全部课程成绩在85分以上的学生。 分别编写三个函数来实现以上三个要求。

#include <stdio.h>

struct Stu
{
    char name[20];
    float No;
    float A;
    float B;
    float C;
    float D;
    float E;
};

void Input(struct Stu *s,int len)
{
    int i = 0;
    for (i = 0; i < len; ++i)
    {
        printf("name: ");
        scanf("%s",(s+i)->name);
        printf("No: ");
        scanf("%f",&(s+i)->No);
        printf("Class A: ");
        scanf("%f",&(s+i)->A);
        printf("Class B: ");
        scanf("%f",&(s+i)->B);
        printf("Class C: ");
        scanf("%f",&(s+i)->C);
        printf("Class D: ");
        scanf("%f",&(s+i)->D);
        printf("Class E: ");
        scanf("%f",&(s+i)->E);
    }
}

int AverageOneClass(struct Stu *s,int len)
{
    int i = 0;
    int sum = 0;
    for (i = 0; i < len; ++i)
    {
        sum += (s+i)->A;
    }
    return sum/len;
}

void PrintStuInfoFailTwoClass(struct Stu *s,int len)
{
    int i = 0;
    int j = 0;

    //Input(s,len);
    for (i = 0; i < len; ++i)
    {
        if ((s+i)->A < 60)
        {
            ++j;
        }
        if ((s+i)->B < 60)
        {
            ++j;
        }
        if ((s+i)->C < 60)
        {
            ++j;
        }
        if ((s+i)->D < 60)
        {
            ++j;
        }
        if ((s+i)->E < 60)
        {
            ++j;
        }
        if (j >= 2)
        {
            printf("有两门以上不及格的学生为:%s\n",(s+i)->name);
            printf("总共不及格的课程数为:%d\n",j);
            printf("学号是:%g\n",(s+i)->No);
            printf("课程A的成绩为:%.2f\n",(s+i)->A);
            printf("课程B的成绩为:%.2f\n",(s+i)->B);
            printf("课程C的成绩为:%.2f\n",(s+i)->C);
            printf("课程D的成绩为:%.2f\n",(s+i)->D);
            printf("课程E的成绩为:%.2f\n",(s+i)->E);
            float ave;
            ave = ((s+i)->A + (s+i)->B + (s+i)->C + (s+i)->D + (s+i)->E)/5;
            printf("该学生的平均分为: %.2f\n",ave);
            putchar('\n');
        }
        j = 0;
    }
}

void ExcellentStu(struct Stu *s,int len)
{
    float ave;
    int i = 0;
    int t = 0;

    for (i = 0; i < len; ++i)
    {
        ave = ((s+i)->A + (s+i)->B + (s+i)->C + (s+i)->D + (s+i)->E)/5;
        
        if ((s+i)->A >= 85 && (s+i)->B >=85 && (s+i)->C >= 85 && (s+i)->D >= 85 && (s+i)->E >= 85)
        {
            t = 1;
        }
        
        if (ave >= 90)
        {
            printf("学生%s的平均分在90分以上!\n",(s+i)->name);
        }
        
        if (t==1)
        {
            printf("学生%s的全部课程成绩在85分以上!\n",(s+i)->name);
        }
        t = 0;
    }
}

int main(void)
{
    struct Stu s[4];
    Input(s,4);

    //printf("四名学生第一门课程的平均分为:%d\n",AverageOneClass(s,4));
   // PrintStuInfoFailTwoClass(s,4);
    ExcellentStu(s,4);

    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值