c++教程 第六章
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语言 第六章 数组
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
【问题】两种排序算法哪一种排序效率更高,高在什么地方?
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章 类与对象
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语⾔程序设计教程第六章课后习题参考答案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章 数组
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语言 — 第六章 数组(大学使用教程)
数组常用的循环形式
法一 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章 数组
§ 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章
模块设计的原则
模块独立
规模适当
层次分明
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章
#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章_窗体、控件和组件
窗体的创建、显示与隐藏( 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)
设置的非默认属性
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章循环结构程序设计
第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章 任务
第6章任务
6.3 目视检查
目视检查中的问题
1. 目视检查相当的专注。长时间的工作枯燥无味, 觉醒水平会降低; 2. 觉醒水平低或者缺乏动力导致不能发现潜在的问 题或无法有效识别缺陷; 3. 潜在的无事心理影响会使效果更糟; 4. 目视检查极易受人为因素影响; 5. 通常趁着两项检查工作中间稍事休息来恢复心理 和生理状态;
体力工作的特点
• 体力工作必须要求有良好的力量和技能,还必须要良好的运动控制和 准确的实施。 • 体力工作特点:
1. 2. 3. 4. 5. 6. 与身高、体重、体型密切关系; 人性化、 与运用体力的方法、方式有关; 标准化 实际工作中尽量减少体力工作的负荷; 工具设备、工作场所的设计满足人体测量学的要求; 体力工作要发挥团队精神,团结的力量大; 体力工作在飞机维修中一般是技能性工作任务。
• 身体就是一系列在某些点相连的能够做出各种动作的物理连接(骨 骼),肌肉提供有精细的或粗略的运动的驱动力。 • 随着年龄的增长,肌肉骨骼系统会变得僵硬,肌肉会变得无力,工作 中人就会容易受伤,难以恢复。
第6章任务
6.1体力工作
航空维修中的体力工作
1. 飞机设计考虑飞机维修时的“人为因素”,确保飞机能 适应大多数的维修人员的生理机能特征,使飞机维修工 作方便可行,维修区域更易于接近,工作位置更加舒适 安全,方便工作者能使出足够的力气来松开或者紧固零 部件;
–佩戴眼镜 –行业%%
航空维修中的目视检查
• 目视检查:判断飞机系统以及部件是否老化或者有无缺陷 的基本方法。 • 维修人员靠视觉观察被检查物件,还必须对现象进行判断, 必须接受培训,提高判断能力; • 目视检查要求维修人员能够发现缺陷并判断缺陷的类型和 严重程度。 • 维修人员要广泛接收“适航指令、服务通告、服务信函” 等文件信息,还要有警觉性: “蓝冰”
大学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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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