编写c语言时 main函数必不可少,《C语言基础》PPT课件.ppt

《《C语言基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《C语言基础》PPT课件.ppt(65页珍藏版)》请在装配图网上搜索。

1、第 3章 C语言基础 C 语言程序设计 2020/10/9 2 21. 一个用语言编写的源程序中 , 是必 不可少的 . ( 2004年春江苏省二级 C) 取名为 main的函数定义 #include 变量声明 注释 2020/10/9 3 以下叙述正确的是 (21) 。( 2004年秋江 苏省二级 C) A一个用 C语言编写的程序在运行时总 是从 main函数开始逐条执行语句的 B main函数是系统库函数 C main函数中每行只能出现一条语句 D main函数必须出现在所有其他函数 之前 2020/10/9 4 27.以下关于 C语言语句的叙述中 ,正确的 是 ( 27) 。( 2006。

2、年秋江苏省二 级 C) 所有语句都包含关键字 所有语句都包含表达式 所有语句都可以出现在源程序中的任何位 置 所有语句都以分号结束 2020/10/9 5 本章主要内容 本章介绍 C语言的基础 , 包括: 数据类型 运算符和表达式 均是程序设计的基本知识 为什么讨论 这些知识 ? 通常 程序 要对数据进行操作处理: 处理的对象是 数据 通过 运算符和表达式 进行操作 2020/10/9 6 例如: 【 例 3.1】 计算圆的面积 , 半径为 5 cm。 程序如下: main( ) float r, area ; r=5 ; area=3.14*r*r; printf (%fn , area) 。

3、; 运算结果是输出 圆的面积: 78.500000 程序中用到的数据: r、 area、 5、 3.14 对数据进行的运算: * 、 = 例 jc2_1 2020/10/9 7 分析: 计算机操作处理时,要完成以下工作 : 在内存中给半径 r 和运算结果 area 开辟存 储空间,存放它们的值。 应该留多大的地 方来存放它们的值? 数据 5 和 3.14 与 r 、 area 不同,它们是在 编写程序时就给出确定的值,在运算过程 中不会改变。 这样的数计算机怎么处理? 对 整数 5 和 小数 3.14 ,计算机 存放时是否 有区别? 涉及数据类型 的基本知识 2020/10/9 8 C语言的数。

4、据类型 C数据类型 数组类型 结构体类型 共用体类型 枚举类型 整型 字符型 实型 (浮点型 ) 空类型 单精度型 双精度型 基本类型 指针类型 构造类型 本章讨论 基本类型数据 2020/10/9 9 3.1.1 整型数据 1 整型数据的类型 基本整型数据 int , 分配 2 Byte 短整型数据 short int, 分配 2 Byte 长整型数据 long int, 分配 4 Byte 整型数据均以 二进制补码 形式存储 问题: 为什么要采用补码? 如何表示? 2020/10/9 10 计算机中正 、 负数的表示 例如: 109 (1101101)2 要区别: 109 和 109 方法。

5、是: 将符号也数码化 即: 正的符号 用 0 表示 负的符号 用 1 表示 计算机中的数表示方法是: 符号位 二进制数值 (以 8bit 为例 ) 109 110 1101 0110 1101 109 110 1101 1110 1101 2020/10/9 11 问题:计算机计算复杂化 例如计算: ( -19) +( +22) 1001 0011 + 0001 0110 解决的方法是: 使用 反码 或 补码 的表示方法(按前述 表示的编码称为 原码 ),即能将减法一律 转换为加法。 需要判断符号是否相同: 如果相同,结果符号不变,并进行绝对值相加 如果不同,结果取绝对值大的数的符号,并进 行。

6、绝对值相减 2020/10/9 12 原码、反码和补码 正数 : 原码、反码、补码相同 符号位为 0,数值为对应的二进制数。 109 01101101原 = 01101101反 = 01101101补 负数 : 原码 符号位为 1,数值为绝对值的二进制 数。 109 11101101原 反码 符号位为 1,数值为绝对值的二进制 数各位变反。 109 10010010反 补码 符号位为 1,数值为绝对值的二进制 数各位变反加 1。 109 10010011补 2020/10/9 13 2. 有符号和无符号整型数据 有符号的整型数据 signed int 无符号的整型数据 unsigned int。

7、 区别是将 最高位 看作符号位还是数据位 例如: 1111 1111 1010 1000 作为 有符号数 使用时,最高为符号位 为负数,值是: - 88(再求一次补) 作为 无符号数 使用时,最高为数据位 为无符号的数,值是: 65448 2020/10/9 14 例如: #include void main( ) unsigned int m; m= 65448; printf(nm=%dn,m); printf(m=%un,m); 例 jc2_a 输出结果: m=-88 m=65448 按有符号数输出 按无符号数输出 2020/10/9 15 整型数据的类型及规定 方括号表示可选项 int。

