C语言定义函数PPT课件
合集下载
《c语言函数》PPT课件
其它函数: 可以互相调用函数、自调用函数,不能调用main()。
精选课件ppt
4
2、使用参数 入口参数: 主调函数向被调函数传递的数据------实参、形参。
出口参数: 被调函数向主调函数传递的数据------返回值。
精选课件ppt
5
§7.2 函数的定义 问题: 1、被调函数如何使用主调函数中的数据。 2、假设被调函数有办法使用主调函数中的数据,如何保证 被调函数和主调函数中数据类型的一致。
在函数中允许有多个return语句,但每次调用只能有一个 return 语句被执行, 因此只能返回一个函数值。
精选课件ppt
15
2、函数值(回传值)的类型与被调用函数的类型说明
函数调用语句 被调函数类型 回传值类型
在定义函数时,需要指定函数的类型:
例如:
int max(x,y);
doubel a(c1,c2); 等等
1、被调函数为库函数 对库函数的调用不需要再作说明, 但必须把该函数的头
文件用include命令包含在源文件前部。
精选课件ppt
23
2、用户自定义的函数 一般应该在主调函数中对被调函数的返回值的类型做说明。 对被调函数的说明也有两种格式,
一种为传统格式,其一般格式为: 类型说明符 被调函数名();
9
调用结束:形参临时单元被释放,形参数据失效,实参数 据不变。这就是所谓的单值传递。
函数的形参和实参具有以下特点:
(1)、形参变量只有在被调用时才分配内存单元,在调用 结束时, 即刻释放所分配的内存单元。因此,形参只有在 函数内部有效。 函数调用结束返回主调函数后则不能再使 用该形参变量。
精选课件ppt
}
精选课件ppt
精选课件ppt
4
2、使用参数 入口参数: 主调函数向被调函数传递的数据------实参、形参。
出口参数: 被调函数向主调函数传递的数据------返回值。
精选课件ppt
5
§7.2 函数的定义 问题: 1、被调函数如何使用主调函数中的数据。 2、假设被调函数有办法使用主调函数中的数据,如何保证 被调函数和主调函数中数据类型的一致。
在函数中允许有多个return语句,但每次调用只能有一个 return 语句被执行, 因此只能返回一个函数值。
精选课件ppt
15
2、函数值(回传值)的类型与被调用函数的类型说明
函数调用语句 被调函数类型 回传值类型
在定义函数时,需要指定函数的类型:
例如:
int max(x,y);
doubel a(c1,c2); 等等
1、被调函数为库函数 对库函数的调用不需要再作说明, 但必须把该函数的头
文件用include命令包含在源文件前部。
精选课件ppt
23
2、用户自定义的函数 一般应该在主调函数中对被调函数的返回值的类型做说明。 对被调函数的说明也有两种格式,
一种为传统格式,其一般格式为: 类型说明符 被调函数名();
9
调用结束:形参临时单元被释放,形参数据失效,实参数 据不变。这就是所谓的单值传递。
函数的形参和实参具有以下特点:
(1)、形参变量只有在被调用时才分配内存单元,在调用 结束时, 即刻释放所分配的内存单元。因此,形参只有在 函数内部有效。 函数调用结束返回主调函数后则不能再使 用该形参变量。
精选课件ppt
}
精选课件ppt
C语言 函数
1. 函数声明的一般形式:
类型说明符 函数名([类型1 形参1,类型2 形参2,…]);
▪ 编译系统只检查函数类型、函数名、形参 类型和形参个数,不检查形参名。
➢ 因此,函数声明可省略形参名:
类型说明符 函数名([类型1,类型2…]);
➢ 以下两个函数声明语句 等价:
int min(float x,float y); int min(float,float);
}
}
5.2.4 函数原型
▪ 当被调函数位于主调函#in数clud后e 面<st时dio,.h>需要在 主调函数中对被调函数v{ oid进m行ain声() 明。
int min(float x,float y); int m; float a,b; scanf("%f,%f",&a,&b); m=min(a,b); printf("Min is %d\n",m); } int min(float x,float y) { return x<y?x:y; }
与函数的类型不一致,{前者将被自动转换为后
者的类型。
int m; float a,b;
scanf("%f,%f",&a,&b);
m=min(a,b);
printf("Min is %d\n",m);
}
3.函数调用的一般形式 函数名(实参表列);
A.说明: (1)如调用无参函数,()也不能省略。 (2)如实参表列含多个实参,参数间用逗号
第5章 函数
▪ 函数是C程序的基本组成单位。
▪ 使用函数能够实现模块化程序设计:
➢ 程序设计时往往把一个大的问题分解成若干小 的且易解决的问题
C语言函数.ppt
递归的优缺点
优点:为某些编程问题提供了最简单的解 决办法
缺点:递归算法会很快的耗尽计算机的内 存资源,难于维护和阅读
本讲内容
基本函数概念 函数的递归 局部变量和全局变量 变量的存储类别
局部变量和全局变量
局部变量
在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也 就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变 量的。这称为“局部变量”
从用户使用的角度看,函数有两种: 标准函数,即库函数。这是由系统提供的,用户不必自己定义这 些函数,可以直接使用它们。应该说明,每个系统提供的库函数 的数量和功能不同,当然有一些基本的函数是共同的 用户自己定义的函数,以解决用户的专门需要
从函数的形式看,函数分两类 无参函数。在调用无参函数时,主调函数并不将数据传送给被调 用函数,一般用来执行指定的一组操作。无参函数可以带回或不 带回函数值,但一般以不带回函数值的居多 有参函数。在调用函数时,在主调函数和被调用函数之间有参数 传递,也就是说,主调函数可以将数据传给被调用函数使用,被 调用函数中的数据也可以带回来供主调函数使用。
编写和使用一个简单的函数
带参数的函数
定义带参数的函数(形式参数)
函数定义以下面的ANSI C函数头开始
ANSI C也接受ANSI之前的形式,但将其视 为废弃不用的形式
调用带参数的函数(实际参数)
使用实际参数对形式参数赋值 实际参数可以是常量、变量或一个复杂的
表达式
调用带参数的函数(实际参数)
float fl(int a) {int b,c; … }
a,b,c有效
Char f2(int x,int y)
{int i,j; … }
x,y,i,j有效
《计算机c语言》课件
数据
关闭文件:使用fclose()函 数,关闭打开的文件
程序调试技巧和方法
单步调试:逐行执行代码, 观察变量值和程序状态
异常处理:使用try-catch 语句捕获和处理异常,避免
程序崩溃
代码审查:与他人共同审查 代码,发现潜在问题
断点调试:设置断点,逐 步执行代码,观察变量值
和程序状态
打印调试:在关键位置打 印变量值,观察程序状态
数组的定义:使用关键字 "int[]"、"char[]"等定义数
组
添加标题
数组的访问:通过数组下标 访问数组元素,下标从0开始
添加标题
数组的修改:可以通过数组 下标修改数组元素
数组的查找:可以使用查找 算法在数组中查找元素,如
二分查找、顺序查找等
字符串的处理和操作
字符串的定义:由字符组成 的序列,用双引号括起来
嵌套控制结构
概念:在一个控制 结构中嵌套另一个 控制结构
应用场景:循环嵌 套、条件嵌套等
语法:使用{}、() 等符号表示嵌套关 系
示例:for(int i=0;i<10;i++){if(i %2==0){...}}
函数和程序结构
函数的定义和调用
函数的定义:函数是完成特定任务的独立代码块,可以重复使用。 函数的调用:在程序中使用函数名和参数列表来调用函数。 函数的参数:函数可以接受参数,参数可以是变量、常量或表达式。 函数的返回值:函数可以返回一个值,返回值可以是任何类型的数据。
数据类型和运算 符
变量和常量
变量:在程序运行过程中可以改变的值
常量类型:整型、浮点型、字符型、布 尔型等
常量:在程序运行过程中不能改变的值
关闭文件:使用fclose()函 数,关闭打开的文件
程序调试技巧和方法
单步调试:逐行执行代码, 观察变量值和程序状态
异常处理:使用try-catch 语句捕获和处理异常,避免
程序崩溃
代码审查:与他人共同审查 代码,发现潜在问题
断点调试:设置断点,逐 步执行代码,观察变量值
和程序状态
打印调试:在关键位置打 印变量值,观察程序状态
数组的定义:使用关键字 "int[]"、"char[]"等定义数
组
添加标题
数组的访问:通过数组下标 访问数组元素,下标从0开始
添加标题
数组的修改:可以通过数组 下标修改数组元素
数组的查找:可以使用查找 算法在数组中查找元素,如
二分查找、顺序查找等
字符串的处理和操作
字符串的定义:由字符组成 的序列,用双引号括起来
嵌套控制结构
概念:在一个控制 结构中嵌套另一个 控制结构
应用场景:循环嵌 套、条件嵌套等
语法:使用{}、() 等符号表示嵌套关 系
示例:for(int i=0;i<10;i++){if(i %2==0){...}}
函数和程序结构
函数的定义和调用
函数的定义:函数是完成特定任务的独立代码块,可以重复使用。 函数的调用:在程序中使用函数名和参数列表来调用函数。 函数的参数:函数可以接受参数,参数可以是变量、常量或表达式。 函数的返回值:函数可以返回一个值,返回值可以是任何类型的数据。
数据类型和运算 符
变量和常量
变量:在程序运行过程中可以改变的值
常量类型:整型、浮点型、字符型、布 尔型等
常量:在程序运行过程中不能改变的值
C语言完整 ppt课件
1.4.1 宏定义
用一个标识符来表示一个字符串,称为“宏”,标识符称为“宏名”。在 程序中 用宏名替代字符串称为“宏调用”。在编译预处理时,将对程序中所有出现的 “宏 名”,都用宏定义中的字符串代换,这个过程称为“宏展开”。
1.4.1.1 不带参数的宏定义
格式为:#define 标识符 字符串
1.4.1.2 带参数的宏定义
1-4
1.3 C程序上机步骤
C源程序编好后,要经过编辑、编译、连接, 生成可执行文件后,才可运行。
运行集成开发软件
编辑源程序
编译
有 有错? 无 连接
不正确
运行
结果正确? 正确
结束
1-5
1.4 编译预处理
编译预处理是指,在C编译程序对C源程序进行编译之前,由编译预处理程 序对源程序中的预处理命令进行处理的过程。
1.2.1 C语言程序举例
1.2.2 C语言程序的结构
1.2.2.1 函数是C语言程序的基本单位。
1.2.2.2 函数的一般结构
任何函数(包括main()函数)都是由函数首部和函数体两部分组成。
1. 函数首部: 函数首部即函数第一行,由函数类型、函数名和函数参数表三部分组成。
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
2.6.1 运算符及表达式简介 2.6.1.1 运算符
C语言中的运算符具有2个特点: ⑴ 运算符的优先级 C语言中,运算符的优先级共分为15级,1级最高,15级最低。 ⑵ 运算符的结合性 C语言中各运算符的结合性分为左结合性(从左到右)和右结合性(从右到左)。 2.6.1.2 表达式 表达式是由常量、变量、函数和运算符组成的式子。 表达式求值是按运算符的优先级和结合性规定的顺序进行的。
用一个标识符来表示一个字符串,称为“宏”,标识符称为“宏名”。在 程序中 用宏名替代字符串称为“宏调用”。在编译预处理时,将对程序中所有出现的 “宏 名”,都用宏定义中的字符串代换,这个过程称为“宏展开”。
1.4.1.1 不带参数的宏定义
格式为:#define 标识符 字符串
1.4.1.2 带参数的宏定义
1-4
1.3 C程序上机步骤
C源程序编好后,要经过编辑、编译、连接, 生成可执行文件后,才可运行。
运行集成开发软件
编辑源程序
编译
有 有错? 无 连接
不正确
运行
结果正确? 正确
结束
1-5
1.4 编译预处理
编译预处理是指,在C编译程序对C源程序进行编译之前,由编译预处理程 序对源程序中的预处理命令进行处理的过程。
1.2.1 C语言程序举例
1.2.2 C语言程序的结构
1.2.2.1 函数是C语言程序的基本单位。
1.2.2.2 函数的一般结构
任何函数(包括main()函数)都是由函数首部和函数体两部分组成。
1. 函数首部: 函数首部即函数第一行,由函数类型、函数名和函数参数表三部分组成。
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
2.6.1 运算符及表达式简介 2.6.1.1 运算符
C语言中的运算符具有2个特点: ⑴ 运算符的优先级 C语言中,运算符的优先级共分为15级,1级最高,15级最低。 ⑵ 运算符的结合性 C语言中各运算符的结合性分为左结合性(从左到右)和右结合性(从右到左)。 2.6.1.2 表达式 表达式是由常量、变量、函数和运算符组成的式子。 表达式求值是按运算符的优先级和结合性规定的顺序进行的。
C语言函数篇讲解ppt课件
⑤
b函数结束
精选版课件ppt
20
main( ) { int x,y,sum;
x=5; y=6; sum=add(x,y); printf(“%d”,sum); }
add(int a ,int b) { int z;
z=a+fun(b); return z; } 运行结果:
41
精选版课件ppt
汉诺塔问题 ( Hanoi)
数调用任意多次。 4. 从用户角度看,函数分为两种:
① 标准函数:即库函数,由系统提供。
② 用户自定义函数:用户自己定义的。 5. 从函数形式看,函数分为两种:
①无参函数。
②有参函数。
精选版课件ppt
3
6.2 函数定义的一般形式
一 函数定义的一般形式
列表
类型标识符 函数名(类型1 形参1,类型2 形参2,…) { 声明部分 语句 }
二 说明:
1.所有函数在定义时都是互相独立的,即不能嵌套定义; 2.类型标识符:说明了函数返回值的类型,当返回值为
int时,可省略不写; 3.函数名:遵循标识符的命名规则;同一个函数中函数名
必须唯一;
精选版课件ppt
4
4.形参:只能是变量,每个形参前要有类型名;当定义的 函数没有形参时叫作“无参函数” ;
a 10 20 b
alter(a, b);
printf(“a=%d,b=%d\n”,a,b); x 1200 }
210 y
alter(int x, int y) { int t;
t=x; x=y; y=t; }
总结:形参的值发生 改变,并不能 影响实参。
精选版课件ppt
9
三 函数的返回值
b函数结束
精选版课件ppt
20
main( ) { int x,y,sum;
x=5; y=6; sum=add(x,y); printf(“%d”,sum); }
add(int a ,int b) { int z;
z=a+fun(b); return z; } 运行结果:
41
精选版课件ppt
汉诺塔问题 ( Hanoi)
数调用任意多次。 4. 从用户角度看,函数分为两种:
① 标准函数:即库函数,由系统提供。
② 用户自定义函数:用户自己定义的。 5. 从函数形式看,函数分为两种:
①无参函数。
②有参函数。
精选版课件ppt
3
6.2 函数定义的一般形式
一 函数定义的一般形式
列表
类型标识符 函数名(类型1 形参1,类型2 形参2,…) { 声明部分 语句 }
二 说明:
1.所有函数在定义时都是互相独立的,即不能嵌套定义; 2.类型标识符:说明了函数返回值的类型,当返回值为
int时,可省略不写; 3.函数名:遵循标识符的命名规则;同一个函数中函数名
必须唯一;
精选版课件ppt
4
4.形参:只能是变量,每个形参前要有类型名;当定义的 函数没有形参时叫作“无参函数” ;
a 10 20 b
alter(a, b);
printf(“a=%d,b=%d\n”,a,b); x 1200 }
210 y
alter(int x, int y) { int t;
t=x; x=y; y=t; }
总结:形参的值发生 改变,并不能 影响实参。
精选版课件ppt
9
三 函数的返回值
c语言讲稿(PPT32张)
由计算机硬件系统可以识别的二进制指令组成的语 言称为机器语言
第二时期——汇编语言
用人们比较习惯的符号来代替机器指令
程序设计基本概念
程序设计语言的发展历程
第三时期——高级语言
采用人们容易理解和记忆的符合和语句来代替原有 的指令,形成的这种更接近人类的语言 例如:Fortran、Cobol、Basic、Pascal、C、 C++、Java等
求两个整数的较大者?
#include <stdio.h> void main ( ) { int max(int x,int y); int a, b, c; int max(int x,int y) scanf ("%d,%d",&a,&b); { c=max (a,b); int z; printf ("max=%d",c); if (x>y) z=x; } else z=y; return (z); }
简单的C语言程序
计算机求解问题的过程
程序编写
#include<stdio.h> void main() { int a,b,sum; printf("please input two integer:"); scanf("%d %d",&a,&b); sum=a+b; printf("sum is %d \n",sum); }
注意
标准的程序必须有注释,注释不被执行
简单的C语言程序
简单C程序的结构和特点
注释
注释出现的位置 (1)程序开头——注目程序的名称、功能、思路、
《c语言函数》PPT课件
printf("*"); printf("*"); printf("*"); printf("*"); printf("*");
函数——完成某一特定特定功能的模块,是程序设计的
基本单位。
“一个程序应该是轻灵自由的,它的子过程就象串在一
根线上的珍珠。” Geoffrey James的《编程之道》
大
函数声明 函数定义 函数调用
“声明”(declaration)——作用是把函数名、函数参数的个数和参数
的类型等信息通知编译系统,以便在遇到函数调用时,编译系统能够正确 识别并检查调用是否合法。
void print(int n);
在函数声明中也可以不写形参名,而只写形参的类型。
编译系统只检查参数个数和参数类型,而不检查参数名。 函数声明——函数原型(function prototype)
z=x>y?x:y; return z; }
(#4)in不cl返ud回e 函<数st值di的o.函h>数,可以明确定义为“空类型”,类型说明符为 “voiidd”main()
{
void printstar(); //对printstar函数进行声明
明 printsvtoaird(3)print_message(); //对print_messge函数进行声
函数声明 函数定义 函数调用
“定义”(defination)——是指对函数功能的确立,
包括指定函数名、函数值类型、形参名称及其类型、函数
体等。
它是一个完整的、独立的函数单位。
v{oid prifinontrt((iii;=n1t;in<)=n;i++形能) 参省pr名略in不tf("*");
C语言( 函数) ppt课件
6 ppt课件
下面是若干函数定义的例子: void print()//无参函数,也没有返回值 {
printf("hello\n"); }
int max(int a, int b)//求两个整数的最大值 {
if (a>=b) return a; else return b; }
7 ppt课件
5.2.2 函数的声明 函数调用之前必须先进行函数声明,形式为:
printf("%d", a[i]);//数组元素作为函数实参
}
return 0;
p}pt课件
19
例5:有一个一维数组a,内放10个整数,分别输出这十 个数的平方。
#include<stdio.h> int square(int n) {
return n*n; } int main() {
int a[10], i, j; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%5d",square(a[i])); return 0; }
//传递数组首地址 for(int j=0; j<10; j++) {
if (j>0) printf(" "); printf("%7.2lf",score[j]); } return 0; }
22 ppt课件
说明: (1)用数组名作函数参数,应该在主调函数和被调用函数
分别定义数组,例6中array是形参数组名,score是实 参数组名,在其所在函数中分别定义。 (2)实参数组与形参数组类型应一致(本例都为double 型),如不一致,将出错。 (3)由于将实参数组的首地址传给形参数组,因此, score[i]和array[i]代表的是同一单元。 (4)string类形的形参的改变不会影响实参,除非使用引 用参数。
下面是若干函数定义的例子: void print()//无参函数,也没有返回值 {
printf("hello\n"); }
int max(int a, int b)//求两个整数的最大值 {
if (a>=b) return a; else return b; }
7 ppt课件
5.2.2 函数的声明 函数调用之前必须先进行函数声明,形式为:
printf("%d", a[i]);//数组元素作为函数实参
}
return 0;
p}pt课件
19
例5:有一个一维数组a,内放10个整数,分别输出这十 个数的平方。
#include<stdio.h> int square(int n) {
return n*n; } int main() {
int a[10], i, j; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%5d",square(a[i])); return 0; }
//传递数组首地址 for(int j=0; j<10; j++) {
if (j>0) printf(" "); printf("%7.2lf",score[j]); } return 0; }
22 ppt课件
说明: (1)用数组名作函数参数,应该在主调函数和被调用函数
分别定义数组,例6中array是形参数组名,score是实 参数组名,在其所在函数中分别定义。 (2)实参数组与形参数组类型应一致(本例都为double 型),如不一致,将出错。 (3)由于将实参数组的首地址传给形参数组,因此, score[i]和array[i]代表的是同一单元。 (4)string类形的形参的改变不会影响实参,除非使用引 用参数。
C语言课件(函数)
2
P OSIX库函数的使用
介绍POSIX库函数,以及在UNIX和UNIX-like系统中使用它们的方法。
3
系统函数的使用
学习如何使用操作系统提供的函数来完成特定的任务,如文件操作和网络编程。
Part 9:常见问题和技巧
1 函数调试的技巧
分享一些用于调试函数的技巧和工具,帮助您更好地查找和修复错误。
递归函数的应用场景
探索递归函数的实际应用场景, 如数学计算和数据结构。
Part 6:函数指针
1
函数指针的定义和使用
学习如何定义和使用函数指针,以便在程序中灵活地调用函数。
2
函数指针的作用
讨论函数指针的作用,包括回调函数和动态函数调用。
3
回调函数的实现
了解回调函数的原理及其在实际编程中的应用。
Part 7:高级函数
可变参数的函数
学习如何编写可接受可变数量参数的函数,以提高代码的灵活性。
内联函数
介绍内联函数的概念以及如何使用内联函数来提高程序的执行效率。
匿名函数的实现
探索匿名函数的实现方式以及它们在函数编程中的应用。
Part 8:库函数和系统函数
1
标准库函数的使用
了解常用的C标准库函数,并学习如何正确地使用它们。
C语言课件(函数)
C语言课件(函数)
Part 1:函数概述
函数的定义形式
了解函数的定义方式,例如函数名、参数列表和返回类型。
函数参数的传递方式
探索函数参数传递的不同方式,如按值传递、按引用传递和按指针传递。
函数返回值的类型
了解函数返回值的类型,并了解如何处理不同类型的返回值。
Part 2:函数的调用和传参
2 头文件的作用
c语言ppt课件
用于对二进制位进行操作。
编译器自动将一种数据类型转换为另一种数据类型。
自动类型转换
通过强制类型转换操作符将一种数据类型转换为另一种数据类型。
强制类型转换
03
程序流程控制
Chapter
依照代码的先后顺序执行,是最基本的程序流程结构。
顺序结构依照代码的顺序从上到下执行,每条语句依照出现的先后顺序执行,直到程序结束。
指针的算术运算
指针数组是指包含相同类型的指针元素的数组,可以通过数组索引访问各个指针,实现对数组元素的间接访问。
指针数组
使用malloc、calloc和realloc函数可以在运行时动态分配内存,这些函数返回一个指向分配内存的指针,可以通过该指针访问和操作内存。
使用free函数可以释放之前动态分配的内存,以避免内存泄漏。释放内存后,应将指针置为NULL,以避免野指针的产生。
打开文件
使用fclose()函数关闭已打开的文件,释放相关资源。
关闭文件
读取文件
使用fscanf()、fgets()等函数从文件中读取数据,并将其存储到变量中。
写入文件
使用fprintf()、fputs()等函数将数据写入文件中。
使用断点、单步执行等调试技能,检查程序中的错误和特殊。
使用try-catch语句或setjmp/longjmp函数,捕获和处理程序中的特殊情况。
C语言的发展经历了多个版本,从C89到C99再到C11,不断引入新的特性和标准。
C语言具有高效、可移植、可扩大性等特点,能够直接与硬件进行交互,合适开发操作系统、嵌入式系统、游戏、图形界面等。
01
02
C语言在计算机科学、电子工程、数学等领域有广泛应用,也是许多程序员入门的首选语言。
编译器自动将一种数据类型转换为另一种数据类型。
自动类型转换
通过强制类型转换操作符将一种数据类型转换为另一种数据类型。
强制类型转换
03
程序流程控制
Chapter
依照代码的先后顺序执行,是最基本的程序流程结构。
顺序结构依照代码的顺序从上到下执行,每条语句依照出现的先后顺序执行,直到程序结束。
指针的算术运算
指针数组是指包含相同类型的指针元素的数组,可以通过数组索引访问各个指针,实现对数组元素的间接访问。
指针数组
使用malloc、calloc和realloc函数可以在运行时动态分配内存,这些函数返回一个指向分配内存的指针,可以通过该指针访问和操作内存。
使用free函数可以释放之前动态分配的内存,以避免内存泄漏。释放内存后,应将指针置为NULL,以避免野指针的产生。
打开文件
使用fclose()函数关闭已打开的文件,释放相关资源。
关闭文件
读取文件
使用fscanf()、fgets()等函数从文件中读取数据,并将其存储到变量中。
写入文件
使用fprintf()、fputs()等函数将数据写入文件中。
使用断点、单步执行等调试技能,检查程序中的错误和特殊。
使用try-catch语句或setjmp/longjmp函数,捕获和处理程序中的特殊情况。
C语言的发展经历了多个版本,从C89到C99再到C11,不断引入新的特性和标准。
C语言具有高效、可移植、可扩大性等特点,能够直接与硬件进行交互,合适开发操作系统、嵌入式系统、游戏、图形界面等。
01
02
C语言在计算机科学、电子工程、数学等领域有广泛应用,也是许多程序员入门的首选语言。
c语言基础入门PPT课件
修改不会影响外部传递的实参。 • · 返回值:函数执行完成后,可以返回一个值给调用者。例如 • · ```c • · int max(int a, int b) { • · return a > b ? a : b; • ·}
数组的定义与初始化
• 数组定义:使用数组类型和长度来定义一个数组。例如 • int arr[5]; • 数组初始化:在定义数组的同时,可以对其元素进行初始化。例如 • int arr[5] = {1, 2, 3, 4, 5}; • · 数组定义:使用数组类型和长度来定义一个数组。例如 • · ```c • · int arr[5]; • · ``` • · 数组初始化:在定义数组的同时,可以对其元素进行初始化。例如 • · ```c • · int arr[5] = {1, 2, 3, 4, 5}; • · ```
打印“Hello World”程序
需求分析
编写一个C程序,能够在控制台 输出“Hello World”。
程序设计
通过printf函数实现输出功能。
代码实现
使用printf函数输出“Hello World”。
数据复制和排序
需求分析
给定一个整数数组,实现对该数组的复制和排序。
程序设计
可以使用冒泡排序算法实现数组的排序,通过循环语句实现数 组的复制。
类型错误
将不同类型的指针进行比较或算术 运算。
内存泄漏
未释放已分配的内存空间而导致内 存泄漏。
05
数据结构与算法
链表
01
02
03
链表定义
链表是一种线性数据结构 ,由一系列节点构成,每 个节点包含数据域和指针 域。
链表特点
链表不需要连续的内存空 间,可以高效地进行插入 和删除操作,但访问元素 不如数组直观。
数组的定义与初始化
• 数组定义:使用数组类型和长度来定义一个数组。例如 • int arr[5]; • 数组初始化:在定义数组的同时,可以对其元素进行初始化。例如 • int arr[5] = {1, 2, 3, 4, 5}; • · 数组定义:使用数组类型和长度来定义一个数组。例如 • · ```c • · int arr[5]; • · ``` • · 数组初始化:在定义数组的同时,可以对其元素进行初始化。例如 • · ```c • · int arr[5] = {1, 2, 3, 4, 5}; • · ```
打印“Hello World”程序
需求分析
编写一个C程序,能够在控制台 输出“Hello World”。
程序设计
通过printf函数实现输出功能。
代码实现
使用printf函数输出“Hello World”。
数据复制和排序
需求分析
给定一个整数数组,实现对该数组的复制和排序。
程序设计
可以使用冒泡排序算法实现数组的排序,通过循环语句实现数 组的复制。
类型错误
将不同类型的指针进行比较或算术 运算。
内存泄漏
未释放已分配的内存空间而导致内 存泄漏。
05
数据结构与算法
链表
01
02
03
链表定义
链表是一种线性数据结构 ,由一系列节点构成,每 个节点包含数据域和指针 域。
链表特点
链表不需要连续的内存空 间,可以高效地进行插入 和删除操作,但访问元素 不如数组直观。
C语言课件第07章-自定义函数
在主函数或其他函数中,我们可以使用y=sum();语句执行函数sum,并把 函数的值送给y,或者用printf("%d",sum());直接输出函数sum的值。
第7章 自定义函数
2. 有参函数的定义形式 如果一个函数,需要调用者提供原始数据才能执 行(如sqrt函数),则这种函数可以被定义成有 参函数。其定义形式如下:
第7章 自定义函数
下面我们定义一个函数,名叫 printStar,其功能就是专门输出 则,主函数代码可以简化为:
经过函数调用,程序的代码行大大缩水,且main 函数更清晰且可读性更好。
第7章 自定义函数
如果我们把printStar函数的代码放到d盘根目录 下的一个文本文件中,比如放到function.txt文 本文件中,其他的程序如果有需要,也完全可以 用#include <d:\function.txt>把有关内容包含 到对应程序文件中,在需要的时候调用printStar 函数即可 。 函数:函数就是一个用名字命名的独立的程序块( 子程序),能实现某些功能,可供本程序其他函数 ,或者另外一些程序的函数调用。
第7章 自定义函数
factorial 函数专门求n的阶乘
第7章 自定义函数
形式参数(形参):函数在声明(定义) 的时候,同时对函数所需要的参数的数量、类型做出 说明。这些参数的名字只是一种形式,只有在函数被 调用时,这些参数才能得到具体值,所以这些参数为 形式参数。比如,函数求阶乘函数中的n就是形式参 数。 实际参数(实参):一个有参函数在被调用的时候, 主调函数必须根据被调用函数形参(形式参数)的要 求,传递具体数据给被调用函数的形参,这些实际的 数据就叫做实际参数,也就是我们所说的实参。 实参是有具体值的,实参可以是常数,也可以是变量 。但在使用时必须有具体值。
C语言(函数)省公开课获奖课件市赛课比赛一等奖课件
函数旳定义
函数定义旳一般形式为: 类型标识符 函数名(类型 形式参数, 类型 形式参数,…) {
申明部分 执行部分 }
阐明:
类型标识符用来定义函数类型,即指定函数返回值旳类型。 函数类型应根据详细函数旳功能拟定。默认类型标识符为 int类型。
函数值经过return语句返回。函数执行时一旦遇到return 语句,则结束目前函数旳执行,返回到主调函数旳调用点。
【例7.8】 调用函数返回两个数中旳较大者。
#include <stdio.h> int max(float x,float y)
{ float z; z=x>y?x:y; return(z);
} void main()
{float a,b; int c; scanf("%f,%f",&a,&b); c=max(a,b); printf("较大旳是%d\n”,c); }
【例7.5】 分析下列程序旳运营成果。(值传递方式)
#include <stdio.h>
void swap(float x,float y) /* 定义互换变量x,y值旳函数 */
{ float temp;
temp=x; x=y; y=temp;
printf("x=%.2f y=%.2f\n",x,y);
main函数
fa函数
fb函数
调用fa函数
结束
调用fb函数
fa函数结束
fb函数结束
7.4.2 函数旳递归调用
递归调用:一种函数直接或间接地调用此函数本身。
用递归求解问题旳过程分为两个阶段: 1.递推阶段:将原问题不断地转化成子问题。逐渐从未知向已
c语言 ppt课件
程序调试和优化
01
02
03
调试技巧
断点、单步执行、变量监 视等。
优化方法
代码优化、算法优化、数 据结构优化等。
性能分析
时间复杂度、空间复杂度 等。
C语言在实际项目中的应用
系统编程
游戏开发
网络编程
嵌入式系统
操作系统内核、驱动程 序等。
游戏引擎、游戏逻辑等 。
网络协议、服务器端编 程等。
智能硬件、物联网等。
05
C语言常见问题和陷阱
内存泄漏和野指针
内存泄漏
当动态分配的内存未被释放时,会导 致内存泄漏。长时间运行程序会导致 可用内存逐渐减少,影响程序性能。
野指针
指针被释放后仍然被使用,或者未初 始化的指针被使用,导致程序行为不 可预测。
数组越界和段错误
数组越界
访问数组时超出其界限,可能导致读取或写入其他内存区域 ,造成数据损坏或程序崩溃。
系统软件
C语言也广泛应用于系统软件 开发,如编译器、数据库管理
系统和网络协议栈等。
02
C语言基础语法
数据类型
数据类型
定义变量时,必须指定其数据类 型,以便编译器了解如何存储和 操作该变量。C语言中的数据类 型包括整型、浮点型、字符型等
。
整型
用于存储整数,包括short、int 、long等类型。
THANKS
指针可以进行加减运算,指向数组元 素的指针可以进行算术运算,以访问 数组中的其他元素。
地址
每个变量在内存中都有一个唯一的地 址,通过地址可以访问变量的值。在 C语言中,地址可以通过取地址符&获 取。
结构体和联合体
01
结构体
结构体是一种自定义数据类型,可以包含多个不同类型的数据成员。通
四川大学《c语言程序设计》课件-第5章 函数
用void定义参数 ,表示没有参数
void 函数名(void)
{ 声明语句序列 可执行语句序列 return ;
}
return语句后无需 任何表达式
【例】 计算整数n的阶乘n!
/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变量说n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
函数定义(Function definition)
返回值 类型
函数名标识符, 说明运算规则
参数表相当于 运算的操作数
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
可执行语句序列 return 表达式;
}
函数出口
返回运算的结果
函数定义(Function definition)
因变量
函数名
自变量
程序设计中的函数
程序设计中的函数不局限于计算 –计算类,如打印阶乘表的程序…… –判断推理类,如排序、查找……
问题的提出
读多少行的程序能让你不头疼? 假如系统提供的函数printf()由10行代码替换,那么你编过的程 序会成什么样子?
–实际上一个printf()有上千行代码 main()中能放多少行代码? 如果所有代码都在main()中,怎么团队合作? 如果代码都在一个文件中,怎么团队合作?
C程序的存储类别 – auto型(自动变量) – static型(静态变量) – extern型(外部变量) – register型(寄存器变量)
变量的存储类型( Storage Class)
变量的生存期(Lifetime )
The lifetime of a variable is the period of time during which memory is allocated to the variable
c语言课件PPT课件
写入文件
使用fprintf函数将数据写入文件 中,按照指定的格式写入。
格式化输入输出
fscanf和fprintf函数支持格式化 输入输出,方便数据的读写。
文件的定位操作(fseek和ftell函数)
1 2
定位文件指针
使用fseek函数将文件指针移动到指定位置。
获取当前文件指针位置
使用ftell函数获取当前文件指针的位置。
先执行一次代码块,然后当条件满足时重复执行。
goto语句
无条件跳转到程序中的指定位置。
示例
使用do-while循环和goto语句实现一个简单的菜单选择系统。
04 函数和宏定义
函数的定义和调用
总结词
函数的定义和调用是C语言中非常重要的概念,它们允许我们将代码块组织在 一起,并在需要时多次调用它。
详细描述
VS
详细描述
宏定义使用`#define`指令来定义常量、 宏函数或条件编译指令。宏定义在预处理 阶段被替换为相应的值或代码块。文件包 含指令使用`#include`来包含其他文件的 内容,通常用于引入库的头文件或共享代 码。这些预处理指令可以帮助我们减少代 码重复和提高代码的可维护性。
05 数组和字符串
结合性是指相同优先级的运算符在表 达式中的结合方向,决定了运算符的 执行顺序。
03 控制结构
if语句和条件运算符
01
02
03
if语句
用于根据条件执行不同的 代码块。
条件运算符
也称为三目运算符,用于 简化if-else语句。
示例
判断一个数是否为正数、 负数或零。
switch语句和枚举类型
switch语句
字符串函数
C语言提供了一系列字符串函数,用于 对字符串进行操作,如连接、比较、 查找等。
C语言课件-第5章 函数 湘潭大学上课课件
为什么要用函数
解决的方法:用模块化程序设计的思路
采用‚组装‛的办法简化程序设计的过程 事先编好一批实现各种不同功能的函数 把它们保存在函数库中,需要时直接用
为什么要用函数
解决的方法:用模块化程序设计的思路
函数就是功能 每一个函数用来实现一个特定的功能 函数的名字应反映其代表的功能
b
g h
c
i
为什么要用函数
可以使用库函数
可以使用自己编写的函数 在程序设计中要善于利用函数,可以减少
重复编写程序段的工作量,同时可以方便 地实现模块化的程序设计
C语言中的函数
0个或多个数据被传递
参数
函数体
至多一个数据或结构被返回
C语言中的函数
math.h中提供的函数(库函数)
double sqrt(double x)
//函数定义 int firstDigit (int num) { return (num % 10); }
digit = firstDigit (number); printf("\nLeast significant digit is: %d\n", digit); return 0; } // main
带参数的void函数:void getnum(int a) 有返回值但不带参数的函数:int caculate() 有返回值且带参数的函数:int max(int a,int b)
函数使用(调用)
greeting();
getnum(10); Result=caculate();
a
200 100
?
x
200 100
void TryToChange(int x) { x = x * 2; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
特点:“单向”传递
例 两数交换
…...
void swap(int x, int y)
{ int temp; temp = x;
2000
值传递
2002
x = y; y = temp;
2004
COPY 2006
}
2008
int main()
200A
{ int a,b;
(main)
5 9
(swap)
59 95 5
条件语句(if语句) 循环语句(while语句) 循环语句(for语句) 循环语句(do-while语句) 从循环中跳出(break和continue语句)
常用结构和问题
9
3.4 关系表达式/逻辑表达式/条件表达式
问题:已有机制的编程能力还很弱。
如:返回两参数中的较大值:
x>y
double dmax(double, double)
需要:
返回x
返回y
1. 比较数据大小(判断)
2. 根据判断结果决定做什么(分情 况处理)
选择结构
本节主要讨论如何描述逻辑判断,判断的结果如何确定,怎样 利用逻辑判断控制计算过程
10
1.关系运算符/关系表达式
关系运算符确定数据间是否存在某种关系。 关系表达式的结果可用于控制计算过程。
关系运算符共 6 个
18
一元运算
二元运算
算术运算符
高
> >= < <=
关系运算符
== =!
?:
条件运算符
低
=
赋值运算符
19
3.复杂条件的描述:逻辑表达式
复杂关系,如: 3≤x≤5 时 z 取值 2,否则取值 1。 用关系表达式和条件表达式描述: z = (x >= 3 ? (x <= 5 ? 2 : 1) : 1); 描述比较复杂,不太直观。 用逻辑运算符可直接描述 多个条件同时成立/多个条件之一成立 某个条件不成立等复杂条件。
scanf("%d,%d", &a, &b);
…...
swap(a, b);
printf("\n%d,%d\n", a, b);
return 0; }
运行结果:5, 9
变量a
变量b
变量x 变量y 变量temp
8
主要内容:程序设计的基本知识
语句、复合语句 变量—概念、定义、使用 定义函数(初步,第五章深入) 关系表达式、逻辑表达式、条件表达式 语句与控制语句
return x > 0 ? 1 :(x == 0 ? 0 : -1);
}
17
条件表达式的优先级和结合顺序 每个 : 与前面最近的没有匹配的 ? 匹配
x > 0 ? 1 : x == 0 ? 0 : -1 条件运算符的优先级高于赋值,低于关系运算符;
z = x != 0 ? y/x : 1; 当x值非0时,变量z将被赋予由y/x的值,否则z赋值1
赋值运算符
低
c>a+b a>b==c a==b<c a=b>c
相当于 a=1,b=4,c=5
c>(a+b)
0
(a>b)==c
0
a==(b<c)
1
a=(b>c)
a=0
13
关系运算注意(1)
例 若a = 0; b = 0.5; x = 0.3; 则 a <= x <= b的值为0
例 5 > 2 > 7 > 8在C中是允许的, 值为 0
编程就是让电脑执行程序 中提供的指令!
1
第一部分
整体概述
THE FIRST PART OF THE OVERALL OVERVIEW, PLEASE SUMMARIZE THE CONTENT
2
高级语言程序设计
主讲教师:贾彩燕 计算机与信息技术学院 计算机科学与技术系 cyjia@
常用结构和问题
5
回顾
如何定义变量? 如何对变量进行初始化? 函数定义的一般形式是什么? 函数声明语句及其作用是什么? C程序的结构是什么?
6
课堂练习
从键盘输入一华氏温度F,调用自定义函数FtoC(…)将华氏温 度转化为摄氏温度,并在主程序中输出。公式如下:
c 5(F32) 9
7
难点:函数的参数传递方式之值传递
> >= <= < == != 大于/大于等于/小于等于/小于等于/不等于
关系运算符可用于各种算术类型
如果被比较对象的类型不同,按算术运算规则转换后 再做判断。
关系的成立与否(真/假):3.2 <= 2.9 y != x + 1
11
关系表达式
C语言中关系运算的结果为 int, 成立/不成立时值分别是1(真)/0(假)。
(3.24 <= 2.98) 的值是 int 类型的 0; (5 != 3 + 1) 的值是 int 类型的 1。
关系运算符的优先级低于二元算术运算符 关系运算符的优先级高于赋值运算符 关系运算符的优先级分为两级:==、!= 低,其他运算符高 关系算符自左向右结合,未规定对象计算顺序
12
算术运算符 高 关系运算符
例 int i = 1, j = 7,a; a = i + (j % 4 != 0); 则a= 2
例 ‘a’>0 结果为 1 ‘A’>100 结果为 0
14
关系运算注意(2)
例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0 == 1.0 结果为 0 可改写为:fabs(1.0 / 3.0*3.0 - 1.0) < 1e-6 例 注意区分“=”与“==”
16
函数 dmax的定义:求两个数中较大者
double dmax(double x, double ห้องสมุดไป่ตู้)
{ return x > y ? x : y;
} 例:z = dmax(2, 3)
符号函数 sign对应的C函数: double sign(double x) {
sign(x)= 1 x>0 0 x=0 -1 x<0
3
第三章 变量、函数和控制结构
4
主要内容:程序设计的基本知识
语句、复合语句 变量—概念、定义、使用 定义函数(初步,第五章深入) 关系表达式、逻辑表达式、条件表达式 语句与控制语句
条件语句(if语句) 循环语句(while语句) 循环语句(for语句) 循环语句(do-while语句) 从循环中跳出(break和continue语句)
int a = 0,b = 1,c; c = (a == b);
15
条件运算符“?:” (C中唯一的三目运算符)
条件表达式的语法形式: 表达式1 ? 表达式2 : 表达式3
实现简单的选 择结构
非0
=0
表达式1
取表达式2值
取表达式3值
语义(计算方式特殊): 先算表达式1(条件); 条件为真算表达式2,以其值作为条件表达式的值 条件为假算表达式3,以其值作为条件表达式的值
例 两数交换
…...
void swap(int x, int y)
{ int temp; temp = x;
2000
值传递
2002
x = y; y = temp;
2004
COPY 2006
}
2008
int main()
200A
{ int a,b;
(main)
5 9
(swap)
59 95 5
条件语句(if语句) 循环语句(while语句) 循环语句(for语句) 循环语句(do-while语句) 从循环中跳出(break和continue语句)
常用结构和问题
9
3.4 关系表达式/逻辑表达式/条件表达式
问题:已有机制的编程能力还很弱。
如:返回两参数中的较大值:
x>y
double dmax(double, double)
需要:
返回x
返回y
1. 比较数据大小(判断)
2. 根据判断结果决定做什么(分情 况处理)
选择结构
本节主要讨论如何描述逻辑判断,判断的结果如何确定,怎样 利用逻辑判断控制计算过程
10
1.关系运算符/关系表达式
关系运算符确定数据间是否存在某种关系。 关系表达式的结果可用于控制计算过程。
关系运算符共 6 个
18
一元运算
二元运算
算术运算符
高
> >= < <=
关系运算符
== =!
?:
条件运算符
低
=
赋值运算符
19
3.复杂条件的描述:逻辑表达式
复杂关系,如: 3≤x≤5 时 z 取值 2,否则取值 1。 用关系表达式和条件表达式描述: z = (x >= 3 ? (x <= 5 ? 2 : 1) : 1); 描述比较复杂,不太直观。 用逻辑运算符可直接描述 多个条件同时成立/多个条件之一成立 某个条件不成立等复杂条件。
scanf("%d,%d", &a, &b);
…...
swap(a, b);
printf("\n%d,%d\n", a, b);
return 0; }
运行结果:5, 9
变量a
变量b
变量x 变量y 变量temp
8
主要内容:程序设计的基本知识
语句、复合语句 变量—概念、定义、使用 定义函数(初步,第五章深入) 关系表达式、逻辑表达式、条件表达式 语句与控制语句
return x > 0 ? 1 :(x == 0 ? 0 : -1);
}
17
条件表达式的优先级和结合顺序 每个 : 与前面最近的没有匹配的 ? 匹配
x > 0 ? 1 : x == 0 ? 0 : -1 条件运算符的优先级高于赋值,低于关系运算符;
z = x != 0 ? y/x : 1; 当x值非0时,变量z将被赋予由y/x的值,否则z赋值1
赋值运算符
低
c>a+b a>b==c a==b<c a=b>c
相当于 a=1,b=4,c=5
c>(a+b)
0
(a>b)==c
0
a==(b<c)
1
a=(b>c)
a=0
13
关系运算注意(1)
例 若a = 0; b = 0.5; x = 0.3; 则 a <= x <= b的值为0
例 5 > 2 > 7 > 8在C中是允许的, 值为 0
编程就是让电脑执行程序 中提供的指令!
1
第一部分
整体概述
THE FIRST PART OF THE OVERALL OVERVIEW, PLEASE SUMMARIZE THE CONTENT
2
高级语言程序设计
主讲教师:贾彩燕 计算机与信息技术学院 计算机科学与技术系 cyjia@
常用结构和问题
5
回顾
如何定义变量? 如何对变量进行初始化? 函数定义的一般形式是什么? 函数声明语句及其作用是什么? C程序的结构是什么?
6
课堂练习
从键盘输入一华氏温度F,调用自定义函数FtoC(…)将华氏温 度转化为摄氏温度,并在主程序中输出。公式如下:
c 5(F32) 9
7
难点:函数的参数传递方式之值传递
> >= <= < == != 大于/大于等于/小于等于/小于等于/不等于
关系运算符可用于各种算术类型
如果被比较对象的类型不同,按算术运算规则转换后 再做判断。
关系的成立与否(真/假):3.2 <= 2.9 y != x + 1
11
关系表达式
C语言中关系运算的结果为 int, 成立/不成立时值分别是1(真)/0(假)。
(3.24 <= 2.98) 的值是 int 类型的 0; (5 != 3 + 1) 的值是 int 类型的 1。
关系运算符的优先级低于二元算术运算符 关系运算符的优先级高于赋值运算符 关系运算符的优先级分为两级:==、!= 低,其他运算符高 关系算符自左向右结合,未规定对象计算顺序
12
算术运算符 高 关系运算符
例 int i = 1, j = 7,a; a = i + (j % 4 != 0); 则a= 2
例 ‘a’>0 结果为 1 ‘A’>100 结果为 0
14
关系运算注意(2)
例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0 == 1.0 结果为 0 可改写为:fabs(1.0 / 3.0*3.0 - 1.0) < 1e-6 例 注意区分“=”与“==”
16
函数 dmax的定义:求两个数中较大者
double dmax(double x, double ห้องสมุดไป่ตู้)
{ return x > y ? x : y;
} 例:z = dmax(2, 3)
符号函数 sign对应的C函数: double sign(double x) {
sign(x)= 1 x>0 0 x=0 -1 x<0
3
第三章 变量、函数和控制结构
4
主要内容:程序设计的基本知识
语句、复合语句 变量—概念、定义、使用 定义函数(初步,第五章深入) 关系表达式、逻辑表达式、条件表达式 语句与控制语句
条件语句(if语句) 循环语句(while语句) 循环语句(for语句) 循环语句(do-while语句) 从循环中跳出(break和continue语句)
int a = 0,b = 1,c; c = (a == b);
15
条件运算符“?:” (C中唯一的三目运算符)
条件表达式的语法形式: 表达式1 ? 表达式2 : 表达式3
实现简单的选 择结构
非0
=0
表达式1
取表达式2值
取表达式3值
语义(计算方式特殊): 先算表达式1(条件); 条件为真算表达式2,以其值作为条件表达式的值 条件为假算表达式3,以其值作为条件表达式的值