以文本方式查看主题

-  课外天地 李树青  (http://www.njcie.com/bbs/index.asp)
--  C语言程序设计  (http://www.njcie.com/bbs/list.asp?boardid=29)
----  [推荐]第十三课代码讲义:共用体、枚举和typedef  (http://www.njcie.com/bbs/dispbbs.asp?boardid=29&id=1603)

--  作者:admin
--  发布时间:2015/12/14 11:45:42
--  [推荐]第十三课代码讲义:共用体、枚举和typedef

共用体:
# include <stdio.h>

union data
{
 int i;
 char ch;
 float f;
};

void main()
{
 union data data1={65};
 printf("%d\\n",data1.i);
 printf("%c\\n",data1.ch);
 printf("%f\\n",data1.f);
}

练习:
#include <stdio.h>

struct person
{
    int id;
    char name[10];
    char gender;
    char job;
    union
    {
        int sclass;
        char position[10];
    } category;
} person[2];

void main()
{
    int i;
    for(i=0; i<2; i++)
    {
        scanf("%d %s %c %c", &person[i].id, &person[i].name,&person[i].gender, &person[i].job);
        if(person[i].job == \'S\')
            scanf("%d", &person[i].category.sclass);
        else if(person[i].job == \'T\')
            scanf("%s", person[i].category.position);
        else
            printf("Input error!");
    }
    printf("\\n");
    printf("No. name sex job class/position\\n");
    for(i=0; i<2; i++)
    {
        if (person[i].job == \'S\')
            printf("%-6d%-10s%-3c%-3c%-6d\\n",person[i].id, person[i].name, person[i].gender, person[i].job,person[i].category.sclass);
        else
            printf("%-6d%-10s%-3c%-3c%-6s\\n",person[i].id,
                   person[i].name,person[i].gender, person[i].job,
                   person[i].category.position);
    }
}


关于补码
void main()
{
    char i=127;
    i++;
    printf("%d\\n",i);
    i++;
    printf("%d\\n",i);
}


//01111111
//10000000
//10000000
//10000001
//11111111

 

位运算:
void main()
{
    printf("%d",1|2);
}


void main()
{
    char ch=1;
    printf("%d",ch^-1);
}

//00000001
//11111111
//11111110
//10000001
//10000010


void main()
{
    char ch=1;
    printf("%d",ch<<2);
}

枚举
方便程序员写代码是以一种更为直观的写法表达概念值,本质上是整数
#include "math.h"


int main()
{
    enum Gender{male,female};
    struct Date
    {
        int year;
        int month;
        int day;
    };
    struct Student
    {
        int id;
        char name[100];
        enum Gender gender;
        int age;
        struct Date birthday;
        char addr[100];
    };
    struct Student s1= {1,"张三",male,18,{1997,8,27},"南京仙林大学城"};
    struct Student s2= {2,"李四",female,19,{1996,1,10},"南京仙林大学城"};
    printf("第一个学生ID是%d,姓名是%s,性别是%d,年龄是%d,出生日期是%d年%d月%d日,住址是%s",
           s1.id,s1.name,s1.gender,s1.age,s1.birthday.year,s1.birthday.month,s1.birthday.day,s1.addr);
    return 0;
}


#include <stdio.h>
void main( )
{
    enum color {red,yellow,blue,white,black};
    enum color i,j,k,pri;
    int n,loop;
    n = 0;
    for(i=red; i<=black; i++)
        for(j=red; j<=black; j++)
            if(i != j)
            {
                for(k=red; k<=black; k++)
                    if((i != j) && (k != j))
                    {
                        n=n+1;
                        printf("%-4d",n);
                        for(loop=1; loop<=3; loop++)
                        {
                            switch(loop)
                            {
                            case 1:
                                pri=i;
                                break;
                            case 2:
                                pri=j;
                                break;
                            case 3:
                                pri=k;
                                break;
                            default:
                                break;
                            }
                            switch(pri)
                            {
                            case red:
                                printf("%-10s","red");
                                break;
                            case yellow:
                                printf("%-10s","yellow");
                                break;
                            case blue:
                                printf("%-10s","blue");
                                break;
                            case white:
                                printf("%-10s","white");
                                break;
                            case black:
                                printf("%-10s","black");
                                break;
                            default:
                                break;
                            }
                        }
                        printf("\\n");
                    }
            }
    printf("\\ntotal:%5d\\n",n);
}

typedef定义类型步骤
① 按定义变量方法写出定义体   如int   i;
② 将变量名换成新类型名     如int  INTEGER;
③ 最前面加typedef     如typedef   int   INTEGER;
④ 用新类型名定义变量    如INTEGER i,j;

typedef struct club
{
    char name[20];
    int size;
    int year;
} GROUP;

typedef GROUP * PG;
PG pclub;

 

 

 

 

[此贴子已经被作者于2015-12-15 12:45:27编辑过]