8、 分配 2 Byte, long分配 4 Byte 类型名称 类型符 bit 取值范围 整型 (短整型 ) signed int signed short int 16 -215 215-1 (-32768 32767 ) 无符号整型 unsigned int unsigned shortint 16 0 2 16-1 (0 65535 ) 长整型 signed long int 32 -231 231- 1 无符号长整型 unsigned long int 32 0 232-1 2020/10/9 16 3.1.2 实型数据 1实型数据的类型 单精度实型数据 float, 分配 4 Byte。

9、 双精度实型数据 double,分配 8 Byte 2实型数据的存储 单精度实型 指数部分 小数部分 小数的符号位 指数的符号位 2020/10/9 17 实型数据的类型及规定 C标准并未具体规定各种实型数据所占字节数,也不规 定具体小数和指数部分的位数。 一般而言,小数部分位数多,数据表示的有效数字多, 精度就高;而指数部分位数多,则表示的数据范围更大。 有效数字的意义? 类型 类型符 Byte 绝对值的范围 有效数字 单精度型 float 4 10-37 1038 6 7 位 双精度型 double 8 10-307 10308 15 16位 例 jC2_b 2020/10/9 18 3.。

10、1.3 字符型数据 字符型数据 char, 分配 1 Byte 字符型数据是指字母、数字、各种符号等 用 ASCII值表示的字符 例如 a 是一个 char类型数据,称作字符 常量,存储: 0 1 1 0 0 0 0 1 3.1.4 空类型 空类型 void 通常与指针或函数结合使用 2020/10/9 19 3.2 常量、变量与标准函数 主要内容: 常量 变量 标准库函数 2020/10/9 20 3.2.1 常量 在运行程序的过程中值保持不变的量 1整型常量 十进制 : 09 八进制 : 07,以 0开头 十六进制 : 09, AF/af, 以 0 x或 0X 开头 例如: 100 -8 。

11、0 +123 010 024 0100 073 0 x38 0 x10 0X10 0XFF 0 x0a 2020/10/9 21 1. 整型常量 整型常量的类型: 根据值大小默认类型。 整型常量后面加 l或 L, 则认为是 long int型 例如: 123L、 0L、 432l、 0 x100l 注意: 十六进制常量中可以使用大写字母 A F, 也可以使用小写字母 a f。 八进制常量中不能出现数字 8 或 9 例如: 018、 0921非法 2020/10/9 22 2. 实型常量 十进制形式 1.0 1. +12.0 -12.0 0.0 指数形式 1e3 1.8e-3 -123E-6 -。

12、.1E-3 等价于: 1 103 1.8 10-3 -123 10-6 -0.1 10-3 指数只能是整数,而尾数则可以是整数也可以是 小数 ,无论指数或尾数均不能省略 例如: 1e、 E.5、 E-3 非法 实型常量的类型:默认为 double型,后面加 F ( 或 f), 则强调表示该数是 float类型 例如: 3.5f、 1e2F 2020/10/9 23 3. 字符型常量 可视字符常量 单引号括起来的单个可视字符 例如: a、 A 、 + 、 3、 等 转义字符常量 单引号括起来的 与 可视字符 组合,例如: 0 字符串结束标志 n 回车换行 t 跳到下一个输出位置 双引号字符 dd。

13、d ddd为 1到 3位八进制数所代表的字符 xhh hh为 1到 2位十六进制数所代表的字符 2020/10/9 24 4. 字符串常量 用双引号括起的一个字符序列 例如: ABC、 123、 a、 nt nGood morning 字符串常量的长度 : 所包含的字符个数 字符串常量的存储方式: n G o o d m o r n i n g 0 a 0 所占存储单元数: 串长度 1 例如: 字符串 结束标记 2020/10/9 25 5. 符号常量 以标识符来代表的常量 事先编译预处理命令 define定义 编译时先由系统替换为它所代表的常量,再进行 编译 例如: #include #de。

14、fine LEN 2.5 void main( ) float a,b; a= 2*3.14 *LEN; b=3.14*LEN*LEN; printf(a=%f,b=%fn,a,b); 定义符号常量 使用符号常量 编译前系统进行替换 2020/10/9 26 5. 符号常量 main( ) float a,b; a= 2*3.14 *2.5; b=3.14*2.5*2.5; printf(a=%f, b=%fn,a,b); define是编译预处理命令,必须以“ #”开 头 编译预处理命令在第 7章讨论。 替换为 2020/10/9 27 3.2.2 变量 1. 变量的有关概念 在程序运行过程。

