C语言第二讲数据类型2
第2章 c语言基本数据类型、运算符和表达式

1000000000000101
1111111111111010
1111111111111011
整型数据所分配的字节数及数的表示范围(16位系统)
整型数据类型
[signed ]int unsigned [int] [signed] short [int] unsigned short [int] [signed ]long [int] unsigned long [int]
制和十六进制只是整型数值的三种表现形式而已。 整型常量类型的确定:根据值大小默认类型。 整型常量后面加后缀1或L,则认为是long int型。 无符号数也可以用后缀表示,整型常数的无符号数的后缀为“U”或“u”。 注意:在程序中是根据前缀来区分各种进制数的。因此在书写时不要把前缀弄错造
成结果不正确。
缺省形式的 整型数据类型
int unsigned short int unsigned short int long int unsigned long
字节数
取值范围
2
-32768~32767(-215~215-1)
2
0~65535
2
-32768~32767(-215~215-1)
2
0~65535(0~216-1)
3.字符型常量
字符常量是用单引号括起来的一个字符。它有二种形式:可视字符常量、转义字符常量。 (1)可视字符常量:单引号括起来的单个可视字符。
大多数字符常量都可以通过加单引号的方式表示,但有些特殊字符,如单引号本身和有些不 可见的特殊字符,就无法通过这种方法表示,为了解决这一问题,C语言引入了“转义字符”。
C语言第2讲--数据的表示之基本数据类型

5.字符输出举例
例3.7(P51) main() 运行结果:A,B { char a,b; 65,66 a='a'; b='b'; /*或 b=98;可向字符变量赋以整数 */ a=a-32; b=b-32; printf("%c,%c\n%d,%d\n",a,b,a,b); } 注:C语言允许字符变量参与数值运算,即用字符 的ASCII 码参与运算。 大小写字母的ASCII 码相差32,因此运算后把小写 字母换成大写字母
结果:total1=300 total2=600
6
二、变量
变量以标识符命名。 变量的定义: 类型名 标识符1,标识符2,......标识符n; int a,b,c; float x,y,z;
注意事项:
/* a,b,c 为整型变量 */ /* x,y,z 为单精度型变量 */
(1)
(2)
变量必须先定义后使用
double a1,a2; a1,a2为double型变量名,每个 变量占8个字节的空间
20
3.浮点型数据的格式输出
#include <stdio.h> /*可省 */ void main() { float a=123.456; double b=1234.5678; printf(“a=%f\n”,a); printf(“b=%f\n”,b); }
输出结果: a=123.456001 b=1234.567800
21
4.printf( )函数中浮点型数据的输 出格式符(自阅)
%f :按小数形式输出实数(包括双精度),默认保留6位
小数。
%e(=%E):按指数形式输出实数(包括双精度) ,尾数 部分默认保留6位有效数字。 %.3f:按小数形式输出实数,保留3位小数。 %8.3f :按小数形式输出实数,保留3位小数,数据总宽
C语言教程课件第二章 数据类型、运算符和表达式

例 整型变量的定义与使用
#include <stdio.h> void main() { int a,b,c,d; /*指定a、b、c、d为整型变量*/ unsigned u; /*指定u为无符号整型变量*/ a=12;b=-24;u=10; c=a+u;d=b+u; printf("a+u=%d,b+u=%d\n",c,d); }
例 向字符变量赋以整数。 • 运行结果: #include <stdio.h> a b void main() 97 98 { char c1,c2; c1=97; c2=98; printf("%c %c\n",c1,c2); printf("%d %d\n",c1,c2); }
• 说明:在第4和第5行中,将整数97和98分别赋给c1和c2,它 的作用相当于以下两个赋值语句: c1='a';c2='b'; 因为'a'和'b'的ASCII码为97和98
• 字符型变量用来存放字符常量,注意只能放一个字符。 • 字符变量的定义形式如下:char c1,c2; • 在本函数中可以用下面语句对c1,c2赋值: c1='a';c2='b'; • 一个字符变量在内存中占一个字节; • 将一个字符常量放到一个字符变量中,是将该字符的 相应的ASCII代码放到存储单元中,这样使字符型数据 和整型数据之间可以通用。一个字符数据既可以以字 符形式输出,也可以以整数形式输出。
运行结果: total=300 例2.1 符号常量的使用 #define PRICE 30 #include <stdio.h> void main ( ) 说明:如再用赋值语句给PRICE赋值是错的 { PRICE=40;/*错误,不能给符号常量赋值*/ int num, total; num=10; total=num * PRICE; printf(″total=%d\n ″,total); } 说明: 程序中用#define命令行定义PRICE代表常量30,此后凡在 本文件中出现的PRICE都代表30,可以和常量一样进行运算
C语言学习第二章数据类型

