第六章C语言课件

合集下载

C语言程序设计第六章课件

C语言程序设计第六章课件

6.3嵌套循环




使用嵌套循环的注意事项 使用复合语句,以保证逻辑上的正确性 – 即用一对花括号将各层循环体语句括起来 内层和外层循环控制变量不能同名,以免造 成混乱 采用右缩进格式书写,以保证层次的清晰性
2017/9/7
27/62
选择三种循环的一般原则

如果循环次数已知,计数控制的循环 – 用for
1!, 2!, 3!, … , n!
2017/9/7
24/62
【例6.4】输入n值,计算并输出
1! + 2! + 3! + … + n!
利用前项 计算后项
2017/9/7
25/62
【例6.4】输入n值,计算并输出
1! + 2! + 3! + … + n!
每次单独计算 累加项
2017/9/7
26/62
counter<6 true input n sum ← sum + n counter++ output sum
n
2 3 5 6 4
counter-controlled 计数器每次增1
使用了3个变量
2017/9/7
end
6/62
6.2计数控制的循环
counter ← initial value
test counter true
2017/9/7
end
条件控制的循环
当 型 循 环
假 假 真 假
条 件P
A
条 件P

A
直 到 型 循 环
2017/9/7
10/62
while循环语句

C语言程序设计第六章PPT课件

C语言程序设计第六章PPT课件
char str[20]; scanf(“%s”,str); /*str是地址 */ 2. printf的s格式串可以实现字符串的输出,例: printf(“%s”,str); /*str是地址 */ 3. gets从终端输入字符串行 形式:gets(str); str是存放字符串的起始地址。可以是字符数组名、字符数组
第3页/共16页
6.2 二维和多维数组
6.2.2 二维数组的引用
引用二维数组元素时必须带有两个下标,形式如下: 数组名[下标1][下标2]
6.2.3 二维数组存储
二维数组在内存中占据一系列连续的存储单元,数组元素按 行顺序存放,先放行下标是0的元素,再放行下标是1的元 素 , . . . a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
第11页/共16页
6.3 字符数组和字符串
6.3.4.1字符串输入输出 --包含头文件stdio.h 4.puts向终端输出字符串 形式:puts(str); str是输出字符串的起始地址,从这一地址开始,依次输出存
储单元中的字符,直到遇到第一个‘\0’为止。并自动输出 一个换行符。 str是存放字符串的起始地址。可以是字符数组名、字符数组 元素地址或下一章将要介绍的字符指针。 6.3.4.2字符串处理函数 -- 包含头文件string.h 1.字符串复制函数strcpy。调用形式如下:
第7页/共16页
6.3 字符数组和字符串
6.3.2 字符串
C语言中没有字符串变量,通过字符数组可以实现相关的功能, 字符串是字符数组最普通的具体应用。
当要用字符数组存储(可能变化的)字符串时,应考虑: (1)定义变量时,考虑可能存储的最长字符串的长度。 (2)在字符数组中顺序存放字符串的每一个字符,最后加上

c语言程序设计第6章(谭浩强)PPT版本

c语言程序设计第6章(谭浩强)PPT版本

/*ch5_1.c*/ #include <stdio.h> main() { int i,sum=0; 循环初值 i=1; loop: if(i<=100) { sum+=i; 循环变量增值 i++; goto loop; } printf("%d",sum); }
循环条件 sum=0+1 sum==1+2=3 sum=3+3=6 sum=6+4 …… sum=4950+100=5050 循环终值
例:#include<stdio.h> main( ) { int i=0; for(;i<10;i++) putchar(‘a’+i); }
例:#include<stdio.h> 例:#include<stdio.h> 运行结果:abcdefghij main( main( ) ) { {intint i=0; i=0; for(;i<10;) for(;i<10;putchar(‘a’+i),i++) ; putchar(‘a’+(i++)); } }
while 假(0) expr 真(非0) …… break; …… 真(非0)
do
…… break; …... while expr
假(0)
for expr1 switch 假(0) expr2 真(非0) …… break; …... const 1 语句组1 break; expr case const 2 语句组2 break; …... const n 语句组n break; default 语句组 break;

