zhliao2

风雨兼程,一路向北-------fpga (Keep a quiet heart study)
c结构枚举等

大一记载的笔记:

    补码
    已知十进制求二进制
         求正整数的二进制
         除2取余, 直至商为零,余数倒叙排序
       
          求负数的二进制
          先求与该负数相对应的正整数的二进制代码,然后将
          所有为取反,末尾加1,不够位数时,左边补1

          求零的二进制
           全为零

          已知二进制求十进制
           如果首位是0,则表明是正整数,按普通方法来求
           
        如果首位是1,则表明是负整数
            将 所有位取反,末尾加1,所得数字就是该负数的绝对值
            
        如果全是零,则对应的十进制数字就是零                
      
    二进制                十进制
    0000 0000            0
    0000 0001            1
    0111 1111            127
    1000 0000            -128
    1000 0001            -127
    1000 0010            -126
    1111 1111            -1

    数组
    优点
        存储速度快
    缺点
         需要一个连续的很大的内存
        插入和删除元素的效率很低、
    



    链表
        优点
        插入删除元素效率高
        不需要一个连续的很大的内存
    缺点
        查找某个位置的元素效率低




    枚举
    什么是枚举
         把一个事物所有可能的取值一一列举出来
    

    1


//冒泡法


# include <stdio.h>

void f(int * p, int len)
{
    int i, j, t;
    for(i = 0; i < len - 1; i ++)
        for(j = 0; j < len - 1 -i; j ++)
            if(p[i] > p[i + 1])
            {
                t = p[i];
                p[i] = p[i + 1];
                p[i + 1] = t;
            }
}

int main(void)
{
    int i;
    int a[6] = {65, -99, 94, 4, 6, 7};
    f(a, 6);
    for(i = 0; i < 6; i ++)
        printf("%d ", a[i]);
    printf("\n");
}





     2

//简单学生系统

# include <stdio.h>
# include <malloc.h>

struct Student 
{
    int age;
    float score;
    char name[100];
};             //没加分号会报错 哦

int main(void)
{
    int len;
    struct Student * pArr;
    int i, j;
    struct Student t;3

    //动态的构造一维数组
    printf("请输入学生的个数:\n");
    printf("len = ");
    scanf("%d", &len);
    pArr = (struct Student *)malloc(len * sizeof(struct Student));

    //输入
    for(i = 0; i < len; i ++)
    {
        printf("请输入第%d个学生的信息:\n", i + 1);
        printf("age = ");
        scanf("%d", &pArr[i].age);

        printf("name = ");
        scanf("%d", pArr[i].name);  //name 是数组名
        
        printf("score = ");
        scanf("%f", &pArr[i].score);

    }

    //冒泡法排序
    for(i = 0; i < len - 1; i ++)
    {
        for(j = 0; j < len - 1- i; j ++)
        {
            if(pArr[i].score > pArr[i + 1].score)
            {
                t = pArr[i];
                pArr[i] = pArr[i + 1];
                pArr[i + 1]  = t;
            }
        }
    }

    //输出
    for(i = 0; i < len; i ++)
    {
        printf("第%d个学生的信息是:\n", i + 1);
        printf("age = %d\n", pArr[i].age);
        printf("name = %d\n", pArr[i].name);
        printf("score = %f\n", pArr[i].score);

        printf("\n");
    }
        return 0;
}





     3

//枚举

# include <stdio.h>

//只定义了一个数据类型, 并没有定义变量, 该数据类型的名字是enum WeekDay
enum WeekDay  
{
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday   
};

int main(void)
{
    // int day; //day 定义成int类型不合适
    enum WeeDay day = Sunday;
    printf("%d\n", day);    //当Monday = 4时 值又是多少呢?
}





    4



# include <stdio.h>

enum WeekDay
{
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday   
};


void f(enum WeekDay i)  //本函数的目的只是期望接受0—6之间的数字
{
    switch(i)
    {
    case 0: printf("monday\n");
        break;
    case 1: printf("tuesday\n");
        break;
    case 2: printf("wednesday\n");
        break;
    case 3: printf("thursday\n");
        break;
    case 4: printf("friday\n");
        break;
    case 5: printf("saturday\n");
        break;
    case 6: printf("sunday\n");
        break;
    }
}

int main(void)
{
    f(Friday);  //虽然Friday本质就是5,但直接写成f(5)是错误的

    return 0;
}


        
 

    5


# include <stdio.h>

int main(void)
{
    char ch = 0x80;
    //ch = 128;
    printf("%d", ch);  //sh出的是-128
}

posted on 2012-06-09 02:03  zhliao  阅读(202)  评论(0)    收藏  举报