1.3 数据类型与常见符号
一.数据类型
1.基本类型(1)整形
(2)字符型
(3)枚举类型
(4)实型【浮点型】
2.构造类型(1)数据类型
(2)结构体类型
(3)共用体类型
3.指针类型
4.空类型void
二.常见符号:标识符 ,关键字 ,运算符
1.标识符:用来标识变量名、符号变量名、函数名、数组名、类型名、文件名等的有效字符序列称为标识符。
2.标识符分为(1)系统预定义标识符main
(2)用户自定义标识符.通常做变量名、函数名字使用
3.标识符只能由字母、数字、下划线三种字符组成
注:(1)第一个字符必须为字母或下划线
(2)见名知意原则
(3)用户不能使用系统预定义标识符 [A和a不同]
4.关键字:又称“保留字”,是C语言中预先规定的具有固定含义的单词。例:int应该,float,return
5.运算符
1.4常量
常量:在程序运行过程中,其值不能被改变的量称为常量。
一.常量的类型:
1.整型常量:整常数
(1)十进制整数:数字0-9和正负号表示。
例:123,-24
(2)八进制整数:以数字0开头,后跟数字0-7。
例:0123,-011
(3)十六进制整数:以0x或0X开头,后跟数字0-9和字母a-f或A-F 例:0x123,0xFF
2.实型常量:实数或浮点数
(1)十进制小数形式:由数字0-9和小数点组成(必有小数点) 例:1、23,.4
(2)指数形式(科学计数法):由十进制数和指数标志e或E及指数值组成 例:3.1e4,.34e2
- 注:1.E(e)前必须有数字,E(e)后必须是整数。
2.规范化的指数形式:在字母E(或e)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。例:31、4159E1,0➡️3、14159E2
3.(1)实型常量隐含按双精度处理
(2)单精度实型常量后跟f(或F)表示,如3、14F
(3)长双精度型常量值后跟l(或L)表示,如3、14L
3.字符常量
(1)用单引号括起来的一个字符。如‘a’,‘4’’‘@’。
(2)转义字符,以“\”开头的字符序列。如‘\n’
- 字符常量和字符串常量的区别:
(1)字符常量是由单引号括起来的,字符串常量是由双引号扩起来。
(2)字符常量表示1个字符,字符串常量可以包含0个或多个字符。
(3)字符常量赋给字符变量,不能将字符串常量赋给一个字符变量。
(4)字符常量在内存中占一个字节‘a’ 1B(B➡️字节),字符串常量占用的存储单元是字符个数加1“a” 2B
4.字符串:结束标志'\0'
5.符号常量
(1)用一个标识符来代表一个常量,称为符号常量。
(2)一般定义格式:#define标识符常量。
例:#define N 10
- 注:(1)不是变量,不能被重折赋值
(2)通常使用大写字母来定义符号常量
(3)含义清楚,见名知意
(4)对常量值做到“一改全改”
1.5变量
一.变量的概念
1.在程序运行过程中,其值可以改变的量称为变量。
2.变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值。
二.变量的定义
1.遵循“先定义,后使用”原则
2.数据类型 变量名1[,变量名2,..];
三.基本数据类型变量
1.整型变量
整型变量的定义
1.int a,b;(定义变量a、b为整型)
2.unsigned short c,d;(定义变量c、d为无符号短整型)
3.long f;;定义变量f为长整型)
2.实型变量
(1)实型变量的分类
单精度 float
双精度 double
长双精度long double
3.字符型变量
字符型变量
字符型变量用来存放字符常量,注意只能放一个字符。
字符变量的定义形式如下:char cl, c2;一个字符变量在内存中占一个字节。
1.6运算符与运算
<运算符与表达式 >
一.相关概念
1.运算符:在C语言中用来表示某种计算的符号
2.操作数:运算符操作的对象,可以为变量(已赋值)、常量或其他有切确值的表达式。
3.表达式:运算符和操作数组成的具有切确值的符合C语言语法的式子称为表达式。
二.运算符分类
1.单目运算符(一元运算符)有1个操作数。
2.双目运算符(二元运算符)有2个操作数。
3.三目运算符(三元运算符)有3个操作数。
(唯一:条件运算符?:)
三.算术运算
1.基本算术运算符:+- * /%
结合方向:从左向右
优先级:-高于*/% 高于+-
例:5/2 = 2 5.0/2.0 = 2.5
- 说明:“_”为单目运算符时,右结合性两整数相除•,结果为整数
例:5%2 =1 1%10 = 1 5.5%2(x) -5%2=?
2.自增自减运算符++•-
(1)作用:使变量值加1或减1 优先级与-相同,右结合
(2)种类:
前置 ++i, -i(先执行i+1或i-1,再使用i值相当于i=i+1)
后置i++,j--(先使用i值,再执行i+1或i-1)
赋值运算
3.简单赋值运算符:=
赋值表达式:<变量><赋值运算符><表达式>°
结合方向:从右向左x=y+2 X=Z=3
- 说明:
1.将=右侧表达式的值赋给左侧变量
2.=左侧只能为变量,不能是常量或表达式
3.=两侧数据类型不一致时,要进行类型转换赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型
例:int a; a=3.14;
四.逗号运算
<一>逗号运算符:,
1.形式:表达式1,表达式2,……表达式n
2.结合性:从左向右
- 説明:
- 优先级最低
- 逗号表达式的值:等于表达式n的值
例:a=3*5,a*4 1/a=15,表达式的值为60
b=(3*4,4*5) //b=20
1.7数据类型的相互转换
整型、实型、字符型数据间可以相互转换
1.自动转换。 2.强制转换。
1.自动转换什么情况下发生:
(1)运算转换:不同类型数据混合运算时
(2)赋值转换:把一个值赋给与其类型不同的变量时
(3)输出转换:输出时转换成指定的输出格式
(4)函数调用转换:实参与形参类型不一致时转换
- 运算转换规则:数据转换按数据存储长度增长的方向进行
例:
2.强制转换
(1)一般形式:(类型名)(表达式)
例:(int)(x+y)
(2)说明:强制转换得到所需类型的中间变量,原变量类型不变
例:
#include <stdio>
int main(
{ float x;
int i;
×=3.6;
i=(int)x; (表达式仅一个变量时,括号可以省略)
printf("x=%f,i=%d",x,i);
return 0;}
结果:x=3.600000,i=3
- 精度损失:较高类型向较低类型转换时可能发生
2顺序结构程序设计
2.1格式化输出
顺序结构程序的执行过程:输入数据➡️处理数据➡️输出数据
数据的输入输出是从计算机角度出发的
一.C程序获得输入的途径有两种:
1.键盘输入数据
2.文件导入数据
二.一个程序的输出方式也有2种:
1.将输出的数据利用屏幕显示
2.将程序输出的数据保存到某个文件中
从键盘输入➡️屏幕输出
三.数据输入输出的概念及在C语言中的实现
1.C语言本身没有1/0语句,所有I/O都由函数来实现。
例:#include <stdio.h›或#include " stdio. h"
2.C语言的标准库函数
- 由编译系统提供的一系列函数,以库形式存放在系统中,不是C语言文本的组成部分。
- 注意在调用C语言库函数时,需要使用编译预处理命令#include <相关的头文件>,使相应的头文件包含到用户源程序中。
3.标准输入输出函数
putchar 输出字符,scanf格式输入,puts输出字符串
ectchar 输入字符,prinuf格式输出,gets 输入字符串
四.格式化输出
1.print函数(格式输出函数)
2.printf函数的一般格式
格式:printf( 格式控制,输出表列);
- 格式控制:用双引号括起来的字符串,包含两种信息
- 格式说明:%[修饰符/格式字符,指定输出格式
普通字符:原样输出 - 输出表列:要输出的数据,可以是变量或表达式,可以没有,多个时以“”分隔)
例如:printf("d d", a,b) ;printf( "a=%d b=%d\n”a,b) ;
五.输出值的参数类型和格式控制说明符的类型应该是匹配的。也就是说a为十进制整型,格式控制说明符就应该是%d与之对应。
printf函数的另外一个特点就是可以同时输出多个类型的数据值。
(1)%md格式:m指定输出字段的宽度
数据位数小于m,左端补空格,反之按实际输出。
例:int a=123 , b=12345 ; printf("a=%4d %4d".
, a, b);
_123 12345
•(2)%Ld格式:输出长整型数据可以用%mld格式指定输出列宽
例:long a=135790 printf(*ld \n", a);
printf("%8Ld ",a):
135790 _ _135790
- 注:m是正数,右靠齐;m是负数,左靠齐。
六.1.o格式符:八进制输出整数
- 是将内存中的二进制位整个按八进制输出,所以输出值没有符号。
- 可以指定输出宽度%omo,长整型可以用%0l0格式输出。
2.x格式符:十六进制输出整数同o格式符,无符号,即无负十六进制数。
•可以指定输出宽度%mx,长整型可以用%以格式输出。
3.u格式符:十进制输出unsigned型数据
int型可以用%u格式输出,unsigned型也可以用%d、%0和%x格式输出。
4.f格式符:输出实数
%f格式:整数部分全部输出,小数6位。
例2:%f格式输出实数时的有效位数
#include <stdio.h>
int main()
{ float x;
x=12.3;
printf("%f %e\n",x,x);
return 0;
}
运行结果:
12.300000 1.230000e+001
- %f格式:可以有非有效数字输出,因为单精度有效位7位,双精度16位。
例3 %f格式输出双精度实数时的有效位数
#include <stdio.h>
int main { double x,y;
x=1111111111111.111111111,
у=2222222222222.222222222;
printf("%f\n",x+y);
return 0;
运行结果:3333333333333.333010
(1)%m.nf格式:占m列,其中n位小数,左补空格。
(2)%-m.nf格式:右补空格
例4 %[格式输出实数时指定小数位数
#include <stdio.h>
int mainO
{ float f=12.345678;
printf("⅑ 10f,%.2f,%-10.2f,%10.0An",f,f,f,f);
return 0;
注
}
运行结果:
12.345678, 12.35,12.35
- 注:%e格式符的域竞和%F格式符一样
5.e格式符:指数形式输出实数
%e格式:不指定m和n、小数6位、指数部分共5位,其中e和指数符号各1位,指数值3位。
6.c格式符:输出一个字符值在0~255的整数,可以用%c形式输出为字符。
•值在0~255的整数,可以用%c形式输出为字符
例5字符数据的输出
#include <stdio.h>
int main(
{ char c=a';
printf"%c , %d\n "
,C,C);
return 0;
}
运行结果:a, 97
2.2格式化输出
一.scanf 函数(格式输入函数)
1.一般形式
格式:scanf(格式控制,地址表列);
- 功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键
结束 - 格式控制:含义同printf函数
- 地址表列:变量地址或字符串地址,地址间“,”分隔。
强调:地址列表中每一项必须以取地址运算符&开头。
2.输入分隔符的指定
- 一般以空格、TAB或回车键作为分隔符
- 遇非法输入字符时,系统认为输入数据结束
- 其它字符做分隔符:格式串中两个格式符间有其它字符,则输入时对应位置也要有相同的字符。
2.3单个字符的输入输出
一.printf函数
二.scanf函数
三.putchar 函数(单字符输出函数)
1.格式:putchar( ch);
2.强调:ch为输出项,可以是字符型变量、常量或者表达式;也可以是整型常量、变量或者表达式。
举例说明输出单个字符:
(1)putchar('a');------>屏幕输出(2)putchar(98);------>屏幕输出b
(3) putchar('a'-32);--------->屏幕输出A
(4) putchar(\101');-------->屏幕输出A
四.getchar 函数(单字符输入数)
1.格式:getchar();
2.强调:输入单个字符后,必须按一次回车,计算机才接受输入的字符。
2.4顺序结构程序设计实例
一.顺序结构特点
⬇️
A 程序在执行过程中严格按照语句书写的先 后顺序执行
⬇️
B 每条语句必须执行且只能执行一次
二.顺序结构组成
1.程序开头的编译预处理命令。
2.顺序结构程序的函数体中,是完成具体功能的各个语句和运算,主要包括:
(1)变量类型的说明。
(2) 数据输入部分。
(3) 数据处理部分。
(4) 数据输出部分。
2.5迭代算法在顺序结构中的应用
算法是指在解决问题时,按照某种机械算法步骤一定可以得到问题结果的处理过程。
一.迭代算法的基本思想
1. 迭代法(Iteration)也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。
2.迭代算法一般用于数值计算。
二.迭代算法的设计步骤
1.利用迭代算法策略求解问题,设计工作主要有三步:
(1)确定迭代模型
(2)建立迭代关系式
(3)对迭代过程进行控制
3选择结构程序设计
3.1关系运算和逻辑运算
一.关系运算
• 关系运算(比较运算)
1.它的功能是将两个数值进行比较,判断其比较的结果是否符合给定的条件。
例如:a>3
如果a=5,则值为。“真〞。
如果a=2,则值为“假”。
二.关系表达式
1.关系表达式
<表达式1><关系运算符><表达式2>
两边的表达式可以是任意合法的表达式。
关系运算的值:“真”或“假”
用“1”表示“真”
用“0”表示“假”
2.逻辑运算符
3.逻辑运算符的短路特性
(1)逻辑与、逻辑或有以下特点:
a&&b,当a为0时,不管b为何值,结果都为0。
allb,当a为1时,不管b为何值,结果都为1。
(2)C语言规定:
在进行逻辑与运算时,如果左边运算对象为0,则不需要计算右边的运算对象,直接判断结果为0;
而进行逻辑或运算时,如果左边运算对象为1,则不需要计算右边的运算对象,直接判断结果为1。
3.2 if语句
一.选择结构
1.单分支➡️if
一般形式:if(表达式)语句
执行过程:
- 4.编程规范:
(1)不允许把多个短语句写在一行中,即一行只写一条语句。
(2)if吾句自占一行,且执行语句部分无论多少,都要加花括号4,这样可以使代码结构更清晰,不易出错。
(3)釆用缩进风格编写,缩进的空格数为4个。
2.双分支➡️if-else
3.多分支➡️else-if
3.3 if嵌套
一.if语句的嵌套
1.在i语句中又包含一个或多个i语句一般形式:
2. else与if配对原则如下:
(1)else总是与它前面最近的没有配对的if配对。
2.可以加花括号来确定具体配对关系。
- 注:1. 在if语句中又包含一个或多个i语句称为if语句的嵌套
- 2.在设计i语句嵌套时,一定要注意正确把握每一个分支的逻辑含义
- 3.使用复合语句可提升嵌套的准确性和可读性
3.4 switch语句
一.执行过程
1.(1)首先计算switch后面圆括号中表达式的值,然后用它依次与各个case后面常量表达式的值进行比较,如果圆括号中表达式的值与某个case后面常量表达式的值相等,则执行此case后面的语句。
(2)语句执行后,如果遇到break语句或switch的结束符“}”,就终止switch语句,否则就继续执行下一个case后面的语句,依次类推。
- 注:
- 1.switch后面括号内的“表达式”,只能是整数类型(包括字符型)。
- 2.switch语句下面的一对花括号仔不能省略,花括号中的部分称为switch语句体。
- 3.case和常量表达式之间要有空格,常量表达式只起语句标号作用,当找到匹配的入口标号后,就从此标号开始执行下去,不再进行判断。
- 4.如果每个case和default后面都有break语句,则它们出现位置不影响执行结果。
- 5.每一个case常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。在case子句中如果包含多个语句,可以不用花括号括起来,会自动顺序执行该case后面所有的语句。
- 6.多个case标号可以共用一组执行语句。
3.5选择结构程序设计实例
一.实例1检查字符类型
二.实例2 模拟自动售货机
技术要点
本例中主要用到switch语句,需注意以下几点。
1.每一个case的常量表达式的值必须互不相同,否则就会出现相互矛盾的现象。
2.各个case和default的出现次序不影响执行结果。
3.在执行一个case分支后,如果想跳出switch结构,则需要使用break语句。
3.6选择结构妙用之信息数字化