一、知识点:
1.数据的基本类型:
(1)整型
- 短整型(short)
- 整型(int)
- 长整形(long)
(2)浮点型
- 单精度浮点型(float)
- 双精度浮点型(double)
(3)字符型
- 数据的基本表现形式为常量和变量
2.常量和变量
(1)常量:
-
符号常量
-
整型常量
-
实型常量
-
字符型常量
- 常量的类型通常由书写格式决定。 例如:123(整型) 4.56(实型) 'A’(字符型)。
- 符号常量:用一个标识符代表一个字符常量。
- 标识符:标识对象名字的有效字符序列称为标识符。
-
标识对象名字的有效字符序列称为标识符。
-
系统预定义的标识符,如printf, main, sin。
-
用户标识符,如用户自己定义的符号常量、变量、函数名等。
-
标识符只能由字母、数字和下划线组成,且第一个字符不能为数字。
(2)变量:
- 变量的定义和使用
3.整型数据的输入输出
- printf (格式控制, 输出参数1, ... , 输出参数n);
-
scanf (格式控制, 输入参数1, ... , 输入参数n);
-
格式控制说明 %…
十进制 八进制 十六进制
int %d %o %x
long %ld %lo %lx
-
输出格式控制说明中,可以加宽度限定词,指定整
型数据的输出宽度,例如:%md,指定了数据的输出
宽度(包括符号位),若数据的符号位小于m,则左
端补空格,若大于m,按实际位数输出。
4.实型常量(实数、浮点数)
-
实数的表示
-
浮点表示法:由正、负号、0-9和小数点组成,必须有小数点,且小数点的前、后至少一边要有数字。
例:0.123 123.4 12. .12
- 科学计数法:由正、负号、0-9和字母e或E组成,e之前要有数据,之后的指数只能是整数。例:6.026E-3 1.2e+10 1E-5
E5,1.2E3.0 (不合法)
-
实数的类型double
5.实型数据的输入和输出
-
输入 scanf()
- float:%f 或%e
以小数或指数形式输入一个单精度浮点数
-
double: %lf或%le
以小数或指数形式输入一个双精度浮点数
-
输出 printf()
float 和double使用相同的格式控制说明
-
%f, %lf
以小数形式输出浮点数,保留6位小数
-
%e以指数形式输出
-
scanf() 和 printf()
%c
char ch;
scanf("%c", &ch);
printf("%c", ch);
-
getchar() 和 putchar()
char ch;
ch = getchar( );
putchar(ch);
输入输出一个字符
6.类型转换
不同类型数据的混合运算,先转换为同一类型,再运算。
(1)自动类型转换(赋值运算)
变量 = 表达式
- 计算赋值运算符右侧表达式的值
- 将赋值运算符右侧表达式的值赋给左侧的变量
- 将赋值运算符右侧表达式的类型自动转换成赋值号左侧变量的类型
(2)强制类型转换
强制类型转换一般形式:
(类型名) 表达式
7.表达式
-
算术表达式:单目: + - ++ --
双目: + - * / %
-
赋值表达式:简单赋值 =复合赋值( += -= *= /= %= !=)
-
关系表达式:> >= < <= == !=
- 逻辑表达式:! && ||
-
条件表达式?:
-
逗号表达式 ,
-
其他运算 : sizeof
8.++,--运算符
自增、自减运算符使变量的值增1或减1。有4种形式:i++、++i、i--、--i 。
i++(i--)和++i(--i)的区别:
执行完自增(减)运算后i的值都加(减)1,
但表达式的值不同:i++(i--)的值为原值,
++i(--i)的值为增(减)1后的值。
注意:
exp1 ? exp2 : exp3
10.逗号表达式
表达式1, 表达式2, ……, 表达式n
先计算表达式1,然后计算表达式2,……,最后计
算表达式n的值,并将表达式n的值作为逗号表达式
的值.
11.其他运算
单目运算符,计算变量或数据类型的字节长度
12.数组
一、一维数组的定义
⒈ 定义方式:
类型名 数组名[整型常量表达式];
例:int a[10];
⒉ 说明:
① 数组名的命名规则和变量名相同,遵循标识符命名规则
② 数组名后的常量表达式用[ ]括起来。
③ 常量表达式表示元素的个数,即数组长度。
例: a[10]表示数组a中包括10个元素,分别为
a[0]~a[9]
二、一维数组元素的引用
数组必须先定义,然后使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。
引用形式为:
数组名[下标]
三、一维数组的初始化
可以用赋值语句或输入语句使数组中的元素得到值,这个过程是在程序运行期间执行的。同时也可以使数组在程序运行之前初始化,即在编译期间使之得到初值。
对数组元素的初始化可以用以下方法实现:
⒈ 在定义数组时,对数组元素赋以初值。
如:int a[10]={0,1,2,3,4,5,6,7,8,9};
⒉ 可以只给一部分元素赋值。
如:int a[10]={0,1,2,3,4};
表示只给前5个元素赋初值,后5个元素自动赋以0值。
⒊ 对static数组不赋初值,系统会对所有元素自动赋以0值。
即, 如果想使数组a中全部元素值为0,可以这样定义数组:
static int a[5];
⒋ 在对全部数组元素赋初值时,可以不指定数组长度。
int a[5]={1,2,3,4,5};
int a[ ]={1,2,3,4,5};
四、二维数组的定义
类型说明符 数组名[常量表达式][常量表达式]
例:float a[3][4],b[5][10];
说明:
① 可以把二维数组看作是一种特殊的一维数组。
a[0] → a[0][0] a[0][1] a[0][2] a[0][3]
a[1] → a[1][0] a[1][1] a[1][2] a[1][3]
a[2] → a[2][0] a[2][1] a[2][2] a[2][3]
② 二维数组在内存中按行存放。
③ 多维数组定义方式与二维数组类似
int x[3][4][2];
float y[4][2][3];
五、二维数组的引用
引用形式为: 数组名[下标][下标]
注:下标可以是整型表达式,但应在已定义的数组大小的
范围内。
六、二维数组的初始化
⒈ 分行给二维数组赋初值。如:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
⒉ 可以将所有数据写在花括弧内,按数组排列的顺序对各元素赋初值。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
⒊ 可以对部分元素赋初值,不赋的为0。如:
int a[3][4]={{1},{5},{9}}
int a[3][4]={{1},{0,6},{0,0,11}};
⒋ 如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
int a[3][3]={1,0,3,4,0,0,0,8,0}
int a[ ][3]={1,0,3,4,0,0,0,8,0}
int a[ ][3]={{1,0,3},{4,0,0},{0,8,0}}
二、实验中遇到的问题及解决方法:
本次实验主要是将上次实验内容编写成菜单,需要将之前的代码主体部分复制就行,可总是出现错误。
解决方法:将函数主体部分复制到case中,在最上面声明函数,最下面定义函数。
三、实验心得体会:
仿照老师在课上的编写菜单过程编写本次作业,原本觉得会比较简单,可实际操作起来发现还是有疏漏的地方