c语言课件第四章
合集下载
C语言程序设计课件 第四章

4.8 变量的作用域和生存期
4.8.2 变量的作用域和存在期
4.8.2.2 局部变量的作用域和存在期 2. register 变量 寄存器变量也是自动变量,它与自动变量的区别仅在于:用register说 明的变量建议编译程序将变量的值保留在CPU的寄存器中,而不象一 般变量那样,占内存单元。局部变量的定义必须放在函数体或复合体 中所有可执行语句之前。 讨论寄存器变量的特点和使用注意事项 。 3. static变量 在函数体(或复合体)内部用static说明的变量,称静态局部变量。静 态局部变量的作用域和自动变量、寄存器变量一样,但其存在期与它 们有本质的区别,要一直延长到程序运行结束。 静态局部变量在静态存储区占据永久性的存储单元,函数退出后下次再 进入该函数,静态局部变量仍使用原来的存储单元。 讨论静态变量的特点和使用注意事项
4.8 变量的作用域和生存期
4.8.2 变量的作用域和存在期
变量的作用域:源程序中的某一部分,在这个范围里,变量定义 是有效的,可以使用该变量的名字进行与该变量有关的操作 每个变量都有一个确定“作用域”,由变量定义出现的位置确定。 作用域讲变量的作用范围,一个定义的作用域是源程序中的一段, 可以从源程序正文中把有关的一段划出来。因此作用域是静态 概念。与程序执行过程无干。 存在期:变量在程序中存在的那段时期称为该变量的“”。 存在期是动态概念。讲的是程序执行的一段时期,在一个变量的 存在期里,它所占的存储单元一直保持,只要不对变量重新赋 值,单元中的值就保持不变。 内存中供程序使用的存储空间分为三部分: 程序区、静态存储区和动态存储区。
4.6 递归函数
递归函数是指在函数执行过程中,直接或间接调用函数本身的函 数。前者称简单递归,后者称间接递归。 递归程序的执行过程 递归函数的特点:有一个明确的结束递归的条件。 递归函数的效率 递归与递推的关系
C语言电子课件第4章

语句n+1;
在使用switch语句时还应注意以下几点:
(1)在case后的各常量表达式的值不能相同,否则
会出现错误。
(2)在case后,允许有多个语句,可以不用{}括起来。 (3)各case和default子句的先后顺序可以变动,而 不会影响程序执行结果。
(4)default子句可以省略不用。
(5)switch语句与if语句使用场合:当条件是常量比较 时,此时使用switch语句或if语句都可以,但当条件是 在某个范围时,此时使用if语句更方法些。
(2)为了避免这种二义性,C语言规定,else 总是
与它前面最近的if配对。
PPT DESIGN
二、条件运算符和条件表达式 由条件运算符组成条件表达式的一般形式为: 表达式1 ? 表达式2: 表达式3
PPT DESIGN
使用条件表达式时,还应注意以下几点: (1)条件运算符的运算优先级低于关系运算符和算术 运算符,但高于赋值符。 (2)条件运算符?和:是一对运算符,不能分开单独 使用。
一、if语句 1、if (表达式)语句;
2、if (表达式) 语句1;else 语句2; 3、if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; …… else 语句n+1;
PPT DESIGN
PPT DESIGN
4、if语句的嵌套 (1)在嵌套内的if语句可能又是if-else型的,这将会 出现多个if和多个else重叠的情况,这时要特别注意if 和else的配对问题。
PPT DESIGN
4.3.2、关系表达式
关系表达式的一般形式为: 表达式 关系运算符 表达式 注意:关系表达式的值是真”和4.4 逻辑运算符和逻辑表达式 4.4.1、逻辑运算符及其优先次序
C语言课件第四章

