189 8069 5689

C语言基础(三)构造类型、语句-创新互联

一、构造类型

1.结构体:是由多个成员组成的数据集合,成员可以是不同的数据类型。例如:空间坐标、复数、学生信息等。

创新互联公司是一家专业提供翁源企业网站建设,专注与成都网站制作、做网站、H5高端网站建设、小程序制作等业务。10年已为翁源众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
//创建一个结构体类型:空间坐标Point,包含x、y、z三个坐标信息
    struct Point{
        double x;
        double y;
        double z;
    };

    // 声明一个结构体(Point)类型的变量p1
    struct Point p1;

    //为这个空间坐标p1赋值
    p1.x=3.5;
    p1.y=4.5;
    p1.z=5.0;

    //输出
    printf("空间坐标:p1(%2.1f,%2.1f,%2.1f)\n",p1.x,p1.y,p1.z);

结果:

空间坐标:p1(3.5,4.5,5.0)

2.共用体:同一个内存空间中存储不同的数据类型,所有成员共享空间。

//共用体
    union Data{
        char a; //占用1个字节空间
        short b; //占用2个字节空间
        double c;//占用8个字节空间
    };

    union Data d1;
    d1.a='a';
    d1.b=12345;
    d1.c=55555.5666;
    printf("d1.a=%c\nd1.b=%d\nd1.c=%lf\n",d1.a,d1.b,d1.c);

结果

d1.a=
d1.b=21181
d1.c=55555.566600

共用体Data中虽然有char short double三种类型的成员,但是在开辟空间时只开辟8个字节(占空间大的成员),给任意一个成员赋值时都会写入这个空间中,后写入的数据会覆盖之前的数据,上面例子中给d1.b赋值后,d1.a的数据被覆盖,给d1.c赋值后d1.b的数据又被覆盖了,所以最后只有d1.c显示正确数据。

3.枚举:声明符号名称来表示整型常量。枚举类型的目的是提高程序的可读性。

enum Gender{
        Male,
        //Male=2,
        Female
    };

    enum Gender gg;
    gg=Male;
    printf("gg=%d\n",gg);
    gg=Female;
    printf("gg=%d\n",gg);
    gg=3;//不报错,但是不建议这样用
    printf("gg=%d\n",gg);

结果

gg=0
gg=1
gg=3

默认情况下,枚举列表中的常量被赋予0,1,2等。所以Male=0,Female=1,不想使用默认值可以通过给Male=2这样的方式指定初始值,此时Female=3。

typedef:定义别名。

//定义别名:定义Pt用来表示struct Point
    typedef struct Point Pt;
    //此时Pt的使用和基础类型一样
    Pt p2;
    
    //也可以在定义结构体的时候直接指定别名
    typedef struct Point2D{
        double x;
        double y;
    } Pt2D;

    Pt2D p3;

4.数组

一维数组

//创建
    int array[5];

    //赋值
    array[0]=1;
    array[1]=3;
    array[2]=5;
    array[3]=7;
    array[4]=9;

    //创建+初始化
    int array1[]={2,4,6,8};

    //数组长度:函数sizeof()计算占用内存字节数
    int len = sizeof(array1)/sizeof(int);
    printf("数组长度为%d\n",len);

    //输出
    printf("array[%d]=%d\n",0,array[0]);
    printf("array[%d]=%d\n",1,array[1]);
    printf("array[%d]=%d\n",2,array[2]);
    printf("array[%d]=%d\n",3,array[3]);
    printf("array[%d]=%d\n",4,array[4]);

结果

数组长度为4
array[0]=1
array[1]=3
array[2]=5
array[3]=7
array[4]=9

二维数组

//二维数组
    int arr[2][3]={{1,2,3},{4,5,6}};

    //修改元素数据
    arr[1][0]=100;
    //输出
    printf("arr[%d][%d]=%d\t",0,0,arr[0][0]);
    printf("arr[%d][%d]=%d\t",0,1,arr[0][1]);
    printf("arr[%d][%d]=%d\n",0,2,arr[0][2]);
    printf("arr[%d][%d]=%d\t",1,0,arr[1][0]);
    printf("arr[%d][%d]=%d\t",1,1,arr[1][1]);
    printf("arr[%d][%d]=%d\n",1,2,arr[1][2]);

结果

arr[0][0]=1	arr[0][1]=2	arr[0][2]=3
arr[1][0]=100	arr[1][1]=5	arr[1][2]=6

5.指针

指针就是内存地址。

//1.内存地址
    int num = 10;

    printf("num=%d\n",num);
    printf("num=%p\n",&num);//num的内存地址

    //2.定义指针
    int * ptr_num=#//指针指向num的内存地址
    printf("ptr_num=%p\n",ptr_num);//指针存储的是num的地址
    //指针前加*代表内存地址中的数据
    *ptr_num=20;//这个操作等价于num=20;
    printf("指针指向的数据num=%d\n",*ptr_num);
    printf("num=%d\n",num);

结果(32位操作系统或32位编译器):

num=10
num=0061FEC8
ptr_num=0061FEC8
指针指向的数据num=20
num=20

