ios学习记录 day9

1.递归函数  函数体内调用和函数相同的另一个函数

课上练习:

1)计算:s=5!

long value (int x)
{
    if(x < 2){
        return 1;
    }
    return x * value(x - 1);
}//递归函数

2).return 类似于break,没有返回值return 结束

void printNum(int x){
    if (x < 1) {
        return;
    }
    printNum(x - 1);//         printf("%d\n",x);
    printf("%d\n",x);//顺序   printNum(x - 1);//逆序
}
3).10进制转换2进制

void er(int x){
    int n = 0;
    n = x % 2;
    x /= 2;
    if (x > 0) {
        er(x);
    }
    printf("%d",n);

 

2.结构体   (是一种类型)

结构体也是构造类型.比数组更灵活,可以放基本数据类型 数组 结构体.

定义:

struct 结构体名

{

类型 成员名;

类型 成员名;

........

};//分号不可少

3.内存占用:结构体所占的空间可以简单的认为是各个成员所占内存空间之和,实际是最大成员变量所占空间的最小整数倍.

   字符型数据较特殊 挨着的前面有剩余内存的也用 其它的如果不是正好的不能用

4.typedef 原类型 新类型//类型重定义

1)struct person{
    int age;
    char name[20];
    char sex;
};

typedef struct person Person;

2)typedef truct person{
    int age;
    char name[20];
    char sex;
}Person;

5.结构体成员调用

    per1.age = 99;
    strcpy(per1.name, "longdd");
    printPerson(per1);
    Person per3 = per2;

 

    Person min = per1.age < per2.age ? per1 : per2 ;
    min = min.age < per3.age ? min : per3 ;

6.结构体嵌套 成员的访问

typedef struct myorigin{
    float x;
    float y;
}MyOrigin;
typedef struct size{
    float width;
    float height;
}MySize;
typedef struct myrect{
    MyOrigin origin;
    MySize size;
}MyRect;

 

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

    MyRect rect = {{3,5},{100,100}};
    rect.origin.x = 15;
    rect.size.width = 150;
    return 0;
}

7.结构体数组

struct person{
    int age;
    char name[20];
    char sex;
};//分号不能少!
typedef struct person Person;//类型重新定义struct person为Person

void printPerson(Person per){
    printf("%d\n%s\n%c\n",per.age,per.name,per.sex);
}

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

    Person per1 = {26,"ZhaoYunlong",'f'};
    Person per2 = {23,"ShenQingjun",'m'};
    Person per3 = {26,"LiuChundong",'f'};
    Person per4 = {26,"LiXiaolong",'m'};
    Person per5 = {29,"YangKun",'m'};
    
    Person per[5] = {{26,"ZhaoYunlong",'f'},per2,per3,per4,per5};
    Person maxAge = {0};
    for (int i = 0; i < 5; i++) {
        if (maxAge.age < per[i].age) {
            maxAge = per[i];
        }
    }
    printPerson(maxAge);
    
    for (int i = 0; i < 5 - 1; i++) {
        for (int j = 0; j < 5 - i - 1; j++) {
            if (per[j].age < per[j + 1].age) {
                Person temp = per[j];
                per[j] = per[j + 1];
                per[j + 1] = temp;
            }
        }
    }
    for (int i = 0; i < 5; i++) {
        printPerson(per[i]);
    }
return 0;
}

 

作业:

1、定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。

typedef struct date {
    int year;
    int month;
    int day;
}Date;
int days(Date date){
    int a[11] = {31,28,31,30,31,30,31,31,30,31,30};
    int sum = 0;
    for (int i = 0; i < date.month - 1; i++) {
        sum += a[i];
    }
    sum += date.day;
    if (date.month > 2) {
        if ((date.year % 4 == 0 && date.year % 100 != 0) || date.year % 400 == 0) {
            sum++;
        }
    }
    return sum;
}

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

    Date dat;
    scanf("%d,%d,%d",&dat.year,&dat.month,&dat.day);
    printf("%d\n",days(dat));
    return 0;
}

2、模拟n个人参加选举的过程,四个候选人A、B、C、D。若选举某人直接输入其编号,最后按获得票数从高到低排序并输出候选人编号和票数。

struct candidate{
    char name[10];
    int score;
};
typedef struct candidate Candidate;
void xuanju(){
    Candidate can[5] = {{'A',0},{'B',0},{'C',0},{'D',0},{"弃权",0}};
    int n = 0;
    scanf("%d",&n);
    
    for (int i = 0; i < n; i++) {
        int r = arc4random() % (4 - 0 + 1) + 0;//随机找一个人得下标
        can[r].score++;//票数+1
    }
    for (int i = 0; i < 5 - 1; i++) {
        for (int j = 0; j < 5 - i - 1; j++) {
            if (can[j].score < can[j + 1].score) {
                Candidate temp = can[j];
                can[j] = can[j + 1];
                can[j + 1] = temp;
            }
        }
    }
    for (int i = 0; i < 5; i++) {
        printf("%s:%d\n",can[i].name,can[i].score);
    }
}

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

   xuanju();
    return 0;
}

3、某班5个学生,3门课,编写3个函数实现以下功能:
(1)求各门课的平均分
(2)找出三门都不及格的学生,输出其全部信息
(3)找出3门课平均分在80-90之间的学生,输出其信息。

posted @ 2014-03-11 18:40  lxl奋小斗  阅读(254)  评论(0编辑  收藏  举报