c++教程 第六章

合集下载

C语言全国计算机二级等级考试教程第六章字符(章节带习题)(ppt文档)

C语言全国计算机二级等级考试教程第六章字符(章节带习题)(ppt文档)

12 3<CR> 1 2 3<CR> 1 2 3<CR>
⊙ 如下的语句为数值数据和字符数据进行混合输入:
int a1,a2; char c1,c2; scanf(“%d%c%d%c”,&a1,&c1,&a2, &c2); 正确的读入形式: 10A 20B<CR> A和20之间必须有间隔符,间隔符的个数不限 此时变量a1接受的是10,c1接受的是‘A’, a2接受的是20,c2接受的是‘B’,
输出:putchar() 输入:getchar()
例如: char ch=‘A’; putchar(ch);
A
putchar(‘Y’); Y
例如: char ch; ch=getchar();
给字符变量接受字符
6.4 程序举例
例6.1 以下程序输出26个大写字母和它们的ASCII代码,每行输出两组数据。
第6章 字符型数据
6.1 字符型常量 6.2 字符变量 6.3 字符的输入和输出 6.4 程序举例
6.1 字符型常量
6.1.1 字符常量
字符常量:是用单引号括起来的一个字符。
例如
‘A’ ‘C’ ‘t’ ‘!’ ‘?’
说明
‘B’ ‘b’
是不同的字符常量
‘ ’ 单引号内是空格,也是合法的字符常量
例如
‘\n’ 回车换行符
‘\t’ 横向跳格符
‘\v’ 竖向跳格符
‘\r’ 回车符
‘\f’ 换页符
‘\b’ 退格符
‘\0’ 空值
‘\\’ 表示反斜杠
‘\‘’ 表示单引号
‘\“’ 表示双引号
‘\ddd’ 三位八进制数所代表的字符

C语言 第六章 数组

C语言 第六章 数组
2.
6
6.1 排序问题
3. 初始化
类型名 数组名[数组长度]={初值表}; 初值表中依次放着数组元素的初值。例如: int a[10]={1,2,3,4,5,6,7,8,9,10}; 静态存储的数组如果没有初始化,系统自动给所有的数组元素赋0。 即 static int b[5]; 等价于 static int b[5]={0,0,0,0,0}; 初始化也可以只针对部分元素,如 static int b[5]={1,2,3}; 只对数组b的前3个元素赋初值,其余元素的初值为0。又如 int f[20]={0,1}; 对数组f的前两个元素赋初值,其余元素的值 不确定。
18
6.2 矩阵中最大值的位置
4. 使用二维数组编程
例7:定义一个3*2的二维数组a,数组元素的值由下式给 出,按矩阵的形式输出a。a[i][j]=i+j(0≤i ≤2, 0≤j ≤1), 见文件p131ex7-6.cpp
i
j
第1次 第2次 第3次 第4次 第5次
第6次
0 0 1 1 2
2
0 1 0 1 0
9
6.1 排序问题
4. 使用一维数组编程
例4:输入一个正整数n(1<n≤10), 再输入n个整数,将它们存入 数组a中。 ① 输出最小值和它所对应的下标。 ② 将最小值与第一个数交换,输 出交换后的n个数。 数组的长度在定义时必须确定, 如果无法确定需要处理的数据 数量,至少也要估计其上限, 并将该上限值作为数组长度。 因为n ≤10,数组长度就取上 限10。此外,如果用变量 index记录最小值对应的下标, 则最小值就是a[index]。 见p124ex7-4.cpp
8
6.1 排序问题
4. 使用一维数组编程

C语言程序设计教案第6章21-24

