C语言的那点事第三篇:数据类型脱口秀

咱们就来一场“编程界的脱口秀”,边抖包袱边写代码,让枯燥的语法也“活”起来。


一、数据类型


(一)基本数据类型

1. 整型

整型就是那些规规矩矩、不带小数的数字,像1、2、3这种。在代码里,我们可以这样定义一个整型变量:

int num = 10;

这就相当于在数字王国里,我们抓了一个叫“num”的小兵,给它穿上了整型的制服,还让它站到10这个位置上。

2. 浮点型

浮点型就有点“放荡不羁”,它带着小数点,像3.14这种。代码里是这样表示的:

float pi = 3.14;

这就像是在数字海洋里,我们找到了一个叫“pi”的小鱼,它身上有个小尾巴(小数点),还让它游到了3.14这个海域。

3. 字符型

字符型就是字母、数字、标点符号这些小家伙,比如'a'、'1'、'!'。代码示例:

char ch = 'A';

这就像是在符号森林里,我们逮到了一个叫“ch”的小精灵,它长着“A”这个模样,还给它戴了个字符型的帽子。


(二)派生数据类型

1. 数组

数组就像是一个整齐的队伍,里面站着一排排的数据。比如:

int arr[5] = {1, 2, 3, 4, 5};

这就相当于我们组建了一个整型的方阵,名字叫“arr”,里面有5个整数小兵,它们依次站在1、2、3、4、5的位置上,排得整整齐齐。

2. 指针

指针就像是一个爱指手画脚的家伙,它不直接拿着数据,而是指着数据的位置。代码如下:

int a = 10;
int *ptr = &a;

这就像是在数据公园里,有个叫“a”的小朋友站在10这个游乐设施旁边,然后来了个叫“ptr”的指针先生,它伸手指着“a”,告诉大家“a”在这儿呢,它的地址是& a。

3. 结构体

结构体就像是一个百宝箱,里面可以装各种各样的宝贝。例如:

struct Person {
    char name[20];
    int age;
    float height;
} person1 = {"Tom", 20, 1.75};

这就像是我们打造了一个“Person”宝箱,里面可以装名字、年龄、身高这些宝贝。然后我们往里放了一个叫“person1”的宝贝,它有“Tom”这个名字,20岁,身高1.75米。


(三)数据类型转换

数据类型转换就像是给数据“变装”。比如把整型变成浮点型:

​
int num = 10;
float f = (float)num;

​

这就像是“num”这个整型小兵,突然被施了魔法,变成了浮点型的“f”,穿上了浮点型的华丽服装。


二、变量与常量


(一)变量定义与作用域

变量就像是个爱到处跑的小孩,它的值可以随时变。定义变量时,要给它划定活动范围,这就是作用域。例如:

​
void func() {
    int localVar = 10;  // 局部变量,作用域在func函数内
}
int globalVar = 20;  // 全局变量,作用域在整个文件

这就像是在“func”这个游乐场里,有个叫“localVar”的小孩,它只能在这个游乐场里跑;而“globalVar”这个小孩,它可以在整个数据王国里到处溜达。


(二)常量定义与使用

常量就像是个顽固的老头,一旦确定了值,就再也不变了。定义常量的代码:

const int MAX = 100;

这就像是在数字王国里,立了一块石碑,上面写着“MAX”这个老头,它的值永远是100,谁也不能让它变。


三、运算符


(一)算术运算符

算术运算符就像是厨房里的刀叉勺。比如加法:

int a = 10;
int b = 20;
int sum = a + b;

这就像是把“a”这个苹果和“b”这个苹果放在一起,用加法这个“勺子”一舀,就有了“sum”这个苹果堆,里面有30个苹果。


(二)关系运算符

关系运算符就像是天平,用来比较大小。例如:

int x = 10;
int y = 20;
int result = (x > y);  // result的值为0,表示x不大于y

这就像是把“x”和“y”这两个小家伙放在天平的两端,“x > y”这个关系运算符一比较,发现“x”轻,“y”重,所以结果是0,表示“x”不大于“y”。


(三)逻辑运算符

逻辑运算符就像是大脑在思考。比如逻辑与:

int a = 1;
int b = 0;
int result = a && b;  // result的值为0

这就像是“a”和“b”这两个小家伙在玩“都得赢才算赢”的游戏,“a”赢了,“b”输了,所以最后的结果是0,表示它们没都赢。


(四)位运算符

位运算符就像是在微观世界里摆弄原子。比如按位与:

int a = 6;  // 二进制为0110
int b = 3;  // 二进制为0011
int result = a & b;  // 结果为2,二进制为0010

这就像是“a”和“b”这两个小家伙的二进制原子在玩“碰碰碰”的游戏,只有都有的原子才能留下,所以最后的结果是2,二进制为0010。


四、表达式与语句


(一)表达式求值

表达式求值就像是食材的初步加工。比如:

int result = 10 + 5 * 2;

这就像是先把5这个土豆切成两半,再和10这个土豆放在一起,用加法这个“勺子”一舀,就有了“result”这个土豆堆,里面有20个土豆。