例 int a=3,b=4; printf(“%d %d\n”,a,b); printf(“a=%d , b=%d\n”,a,b); 输出结果: 3 4 a=3, b=4
20
Chapter 4
§ 4.5 格式输入与输出—格式输出函数
说明: 说明 •格式字符要用小写 格式字符要用小写 •格式字符与输出项个数应相同,按 格式字符与输出项个数应相同, 格式字符与输出项个数应相同 先后顺序一一对应 •输出转换:格式字符与输出项类型不 输出转换: 输出转换 一致时,自动按指定格式输出。 一致时,自动按指定格式输出。
%d: %d:以带符号的十进制形式输出整数 %o: %o:以八进制无符号形式输出整数 %x: %x:以十六进制无符号形式输出整数
printf格式字符: 格式字符: 格式字符
d,i x,X o u c s e,E f g,G %%
十进制整数
int a=567;printf ( “%d”,a);
567 ff 101 567 A ABC 5.677890e+02 567.789000 567.789 %
5 continue 结束本次循环语句
Chapter 4
§4.1 C语句概述 C语句概述
(二)函数调用语句 由一个函数调用加一个分号构成 例:
printf(“data=%f\n”,data);
Chapter 4
§4.1 C语句概述 C语句概述
(三)表达式语句 由一个表达式加一个分号构成 例:
赋值表达式 分号 表达式语句
Chapter 4
§4.2 赋值语句
4.2 赋值语句
•赋值语句是由赋值表达式加上一个分号构成 赋值语句是由赋值表达式加上一个分号构成 例:a=100 赋值表达式 a=100; 赋值语句 •条件中不能含有赋值符号,但是赋值表达式可以 条件中不能含有赋值符号, 条件中不能含有赋值符号 包含于条件表达式中 例:if(a=b) t=a; 错误 if((a=b)>0) t=a; 正确
《C语言程序设计课件》第四章-循环语句

scanf("&d",&n); while(n!=0)
{ sum+=n; scanf("%d",&n); }
printf("The sum is :%d\n",sum);
return 0; }
从任意 n 个实数中选出最大数 和最小数
从任意 n 个实数中选出最大数和最小数
#include <stdio.h> int main( ) {
/*程序4-1*/ #include <stdio.h> int main() {
int i,sum=0; i=1; while(i<=100) {
sum += i; i++; } printf("sum=%d\n",sum); return 0; }
【例4-2】输入一行字符以回车键结束,分别 统计出其中英文字母、空格、数字和其它字符 的个数。
#include <stdio.h> int main( ) {
int i,n;
printf("This program prints a table of squares.\n"); printf("Enter number of entries in table:");
scanf("%d",&n); i=1; while (i<=n)
【例】求整数1~100的累加和,使用for语句实 现。
#include <stdio.h> int main() {
int i,sum=0; for(i=1;i<=100;i++)
{ sum+=n; scanf("%d",&n); }
printf("The sum is :%d\n",sum);
return 0; }
从任意 n 个实数中选出最大数 和最小数
从任意 n 个实数中选出最大数和最小数
#include <stdio.h> int main( ) {
/*程序4-1*/ #include <stdio.h> int main() {
int i,sum=0; i=1; while(i<=100) {
sum += i; i++; } printf("sum=%d\n",sum); return 0; }
【例4-2】输入一行字符以回车键结束,分别 统计出其中英文字母、空格、数字和其它字符 的个数。
#include <stdio.h> int main( ) {
int i,n;
printf("This program prints a table of squares.\n"); printf("Enter number of entries in table:");
scanf("%d",&n); i=1; while (i<=n)
【例】求整数1~100的累加和,使用for语句实 现。
#include <stdio.h> int main() {
int i,sum=0; for(i=1;i<=100;i++)
C语言程序设计课件第4章

指针的比较运算
比较两个指针的大小和相等性。
指针的位运算
对指针进行位移和位操作。
指针作为函数参数
传递指针参数
通过指针传递变量的地址,在函 数内部修改指针所指向的值。
返回指针
函数返回一个指向特定数据的指 针。
动态内存分配
使用指针进行内存的动态分配和 释放。
指针与数组的关系
数组名作为指针
数组名可以视为指向数组首元素的指针。
07
C语言中的文件操作
文件的打开和关闭
打开文件
使用fopen()函数打开文件,指定 文件名和打开模式,返回一个文 件指针。
关闭文件
使用fclose()函数关闭文件,释放 资源。
文件的读写操作
读取文件
使用fscanf()、fgets()等函数从文件 中读取数据。
写入文件
使用fprintf()、fputs()等函数将数据写 入文件。
01 05
02
联合体变量声明
使用联合体类型名和变量名声明一个 联合体变量,所有数据成员共用同一 段内存空间。
03
联合体成员访问
通过点运算符`.`访问联合体变量的数 据成员,由于共用内存空间,一次只 能访问其中一个数据成员。
04
联合体数组
可以定义联合体数组,每个数组元素 都是一个联合体变量。
枚举类型
C语言程序设计课件第4章
• 引言 • C语言中的控制结构 • C语言中的函数 • C语言中的数组 • C语言中的指针 • C语言中的自定义数据类型 • C语言中的文件操作
01
引言
主题概述
C语言中的文件操作
文件操作函数
介绍如何在C语言中打开、读取、写 入和关闭文件。
比较两个指针的大小和相等性。
指针的位运算
对指针进行位移和位操作。
指针作为函数参数
传递指针参数
通过指针传递变量的地址,在函 数内部修改指针所指向的值。
返回指针
函数返回一个指向特定数据的指 针。
动态内存分配
使用指针进行内存的动态分配和 释放。
指针与数组的关系
数组名作为指针
数组名可以视为指向数组首元素的指针。
07
C语言中的文件操作
文件的打开和关闭
打开文件
使用fopen()函数打开文件,指定 文件名和打开模式,返回一个文 件指针。
关闭文件
使用fclose()函数关闭文件,释放 资源。
文件的读写操作
读取文件
使用fscanf()、fgets()等函数从文件 中读取数据。
写入文件
使用fprintf()、fputs()等函数将数据写 入文件。
01 05
02
联合体变量声明
使用联合体类型名和变量名声明一个 联合体变量,所有数据成员共用同一 段内存空间。
03
联合体成员访问
通过点运算符`.`访问联合体变量的数 据成员,由于共用内存空间,一次只 能访问其中一个数据成员。
04
联合体数组
可以定义联合体数组,每个数组元素 都是一个联合体变量。
枚举类型
C语言程序设计课件第4章
• 引言 • C语言中的控制结构 • C语言中的函数 • C语言中的数组 • C语言中的指针 • C语言中的自定义数据类型 • C语言中的文件操作
01
引言
主题概述
C语言中的文件操作
文件操作函数
介绍如何在C语言中打开、读取、写 入和关闭文件。
C语言课件第四章PPT

