C语言基础知识讲解二:让程序和你互动起来

C语言基础知识讲解二:让程序和你互动起来

上一期我们学习了C语言的变量、数据类型和输出语句,已经能让程序按照我们的指令"说话"了。这一期,我们要学习更厉害的技能——让程序能"听"懂我们的话,还能进行各种计算,就像给程序装上了耳朵和大脑!

一、输入语句:让程序听你指挥

想象一下,如果你问机器人"我叫什么名字",机器人却答不上来,是不是很尴尬?输入语句就是给程序装上"耳朵",让它能接收我们输入的信息。

在C语言中,最常用的输入函数是scanf,它和我们上期学的printf是一对好搭档——printf负责"说",scanf负责"听"。

1、基本用法

案例代码:

#include <stdio.h>
int main() {
    // 定义一个变量存储年龄
    int age;
	// 先提示用户输入
	printf("请输入你的年龄:");

	// 接收用户输入的数据,存储到age变量中
	// 注意:变量名前要加&符号,就像告诉程序"把数据放到这个盒子里"
	scanf("%d", &age);

	// 验证一下程序是否真的"听"到了
	printf("我知道了,你今年%d岁!\n", age);

	return 0;
}

运行这段代码,你会看到程序先显示"请输入你的年龄:",当你输入数字并按回车后,程序会重复出你输入的年龄。

2、输入多个数据

scanf还能一次接收多个数据,用空格或回车分隔就行:

#include <stdio.h>
int main() {
    int math, chinese;
	printf("请输入数学和语文成绩(用空格分开):");
	// 同时输入两个整数
	scanf("%d %d", &math, &chinese);

	printf("数学:%d分,语文:%d分\n", math, chinese);
	printf("总分:%d分\n", math + chinese);

	return 0;
}

小提示:

  1. scanf的格式符要和变量类型严格对应(%d对应整数,%f对应浮点数)
  2. 变量名前一定要加&符号,这是告诉程序数据要存放在内存的哪个位置
  3. 输入字符串时不用加&(这个我们以后会学到)

3、易错点分析

在使用scanf语句时,双引号中的内容不可随意书写,引号中写了什么在输入变量值时就需要原样输入什么,例如:

#include <stdio.h>
int main() {
    int a, b;
	printf("请输入a和b:");
	// 同时输入两个整数
	scanf("%d,%d", &a, &b);

	printf("a=%d,b=%d\n", a,b);

	return 0;
}

当代码写成scanf("%d,%d", &a, &b);时,在输入a和b的值的时候需要先输入a的值再输入“,”最后输入b的值,才能结束输入。

二、数据类型转换:不同盒子间的"液体转移"

我们知道不同的数据类型就像不同大小的盒子,专门用来存放特定类型的数据。但有时候,我们需要把一个盒子里的数据放到另一个盒子里,这就需要用到数据类型转换。可以把它想象成不同容量的杯子之间倒水。

1、数据类型的大小关系

在了解转换规则前,我们先搞清楚各种基本数据类型的"容量"大小(以常见的32位或64位系统为例):

数据类型占用内存(字节)比喻
char1字节小药瓶
short2字节易拉罐
int4字节矿泉水瓶
long4或8字节大瓶装饮料
float4字节牛奶盒
double8字节大牛奶桶

它们的容量从小到大排序为:
char < short < int ≤ long < float < double

就像不同大小的容器,容量小的只能装少量数据,容量大的能装更多数据。例如:char类型只能存储-128到127之间的整数,而int类型可以存储更大范围的整数(约-20亿到20亿)。

2、自动转换(隐式转换)

当小杯子往大杯子倒水时,不会有任何问题,C语言会自动完成转换:

#include <stdio.h>
int main() {
    int a = 5;          // 小杯子(整数)
    float b = 2.5f;     // 大杯子(浮点数)
	// 整数会自动转换为浮点数,再进行计算
	float result = a + b;

	printf("%d + %.1f = %.1f\n", a, b, result);  // 输出:5 + 2.5 = 7.5

	return 0;
}

3、强制转换(显式转换)

当大杯子往小杯子倒水时,可能会有损失,这时候需要我们手动指定转换:

#include <stdio.h>
int main() {
    float a = 7.8f;     // 大杯子(浮点数)
	// 强制将浮点数转换为整数,会丢失小数部分
	int b = (int)a;     // 注意语法:(目标类型)变量名

	printf("转换前:%.1f,转换后:%d\n", a, b);  // 输出:转换前:7.8,转换后:7

	return 0;
}