(二)基本语句

1. 表达式语句

表达式语句就像是完整的烹饪步骤。例如:

printf("Hello, World!");

这就像是在厨房里,我们用“printf”这个大厨,把“Hello, World!”这道菜端了出来,展示给大家看。

2. 空语句

空语句就像是你站在厨房发呆。代码:

;

这就像是你在数据王国里,啥也没干,就是发了个呆,然后继续前行。

3. 复合语句

复合语句就像是做一道复杂的菜,需要好几个步骤。比如:

{
    int a = 10;
    int b = 20;
    int sum = a + b;
    printf("Sum = %d", sum);
}

这就像是我们先抓了两个整型小兵“a”和“b”,让它们分别站在10和20的位置上,然后用加法这个“勺子”一舀,得到了“sum”这个土豆堆,最后用“printf”这个大厨,把“Sum = 30”这道菜端了出来。


好啦,这场“编程界的脱口秀”就到这里啦,希望这些幽默的解读和代码示例能让你对基本语法有个更生动的理解,让你的编程之旅不再枯燥哦!


下面给你一个C语言的运行实例,这个例子会涵盖上述提到的大部分知识点,咱们就来写个关于学生信息管理的小程序吧,它能输入学生信息,计算平均成绩,还带点简单的判断和输出,可有意思啦。

#include   // 包含标准输入输出库,用于进行输入输出操作

// 定义一个结构体来存储学生信息
struct Student {
    char name[50];  // 学生姓名,使用字符数组存储
    int age;  // 学生年龄,使用整型存储
    float scores[3];  // 学生成绩,假设三门课,使用浮点型数组存储
    float averageScore;  // 学生平均成绩,使用浮点型存储
};

// 计算平均成绩的函数
void calculateAverage(struct Student *s) {
    float sum = 0;  // 用于累加成绩的变量
    for (int i = 0; i < 3; i++) {  // 循环遍历三门课的成绩
        sum += s->scores[i];  // 累加每门课的成绩
    }
    s->averageScore = sum / 3;  // 计算平均成绩,并存储在结构体中
}

int main() {
    struct Student stu;  // 定义一个学生变量

    // 输入学生信息
    printf("请输入学生姓名:");  // 提示用户输入学生姓名
    scanf("%s", stu.name);  // 读取学生姓名
    printf("请输入学生年龄:");  // 提示用户输入学生年龄
    scanf("%d", &stu.age);  // 读取学生年龄
    printf("请输入三门课的成绩:");  // 提示用户输入三门课的成绩
    for (int i = 0; i < 3; i++) {  // 循环读取三门课的成绩
        scanf("%f", &stu.scores[i]);  // 读取每门课的成绩
    }

    // 计算平均成绩
    calculateAverage(&stu);  // 调用函数计算平均成绩,传入学生结构体的地址

    // 输出学生信息和平均成绩
    printf("学生姓名:%s\n", stu.name);  // 输出学生姓名
    printf("学生年龄:%d\n", stu.age);  // 输出学生年龄
    printf("三门课的成绩:");  // 提示输出三门课的成绩
    for (int i = 0; i < 3; i++) {  // 循环输出三门课的成绩
        printf("%.2f ", stu.scores[i]);  // 输出每门课的成绩,保留两位小数
    }
    printf("\n平均成绩:%.2f\n", stu.averageScore);  // 输出平均成绩,保留两位小数

    // 判断平均成绩是否及格
    if (stu.averageScore >= 60) {  // 判断平均成绩是否大于等于60
        printf("恭喜,该学生平均成绩及格!\n");  // 如果及格,输出恭喜信息
    } else {
        printf("遗憾,该学生平均成绩不及格!\n");  // 如果不及格,输出遗憾信息
    }

    return 0;  // 程序正常结束,返回0
}

程序解析

  1. 结构体定义:我们定义了一个Student结构体,里面包含了学生的名字、年龄、三门课的成绩和平均成绩。

  2. 计算平均成绩的函数calculateAverage函数接收一个指向Student结构体的指针,计算三门课的平均成绩并存储在结构体中。

  3. 主函数

    • 首先定义了一个Student类型的变量stu

    • 通过scanf函数输入学生的名字、年龄和三门课的成绩。

    • 调用calculateAverage函数计算平均成绩。

    • 使用printf函数输出学生的信息和平均成绩。

    • 通过一个简单的if语句判断学生的平均成绩是否及格,并输出相应的提示信息。


运行示例

假设输入如下:

请输入学生姓名:MuYuAiChen
请输入学生年龄:20
请输入三门课的成绩:85 90 75

输出将会是:

学生姓名:MuYuAiChen
学生年龄:20
三门课的成绩:85.00 90.00 75.00 
平均成绩:83.33
恭喜,该学生平均成绩及格!

这个小程序把咱们之前说的那些知识点都用上了,是不是很有趣呀,快去试试吧!


你可能感兴趣的:(c语言,开发语言,青少年编程,蓝桥杯,算法,编辑器)