C语言程序设计(第二版)课件第6章

C语言程序设计(第二版)课件第6章

6.2函数
❖ 运行结果:
main函数是主调函数,max是被调函数。其中x,y是实参,在数据传 递过程中x,y必须是确定的值。a,b是形参,用之前形参的数据类型 与实参相匹配。最后通过return语句返回a,b中较大值。
6.2函数
6.2.2 函数的声明
❖ 在本章例6.2中,如果被调函数的定义在main函数的后面,那么在 主函数main中需要对被调函数的进行声明。这种方式和变量相同, 先定义后使用。主要目的是使编译系统知道被调函数返回值类型, 以便在主调函数中对此类型的函数值作相应的处理。
❖ C程序的全部工作是由各种功能的函数完成的,C语言 称为函数式语言。采用函数模块式的结构,C语言实现 了结构化程序设计,使程序的层次结构清晰,方便程序 的编写、阅读、调试。
本章目录
6.1函数分类 6.2函数 6.3 函数调用 6.4函数和数组 6.5变量的作用域 6.6变量的存储类别 6.7内部函数和外部函数
其中第一,第二行对str函数和f函数预先作了说明。 因此在以后各 函数中无须对str和f函数再作说明就可直接调用。 ❖ 4. 对库函数的调用不需要再作说明, 但必须把该函数的头文件用 include命令包含在源文件前部。
6.2函数
❖ 6.2.3函数的参数
❖ 函数的参数分为形参和实参两种。 在本小节中,进一步介绍形参、 实参的特点和两者的关系。形参出现在函数定义中,在整个函数体 内都可使用,离开该函数不能使用。实参出现在主调函数中,进入 被调函数后,实参变量也不能使用。实参和形参之间的数据传递是 单项值传递,相当于实参的值复制到形参中,并且形参的任何变化 不影响实参。
6.1函数分类
C语言中可从不同的角度对函数分类。
❖ 1. 从函数定义的角度,函数分为库函数和用户定义函数。

C语言程序设计课件第6章 类与对象

C语言程序设计课件第6章 类与对象
(4)构造函数可以重载,即一个类中可以定 义多个参数个数或参数类型不同的构造函数。
2021/7/13
18
【例6.5】 使用构造函数替代例6.3中SetTime() 成员函数,并在主函数中,使用构造函数设置 时间为15时19分56秒并显示该时间。 构造函数也可以重载。关于重载的概念将在第 7章详细介绍,这里先看一个例子。 【例6.6】 构造函数重载定义示例。
【2021例/7/163 .8】 构造函数的调用。
21
6.3.2 析构函数 1.析构函数的特点 当对象创建时,会自动调用构造函数进行初始 化。当对象撤消时,也会自动调用析构函数进 行一些清理工作,如释放分配给对象的内存空 间等。与构造函数类似的是:析构函数也与类 同名,但在名字前有一个“~”符号,析构函数 也具有公有属性,也没有返回类型和返回值, 但析构函数不带参数,不能重载,所以析构函 数只有一个。 【例6.9】 析构函数程序举例。
26
6.4 对象数组与对象指针 6.4.1 对象数组 对象数组是指数组的每一个元素都是相同类型对象的 数组,也就是说,若一个类有若干个对象,把这一系 列的对象用一个数组来表示。对象数组的元素是对象, 不仅具有数据成员,而且还有成员函数。
对象数组的定义和普通数组的定义类似,一般格式如 下: 类名 数组名[第一维大小][第二维数组大小] 其中,类名是指该数组元素属于该类的对象,方括号 内的数组大小给出了某一维元素的个数。一维对象数 组只有一对方括号,二维对象数组要有两个方括号对, 等等。
25
普通构造函数在建立对象时被调用,而复制构造函数
在用已有对象初始化一个新对象时被调用。复制构造
函数被调用通常发生在以下3种情况:
(1)程序中需要新建一个对象并用一个类的对象

C语言课件第6章 数组

C语言课件第6章 数组