就像把一杯100ml的水倒进50ml的杯子,只能装下50ml,剩下的就丢失了。所以强制转换要谨慎使用哦!

三、运算符与表达式:程序的"计算器"

运算符就像程序的计算器,能对数据进行各种运算。让我们来认识一下最常用的几类运算符:

1. 算术运算符:做数学题

运算符功能例子结果
+加法5 + 38
-减法5 - 32
*乘法5 * 315
/除法5 / 22(整数相除)
/除法5.0 / 22.5(浮点数相除)
%取余(求余数)5 % 32

案例代码:

#include <stdio.h>
int main() {
    int num1 = 10, num2 = 3;
	printf("%d + %d = %d\n", num1, num2, num1 + num2);  // 10 + 3 = 13
	printf("%d - %d = %d\n", num1, num2, num1 - num2);  // 10 - 3 = 7
	printf("%d * %d = %d\n", num1, num2, num1 * num2);  // 10 * 3 = 30
	printf("%d / %d = %d\n", num1, num2, num1 / num2);  // 10 / 3 = 3(整数除法)
	printf("%d %% %d = %d\n", num1, num2, num1 % num2); // 10 % 3 = 1(取余)

	// 浮点数除法
	printf("%.1f / %.1f = %.1f\n", 10.0f, 3.0f, 10.0f / 3.0f);  // 10.0 / 3.0 = 3.3

	return 0;
}

注意:printf中要输出%符号时,需要写两个%%

2. 赋值运算符:给变量赋值

最基本的赋值运算符是=,它不是"等于"的意思,而是"把右边的值放到左边的变量里"。

除此之外,还有一些简化的赋值运算符:

#include <stdio.h>
int main() {
    int a = 10;  // 把10放到变量a中
	a += 5;      // 相当于 a = a + 5,现在a是15
	printf("a += 5 后:%d\n", a);

	a -= 3;      // 相当于 a = a - 3,现在a是12
	printf("a -= 3 后:%d\n", a);

	a *= 2;      // 相当于 a = a * 2,现在a是24
	printf("a *= 2 后:%d\n", a);
    
    a /= 2;      // 相当于 a = a / 2,现在a是12
	printf("a /= 2 后:%d\n", a);
	
    a %= 5;      // 相当于 a = a % 5,现在a是2
	printf("a %%= 5 后:%d\n", a);
    
	return 0;
}

3. 比较运算符:做判断

比较运算符用来比较两个值的大小,结果只有两种:真(1)或假(0)

运算符说明例子结果(真=1,假=0)
>大于5 > 31
<小于5 < 30
>=大于等于5 >= 31
<=小于等于5 <= 30
==等于5 == 30
!=不等于5 != 31

案例代码:

#include <stdio.h>
int main() {
    int score = 85;
	printf("是否及格(≥60):%d\n", score >= 60);  // 输出1(真)
	printf("是否满分(=100):%d\n", score == 100); // 输出0(假)
	printf("是否大于90分:%d\n", score > 90);      // 输出0(假)

	return 0;
}

注意:==才是"等于"的意思,而=是赋值运算符,不要混淆哦!

4. 逻辑运算符:组合判断

逻辑运算符可以把多个判断条件组合起来:

  • &&:逻辑与(并且),两边都为真,结果才为真
  • ||:逻辑或(或者),至少一边为真,结果就为真
  • !:逻辑非(不是),取相反的结果
#include <stdio.h>
int main() {
  int math = 92;
  int chinese = 88;

  // 数学和语文都及格了吗?
  printf("两科都及格:%d\n", math >= 60 && chinese >= 60);  // 1(真)

  // 数学或语文有一门满分吗?
  printf("至少一科满分:%d\n", math == 100 || chinese == 100);  // 0(假)

  // 数学不是不及格
  printf("数学及格:%d\n", !(math < 60));  // 1(真)

  return 0;
}

四、趣味练习题

1. BMI计算器

编写程序,输入身高(厘米)和体重(千克),计算BMI指数(BMI = 体重 ÷ (身高÷100)²)。

2. 时间转换器

输入一个整数表示总分钟数,计算并输出对应的小时和分钟。例如:输入130分钟,输出"2小时10分钟"。

提示:使用除法/计算小时,使用取余%计算剩余分钟。

小结

今天我们学习了如何让程序接收输入、进行数据类型转换,以及使用各种运算符进行计算。这些知识让程序从简单的"说话"变成了能"听"能"算"的小助手。

下一期,我们将学习如何让程序做判断和重复操作,让它变得更智能!如果在练习中遇到问题,欢迎在评论区留言讨论哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智码未来学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值