基本整型:表示的范围为0X0~0XFFFF。
2.4.2 整型变量
1.整型变量在内存中的存放形式
以二进制补码的形式存放。
正数:最高位为0,其余各位是该数的二进制表示 负数:最高位为1,其余各位是该数绝对值的二进制
再按位取反加1
2. 整型变量的分类
放一个字符。
下面是对c1、c2赋值: c1=‘a’;c2=‘b’; (实际上其内存中存放的是该字符的ASCII码)
字符变量的初始化,如:char c1=‘a’,c2=‘b’;
2.5.3 字符数据在内存中的存储形式及其使用方法
将一个字符常量放到一个字符变量中,实际上是将该字 符的ASCII代码以二进制形式放到存储单元中。
无符号型:(只能存放0和正整数) ① 基本整型:类型说明符为unsigned int或unsigned
在内存中占2个字节 取值范围为0~2161,即0~65535。 ② 短整型:类型说明符为unsigned short (int) 所占字节和取值范围均同基本整型。 ③ 长整型:类型说明符为unsigned long (int) 在内存中占4个字节 其取值范围是0~2321 即0~4294967295
实型常量也称为实数或者浮点数。 实型常量不分单、双精度,都按双精度double型处理,其有 效位数为(15~)16位。
实型常量的表示方式有:
(1)十进制小数形式
小数形式由数字0~ 9和小数点组成。
当某浮点数整数部分或小数部分为0时,0可以省略,但小 数点不可省略。
例如:
0.0 , .25 ,5.789 ,0.13 ,5.0 , 300. 267.8230 , 123. 等均为合法的实数。
第02章基本数据类型

scanf("%f", &r);
/*输入某圆的半径*/
/*PI=3.1415926;此句错误,不能通过编译,因为PI是
符号常量,不能重新赋值。*/
area=PI*r*r;
/*计算该圆的面积*/
printf("\nThe area of the circle is:%f", area); /*输出
该圆的面积*/
0000001101101100
图2-2 876在内存中的表示来自212.3 整型—整型变量
无符号整型将所有的位均表示为数据,因此只有 正数形式。有符号的整型将最高位用做符号位, 最高位为“1”表示负数,为“0”表示正数。
22
数据在内存中是以二进制形式存放的。实际上,数 值是以补码表示的。
(1) 对于正数,原码 = 反码 = 补码。 (2) 对于负数,补码 = 反码 + 1。 (3) 引入补码后,使减法统一为加法。
C语言中的关键字有(共32个): auto、break、case、char、const、continue、d efault、do、double、else、enum、extern、flo at、for、goto、if、int、long、register、ret urn、short、signed、sizeof、static、struct、 switch、typedef、union、unsigned、void、vol atile、while。
(1)十进制整常量:其各位数为0~9,但最高位 不能为0(除了0这个数字外)。例如,22,0,-5 6等是合法的十进制整常数;而01、726C不是十进 制整常数。
(2)八进制整常量:八进制整常量必须以数字0 开头,即以0作为八进制数的前缀。各位数取值为 0~7。
C语言基本数据类型