6.2.3 一维数组元素的初始化
一维数组初始化格式为: 数据类型 数组名[常量表达式]={初值表}; (1)在定义时对数组元素赋初值。 例如:int a[5]={1,2,3,4,5}; (2)“初值表”中的初值个数,可以少于元素个数,即允许只给 部分元素赋初值。例如:int a[5]={1,2,3}; (3)如果对数组的全部元素赋以初值,定义时可以不指定数组长 度(系统根据初值个数自动确定)。 int a[5]={1,2,3,4,5};可以写成: int a[ ]={1,2,3,4,5}; (4)如果想使一个数组中全部元素值为0,可以写成: int a[5]={0,0,0,0,0}; 或写成:int a[5]={0};
3.程序代码 #include "stdio.h" void main() /*定义50个浮点型变量分别保存每位同学的成绩*/ { float score1,score2,……,score50,average; scanf("%f",&score1); /*从键盘输入成绩*/ scanf("%f",&score2); …… scanf("%f",&score50); printf("pass-fail numbers:\n"); if(score1< 60) /*输出成绩不及格学生的学号*/ printf("1"); if(score2<60) printf("2"); …… if(score50<60) printf("50"); }
score[0] score[1] score[2] score[3] score[4] score[5] …… score[49]

C语言程序设计实用教程 第6章.ppt

C语言程序设计实用教程 第6章.ppt

for(i=0;i<N;i++)
if(score[i]>aver) n++;
printf(“average=%.2f \n ”,aver);
printf(“n=%d”,n);
}
6.1.2 数组中的相关概念
1.数组:是指一组具有相同类型的数据的有序的集合。
2.数组下标:是数组元素在数组中位置的一个索引或指示。
printf(“please input students grade:”);
for(i=0;i<N;i++)
score[i]是数组元素,用来存放第i个
{ scanf(“%f”,&score[i]); 学生成绩*
sum=sum+score[i]; /*将学生成绩累加到总分中 */
}
aver=sum/N;
则数组a中元素的初始值为系统分配给数组元素的内存单 元中的原始值,这些值对编程者来说是不可预知的,因此 在使用时要注意。
(2)若定义数组时在类型名前面加一个关键字static,即将 数组定义成静态存储,这时不为数组赋初值,系统也会自 动将全部元素赋以0值。例如: static int b[5]; 表示定义了一个静态数组b,该数组中所有元素值均为0。
aver=sum/100;
/*求出平均成绩*/
在本程序中能否统计高于平均分的学生人数呢?
用数组来解决这个问题,不仅效率高而且程序编写容易。
#define N 100 void main()
score[N]表示数组,用来存放 N个学生的成绩
{ int i,n=0;
float score[N],sum=0,aver;
一维数组的初始化有以下几种情形:

C语言程序设计教程第6章.ppt

C语言程序设计教程第6章.ppt
C语言程序设计教程
第六章 函数与编译预处理
6.1 模块化程序设计与函数 6.2 函数的定义与调用 6.3 函数的递归调用 6.4 变量的作用域与存取方式 6.5 编译预处理
第6章 函数与编译预处理
2
6.1模块化程序设计与函数
在设计较复杂的程序时,我们一般采用 的方法是:把问题分成几个部分,每部分 又可分成更细的若干小部分,逐步细化, 直至分解成很容易求解的小问题。这样的 话,原来问题的解就可以用这些小问题来 表示。
C语言程序设计教程
第6章 函数与编译预处理
8
void main() {float a,b,c; scanf("%f,%f,%f", &a,&b,&c);/* 输入 */ sortabc(&a,&b,&c); /* 排序 */ putabc(a,b,c); /* 输出a,b,c三个数 */ }
C语言程序设计教程
C语言程序设计教程
基本概念
基本模块
模块
模块
模块
模块
模块
模块
模块
模块
模块
2019/4/5
3第6章 函数与编译预处理 Nhomakorabea4
模块与函数
C 语言程序由基本语句和函数组成, 每个函数可完成相对独立的任务, 依一定的规则调用这些函数,就组 成了解决某个特定问题的程序。
C语言程序设计教程
第6章 函数与编译预处理
C语言程序设计教程
第6章 函数与编译预处理
15
每个模块应用独立变量
模块内使用的数据,对于不需要这些数据的其它模块来说, 应该不允许使用;在一个模块内的变量的修改不会影响其 它模块的数据。即模块的私有数据只属于这个模块。C语言 的局部变量,就是满足模块独立的的需要。

《C语言程序设计》电子课件 第6章课件

《C语言程序设计》电子课件 第6章课件

}
运行结果:
Please input x: 7↙
Found 7,located in 6 position
>
Your site here