C语言程序设计教案第6章21-24
选择排序以纸牌为例选择冒泡排序的执行过程,构造数据存储方式,通过动画与流程图展示算法设计思路,最后编程实现算法设计。指出两种排序的不同之处。
【问题】两种排序算法哪一种排序效率更高,高在什么地方?
6.2嵌套与递归设计与应用(0.5学时)
教学内容
(1)函数的嵌套。
(2)函数的递归设计与应用。
讲解思路
(1)函数的嵌套
二维数组作为函数参数:用实例来说明数组传递数据的重要作用。
【实践】编写程序实现(1)中的例题。
5.4模块化设计中程序代码的访问和应用实例(1学时)
教学内容
(1)模块化设计中程序代码的访问。
(2)应用实例。
讲解思路
(1)模块化设计中程序代码的访问举例说明用指针可以访问程序代码。
(2)应用实例。
计算器增加一个连续相加的功能。
(3)教师程序编写:让学生观摩程序的编写、运行及产生结果的过程,与知识点一一对应,加深理解。
(4)学生用手机C语言模拟器编写程序:题目与例题类似,但小有变化,让学生在设计中的错误。
(5)问答:就一些知识点的变化与学生进行问答互动。
(6)就(4)和(5)中同学们的表现给出部分平时分,为了鼓励同学们的参与积极性,答对者加2-3分。
(3)掌握模块间批量数据传递的方法,提高综合应用程序设计的能力。
重点:简单的排序算法、嵌套与递归设计与应用、模块间的批量数据传递。
难点:递归调用、学生成绩管理综合用例。
教学方法及手段
(1)课件:根据本节课程设计的内容及计划安,逐步展现知识点。
(2)板书:针对学生在学习和练习过程中出现的问题,进行补充讲解。调节课堂节奏,给学生思考的时间。
模块化设计中程序代码的访问
应用实例

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语言程序设计教程第六章课后习题参考答案

C语言程序设计教程第六章课后习题参考答案

C语⾔程序设计教程第六章课后习题参考答案P158 1求三个实数最⼤值#includefloat max(float,float,float);int main(){float a,b,c,m;printf("请输⼊三个实数:");scanf("%f %f %f",&a,&b,&c);printf("最⼤数为%f\n",max(a,b,c));return 0;}float max(float a,float b,float c){float t;if(a>b&&a>c)t=a;else if(b>a&&b>c)t=b;elset=c;return t;}P158 2求最⼤公约数最⼩公倍数#includeint fun1(int a,int b);int fun2(int a,int b);int main(){int a,b;printf("请输⼊两个整数:");scanf("%d %d",&a,&b);printf("最⼤公约数为:%d\n",fun1(a,b));int t,r;if(a{t=a;a=b;b=t;}while((r=(a%b))!=0) {a=b;b=r;}return b;}int fun2(int a,int b) {int n;n=(a*b)/fun1(a,b); return n;}P158 3求完全数#includevoid wan(int n); void main(){int n;for(n=1;n<1000;n++) wan(n);printf("\n");}void wan(int n){if(n%i==0)s=s+i;}if(n==s)printf("%d\t",n); }P158 4⽆暇素数#include#includeint nixvshu(int n);int isPrime(int n);int main(){int n,t;printf("⽆暇素数:\n");for(n=100;n<=999;n++) {t=nixvshu(n);if(isPrime(n)&&isPrime(t)) printf("%d\t",n);}printf("\n");return 0;}int nixvshu(int n){int x=0;while(n){x=x*10+n%10;n=n/10;}return x;int i;for(i=2;i<=sqrt(n);i++)if(n%i==0) return 0;return n;}P158 7递归函数#includeint Y(int n){if(n==0)return 0;if(n==1)return 1;if(n==2)return 2;elsereturn (Y(n-1)+Y(n-2)+Y(n-3)); } int main(){int n,k=0;for(n=0;n<=19;n++){printf("%d\t",Y(n));k++;if(k%5==0)printf("\n");}return 0;}P124 6分解质因数#include#includevoid fenjie(int );int main(){int n;printf("请输⼊⼀个正整数:"); scanf("%d",&n);if(isPrime(n)){printf("%d=1*%d\n",n,n);}else{fenjie(n);printf("\n");}return 0;}int isPrime(int n){int i;for(i=2;i<=sqrt(n);i++){if(n%i==0) return 0;}return 1;}int zhi(int n){int m;for(m=2;m<=n;m++){if(isPrime(m)&&(n%m==0)) break;void fenjie(int n){int m;printf("%d=%d",n,zhi(n));while(n>zhi(n)){m=zhi(n);n=n/m;printf("*%d",zhi(n));}}P47 1输出闰年#includeint f(int year);int main(){int year,k=0;for(year=1900;year<=2000;year++){if(f(year)){printf("%d\t",year);k++;if(k%5==0)printf("\n");}}return 0;}int f(int year){if((year%4==0&&year%100!=0)||(year%400==0)) return year;P47 2输出回⽂数#includeint fun(int n);int main(){int n,k=0;for(n=10;n<=2000;n++) {if(n == fun(n)){printf("%d\t",n);k++;if(k%5==0)printf("\n");}}return 0;}int fun(int n){int i=0;while(n>0){i=i*10+n%10;n=n/10;}return i;}P47 3进制转换#includevoid trans(int n,int base); int main()printf("请输⼊要转换的⼗进制数:"); scanf("%d",&n);printf("请输⼊转换的进制:"); scanf("%d",&base);trans(n,base);printf("\n");return 0;}(⽅法⼀)void trans(int n,int base){if(n){trans(n/base,base);if(n%base>=10)switch(n%base){case 10:printf("A");break;case 11:printf("B");break;case 12:printf("C");break;case 13:printf("D");break;case 14:printf("E");break;case 15:printf("F");break;}elseprintf("%d",n%base);}}(⽅法⼆)void trans(int n,int base){int r;char c;trans(n/base,base); r=n%base;if(r>=10)c='A'+r-10;elsec='0'+r;printf("%c",c);}}。

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语言 — 第六章 数组(大学使用教程)

