第二章 变量、数据类型及运算符

内存如何存放数据

  • 计算机使用内存来记忆或存储计算十所使用的数据
    • 计算机执行程序时,组成程序的指令和程序所操作的数据都必须存放在某个地方
    • 这个地方就是计算机的内存
      • 也称为主存(main memory)或随机访问存储器(Random Access Memory,RAM)

变量

  • 变量是计算机中一块特定的内存空间
    • 由一个或多个连续的字节组成

变量的命名

  • 通过变量名可以简单快速地找到在内存中存储地数据

  • C语言变量命名规则

    • C语言规定变量名(标示符)只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线
    • 变量名不能包含除 “ _ ” 以外地任何特殊字符,如:%、#、逗号、空格等
    • 不可以使用保留字/关键字
  • 正确的变量名

    • Radiu salary AotuGun Knotted_Wool H301
  • 非法的变量名

    • 9_Ball 6_pack Hash!

数据类型

见图a

a

数据类型 类型说明符 位数 取值范围
整型 int 32 -2147483648~+2147483647
短整型 short int 16 -32767~+32768
长整型 long int 32 -2147483648~+2147483647
单精度浮点型 float 32 -3.4E-38~+3.4E+38
双精度浮点型 double 64 1.7E-308~1.7E308
字符型 char 8 -128~+127
  • 字符型用于存储单个字符
  • 一般可以用来表示:性别(‘男’或‘女’),选项(‘A’,‘B’,‘C’,‘D’),成绩(‘优’,‘良’,‘中’,‘差’)等

其他类型

  • 构造类型、指针类型、空类型等

声明和使用变量

  • 声明变量:

    • DataType variableName; //数据类型 变量名;
  • 定义时初始化变量

    • DataType variableName = value; //数据类型 变量名 = 值;
  • 定义后初始化变量

    • DATaType variableName; //数据类型 变量名;
    • variableName = value; //变量名 = 值;

使用整型变量

  • 声明整型变量:

    • int score totle;
    • short int studentNo;
    • long id_card;
  • 初始化变量

    • score_totle = 590;
    • studentNo = 20;
1
2
3
4
5
6
7
8
9
//小明的月薪2500
#include <stdio.h>
void main()
{
int salary1 = 2500; //1、声明并初始化

int salary2; //2、先声明后初始化
salary = 2500;
}

注意:

1、变量名注意不要重复

2、一条语句可以声明多个类型相同的变量

1
int core_totle,no,sum,width,height;

打印整型变量

1
2
3
4
5
6
7
8
//小明的月薪2500
#include <stdio.h>
void main()
{
int salary = 2500;
//打印小明的月薪
printf("小明的月薪是 %d\n", salary);
}
  • 转换说明符
    • 转换说明符确定变量在屏幕上的显示方式
    • %表示转换说明符的开头
    • %d表示salary输出为一个十进制数字
    • %%将会输出一个%
1
2
3
4
5
6
7
8
9
10
11
//试试一个变量稍多的程序
#include <stdio.h>
void main()
{
int num1 = 10;
int num2 = 8;

printf("对穿肠:%d口心思,思君思国思社稷。\n
唐伯虎:%d目共赏,赏花赏月赏秋香。\n",
num1,num2);
}

使用单精度浮点型变量

  • float:

    • 位数:32位
    • 空间:4个字节
    • 取值范围:10^-38^至10^+38^
    • 7位有效数字
  • 声明及初始化

    • float flowerPrice = 150.0;
    • float cookies;
    • cookies = 98.5f;
1
2
3
4
5
6
7
8
9
//已知长方形的宽和高,求长方形的面积
#include <stdio.h>
void main()
{
float width = 2.5f; //宽
float height = 4.0f; //高
float s = width * height; //计算面积
printf("长方形的面积是:%f\n",s);
}

注意:

1、float类型变量赋值时需要在数值的末尾加上一个f

2、float类型的占位符是%f

3、%2f可以控制数字的显示精度