活动:技能考核


子 工
▪判断分析题


业 学
➢语句“ int n=5,a[n]; ”是否正确?

➢若有“int b[5]={1,1,2,3,4};”,则b[5]的值
成:int a[]={1,2,3};
计 算
这样是无法达到数组长度为5的,此时该数组的实际
机 学
长度为3。

>
Your site here

6.1 一维数组


子 工
6.1.2 一维数组的应用

职 业
▪通过有效常量下标使用数组元素
学 院
例:int a[8] = {0,1,2,3,4,5,6,7 } ;
算 机 学
的位置,就像水泡上浮似的,所以称为“起泡法”或“冒泡法 ”。

>
Your site here
6.1 一维数组
重 庆
6.1.2 一维数组的应用
电 子
▪冒泡法思想分析

程 职
例:b[6]={10,8,5,7,3,1}




算 机 学 院
第1轮共比较5次
>
Your site here
重 庆
{ t = 10-j; /*本轮要比较的次数*/

for (i = 0; i< t; i ++)

if (a[i] > a[i+1])

C语言程序设计课件第06章数组、指针与字符串.ppt

C语言程序设计课件第06章数组、指针与字符串.ppt
pa+i)就是a[i]. –a[i], *(pa+i), *(a+i), pa[i]都是等效的。 –不能写 a++,因为a是数组首地址(是常量)。
17
指针数组
指 数组的元素是指针类型 针 例:Point *pa[2];
由pa[0],pa[1]两个指针组成
*i_pointer 3i
2000
9
指针变量的初始化
指 语法形式 存储类型 数据类型 *指针名=初始地址; 例:int a , *pa=&a;
针 注意事项
➢用变量地址作为初值时,该变量必须在指针初始化 之前已说明过,且变量类型应与指针类型一致。
➢可以用一个已赋初值的指针去初始化另一个指针变 量。
组 ➢ 数组下标从零开始。 ➢ 下标必须是整形表达式。 ➢ 数组元素可以在定义时直接给出初始值列表。 ➢ 数组元素作函数参数同简单变量作函数参数。 ➢ 数组名作函数参数传递的是地址值。 ➢ 二维数组在内存中按行存放。
4
对象数组
数 声明:
类名 数组名[元素个数];
组 访问方法:
数组名[下标].成员名
与!=的关系运算。

– 指向不同数据类型的指针,以及指针与一
般整数变量之间的关系运算是无意义的。
– 指针可以和零之间进行等于或不等于的关
系运算。例如:p==0或p!=0
16
指向数组元素的指针
指 声明与赋值
例:int a[10], *pa;
针 pa=&a[0]; 或 pa=a;
通过指针引用数组元素
C++语言程序设计
第六章 数组、指针与字符串
本章主要内容
数组 指针 动态存储分配 深拷贝与浅拷贝 字符串

大学C语言实用教程(课件)-第6章-指针

大学C语言实用教程(课件)-第6章-指针