C语言 — 第六章 数组(大学使用教程)
21
数组常用的循环形式
法一 int i,a[100]; for(i=0;i<100;i++) a[i]=i; 法二 int i,a[100]; for(i=0;i<=99;i++) a[i]=i;
C程序中常用的是第一种方法。 程序中常用的是第一种方法。 此法中,循环变量的终值是“小于”而非“等于” 此法中,循环变量的终值是“小于”而非“等于” 数组长度!否则将导致“越界”的发生。 数组长度!否则将导致“越界”的发生。


• 数组是一组有序的同类型数据 。 • 数据称为数组的元素。 数据称为数组的元素。
6
数组的用处
保存大量同类型的相关数据 – 如矩阵运算,表格数据等 如矩阵运算,
数组的特点
快速地随机访问 一旦定义, 一旦定义,不能改变大小
7
§6.1 数组的定义与初始化
数组的定义 : 数组在使用前要进行定义: 名称、类型、维数、 数组在使用前要进行定义 名称、类型、维数、大小 定义格式: 定义格式: 类型标识符 数组名[常量表达式1][常量表达式2]…… 数组名[常量表达式1][常量表达式2] 1][常量表达式2]
如有数组 int a[5]; 其中数据为:2、4、23、6、78 其中数据为: 、 、 、 、 则存放情况如下: 则存放情况如下:
12
数组在内存 中的首地址
2000 2002
2的低位字节 的低位字节 2的高位字节 的高位字节 4的低位字节 的低位字节 4的高位字节 的高位字节
a[0] a[1] a[2] a[3] a[4]
即a=2000
2004 2006 2008
int a[5]={ 2,4, 23,6,78 };

c语言教学第6章 数组

c语言教学第6章  数组

§ 6.1 基本概念
整形、实型、字符型都属于基本类型。 其存储特点是:每个变量单独存储,亦称简单变 量。 如:char X=„a‟; int y1=0,y2; y2=X-1; 各变量之间独立存放,没有任何联系。
数组
数组是一种构造的数据类型,在计算机中分配连续 的内存空间。 数组:按序排列的具有相同类型的变量的集合。 用一符号名(数组名)来表示这一数组; 用数组名跟下标来唯一确定数组中的元素;
四、二维数组的初始化 (按行存放) 1、按存放顺序赋值 如:int x[2][3]={1,2,3,4,5,6}; 2、按行赋值 如:int x[2][3]={ {1,2,3},{4,5,6} }; 3、部分赋值 如:static int x[2][3]={1,2,4}; static int x[2][3]={ {1,2,},{4} }; 4、省略第一维长度 如: static int x[][3]={1,2,3,4,5,6,7};
课后 练习:分别定义一个一维数组和一个二维数组并 初始化,找出一维数组和二维数组中的最大元素和最小 元素以及对应的下标。
§6.4
字符数组
定义形式: char 数组名[exp]
一 、字符数组的定义 如:char c[5]; 在C语言中没有专门的字符串 c[0]=„h‟; c[1]=„a‟ 变量,而是将字符串存入字符数 c[2]=„p‟; c[3]=„p‟; 组来处理。 c[4]=„y‟; 即用一个一维数组来存放一 还可以这样定义: 个字符串,每个元素存放一个字 int c[5]; 符。
c[0]=„h‟; c[2]=„p‟; c[4]=„y‟; c[1]=„a‟ c[3]=„p‟;
二、字符数组的初始化
1、按单个元素赋值
static char c[10]={„s‟,„t‟,„o‟,„r‟,„e‟};

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

