1. 基本数据类型--字符型、整型和浮点型
在Hello World示例使用了字符串,在C语言中还有一类常用的数据类型--数值类型。例如:字符c
、整数123
和小数3.14
。
下面是在终端输出整数和小数。
#include <stdio.h>
int main() {
printf("%c\n",'a');
printf("%d\n",123);
printf("%f\n",3.14);
return 0;
}
- 说明
字符型是单个字符,必须使用英文单引号包裹。
这里使用了输出函数另一种用法:
printf("输出格式",输出项列表);
输出格式:
%c
(c是charactor的首字母)表示输出单个字符
%d
(d是十进制数decimal的首字母)表示输出整数
%f
(d是浮点数float的首字母)表示输出小数
输出项列表:即存放要输出的变量名称。
注意,这里使用printf()
时,前面的字符串和后面的数字中间用逗号,
隔开。这里的%c
、%d
和%f
称为占位符,在终端输出时,用后面的的数字替换。注意,不同类型的占位符是有区别的,用错了打印的值也会错误。
我们还可以把上面的两行合成一行。
#include <stdio.h>
int main() {
printf("%c\n%d\n%f\n",'a',123,3.14);
return 0;
}
数字可以与字符串一起打印。
#include <stdio.h>
int main() {
printf("字符:%c\n整数:%d\n小数:%f\n",'a',123,3.14);
return 0;
}
试一下,用上面的方法打印一下自己的姓名、年龄、身高、体重、体温等数据。
#include <stdio.h>
int main() {
printf("姓名:张三\n");
printf("年龄:%d岁\n",25);
printf("身高:%dcm\n",175);
printf("体重:%dkg\n",60);
printf("体温:%f度\n",37.5);
return 0;
}
这里只是简单介绍了数值类型,后面会有更加详细介绍。
2. 运算符--简单运算法(算术运算符、关系运算符和逻辑运算符)
程序中数字之间是可以像数学中数字一样进行运算的。例如:1+2
,2*3
等。
试一下
#include <stdio.h>
int main() {
printf("%d\n",1+2+3);
return 0;
}
对于数字常用的简单运算有算术运算符、关系运算符和逻辑运算符三类运算符。
2.1 算术运算符
运算符 | 符号 | 操作 | 用例 | 结果 |
---|---|---|---|---|
加法 | + | 使它两侧的值加到一起 | 1+2 | 3 |
减法 | - | 从它前面的数减去后面的数 | 5-3 | 2 |
乘法 | * | 将它前面的数乘以后面的数 | 2*3 | 6 |
除法 | / | 用它左边的值除以右边的值 | 8/3 | 2(整数的除法会丢掉小数部分) |
取模/取余 | % | 求用它左边的值除以右边的数后的余数 | 5%3 | 2(%运算符两侧的操作数必须为整数) |
- 算术运算符特点
- 优先级:
*
/
%
>+
-
- 结合律:自左向右
- 优先级:
- 练习*
- 求半径为3的圆的周长和面积。
- 求半径为5的圆的周长和面积。
- 1小时40分钟30秒共计多少秒。
- 求10000秒是几小时几分钟几秒。
- 已知一个两位整数,分别求出个位数与十位数。
2.2 关系运算符
数字除了可以计算外,还可以比较大小。
运算符 | 符号 | 操作 |
---|---|---|
等于 | == |
检查两个操作数的值是否相等,如果相等则条件为真。 |
不等于 | != |
检查两个操作数的值是否相等,如果不相等则条件为真。 |
大于 | > |
检查左操作数的值是否大于右操作数的值,如果是则条件为真。 |
小于 | < |
检查左操作数的值是否小于右操作数的值,如果是则条件为真。 |
大于等于 | >= |
检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 |
小于等于 | <= |
检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 |
在C语言中0
为假,其他为真。
注意:这里除了>
和<
与数学表示一样,其他的都与数学表示有区别。
- 关系运算符特点
- 优先级:算术运算符 >
>
>=
<
<=
>==
!=
- 结合律:自左向右
- 优先级:算术运算符 >
- 练习
- 偶数/奇数判断
- 整除判断
- 猜测并判断下面程序的结果。
#include <stdio.h> int main(){ printf("1<100<10这个式子结果是:%d\n",1 < 100 < 10); }
2.3 逻辑运算符
真假也可以运算,被称为逻辑运算。有如下:
运算符 | 符号 | 描述 |
---|---|---|
与 | && |
称为逻辑与运算符。如果两个操作数都非零,则条件为真。 |
或 | || |
称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 |
非 | ! |
称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 |
有点像电路中的并联串联。
-
逻辑运算符特点:
- 优先级:
!
> 算术运算符 > 关系运算符 >&&
>||
- 结合律:
&&
与||
自左向右;!
自右向左。
- 优先级:
-
练习
- 闰年判断
- 三角形构成判断
- 猜测并判断下面程序的结果。
#include <stdio.h> int main () { printf("%d\n",!100+10); printf("%d\n",!0+10); return 0; }
2.4 优先级和括号
运算符都有优先级,改变优先级使用()
。
- 练习
- 任意五个数的平均数
3. 变量
上面的例子中,有些值一直是变化的,而另外一些值是不变,例如,求圆的周长和面积的时候,半径是变的,而圆周率是不变,在数学中我们通常使用变量代替,在程序中也可以定义并使用变量。
杯子的作用是盛水,变量的作用是保存数据。
3.1 基本语法
- 定义
定义用来说明变量的名字和类型。- 语法
先指定类型,然后指定变量名。类型 变量名;
- 示例
这里的int a;// 定义整型变量为a; float b;// 定义浮点型变量为b;
int
表示整型,float
表示浮点型。
- 语法
- 赋值
在变量名后,紧接=
,后面再接常量。a = 10; b = 1.2;
- 使用
使用方式与常量相同。直接使用变量代替常量#include <stdio.h> int main(){ int a;// 声明整型变量为a; float b;// 声明浮点型变量为b; a = 10; b = 1.2; printf("a=%d\nb=%f\n",a,b); printf("%d+%f=%f\n",a,b,a+b); }
- 初始化
定义和赋值通常可以写在一起。这种定义时赋值的操作被称作初始化。int a = 10; float b = 1.2;
初始化与赋值的区别
试一试
- 使用变量前没有定义或出现什么情况?
- 使用变量前没有赋值打印和计算结果是什么?
练习
- 华氏温度转摄氏度
摄氏温标(C)和华氏温标(F)之间的换算关系为:
- 长度换算
1英尺 = 0.3048米
1英里 = 1609.3米
1英寸 = 2.54厘米 - 交换两个整数的值
编码套路:惯用法
3.2 命名规则
中国姓名中是否可以使用字母和数字?
人的名字不能乱起,变量名字也不能随便起的,需要遵循一定的规制--命名规则。
- 变量名是字母、数字和下划线的组合。
- 变量名的开头必须是字母或下划线,不能是数字。
实际编程中最常用的是以字母开头,而以下划线开头的变量名是系统专用的。 - 变量名中的字母是区分大小写的。比如
a
和A
是不同的变量名,num
和Num
也是不同的变量名。 - 变量名绝对不可以是C语言关键字。关键词是由C语言规定的具有特定意义的字符串,通常也称为保留字。
标准C语言有如下关键字:
3.3 重点
- 变量使用前必先初始化(定义和赋值)
- 变量显性三要素:类型、变量名、值
4. 表达式
变量和常量能够参与计算,这种计算的式子称为表达式,表达式由运算符和操作数组成。
表达式必有计算结果。
5. 输入
如何通过键盘输入数字,并且保存在变量中?
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
printf("%d\n",n);
return 0;
}
练习
- 计算两个数的和差积商余。
- 输入一个年月日组成的数字,按照XXXX年XX月XX日打印出来。例如:输入20190311,打印出2019年3月11日。
- 输入一个时分秒组成的数字,按照XX时XX分XX秒打印出来。例如:输入180301,打印出18时3分1秒。
灵活的语法
- 多个变量同时定义
定义的变量类型必须一致。int a,b;
- 多个变量同时赋相同值
a=b=10;
- 多个变量同时初始化
int a=10,b=20;
- 复合赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
说明
复合赋值运算符与赋值运算符的优先级相同。
- 自增运算符
++
与自减运算符--
运算符 | 描述 | 实例 |
---|---|---|
++ | 自增运算符,整数值增加 1 | A++ 相当于 A=A+1 |
-- | 自减运算符,整数值减少 1 | A-- 将得到 A=A-1 |
下面三条语句可以看成一样的。
a=a+1;
a+=1;
++a;
自减也是一样的。
a=a-1;
a-=1;
--a;
自增运算符与自减运算符与其他运算法不同点在于副作用(操作同时修改变量的值)。所以,分析时需要分别分析表达式的值和变量的值。
- 说明
- 自增运算符
++
、自减运算符--
和复合赋值运算符主要用于简化代码。 - 自增运算符与自减运算符优先级高于算术运算符。
- 自增运算符
- 试一试
- 这两个运算符可以用在常量吗?
- 分析下面代码的输出结果。
int i = 1; int j = 2; int k = i++ + ++j + i++;
- 练习
通过键盘输入修改前面做过的练习题。
网友评论