15、中,其值改变的数据,称为 变量,变量用标识符表示,称为 变量名 。 变量必须 “ 先定义后使用 ” 系统为变量分配存储单元,存储变量的值。 编写程序时通过变量名来存、取 变量值 。 a 510 变量值 为变量分配的 存储单元 变量名 例如: 有 变量 a 它的值是 510 2020/10/9 28 2. 变量定义 变量定义的一般格式: 数据类型说明符 变量列表 ; 例如: int i, j; long k, m; float x,y; char ch1,ch2; 必须使用合法的标识符作变量名 不能使用关键字为变量命名 2020/10/9 29 3. 变量的初始化: 允许在说明变量的时候对变量赋。

16、初值。 例如: int a=5,b=10+2; double x=23.568,y ; char ch1=a,ch2=66,ch3=142; 表示定义变量并对变量存储单元赋值。 错误的初始化: int a=3+b,b=5; float m=n=23.16; 2020/10/9 30 3.2.3 标准库函数 由 C编译系统定义的一种函数 , 存放在系 统函数库中 , 用户可以根据需要随时调用 常用函数 如: printf、 scanf、 fabs、 sqrt、 sin、 (常用数学函数参见教材 附录 ) 函数调用形式: 函数名(参数表) 例如: putchar(a) sqrt(x) 例 jc2_。

17、3 2020/10/9 31 3.3 运算符和表达式 主要内容: 算术运算符和算术表达式 赋值运算符和赋值表达式 关系运算符和关系表达式 逻辑运算符和逻辑表达式 位运算符和位运算表达式 条件运算符和条件表达式 逗号运算符和逗号表达式 其他运算符及其运算 2020/10/9 32 运算符的有关概念 作用: 对运算对象完成规定的操作运算 类型: 按运算对象分: 单目、双目、三目 按功能分: 算术、赋值、关系、逻辑 条件、逗号、位、其他 2020/10/9 33 运算符的优先级和结合性 优先级 指各种运算符号的运算优先顺序 例如: 算术运算优先于关系运算 算术运算中先 * / 后 + - 结合性 指。

18、运算符号和运算对象的结合方向 分为:从左向右 (左结合 )和从右向左 (右结合 ) 例如: 算术运算符为 左结合 a-b+4 赋值运算符为 右结合 a= b = 5 ( C语言规定见教材 附录 ) 2020/10/9 34 本章涉及的运算符 + - * / % + - + - = += -= *= /= %= a=a+1 表达式的值为 5,且 a=6, b=5 2020/10/9 40 说明: + 和 - 的运算对象只能是变量(或运算结果是 变量的表达式) , 不能是常量(或运算结果是数 值的表达式)。 例如: 5+、 (a+2)+ 不合法。 具有右结合性,结合方向为从右到左。 例如: a+ 。

19、等价于 -(a+) 如果有多个运算符连续出现时, C系统尽可能多 的从左到右将字符组合成一个运算符 例如: i + j 等价于 ( i+)+j -i+-j 等价于 -(i+)+(-j) 2020/10/9 41 #include void main( ) int a=5; printf(%d %dn,a,a+ ); 说明(续): 对函数参数的求值顺序: Turbo C系统先计算最右边的参数值, 再依次计算左面的参数值。 【例 3.5】 有多个函数参数且为同一变量自增 的运算处理。 输出结果: 6 5 运行例 2.5 2020/10/9 42 说明 ( 续 ) : 【例 3.6】 有多个函数参数。

20、且为同一变量多次 自增的运算处理。 #include void main( ) int a=5; printf(%d%dn,a,(a+)+( a+); 输出结果: 7 11 运行例 2.6 2020/10/9 43 赋值运算 赋值运算符 (右结合) = += -= *= /= %= char ch; 可以对变量 a、 ch、 student 进行 double x; printf(%d %d ,sizeof(int),sizeof(a); printf(%d %d ,sizeof(double),sizeof(x); printf(%d %dn,sizeof(float),sizeof(cha。

21、r); 输出结果: 2 2 8 8 4 1 运行 jc2_e 2020/10/9 58 3.4 运算中数据类型的转换 3.4.1 数据类型的自动转换 转换原则: 自动将精度低、表示范围小的 运算对象类型向精度高、表示范围大的运算 对象类型转换 char, short double long float unsigned int 高精度 低精度 例如有定义: int a; char ch; 表达式: a-ch*2+35L a-ch*2+ 35. 2020/10/9 59 2. 赋值运算中的类型转换 = 小数部分自动补 0 = 自动舍去实型表达式的小数部分( 注意不进行 四舍五入 ) = = 自动。

22、截取表达式值的低字节赋值,舍去高字节 = = 自动给高字节补 0 或 补 1 2020/10/9 60 运行结果: 例如: #include void main( ) int a; long b; char c; float x; a=35.67; b=65537; c=321; x=120; printf(a=%d, b=%ldn,a, b); printf(c=%c, x=%fn,c, x); a=c; c=b; b=a; printf(a=%d, b=%ld, c=%dn,a, b, c); 运行 jc2_f a=35, b=65537 c=A, x=120.000000 a=65, b。