break; case 1: printf (“**2**\n”);
break; }
case 2: printf (“**3**\n”); } 运行结果为:**1**
5) case语句的嵌套。
**3**
else if (s<2000) d=.08;
else if (s<3000) d=.1;
else
d=.15;
f=p*w*s*(1-d); printf("\n w=%-f s=%-f f=%-f ",w,s,f);
}
条件运算符及条件表达式
条件运算符要求有三个运算量,这是一个三 目运算符,其表达式的一般格式:
流程图
程序如下: (c507)
main()
{ float f,p,w,s,d;
printf("input p,w,s : "); scanf("%f,%f,%f",&p,&w,&s);
if (s<250.) d=0.;
else if (s<500.) d=.02;
else if (s<1000.) d=.05;
。根
先程
看序
一,
下考
流虑
程系
图数
例:
程序c506:
#include <math.h> main() { float a,b,c,p,q,t,x1,x2;
printf("input a,b,c: "); scanf("%f,%f,%f",&a,&b,&c); if (a==0.) printf("a==0!!! return."); else { p=-b/(2.*a); t=b*b-4*a*c; q=sqrt(fabs(t))/(2.*a);
break; }
case 2: printf (“**3**\n”); } 运行结果为:**1**
5) case语句的嵌套。
**3**
else if (s<2000) d=.08;
else if (s<3000) d=.1;
else
d=.15;
f=p*w*s*(1-d); printf("\n w=%-f s=%-f f=%-f ",w,s,f);
}
条件运算符及条件表达式
条件运算符要求有三个运算量,这是一个三 目运算符,其表达式的一般格式:
流程图
程序如下: (c507)
main()
{ float f,p,w,s,d;
printf("input p,w,s : "); scanf("%f,%f,%f",&p,&w,&s);
if (s<250.) d=0.;
else if (s<500.) d=.02;
else if (s<1000.) d=.05;
。根
先程
看序
一,
下考
流虑
程系
图数
例:
程序c506:
#include <math.h> main() { float a,b,c,p,q,t,x1,x2;
printf("input a,b,c: "); scanf("%f,%f,%f",&a,&b,&c); if (a==0.) printf("a==0!!! return."); else { p=-b/(2.*a); t=b*b-4*a*c; q=sqrt(fabs(t))/(2.*a);
c语言 第四章 选择结构课件
if (expr1) if (expr2) statement1 else statement2
内嵌if
if (expr1) if (expr2) statement1
else statement3
内嵌if
if (expr1) statement1
else if(expr3) statement3 else statement4
if ~ else 配对原则:缺省{ }时,else 总是和它上面离它最近的未配对的if配对
if(……) if(……) if(……) else…... else…...
else…...
例: if (a==b) if(b==c) printf("a==b==c");
else printf("a!=b");
if(x>y) printf("X>Y\n");
else printf("X<Y\n");
else printf("X==Y\n");
}
运行:Enter integer x,y:12,23 X<Y Enter integer x,y:12,6 X>Y Enter integer x,y:12,12 X==Y
内嵌if
if (expr1)
if (expr2) else
statement1 statement2
内嵌if
else
if(expr3) else
statement3 statement4
内嵌if
例 输入两数并判断其大小关系
main() { int x,y;
printf("Enter integer x,y:"); scanf("%d,%d",&x,&y); if(x!=y)
C语言课件第4章
条件
yes no
语句A
双选择结构的框图结构
入口
yes
条件成立否
no
程序段A
程序段B出口ຫໍສະໝຸດ 双向选择分支结构N-S图条件
yes
语句A
no
语句B
4.2.1 关系运算符和关系表达式
1、关系运算符及其优先次序
①< (小于) ②<= (小于或等于) ③> (大于) ④>= (大于或等于) ⑤== (等于) ⑥!= (不等于) 结合性:自左向右
⑴ if后面的表达式一般为逻辑表达式或关系表 达式,也可以是任意数值类型表达式。
⑵ if 该语句是合法的: 语句中的“语句”为一个简单语句或复合语 句。 如:下面程序段是否有错? Int a=3;if(a) printf(“ok!”); if (x>=0) if (x>=0) printf(“X is positive.”); { printf(“X is positive.”); x++; x++; } else else printf(“X is negative.”); printf(“X is negative.”);
N-S流程图举例
输入正整数m,n
m % n→R
当R不为0
n→m R→n m % n→R 1111 输出n
伪码表示
input m,n 是介于自然语言和计算机语言之间的一种 r=m%n loop: if(r≠0) then 代码,是帮助程序员制定算法的智能化语言。 m=n n=r
r=m%n
goto loop endif print n
缩
排
#inclde <stdio.h> main() { 缩进 int x; scanf(“%d”,&x); if (x>0) { 缩进 printf(“X is positive.”); x=x+1; } else 缩进 printf (“X is negative.”); }
C语言第四章选择结构ppt课件
/* 定义实型变量 x , y */
/* 求 x 的绝对值并赋给 y */
/* 输入 x 的值 */
/* 输出 x 的绝对值 */
/* 编译预处理:包含头文件 */
二、if ... else 语句
对这一句话“如果x>=0则y=x,如果x<0则y=-x”,可以写出以下语句:
表达式1 ? 表达式2 :表达式3
表达式1为真,结果为表达式2的值 表达式为假,结果为表达式3的结果; 运算符 “ ?:”的优先级只在逗号和赋值运算 符之前;表达式2和表达式3只可能执行一个;这是C语言中的唯一一个三目运算符;条件运算符的结合方向为“自右自左”。
例:已知a=5,b=6,c=7,d=8,n=2 ; 执行以下语句后表达式的值为多少? n的值为多少? (a < b ) ? ( c + d ) : ( + + n )
if ( 表达式1 ) if ( 表达式2 ) 语句1; else 语句2;else if ( 表达式3 ) 语句3; else 语句4;
实现if ~ else 正确配对方法:加{ }
五、条件运算符
能否把两条语句合成一句,更好地体现这种逻辑关系呢?这就是 if ...... else 语句的功能。
简单的if 语句只能表达“如果 ,那么 ”的含义,而if ...... else 语句却能表达“如果 那么 否则 ”的含义。
If ( x>=0) y=x;if (x<0) y=-x;
a>b?a:c>d?c:d
a>b?a:(c>d?c:d)
表达式值为15,n=2
六、 switch 语句
switch 语句是多分支的选择语句又称开关语句。
/* 求 x 的绝对值并赋给 y */
/* 输入 x 的值 */
/* 输出 x 的绝对值 */
/* 编译预处理:包含头文件 */
二、if ... else 语句
对这一句话“如果x>=0则y=x,如果x<0则y=-x”,可以写出以下语句:
表达式1 ? 表达式2 :表达式3
表达式1为真,结果为表达式2的值 表达式为假,结果为表达式3的结果; 运算符 “ ?:”的优先级只在逗号和赋值运算 符之前;表达式2和表达式3只可能执行一个;这是C语言中的唯一一个三目运算符;条件运算符的结合方向为“自右自左”。
例:已知a=5,b=6,c=7,d=8,n=2 ; 执行以下语句后表达式的值为多少? n的值为多少? (a < b ) ? ( c + d ) : ( + + n )
if ( 表达式1 ) if ( 表达式2 ) 语句1; else 语句2;else if ( 表达式3 ) 语句3; else 语句4;
实现if ~ else 正确配对方法:加{ }
五、条件运算符
能否把两条语句合成一句,更好地体现这种逻辑关系呢?这就是 if ...... else 语句的功能。
简单的if 语句只能表达“如果 ,那么 ”的含义,而if ...... else 语句却能表达“如果 那么 否则 ”的含义。
If ( x>=0) y=x;if (x<0) y=-x;
a>b?a:c>d?c:d
a>b?a:(c>d?c:d)
表达式值为15,n=2
六、 switch 语句
switch 语句是多分支的选择语句又称开关语句。