C语言程序设计教程 第6章
2017/8/21 11
模块设计的原则
模块独立
规模适当
层次分明
2017/8/21
功能专一
12
独立性原则表现在模块完成独立的功能 , 和其它模块间的关系简单 , 各模块可以单独调 试。修改某一模块 , 不会造成整个程序的混乱。
每个模块有特定功能
每个模块完成一个相对独立的特定子功能。在对任务逐步 分解时,要注意对问题的综合。例如, 一些模块的相似的 子任务,可以把它们综合起来考虑,找出它们的共性,把它 们做成一个完成特定任务的单独模块。
返回值
另外请注意这样的判断,如写成‘ 最好只使用局部变量,这样将方便调试。 如果不需返回则可 调用函数时输入参数的格式要与之相同 return 0; A‟<capital<„Z‟是不行 注意不要与已有库函数重名 的 2017/8/21
24
“函数”的主要知识点
函数的定义 函数的参数和返回值 函数的调用 嵌套和递归 变量的作用域
2017/8/21
18
例6.2 设计算法:找出a,b两数中的较大者,并输出
分析: 这个问题分三个步骤: • 输入两个数; • 找出其中的大数; • 输出大数。
2017/8/21
19
开始
输入a,b
0 a<b 非0 交换a,b 输出a
结束
2017/8/21
图6.3 找出a,b两数中的较大者算法流程图
2017/8/21
34
函数返回值
函数返回值通过return语句获得 函数返回值的类型就是函数的类型 return y; 将变量y的值返回给调用者 return y+3; 将表达式的值返回给调用者
2017/8/21 35
return 的数据类型与函数的类型矛盾时,自动 将数据转换成函数的类型

C语言程序设计 第6章

C语言程序设计 第6章

#include <stdio.h> #include <stdlib.h> main( ) { int a[10]; /*定义数组*/ int k,j; float ave,s; k=0;s=0.0; for(j=0;j<10;j++) /*用数组存放10个随机整数*/ a[j]=rand()%50; printf("数组中的值:"); for(j=0;j<10;j++) /*输出10个随机整数*/ printf("%6d",a[j]); printf("\n"); for(j=0;j<10;j++) { if(a[j]%2==0) /*如果数组元素的值为偶数*/ {s+=a[j];k++;} /*累加及偶数个数计数*/ } if(k!=0) {ave=s/k; printf("偶数的个数:%d\n偶数的平均植:%f\n",k,ave);} }
(2)定义一个二维数组a[N][5],数组每行存放一名 学生的数据,每行前4列存放学生4门单科成绩,第5列 存放学生的总分。 (3)输入N个学生的单科成绩,存入二维数组a中。 (4)通过变量sum累加计算每位学生的总分,然后 赋值给每行的最后一个元素。 (5)输出数组第5列上的值,即为每个学生的总分。
for(i=0;i<N;i++) { sum=0; for(j=0;j<4;j++) /*计算当前学生的总分*/ sum+=a[i][j]; a[i][4]=sum; } for(i=0;i<N;i++) /*输出每个学生的总分*/ printf("第%d个学生的总分为:%d\n",i+1,a[i][4]); }

C_教程_第6章_窗体、控件和组件

C_教程_第6章_窗体、控件和组件