0.0314159 +2
数字部分 指 数 (尾数) (阶码)
<
字符常量
• 定义:用单引号括起来的单个普通字符或转义字符.
例转义••转字字转义符符义字转常字符义量符举字的:例反符如值含(斜c及义:h‘线2其该_a后0含’字0面1义符.‘cA跟:,的c’h一转A2‘?S_个义C0’字I0字I4符‘码.符\cn)值或’ 一‘\1个01代含’ 码义值表示 m{} \\\\\vnaar‘ppppirrrrniiii<(nnnn)如ttttffff((((""""IT\\‘‘‘例1\Cu\\s036例‘a如r\1A70{}垂Py1bm6’单’:\:0or-x直’\换回响1oa-"引4-\p-’gi-‘‘'制H-行车铃-2nCr--r号---i(-oa表-C-A0\n-)--'-wm-’’’-"t\--\——-nf--1)\-(a--";\-“0--\r——--)n-Y1e--;’-’"’0\64-y-b)’--58o;‘-=,Au-’\-,?n’--\”\\\"’‘‘\\tfb‘‘)\\“\\\\x;nx4n‘a4\68"’’10—13—)’1;’’-2—-—--’运 AI\T--Cs-u--1-运 屏 打a9B-行--rP0-y-7--b--行 幕 印--:rC结,o--”-6o---H结显机5g--果‘-C---or水--果示输(a:’w--m’-退换反双平::出)a-(a屏\-’r格页斜引制’:=e\幕n线号表¥y’显ou示?”)
{
in•t可i =用0;sizeof(类型标识符)测量
printf ("char: %d bytes.\n",sizeof(char));
[工学]C语言第2讲 基本数据类型
![[工学]C语言第2讲 基本数据类型](https://img.taocdn.com/s3/m/1db39ef208a1284ac850439c.png)
\ddd
8进制数表示的ASCII码对应的字符
\xhh
16进制数表示的ASCII码对应的字符
02:42
转义字符的应用
例2-1 用转义字符输出可打印字符和不可打印字 符。
/*ex201.c*/
#include <stdio.h>
main()
{
printf(“\x4F\x4B\x21\n”); printf(“\x15 \xAB\n”);
02:42
3、数据基本形式
在实际数据处理过程中,有些数据经常 变化(大批量),而有些数据不变化 (个别)。
变化的量称变量,不变化的量称常量。 常量和变量是计算机语言中数据的两种 基本形式。
常量和变量的运算规则是有区别的。
02:42
4、C语言的数据类型
数据类型
基本类型
构造类型 指针类型 空类型
号、声音、图象、影视信息等。 是程序的必要组成部分和程序处理的对象。
02:42
2、数据类型(Data Type)
计算机只能存放二进制数据。不同类型的事物如何 区分和描述?由此产生数据类型。
不同类型的数据占据不同长度的存储单元。 不同类型的数据对应不同的值域范围。 不同类型的数据对应不同的操作(运算)及规则。 数据类型越丰富,求解能力越强大。
十进制小数
e(或E)
十进制数整数
注意:字母e(或E)之前必须有数字,且e(或E)后面的指数必须为整数。 02:42 如:e3,2.1e3.5,.e3,e等都不是合法的指数形式。
a. 一般指数形式 例:123.456可表示为: 123.456e0,12.3456e1,1.23456e2,0.l23456e3
02:42
C语言程序设计 第2章 数据类型

2.2常量和变量 变量名与变量值的关系:
2.2常量和变量
变量的使用:先定义后使用
变量定义的一般形式:
数据类型 变量名1,变量名2,…,变量名n;
2.2常量和变量
➢ 凡未被事先定义的,系统不把它认作变量名,这就 能保证程序中变量名使用的正确
例:varname,在使用的时候误写成vaname
➢ 在定义变量时要指定变量的类型,在编译时就能为 变量分配相应的存储单元
5
2.2常量和变量
甘草 三七 干姜 葛根
枸杞 人参 陈皮 地黄
山药 当归 谷芽 黄连
贴上标签 加以区分
用标识符给变量起名字
2.2常量和变量 变量命名规则
➢ 只能由字母(a~z,A~Z)、数字(0~9)和下划线(_)构 成
➢ 第一个字符不能为数字 ➢ 不能与关键字同名
例:a9,_a, A_num √ 9a, a*num,int ×
控制语句:控制语句用于控制程序的流程。 C语言提供三类控制语句: ➢ 选择语句 ➢ 循环语句 ➢ 转移语句。 控制语句会在第三章和第四章详细介绍。
2.7 表达式与语句
复合语句: 复合语句由一对大括号括起来的一 条或多条语句组成。 例:{
turnOn(0,3); turnOn(0,4); turnOn(0,5); turnOn(1,4); }
2.7 表达式与语句
表达式语句:表达式末尾加上“;”就构成一条 表达式语句。 例:
s = 3.14 * r * r; 就是一条赋值表达式语句。表达式语句最后的 分号是语句中必不可少的一部分。
2.7 表达式与语句
函数调用语句:函数调用语句由函数调用加分 号构成。 例:
turnOn(1,1);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言第二讲C语言的基础知识版本:v2011.0.1 教学内容:1、Makefile的原理与使用2、printf格式化输出和sizeof()。
3、常量的使用目的4、指针变量指向一个地址,为什么要定义指针变量的数据类型呢?5、指针+1的计算方法6、结构体的含义和使用技巧教学重点:1、创建Makefile文件,快捷编译C语言程序2、printf与sizeof3、数组与结构4、for,while,do..while课后作业:1、用整型和字符型数据两种方法输出00 01 (09)10 11 (19)……90 91 (99)2、用数组和结构体数据类型初始化五个人的学号,姓名,单科成绩[3],,然后求出总分,名次,最后按总分由高到底(总分最高名次为1)输出如NO. Name cj1 cj2 cj3 sum mingci教学过程:教学目标一:在ubuntu中怎么开始编写和编译C语言1、使用gedit编写C语言程序分析一个简单的C语言程序:test1.c。
#include <stdio.h>main(){printf("Hello C!");}建议:统一在主文件夹中进行文件创建。
2、程序的编译执行编译的方法:1、gcc test1.c -c test1.o//用gcc编译test1.c生成一个名为test1.o的链接文件。
2、gcc test1.o -o test1 //用gcc编译test1.o生成一个名为test1的可执行文件。
这里只有一个test1.c的文件,如果是一个工程呢?会包含多个.c的文件,如果用gcc我们需要每次编译时都要把修改的程序手动编译,如果用make,则可以加快编译速度,缩短时间。
就像是windows中的批处理文件。
gcc -v查看gcc的版本号:这个对于以后编译后的程序有关系2、Makefile的用途:Makefile带来的好处就是——―自动化编译‖或者说―批处理编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释Makefile中指令的命令工具,Makefile是make的默认名,也可以使用其他名称,例如mak,使用的时候使用make -f mak。
先来看一个简单实例:在刚才的那个文件中新建一个文件,名为Makefile(注意没有扩展名),打开后输入如下:test1: test1.c //反映依赖关系,不一定所有的操作都有依赖关系gcc test1.c –o test1 编译方式第行,test1代表的编译完成后的程序名,―:‖后的表示该程序依赖的源程序是test1.c;第行指利用gcc进行编译。
test1: test1.cgcc test1.c -o test1test2: test2.cgcc test2.c -o test2clean: //不需要依赖其他rm -f test1如果要执行clean,可输入make clean自动识别程序是否进行了修改,依据的时间关系。
后面的课程中还会讲到更多与Makefile相关的知识,以后进一步加深。
p rintf:格式化打印1、%d,%c,%f,%p,%x,%o,%s,%03d,%6.3d,%-5d#include<stdio.h>void main(){int a,b,*p;char m,n[9]={'c','o','m','p','u','t','e','r'};float f;a=10,b=10,p=&a;m='c';f=10.0219;printf("a=%d\n b=%x\n p=%p\n",a,b,p);Printf("%d\n",*p);printf("m=%c\n m=%d\n n=%s\n",m,m,n);printf("a=%03d\n",a); //表示不足3位时在前面补0printf("a=%-6d\n",a); // "-"表示左对齐printf("f=%f\n",f);printf("f=%6.3f\n",f); //6.3指包含小数点共6位,其中小数部分3位,如果大于3位,会自动四舍五入。
}输出多个数的对应关系换行问题八进制十进制十六进制举例:#include <stdio.h>int main(){int i;printf("i=%d\n",015);printf("i=%x\n",015);printf("i=%o\n",015);printf("-----------\n");printf("i=%d\n",15);printf("i=%x\n",15);printf("i=%o\n",15);printf("-----------\n");printf("i=%d\n",0x15);printf("i=%x\n",0x15);printf("i=%o\n",0x15);}常量#define pi 3.14#define x 2+3 //会计算x=5吗?常量是指在程序中它的值不允许被修改。
define定义的常量开始时没有占用内存空间,当在程序编译时时,就会把定义的值代替常量的名称。
常量的好处有两点:1、提高了程序的可读性2、便于修改,如果有很多处相同需要修改,最好先定义为常量。
3、但是注意define定义的常量没有数据类型,因此在使用时要注意,比如:printf(“%d\n”,x*x),这个结果应该是多少呢?可能大家会觉得x为2+3,就是5,5*5应该是25,实际上是这样吗?我们测试一下。
结果不是25,而是11,出现这种情况的原因是因为在替换时,是把2+3替换为x,变成了2+3*2+3=11。
可以重新定义一下改成#define x (2+3),这样就对了。
操作符sizeof(数据类型)非指针变量类型及取值范围,引入操作符sizeof,返回数据类型占用内存空间的大小,对以后学习嵌入式编程的底层结构有帮助1、int:整型,sizeof(int)=42、unsigned int:无符号整型,size of(unsigned int)=43、short int:短整型,sizeof(short int)=24、unsigned short int:无符号短整型,sizeof(unsigned short int)=25、long int:长整形,sizeof(long int)=46、unsigned long int:无符号长整形,sizeof(unsigned long int)=47、float:浮点型,sizefo(float)=48、double:双精度浮点型,sizeof(double)=89、char:字符型,sizeof(char)=1构造类型数组:数组在内存中开辟了一个存储同一数据类型的连续的存储空间定义数组:char arr[5]注意:1、数据名arr表示数组开始的地址。
2、读取数据中的数据方法是:arr[下标]。
3、下标是从0开始,所以数组中的第一个是arr[0]。
数组赋值1、char arr[5]; //先定义后赋值可以吗?arr[5]={'h','e','l','l','o'};2、arr[0]='h';……arr[4]='o';3、char arr[6]="hello"; //最后有一个"\0"表示字符串结束位分析:求arr[5]的sizeof和输出arr[5]int main(){char arr[5];for(i=0;i<5;i++){printf("%c",arr[i]);}printf("%s\n",arr);printf("%d\n",sizeof(arr));printf("%d\n",sizeof(arr[0]));}指针类型指针类型如int *p1,p1为一个指向整型的指针变量,p1中存放的是一个地址,int则表示该指针指向的是一个整数型的数据。
如指针存放的是一个地址,为什么要定义指针的数据类型呢?假如下面是数组在内存中的存放Arr1[1] Arr2[7] Arr2[6] Arr2[5]p1+1 Arr2[4]Arr1[0]Arr2[3]Arr2[2] p2+1 Arr2[1]p1 p2 Arr2[0]请问*p1和*p2的结果分别是什么?*p1=1,*p2=1,这两个1相同吗?显然不同,一个是整数型,占4个字节,一个是字符型,占一个字节。
请问*p1+1和*p2+1呢?根据什么可以找到p1+1和p2+1呢?根据的就是指针变量所指向的数据类型。
如果不定义指针的数据类型,那么我们在取值时就不知道指针的下一个地址指向的数据怎么取值了。
分析程序:#include <stdio.h>int main(){int arr1[8]={1,2,3};int *p1=arr1;char arr2[8]={'1','2','3','4','5','6'};char *p2=arr2;printf("arr1=%p p1=%p p1+1=%p\n",arr1,p1,p1+1);printf("arr2=%p p2=%p p2+1=%p\n",arr2,p2,p2+1);printf("*p1=%d\n",*p1);printf("*p2=%c\n",*p2);printf("*(p1+1)=%d\n",*p1+1);printf("*(p2+1)=%c\n",*p2+1);}结构体有时我们需要将不同类型的数据组合成一个有机的整体,以便于引用,这些组合在一个整体中的数据是互相联系的,例如描述一个人有姓名,性别,年龄等。