使用双精度浮点型变量

  • double:

    • 位数:64位
    • 空间:8个字节
    • 取值范围:10^-108^至10^+308^
    • 16位有效数字
  • 声明及初始化

    • double total = 1547.2598754;
    • double values;
    • values = 98.5;
1
2
3
4
5
6
7
8
9
//已知圆的半径,求圆的面积
#include <stdio.h>
void main()
{
double radius = 2.5;
double area = 30.41592653 * radius * radius;
printf("圆的半径位%lf,面积位%lf\n",
radius,area);
}

注意:

1、通常小数被存储为double类型,如2.0和9.0

2、数字后使用L时,数字成为long double类型,如4.76L

使用字符型变量

  • char:

    • 位数:8位
    • 空间:1个字节
    • 取值范围:-128~+127
  • 声明及初始化

    • char sex = ‘m’;
1
2
3
4
5
6
7
8
9
10
11
12
13
//打印字符对应的ASCII码
#include <stdio.h>
void main()
{
char ch1 = 'a';//小写字母a
char ch2 = 'A';//大写字母A
char ch3 = ' ';//空格
printf("字符\tASCII码\n");
printf("%c\t%d\n",ch1,ch1);
printf("%c\t%d\n",ch2,ch2);
printf("%c\t%d\n",ch3,ch3);
printf("%c\t%d\n",ch1 - 32,ch1 - 32);
}

注意:

1、有符号signed char,取值范围-128~127

2、无符号unsigned char,取值范围0~255

3、char类型是否有符号取决于编译器

常用ASCII码汇总表

符号 符号 符号 符号
0 字符\0 42 * 62 > 123 {
32 空格 43 + 63 ? 124 |
33 44 , 64 @ 125 }
34 45 - 65~90 A~Z 126 ~
35 # 46 . 91 [ 127 DEL(Delete键)
36 $ 47 / 92 \
37 % 48~57 0~9 93 ]
38 & 58 : 94 ^
39 59 ; 95 _
40 ( 60 < 96 `
41 ) 61 = 97~122 a~z

printf函数和转换字符

转换字符 输出 实例
%d or %l 有符号十进制整数 printf(“%d心%i意\n”,3,2);
%c 单个字符 printf(“少林功夫好(y/n)~%c\n”,’y’);
%s 字符串 printf(“爱我的人%s,我爱的人%s\n”,”呵呵呵”,“老美了”);
%f 浮点数,默认精确到6位小数 printf(“圆周率:%.2f\n”,3.1415926);
%% 打印一个百分号 printf(“手游占中国网络游戏海外发行细分市场的65%%”);

转义序列

转义序列 名称 描述
\a 风鸣警报 在一些系统中警报不起作用
\b 退格 将光标回退一格
\f 换页 将光标移到下一页的开始处
\n 换行 将光标移到下一行的开始处
\r 回车 将光标移到当前行的开始处
\t 水平制表 将光标移动到下一个水平制表位置
\v 垂直制表 将光标移动到下一个垂直制表位置
\ ‘ 单引号 *用于打印单引号、双引号、问号、反斜
\ “ 双引号 *线等字符(由于这些字符用于定义字符
? 问号 *常量,是printf函数的一部分,若直接使
\ \ 反斜线 *用回造成混乱)

scanf函数

  • 概述

    • C函数库包含了多个输入函数,scanf是最通用的一个,可以读取不同格式的数据
  • 基本用法

1
2
3
int num;
printf("请输入数量:");
scanf("%d",&num);
转换字符串 含义
%d 把输入解释成有符号整型
%c 把输入解释成字符型
%s 把输入解释成字符串
%f 把输入解释成单精度浮点数
%lf 把输入解释成双精度浮点数

注意:

1、格式字符串的用法与printf函数类似

2、读取基本类型的值时,变量前要加&符号

算数运算符与表达式

  • 算术运算符

    • 一元运算符:++、–
    • 二元运算符:+、-、*、/、%
  • 表达式

    • a = (b + 3) + (b - 1)