窗体的创建、显示与隐藏( 6.1.2 窗体的创建、显示与隐藏(续)
3、如何隐藏一个打开的窗体 使用Form2 );创建的窗体 (1)fm.Hide( ); // 使用Form2 fm = new Form2( );创建的窗体 隐藏当前窗体: (2)隐藏当前窗体:this.Hide( ); 隐藏其它窗体: (3)隐藏其它窗体:Application.OpenForms["Form1"].Hide( ); 只能隐藏“无模式”窗体。 注:只能隐藏“无模式”窗体。 4、如何重新显示隐藏的窗体 使用Form2 );创建的窗体 (1)fm.Show( ); // 使用Form2 fm = new Form2( );创建的窗体 显示当前窗体: (2)显示当前窗体:this.Show( ); 显示其它窗体: (3)显示其它窗体:Application.OpenForms["Form1"].Show( ); 5、退出应用程序 Application.Exit( ); 执行该语句后,停止本应用程序的消息循环, 执行该语句后,停止本应用程序的消息循环,关闭本应用程序所有 打开的窗体。 打开的窗体。
窗体的创建、显示与隐藏( 6.1.2 窗体的创建、显示与隐藏(续)
6、关闭一个窗体后再显示另一个窗体 static void Main( ) { …. . //创建欢迎窗体 //创建欢迎窗体 WelcomeForm fm = new WelcomeForm( ); //以 模式” //以“模式”窗体显示 fm.ShowDialog( ); //运行主窗体 运行主窗体MainForm //运行主窗体MainForm Application.Run(new MainForm( )); }
61窗体与对话框62控件共有的基本操作63容器类控件和组件64文本操作类控件65选择操作类控件66图像操作类控件和组件67菜单工具栏与状态栏68视图操作类控件69其他常用控件1窗体应用程序的启动和停止使用application类提供的静态方法来启动停止应用程序

《Visual C++程序设计教程》第六章属性单(CPropertySheet)

《Visual C++程序设计教程》第六章属性单(CPropertySheet)

设置的非默认属性
Caption为“请输入半 径:”
Caption为“边框颜色:”
静态文本
静态文本
IDC_STATIC
IDC_STATIC
Caption为“红色(0255)”
Caption为“绿色(0255)”
边框 颜色 (填充 颜色)
静态文本
编辑框 编辑框 编辑框
IDC_STATIC
IDC_RED IDC_GREEN IDC_BLUE
6.2.2 创建CPropertyPage类

建立好属性页资源之后,就可以根据这个 对话框资源生成一个新类,可以利用MFC 的Class Wizard来实现.

通过“查看”→ “建立类向导...” 菜单命令,也可以使 用快捷键“Ctrl+W” 来打开类向导,但由 于添加的属性页对话 框资源并没有相应的 类,因此会弹出添加 类对话框,如图所示。
为了能在属性单中显示我们已经建立好的三个 属性页对话框,就需要使用属性单的成员函数 将属性页添加到属性单中,为了实现这一目的 1.在CProSheet类中引入3个属性页类的头文件: #include "DlgRadius.h" #include "DlgBorder.h" #include "DlgFill.h"


该类从对话框类派生,它的对象表示单个的 属性页。使用方法如同使用标准的对话框一 样,进行数据交换时,也是通过变量和属性 页控件进行数据交换来完成的。 该类实现了对属性页的封装,同时还提供一 些非常有用的成员函数和成员变量,通过这 些成员,可以很方便的操作和定制属性页的 各个特性。
(1)CPropertyPage方法 其原型为: CPropertyPage( ); CPropertyPage( UINT nIDTemplate, UINT nIDCaption = 0 ); CPropertyPage( LPCTSTR lpszTemplateName, UINT nIDCaption = 0 );

C语言第6章循环结构程序设计

C语言第6章循环结构程序设计

第6章循环控制本章要求:1、初步熟悉用计算机解决问题的思路。

2、掌握while、do-while、for语句的特点和使用方法。

3、掌握break、continue语句的用法。

4、熟悉一些常见问题的算法及其C语言实现。

§6.1 概述循环:反复执行称为“循环体”的程序段。

循环控制常用于数学迭代、对象遍历等问题的求解,几乎所有实用程序都包含循环。

特别是在现代多媒体处理程序(图像、声音、通讯)中,循环更是必不可少。

Intel公司为了加快循环程序的执行,在CPU硬件中加入多媒体扩展指令MMX(Multi-Media-eXtension );AMD在CPU中加入3D Now!指令。

循环结构是结构化程序三种基本结构之一。

(顺序结构、分支结构)。

根据开始循环的初始条件和结束循环的条件不同,C语言中用如下语句实现循环1、用goto语句和if语句构成循环。

2、用while语句。

3、用do-while语句。

4、用for语句。

§6.2 goto语句一般形式:goto 语句标号作用:无条件转向“语句标号”处执行。

“语句标号”是一个标识符,它表示程序指令的地址。

goto语句不符合结构化程序设计准则,因为无条件转向使程序结构无规律、可读性差。

一般应避免使用goto语句,但如果能大大提高程序的执行效率,也可以使用。

[例6.1] 用if语句和goto语句构成循环,求。

main(){int i,sum=0;i = 1;loop:if (i <= 100){ sum = sum + i;i++;goto loop;}printf("%d",sum);}§6.3 while语句一般形式:while(表达式) 语句作用:实现“当型”循环。

当“表达式”非0(真)时,执行“语句”。

“语句”是被循环执行的程序,称为“循环体”。

特点:先判“表达式(条件)”。

[例6.2]main(){int i,sum=0;i = 1;whie (i <= 100){sum = sum + i;i++;}printf("%d",sum);}注意:1、注意给出循环的初始条件,如本例中“sum=0、i=1”。

c第6章 任务

c第6章 任务

第6章任务
6.3 目视检查
目视检查中的问题
1. 目视检查相当的专注。长时间的工作枯燥无味, 觉醒水平会降低; 2. 觉醒水平低或者缺乏动力导致不能发现潜在的问 题或无法有效识别缺陷; 3. 潜在的无事心理影响会使效果更糟; 4. 目视检查极易受人为因素影响; 5. 通常趁着两项检查工作中间稍事休息来恢复心理 和生理状态;
体力工作的特点
• 体力工作必须要求有良好的力量和技能,还必须要良好的运动控制和 准确的实施。 • 体力工作特点:
1. 2. 3. 4. 5. 6. 与身高、体重、体型密切关系; 人性化、 与运用体力的方法、方式有关; 标准化 实际工作中尽量减少体力工作的负荷; 工具设备、工作场所的设计满足人体测量学的要求; 体力工作要发挥团队精神,团结的力量大; 体力工作在飞机维修中一般是技能性工作任务。
• 身体就是一系列在某些点相连的能够做出各种动作的物理连接(骨 骼),肌肉提供有精细的或粗略的运动的驱动力。 • 随着年龄的增长,肌肉骨骼系统会变得僵硬,肌肉会变得无力,工作 中人就会容易受伤,难以恢复。
第6章任务
6.1体力工作
航空维修中的体力工作
1. 飞机设计考虑飞机维修时的“人为因素”,确保飞机能 适应大多数的维修人员的生理机能特征,使飞机维修工 作方便可行,维修区域更易于接近,工作位置更加舒适 安全,方便工作者能使出足够的力气来松开或者紧固零 部件;
–佩戴眼镜 –行业%%
航空维修中的目视检查
• 目视检查:判断飞机系统以及部件是否老化或者有无缺陷 的基本方法。 • 维修人员靠视觉观察被检查物件,还必须对现象进行判断, 必须接受培训,提高判断能力; • 目视检查要求维修人员能够发现缺陷并判断缺陷的类型和 严重程度。 • 维修人员要广泛接收“适航指令、服务通告、服务信函” 等文件信息,还要有警觉性: “蓝冰”

大学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)。
运行程序
第6章 模 板
程序运行结果如下: · · · the max of il,i2 is:56 the max of fl,f2 is:24·5 the max of dl,d2 is:4656·346
the max of cl,c2 isห้องสมุดไป่ตู้n
第6章 模 板
例 6·2一个与指针有关的例子。 #include<iostream· h>
2.使用宏定义为上述这些函数只写出一套代码:
#define max(x,y)((x)y)?x:y)
第6章 模 板
3.新问题: (1)宏定义避开了C十十的类型检查机制,会导致两个不 同类型参数之间的比较。 (2)宏定义可能在不该替换的地方进行了替换,如: class x{ public: int max(int,int); //此处宏扩展将导致语法错误 //· · · 4.使用模板。 模板是实现代码重用机制的一种工具,它以实现类型参数 化,即把类型定义为参数,从而实现了真正的代码可重用性。 (1)函数模板:构造模板函数 (2)类模板:构造模板类。
第6章 模 板
main()
{ //定义字符堆栈 stack<char>s1,s2; //创建两个模板参数为 char型的对象 int i; s1·init(); s2·init( ); sl·push('a'); s2·push('x'); sl·push('b'); s2·push('y'); sl·push('c'); s2·push('z'); for(i= 0;i<3;i十 十)cout<<"pop.sl:"<<sl.pop()<<endl; for(I=O;i<3;i十十)cout<<”pop.s2:”<<s2.pop()<<endl; }
第6章 模 板
6.2 函数模板与模板函数
6.2 .1 函数模板的声明与模板函数的生成 (1)函数模板的声明格式: template<class type>
返回类型 函数名(参数表)
{ 函数体 }
第6章 模 板
模板形参T:它既可取系统预定义的数据类型,又可以取用户
自定义的类型。
函数模板: max()函数代表的是一类函数, 称为~。函数模板 代表了一类函数.
void stack <type>:push( type ob)
{ if(tos==size) {cout<<”slack is full”; return; } stck[tos]=ob;
tos++;
} template<class type>
type stack<type> :pop()
{ if(tos==0){ cout<<"stack is empty"; return 0;} tos--; return stck[tos]; }
max(c,c);
max(i,c); max(c,i);
//正确,调用max(char,char)
//错误 //错误
}
第6章 模 板
解决方法: (1)采用强制类型转换,如将调用语句 max(i,c); 改写成 max(i,int(c)); (2)用非模板函数重载函数模板: ①只声明一个非模板函数的原型,而不给出函数体,它重载 版本时会自动调用函数模板的函数体。 ②定义一个完整的非模板函数。
const int size=l0 template<class type>
class stack{
type stck[size]; public: int tos;
void init() { tos=O; }
void push(type ch); type pop(); };
第6章 模 板
template<class type>
程序运行结果为: l0 hao 0.123 10
第6章 模 板
(2)在template语句与函数模板定义语句之间不允许有别的语句。 //ThiswillnotcompiIe· template<class T> int i; //错误,不允许有别的语句 T max(T x,T y) { return(x>y)?x:y; } (3)模板函数类似于重载函数,只不过它更严格一些而已。同一 函数模板实例化后的所有模板函数都必须执行相同的动作。 下面的重载函数就不能用模板函数代替,因为它们所执行的 动作是不同的。 Void outdate(int i) { cout<<i; } Void outdata(double d) {cout<<”d=”<<d<<endl;}
(4)若(1)(2)、(3)均未找到匹配的函数,则是一个错误的调用。
(5) 如果在第(1)步有多于一个的选择,那么这个调用是意义不明 确的,是一个错误调用。
第6章 模 板
6.3 类模板与模板类
一个类模板允许用户为类定义一种模式,使得类中的某些 数据成员、成员函数的参数或返回值,能取任意数据类型。
其格式如下:
第6章 模 板
6· 2· 2 函数模板的异常处理 1. 虽然函数模板中的模板形参T可以实例化为各种类型,但 实例化T的各模板实参之间必须保持完全一致的类型,否 则会发生错误。 Template<class T> T max(T x,T y) { return(x>y)?x:y; } void fun(int i,char c) { max(i,i); //正确,调用max(int,int)
template<class T>
T sum (T *array,int size=0)
{ T total=0; for (int i=0;i=size; i++) total+=array[i];
return total;
} int int_array[ ]={l,2,3,4,5,6,7,8,9,10}; double double_array[ ]={(1.l,2.2,3.3,4.4,5.5, 6.6,7.7,8.8,9.0,10.10);
模板实参: 若要用这个max()函数进行最大值操作,必须首先
将模板形参T实例化为确定的数据类型(如int等), 将T实例化的参数称为~. 模板函数: 用模板实参实例化的函数称为~ 。模板函数表示 某一具体的函数。
第6章 模 板
例6· 1#include<iostream· h> #include<string· h> template<class AT> AT max(AT x,AT y) { return(x>y)?x:y; } main() { int i1=10, i2=56; float f1=12.5, f2=24.5; double d1=50.344, d2=4656.346; char c1=‟k‟, c2=‟n‟; cout<<”the max of i1,i2 is: <<max(i1,i2) <<endl; cout<<”the max of f1,f2 is: “<<max(f1,f2) <<endl; cout<<”the max of d1,d2 is:”<<max(d1,d2)<<endl; cout<<”the max of c1,c2 is:”<<max(c1,c2)<<endl; return 0; }
第6章 模 板
例如,成员函数push()和pop()在类定义体外定义为: template<class type> void stack <type>:push( type ob) { if(tos==size) {cout<<”slack is full”; return; } stck[tos]=ob; tos++; } template<class type> type stack<type>:pop() { if(tos==0){ cout<<"stack is empty"; return 0;} tos--; return stck[tos]; }
第6章 模 板
①Template<class T> T max( T x,T y) { return(X>y)?X:y; } int max(int,int); void fun(int i,char c) { max(i,i); //正确,调用max(int,int) max(c,c); //正确,调用max(char,char) max(i,c); //正确,调用max(int,int) max(c,i); //正确,调用max(int,int) } 或 ② char *max(char *x,char *y) { return(strcmp(x,y)>O)?x:y; } 当出现调用语句 max("abcd","efgh"); 时,执行的是这个重载的非模板函数。
cout<<”The summary of double array are:” <<dtotal<<endl;
}
程序运行结果为 : The summary of integer array are:55 The summary of double array are:59.6
相关文档
最新文档