23、=65, c=1 2020/10/9 61 3.4.2 数据类型的强制转换 强制转换的一般形式 (类型名 ) 表达式 例如: (int)( b+3*x)%3 1/(float)a+6 注意: (float) 22/5 与 (float) (22/5) 不同 错误的类型转换: (int) b=a+5 b= int (3*a) 2020/10/9 62 1已知 i=5.6;写出语句 a=(int)i; 执行后变量 i 的值是 _____. 2int a=1,b=2,c=3; 执行语句 a += b *= c;后 a的值是 _____. 3已知 i=5,写出语句 a=(a=i+1,a+2,a+3);。

24、 执 行后整型变量 a 的值是 ____. 4设 x 的值为 15,n 的值为 2,则表达式 x%=(n+3) 运算后 x 的值是 ______. 5已知 i=5,写出语句 a=i+; 执行后整型变量 a的值是 _____. 2020/10/9 63 6若有 int i=10,j=2;则执行完 i*=j+8;后 的值为 _____。 7以下选项中,值为 1的表达式是 (全国二级 C) A. 1-0, B.1-0 C. 1-0 D. 0-0 8若有定义 int x,y;并已正确给变量赋值,则以下 选项中与表达式 (x-y)?(x+)y+)中的条件表达 式 (x-y)等价的是 (06年秋季全国二级。

25、 C) A.(x-yO) B.(x-y0) C.(x-y0) D.(x-y=0) 2020/10/9 64 9设有定义: int k=0,以下选项的四个表达式中与 其他三个表达式的值不相同的是( 07年春季全 国二级 C) A) k+ B)k+=1 C)+k D)k+1 10 以下选项中,当 x为大于 1的奇数时,值为 0的 表达式是( 07年春季全国二级 C) A) x%2=1 B)x/2 C)x%2!=0 D)x%2=0 11以下合法的字符型常量是( 07年春季全国二级 C) A)x13 B)081 C)65 D”n” 2020/10/9 65 12下列定义变量的语句中错误的是 (06年秋季全国 二级 C) A. int _int; B. doublet int_ ; C.chat For; D.float US$; 13.若变量 x、 y已正确定义并赋值,以下符合 C语 言语法的表达式是 (06年秋季全国二级 C) A.+x, y=x- B.x+l=y C.x=x+10=x+y D.double(x)/10 14.以下关于逻辑运算符两侧运算对象的叙述中正 确的是 (06年秋季全国二级 C) A.只能是整数 0或 1 B.只能是整数 0或非 0整 数 C.可以是结构体类型的数据 D.可以是任意合法 的表达式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链表的单值化操作可以理解为将链表中重复的元素合并,保留一个元素,从而得到一个没有重复元素的链表。 下面是一个示例代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next; } Node; // 链表插入操作 void insert(Node **head, int data) { Node *new_node = (Node *)malloc(sizeof(Node)); new_node->data = data; new_node->next = NULL; if (*head == NULL) { *head = new_node; } else { Node *p = *head; while (p->next != NULL) { p = p->next; } p->next = new_node; } } // 链表单值化操作 void unique(Node *head) { if (head == NULL) { return; } Node *p = head; while (p != NULL && p->next != NULL) { if (p->data == p->next->data) { Node *q = p->next; p->next = q->next; free(q); } else { p = p->next; } } } // 打印链表 void print(Node *head) { Node *p = head; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { Node *head = NULL; insert(&head, 1); insert(&head, 2); insert(&head, 2); insert(&head, 3); insert(&head, 3); insert(&head, 3); printf("原始链表:"); print(head); unique(head); printf("单值化后的链表:"); print(head); return 0; } ``` 运行结果: ``` 原始链表:1 2 2 3 3 3 单值化后的链表:1 2 3 ``` 在代码中,我们定义了一个链表结构体 `Node`,包含一个整型数据 `data` 和一个指向下一个节点的指针 `next`。为了方便操作,我们还定义了链表插入操作 `insert`,链表单值化操作 `unique` 和打印链表操作 `print`。 在链表单值化操作中,我们首先判断链表是否为空,如果为空则直接返回。否则,我们从链表头开始遍历,如果当前节点的数据与下一个节点的数据相同,则将下一个节点删除,并将当前节点的指针指向删除节点的下一个节点;否则,将当前节点的指针移动到下一个节点。 最后,我们在 `main` 函数中创建一个链表,并调用插入操作插入若干个元素。然后,我们先打印原始链表,再调用单值化操作,最后再打印单值化后的链表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值