int *p=&a;
// p指向a
printf("a=%p b=%p c=%p p=%p\n",&a,&b,&c,&p); printf("p=%p *p=%d\n",p,*p);
p--;
}
// p指向a前面的存储单元
printf("p=%p *p=%d\n",p,*p);
2. 指针与整数相加减 指针加减一个整数n可以使指针移动,可以访问新地址。
char c= 'A',*pc=&c; float a=3.0,*pa=&a;
指针变量指向变量示意图
pa FF74 FF70 FF71 FF72 FF73 FF74 a 3.0 FF75 FF76 FF77 FF78 pc FF7C FF79 FF7A FF7B c A FF7C
② 赋值方法 先定义指针,然后用赋值语句将所指变量的地址赋给它。例如 char c,*pc;
4. 两个同类型指针相减
x[0]
如果两个同类型指针之间所存储的数据的 x[2] 类型也与指针相同(通常是数组的情况),则相 减的结果是这两个指针之间所包含的数据个数。 x[3]
x[4]
x[1]
【例】两个同类型指针相减。 #include <stdio.h> void main() { float x[10]; float *p,*q; p=&x[2]; q=&x[8]; printf("q-p=%d\n",q-p); }
6.1.2 指针和指针变量
1.指针和指针变量的概念
变量的指针:该变量在内存中的地址。 指针变量:专门用来存放变量地址的特殊变量。 在不致引起混淆的情况下,把指针变量简称为指针。
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六章
循环控制
⑵ for语句功能很强,其中表达式1和表达式3可以是
逗号表达式,但为增强程序的可读性,一般不要把 与循环无关的东西放到for语句中。 for语句最简单、常用的形式如下:
for(循环变量赋初值;循环条件;循环变量增值)语句
如:sum=1; for(i=1 ; i<=10 ; i++) sum=sum*i;
3) 执行“表达式3”(若 表达式3是逗号表达式, 则依次计算)。 4) 转向⑵。
for循环体语句 的下一语句
5) 循环结束。执行for语 句的下一条语句。
第六章
循环控制
例:将上面计算10!的程序用 for语句写出:
main() { int i; long sum; for(i=1,sum=1; i<=10; i++) sum=sum*i; printf(“10!=%ld\n”,sum); } main() { 空语句 int i; long sum; for(i=1,sum=1; i<=10; sum=sum*i, i++) ; printf(“10!=%ld\n”,sum); }
main() { int i , sum = 0; i = 1; do { sum = sum + i; i ++; } whlie( i <=100); printf(“%d”, sum); }
• 流程图
sum=0 i=1
sum = sum + i i=i+1
sum = 0, i = 1 sum = sum + i i=i+1 当i<=100
如:上例while语句中用花括号括起来的复合语句。
3. 循环控制变量:是在循环条件中控制条件是真 是假的变量。
如:上例while语句中使用的变量 i 。
第六章
循环控制
注意:
⑴循环条件中的表达式一般是逻辑表达式 和关系表达式,也可以是算术表达式(非0为 真,0为假)。一般表达式中应含有循环控制 变量。 while (3)和while (0)虽然从程序设计的 角度上说是不合理的,但是合法的。 while (3) 语句 表示无限循环 while (0) 语句 表示不进入循环体 ⑵要写出一个正确的循环结构,对控制变 量要做三方面工作:①控制变量赋初值; ②把 控制变量写入正确的循环条件;③控制变量 的更新、调整。
⑵ goto语句是一种非结构化语句,结构化程 序设计方法不提倡使用goto语句,因为滥用 goto语句将使程序流程无规律,可读性差。但 也不是绝对禁止使用,只有在能够大大提高程 序效率时才使用。 切记:不要从循环体外跳到循环体内!
第六章
循环控制
二、用goto语句和 if 语句构成循环
例:计算10!并输出结果。 main( ) main( ) { { int i=1, sum=1; int i=1; long int sum=1; loop: if (i<=10) loop: if (i<=10) { { sum=sum*i; sum=sum*i; i++; i++; goto loop; goto loop; } } printf(“10!=%d\n”,sum); printf(“10!=%ld\n”,sum); } } 运行结果:10!=24320 本应是:10!=3628800
• 循环体如果有一条 以上语句,应用花 括弧括起来,构成 复合语句。 • 循环体中应有使循 环趋于结束的语句。
第六章
循环控制
循环结构的术语
1. 循环条件: 是循环结构中的测试表达式。 如:while(i<=10) 2. 循环体:是在每个循环周期均要执行一次的语 句。语句可以是任何语句,简单语句、 复合语句、空语句均可以。
第六章
循环控制
main( ) { int i=1; { long int sum=1;
while (i<=10)
sum=1*2*3*4*5*6*7*8*9*10;
sum=sum*i;
i++; } printf(“10!=%ld\n”,sum); }
sum
3628800
第六章
循环控制
循环结构的特点是:
一般形式: goto 语句标号;
如: √ goto label_1; ╳ goto 123; 执行过程:执行语句时,程序转移到以标号 为前缀的语句处继续执行。
如: p1: x++; ... goto p1;
第六章
循环控制
说明:
⑴ C语言允许在任何语句前加一个语句标号,作 为goto语句的目标。给语句加标号的形式: 语句标号:语句
第六章
循环控制
第六章 循环控制
第六章
循环控制
引言:一个例子
计算1*1 + 2*2 +3*3 =? int sum; sum = 1*1 + 2*2 + 3*3; 如果计算1*1 + 2*2 + 3*3 + ...... + 100*100 ?
引入循环结构,就可以简化程序中大量重复的操作。
在C语言中,循环结构是由while语句、do-while 语句和for语句来实现的。为了更方便地控制程 序流程,C语言还提供了两个辅助循环语句: break和continue。
输入:1 输出:55
输入:11 输出:0
第六章
循环控制
比较上面两个程序,虽然结构是相同的,在 输入值为有效值时结果相同,但当输入无效值时 输出结果是不同的。为什么?
while与do-while的主要区别:
while语句进入循环体之前,测试循环条件, 表达式必须为真,否则while循环不进入循环体, 即循环体可能一次也不执行。
我们前面已经说明,要正确表达循环结构 应注意三方面的问题:控制变量的初始化, 循环的条件和控制变量的更新。 for语句在书写形式上正好体现了这种紧 密的逻辑关系。
第六章
循环控制
求解表达式1
执行过程:

表达式2

循环体语句
求解表达式3
1) 求出表达式1的值(若 表达式1是逗号表达式, 则依次计算); 2) 对“表达式2”进行判断, 为假转5),为真则执行 循环体中的语句。
第六章
循环控制
表达式2:决定循环的条件,若省略,则为无限 循环。 如: for(i=0; ;i++) 语句 无限循环(死循环) for(; ;) 语句
表达式3:用于循环一次后对某些变量进行修改。 若省略,可在循环体内对变量进行修改。
main( ) main( ) { { int i , sum=0; int i; long sum=1; for(i=1 ; i<=100 ; ) for(i=1 ; i<=10 ; ) { sum=sum + i; i++;} { sum=sum*i; i++;} printf(“10!=%ld\n”,sum); printf(“sum=%d\n”,sum } }
而do-while语句不管开始的时候测试循环条 件是真是假,循环体都要执行一次,因为循环 体是先于测试条件执行的。
第六章
循环控制
6.5 for语 句
一般形式:
不能省略
for(表达式1 ;表达式2 ;表达式3) 语句
表达式1:一组初始化表达式。 表达式2:循环控制条件。 表达式3:在执行完循环体语句之后执行的表达式。
第六章
循环控制
goto语句的例子
• 例6.1 用if语句和 main( ) goto语句构成循环, { int i, sum = 0; 求 i = 1;

n 1
100
n
loop: if(i<=100) { sum=sum+i; i++; goto loop; } printf(“%d”, sum); }
第六章
循环控制
⑶ for 语句最为灵活,它完全可以代替while语句。
如:i=1; while(i<=10) { sum=sum*i; i++; }
第六章
循环控制
例6.2 用while循环求 1 0 0
• 传统流程图 i=1

n 1

n
• N-S结构流程图 i=1 当i<=100 sum = sum + i i=i+1
i<=100

sum = sum + i i=i+1
第六章
循环控制
例6.2源程序(用while实现)
main() { int i , sum = 0; i = 1; while( i <= 100) { sum = sum + i; i ++; } printf(“%d”, sum); }
main( ) main( ) { { int i=1; int i=1; long int sum=1; long int sum=1; loop: if (i<=10) while (i<=10) { { sum=sum*i; sum=sum*i; i++; i++; goto loop; } } printf(“10!=%ld\n”,sum); printf(“10!=%ld\n”,sum); } }
第六章
循环控制
6.3 while 语句
一般形式: while (表达式) 语句
执行过程:
⑴ 先计算表达式的值 ;
⑵若表达式的值为真(非0)
时执行循环体中的语句, 然后重复上面步骤。若表 达式的值为假(0) ,则结束 循环。
相关文档
最新文档