结果(64位操作系统或64位编译器):

num=10
num=000000EC71D0F780
ptr_num=000000EC71D0F780
指针指向的数据num=20
num=20

注:64位操作系统可以同时处理64个二进制位(即8个字节),所以内存地址长度是8个字节。 

1.内存地址。内存中任何变量都有对应的地址,可以使用&获取内存地址

2.定义指针。定义指针使用符号“*”,访问内存地址中保存的数据也用“*”,要注意区分两个*。

二、语句

语句有三种结构:顺序、选择、循环

1.顺序结构:

由上至下一条一条的执行。

2.选择结构:

根据不同的条件,选择执行不同的语句 。选择结构包括if语句和Switch语句。

if语句

简单if语句:

int num;
    printf("请输入一个数:");
    scanf("%d",&num);

    if(num<0){
        printf("负数\n");
    }else{
        printf("非负数\n");
    }

结果:

请输入一个数:-5
负数

多重if语句:

int num;
    printf("请输入成绩:\n");
    scanf("%d",&num);
    if(num>90)
        printf("优秀");
    else if (num>75)
        printf("良好");
    else if (num>60)
        printf("合格");
    else
        printf("不合格");

结果:

请输入成绩:
80
良好

if语句的嵌套:

//比较两个数的大小
    int m,n;
    printf("请输入第一个数:\n");
    scanf("%d",&m);
    printf("请输入第二个数:\n");
    scanf("%d",&n);

    if(m==n)
        printf("相等");
    else{
        if(m>n)
            printf("m大于n");
        else
            printf("m小于n");
    }

结果:

请输入第一个数:
15
请输入第二个数:
20
m小于n
switch语句:
printf("今天星期几(输入数字回答)?\n");
    int day;
    scanf("%d",&day);
    switch (day) {
    case 1:
        printf("星期一");
        break;
    case 2:
        printf("星期二");
        break;
    case 3:
        printf("星期三");
        break;
    case 4:
        printf("星期四");
        break;
    case 5:
        printf("星期五");
        break;
    case 6:
    case 7:
        printf("周末");
        break;
    default:
        printf("输入错误!");
    }

结果:

今天星期几(输入数字回答)?
3
星期三
3.循环结构:

程序中循环执行一段代码,需要设置循环终止条件。循环结构包括:for语句、while语句、do-while语句。

for、while、do-while的简单例子:
//例:输出1~10
    printf("使用顺序语句输出:\n");
    printf("%d ",1);
    printf("%d ",2);
    printf("%d ",3);
    printf("%d ",4);
    printf("%d ",5);
    printf("%d ",6);
    printf("%d ",7);
    printf("%d ",8);
    printf("%d ",9);
    printf("%d ",10);

    //while
    printf("\nwhile循环:\n");
    int i=1;//1
    while(i<=10){//3
        printf("%d ",i);
        i++;//2
    }

    //do-while
    printf("\ndo-while循环:\n");
    i=1;
    do{
        printf("%d ",i);
        i++;//2
    }while(i<=10);


    //for
    printf("\nfor循环:\n");
    for(int i=1;i<=10;i++){
        printf("%d ",i);
    }

结果:

使用顺序语句输出:
1 2 3 4 5 6 7 8 9 10
while循环:
1 2 3 4 5 6 7 8 9 10
do-while循环:
1 2 3 4 5 6 7 8 9 10
for循环:
1 2 3 4 5 6 7 8 9 10
循环语句的终止:

上面例子中每个循环语句都有一个终止的条件,除了这种方式外还有一些其他的方法终止循环语句。

1.continue:跳过当前循环中continue后面的部分,继续执行下一次循环。

//输出1-10,跳过5
    for(int i=1;i<=10;i++){
        if(i==5)
            continue;//跳过当前循环,继续执行下一次
        printf("%d ",i);
    }

结果:

1 2 3 4 6 7 8 9 10

2.break:结束循环语句。

for(int i=1;i<=10;i++){
        if(i==6)
            break;//跳出循环语句
        printf("%d ",i);
    }

结果:

1 2 3 4 5

3.通过输入数据判断是否终止循环:

猜数游戏:

#include#include#include//循环:猜数游戏
int main(){

    //1.随机生成一个10以内数
    srand(time(NULL));

    int num = rand()%10;
    int guess;
    //2.输入一个数,与生成的数比较;相等=》3,不等=》2
    printf("刚刚系统随机生成了一个10以内的数,猜一下是几(请输入一个10以内的数)?:\n");
    do{
        scanf("%d",&guess);
        if(guess>num){
            printf("大了!再猜一次吧(请输入一个10以内的数):");
        }else if(guess

结果:

刚刚系统随机生成了一个10以内的数,猜一下是几(请输入一个10以内的数)?:
7
小了!再猜一次吧(请输入一个10以内的数):9
大了!再猜一次吧(请输入一个10以内的数):8
猜对了,数字是8

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:C语言基础(三)构造类型、语句-创新互联
标题链接:http://jkwzsj.com/article/doidph.html