[其它课程]程序设计与问题求解 Ippt课件_第1页
[其它课程]程序设计与问题求解 Ippt课件_第2页
[其它课程]程序设计与问题求解 Ippt课件_第3页
[其它课程]程序设计与问题求解 Ippt课件_第4页
[其它课程]程序设计与问题求解 Ippt课件_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章 数组与构造体类型2本章主要内容一维数组定义与初始化二维数组定义与初始化字符型数组与字符串数组与函数构造体类型枚举类型23歌手大赛【问题】【问题】某学校组织歌手大赛,聘请了某学校组织歌手大赛,聘请了N名评委为参赛选手打分,评分原名评委为参赛选手打分,评分原那么是去掉一个最高分和一个最低分,取剩下评分的平均值作为该选手的那么是去掉一个最高分和一个最低分,取剩下评分的平均值作为该选手的最后得分。评委给出的评分范围为最后得分。评委给出的评分范围为0.10,可以是小数。假设评委的评分,可以是小数。假设评委的评分由键盘输入由键盘输入作为根据需要保存,要求输出参赛选手的最终得分。作为根据需要保存,要

2、求输出参赛选手的最终得分。【关键】【关键】N名评委的打分用什么保存?名评委的打分用什么保存?【想法】【想法】N个变量存放个变量存放N名评委的打分,找出最高分和最低分,统计剩下名评委的打分,找出最高分和最低分,统计剩下评分的平均值。评分的平均值。 【算法】【算法】 输入:输入:N个评分小数个评分小数 输出:除输出:除最高分和最低分外的平均值最高分和最低分外的平均值1.在在N个变量中扫描一遍,找到最小值和最大值,个变量中扫描一遍,找到最小值和最大值,并计算评分的总和并计算评分的总和sum;2.平均分平均分sum - 最小值最小值 - 最大值最大值/N-2;3.返回平均分;返回平均分;34数组数据类

3、型根本类型:整型、实型、字符型、布尔型根本类型:整型、实型、字符型、布尔型构造类型:构造类型:由根本类型数据按一定规那么组成的,包括数组、由根本类型数据按一定规那么组成的,包括数组、枚举、构造体、共用体枚举、构造体、共用体数组具有具有一样数据类型一样数据类型的的变量集合,变量集合,这些变量名这些变量名称一样,下标不同,称为称一样,下标不同,称为数组元素数组元素有一个下标有一个下标一维数组一维数组有两个下标有两个下标二维数组二维数组有多个下标有多个下标多维数组多维数组45一维数组一维数组的定义格式类型说明符类型说明符 数组名数组名常量常量表达式表达式说明数组名命名规那么和变量名一样数组名命名规那

4、么和变量名一样数组名后用方括弧括起来的常量表达式表示数组名后用方括弧括起来的常量表达式表示数数组元素的个数组元素的个数,必须是,必须是整型常量整型常量56一维数组一维数组的定义int a10 ; /声明数组声明数组a,数组元素的类型为整型,共有,数组元素的类型为整型,共有10个数组元素个数组元素char ch8 ; /声明数组声明数组ch,数组元素的类型为字符型,共有,数组元素的类型为字符型,共有8个数组元素个数组元素double b5 ; /声明数组声明数组b,数组元素的类型为双精度型,共有,数组元素的类型为双精度型,共有5个数组元素个数组元素数组长度必须是一个固定的值,声明数组时数组长度必

5、须是一个固定的值,声明数组时数组长度不能是变量数组长度不能是变量 int n = 10 ;int an ;const int N = 10 ;int aN ;67一维数组一维数组的定义一维数组的存储:连续的存储单元。一维数组的存储:连续的存储单元。数组三要素:数组三要素:1. 数组名:数组的起始地址数组名:数组的起始地址2. 基类型:数组元素的数据类型基类型:数组元素的数据类型3. 数组长度:数组元素的个数数组长度:数组元素的个数 数组名数组名 数组长度数组长度数组元素的存储单元数数组元素的存储单元数78一维数组一维数组的定义数组三要素:数组三要素:1. 数组的起始地址是数组的起始地址是a2.

6、 数组元素的数据类型是整型数组元素的数据类型是整型3. 数组元素的个数是数组元素的个数是10 数组名数组名a 元素个数元素个数10每个元素占每个元素占4个字节个字节int a10 ; /声明一个声明一个int型数组型数组89一维数组例:成长的记录:输入、输出从小到大的身高。算法分析:1.1.输入从小到大的身高,保存在数组输入从小到大的身高,保存在数组heightNheightN中。中。2.2.输出从小到大的身高。输出从小到大的身高。const int N=18;double heightN;cinheight;coutheight;C/C+语言中,数组整体不能参加数据处理,参语言中,数组整体不

7、能参加数据处理,参加处理的只能是数组中的元素变量。加处理的只能是数组中的元素变量。910一维数组一维数组元素的引用 引用数组元素使用数组名和该元素在数组中的下标。【语义】【语义】引用该下标对应的数组元素。引用该下标对应的数组元素。 数组下标的取值范围是数组下标的取值范围是 0, 0, 数组长度数组长度1 1 数组变量名数组变量名整型常量表达式整型常量表达式 数组下标数组下标下标不要超出范围,否那么会出现意想不到的错下标不要超出范围,否那么会出现意想不到的错误。误。1011一维数组一维数组元素的引用int a10 ; /声明一个声明一个int型数组型数组下标:下标: 0 1 2 3 4 5 6

8、7 8 9a0 a1 a2 a3 a4 a5 a6 a7 a8 a9地址:地址:&a0 &a1 &a2 &a3 &a4 &a5 &a6 &a7 &a8 &a9元素值:元素值: 数组元素具有变量的基本属性数组元素具有变量的基本属性变量名:变量名:aiai地址:地址:&ai&ai变量值:变量值:aiai类型:类型:intint1112一维数组的初始化int a10 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ; int a10 = 0, 1, 2, 3, 4 ; int a = 0, 1, 2, 3, 4 ; 定义方法不一样,都完成什么功能?定义方法不一样,都完成什么功能?121

9、3一维数组的初始化定义数组时顺序对各元素赋以初值例例: int array10=0,1,2,3,4,5,6,7,8,9;: int array10=0,1,2,3,4,5,6,7,8,9;全部元素赋初值时,可以不指定数组长度例例: int array5=0,1,2,3,4;: int array5=0,1,2,3,4;也可以写成也可以写成 int array int array =0,1,2,3,4;=0,1,2,3,4;可以只给一部分元素赋值。例例: int array10=0,1,2,3,4;: int array10=0,1,2,3,4; 前面前面5 5个元素赋初值,后个元素赋初值,后5

10、 5个元素值为个元素值为0 0。当初值个数少于数组元素个数时,多的元素被赋予当初值个数少于数组元素个数时,多的元素被赋予0 0值。值。1314一维数组例:成长的记录:输入、输出从小到大的身高。算法分析:1.1.输入从小到大的身高,保存在数组输入从小到大的身高,保存在数组heightNheightN中。中。2.2.输出从小到大的身高。输出从小到大的身高。1415一维数组/成长的记录:输入输出从小到大的身高。#include void mainconst int N=20;int i;double heightN;fori=0; iN; i+ coutheighti;fori=0; iN; i=i

11、+1 cout第i+1次身高:heightiendl;数组元素数组元素单个使用单个使用数组下标数组下标不能超出不能超出边界边界1516一维数组例:输入10个整数,找出其中的最大数。算法分析:1.1.输入输入1010个整数保存在数组中个整数保存在数组中aa0 0-a-a9 9 2.2.假设数组中第假设数组中第1 1个元素最大个元素最大令令max=a0max=a03.3.将将aiai1 1= i = i n max ai max ,max=ai, i=i+1max=ai, i=i+13.2 3.2 否那么,否那么,i=i+1i=i+14.4.输出最大元素输出最大元素maxmax。1617一维数组/

12、输入10个整数,找出其中的最大数。#include void mainconst int N=10;int i,arrayN;coutPlease input an array with N elements: endl;fori=0; iarrayi;int max = array0;fori=1; imax max=arrayi;coutmax=maxendl;1718歌手大赛【问题】【问题】某学校组织歌手大赛,聘请了某学校组织歌手大赛,聘请了N名评委为参赛选手打分,评分原名评委为参赛选手打分,评分原那么是去掉一个最高分和一个最低分,取剩下评分的平均值作为该选手的那么是去掉一个最高分和一个

13、最低分,取剩下评分的平均值作为该选手的最后得分。评委给出的评分范围为最后得分。评委给出的评分范围为0.10,可以是小数。假设评委的评分,可以是小数。假设评委的评分由键盘输入,要求输出参赛选手的最终得分。由键盘输入,要求输出参赛选手的最终得分。【关键】【关键】N名评委的打分用什么保存?名评委的打分用什么保存?【想法】【想法】N个变量存放个变量存放N名评委的打分,找出最高分和最低分,统计剩下名评委的打分,找出最高分和最低分,统计剩下评分的平均值。评分的平均值。 【算法】【算法】 输入:输入:N个评分小数个评分小数 输出:除输出:除最高分和最低分外的平均值最高分和最低分外的平均值1.在在N个变量中扫

14、描一遍,找到最小值和最大值,个变量中扫描一遍,找到最小值和最大值,并计算评分的总和并计算评分的总和sum;2.平均分平均分sum - 最小值最小值 - 最大值最大值/N-2;3.返回平均分;返回平均分;1819歌手大赛/歌手大赛,评委的评分由键盘输入,去掉最高分和最低分,输出参赛选手的最终得分。#include void mainconst int N=7; /评委数目int i;double scoreN,sum,max,min,average;cout请输入各评委打分: endl;fori=0; iscorei;max=score0;min=score0;sum=score0;fori=1

15、; imax max=scorei; ifscoreimin min=scorei; sum=sum+scorei;average=sum-max-min/N-2;cout去掉最高分:max ,去掉最低分:minendl;cout参赛选手的最终得分:averageendl;1920歌手大赛【问题】【问题】某学校组织歌手大赛,聘请了某学校组织歌手大赛,聘请了N名评委为参赛选手打分,评分原名评委为参赛选手打分,评分原那么是去掉一个最高分和一个最低分,取剩下评分的平均值作为该选手的那么是去掉一个最高分和一个最低分,取剩下评分的平均值作为该选手的最后得分。评委给出的评分范围为最后得分。评委给出的评分范

16、围为0.10,可以是小数。假设评委的评分,可以是小数。假设评委的评分由键盘输入,要求输出参赛选手的最终得分,由键盘输入,要求输出参赛选手的最终得分,并且最后给出所有参赛选手并且最后给出所有参赛选手得分排名得分排名。【关键】【关键】所有参赛选手的得分如何保存?如何排序?所有参赛选手的得分如何保存?如何排序?【想法】【想法】M个参赛选手的得分保存在数组个参赛选手的得分保存在数组averageM中,然后对这中,然后对这M个数个数据进展排序。据进展排序。2021排序算法算法分析升序:两两比较相邻元素Ai和Ai-1 i=N-1, N-2, 2, 1, 0, 假如AiAi-1, 那么交换它们的位置 AiA

17、i-1; 经过N-1次比较,将最小值交换到A0的位置; 对剩下的N-1个元素,再两两进展比较,按同样规那么交换它们的位置,经过N-2次比较,将次最小值交换到A1的位置;1.如法炮制,经过N-1趟的“冒泡处理,每趟进展N-i次的比较,全部数列有序。冒泡排序冒泡排序2122/冒泡排序,输入n个整数,输出升序排序结果#include void mainconst int N=10; /N个整数升序排序int i, j, temp;int listN;cout 请输入待排序的整数数列:;fori=0; ilisti;fori=0; ii; j-/ 每次都从最后一个元素开场比较 iflistj-1lis

18、tj/ 假如前后大小顺序不符合要求,那么交换位置 temp = listj-1; listj-1 = listj; listj = temp;/ 输出排序后的数组cout 排序后的整数数列为:;fori=0; iN; i+ cout listi ;coutendl;2223歌手大赛【问题】【问题】某学校组织歌手大赛,聘请了某学校组织歌手大赛,聘请了N名评委为参赛选手打分,评分原名评委为参赛选手打分,评分原那么是去掉一个最高分和一个最低分,取剩下评分的平均值作为该选手的那么是去掉一个最高分和一个最低分,取剩下评分的平均值作为该选手的最后得分。评委给出的评分范围为最后得分。评委给出的评分范围为0.

19、10,可以是小数。假设评委的评分,可以是小数。假设评委的评分由键盘输入,要求输出参赛选手的最终得分,由键盘输入,要求输出参赛选手的最终得分,并且最后给出所有参赛选手并且最后给出所有参赛选手得分排名得分排名。【关键】【关键】所有参赛选手的得分如何保存?如何排序?所有参赛选手的得分如何保存?如何排序?【想法】【想法】M个参赛选手的得分保存在数组个参赛选手的得分保存在数组averageM中,然后对这中,然后对这M个数个数据进展排序。据进展排序。【算法】输入:【算法】输入:N个评分个评分 输出:输出:M个选手的最终得分和排名个选手的最终得分和排名1.在在N个变量中扫描一遍,找到最小值和最大值,个变量中

20、扫描一遍,找到最小值和最大值,并计算评分的总和并计算评分的总和sum;2.平均分平均分sum - 最小值最小值 - 最大值最大值/N-2;3.返回平均分;返回平均分;1. i循环循环M次次 1.1在在N个变量中扫描一遍,找到最小值和最大值,个变量中扫描一遍,找到最小值和最大值,并计算评分的总和并计算评分的总和sum; 1.2平均分平均分isum - 最小值最小值 - 最大值最大值/N-2;2. 对平均分进展排序;对平均分进展排序;3. 输出平均分序列。输出平均分序列。2324歌手大赛/歌手大赛,输入每位评委打分,去掉最高分、最低分,得每位选手的最终得分,最后按得分排名#include void

21、 mainconst int N=7; /评委数目int i;double scoreN,sum,max,min,average;cout请输入各评委打分: endl;fori=0; iscorei;max=score0;min=score0;sum=score0;fori=1; imax max=scorei; ifscoreimin min=scorei; sum=sum+scorei;average=sum-max-min/N-2;cout去掉最高分:max ,去掉最低分:minendl;cout参赛选手的最终得分:averageendl;#include void main const

22、 int M=20; /参赛歌手数目参赛歌手数目 const int N=7; /评委数目评委数目 int i,j; double scoreN,sum,max,min,averageM,temp; fori=0;iM;i+ /统计各选手得分统计各选手得分 cout请输入各评委打分请输入各评委打分: endl; forj=0; jscorej; max=score0; min=score0; sum=score0; forj=1; jmax max=scorej; ifscorejmin min=scorej; sum=sum+scorej; averagei=sum-max-min/N-2;

23、 cout去掉最高分去掉最高分:max ,去掉最低分,去掉最低分:minendl; cout参赛选手的最终得分:参赛选手的最终得分:averageiendl; 2425歌手大赛fori=0; ii;j- ifaveragej-1averagej temp=averagej-1; averagej-1=averagej; averagej=temp;fori=0; iM; i=i+1 /输出各选手最后得分排名 cout“各参赛选手的最终得分:averageiendl;2526歌手大赛【问题】【问题】某学校组织歌手大赛,聘请了某学校组织歌手大赛,聘请了N名评委为参赛选手名评委为参赛选手打分,评分原

24、那么是去掉一个最高分和一个最低分,取剩下打分,评分原那么是去掉一个最高分和一个最低分,取剩下评分的平均值作为该选手的最后得分。评委给出的评分范围评分的平均值作为该选手的最后得分。评委给出的评分范围为为0.10,可以是小数。假设评委的评分由键盘输入,要求,可以是小数。假设评委的评分由键盘输入,要求输出参赛选手的最终得分,并且最后给出所有参赛选手得分输出参赛选手的最终得分,并且最后给出所有参赛选手得分排名排名和所有评委打分和所有评委打分。【关键】【关键】所有参赛选手的所有评委打分如何保存?所有参赛选手的所有评委打分如何保存?【想法】【想法】1个参赛选手有个参赛选手有N个打分,个打分,M个参赛选手有

25、个参赛选手有MxN个打个打分,用分,用MxN个变量来保存。个变量来保存。 在在C/C+中如何定义、使用这些变量?中如何定义、使用这些变量?2627二维数组定义格式: ;2;例如,三个学生四门课程成绩数据如下: 85 87 93 88 85 87 93 88 86 90 95 89 86 90 95 89 78 91 82 95 78 91 82 95利用二维数组存放这些数据更能表现数据之间互相联络的特征。每一行数据表示该学生的各门课程的成绩,而每一列数据表示该门课程各学生的成绩。该数组定义为: int s34;int s34;注意:不能写成int s3,42728二维数组存储构造逻辑构造: 二

26、维数组恰似一张表格或矩阵。数组元素中的第二维数组恰似一张表格或矩阵。数组元素中的第一个下标值表示该元素在表格中的行号,第二个下标一个下标值表示该元素在表格中的行号,第二个下标为列号。为列号。 s34 s34具有如下逻辑构造:具有如下逻辑构造: s00 s01 s02 s03 s10 s11 s12 s13 s20 s21 s22 s23存贮构造物理构造:二维数组在内存中按一维数组存放、占据一片连续的二维数组在内存中按一维数组存放、占据一片连续的存贮单元;是存贮单元;是“按行顺序在内存中分配存贮单元。按行顺序在内存中分配存贮单元。2829二维数组存储构造二维数组三行四列s00 s01 s02 s

27、03s10 s11 s12 s13s20 s21 s22 s23二维数组内存分配s00s01s02s03s10s11s12s13s21s20s22s23第一行第二行第三行2930二维数组初始化按照二维数组元素的物理存储次序给所有或部分数组元素提供数据值int score34= 85,87,93,88,86,90,95,89,78,91,82,95;int score34= 85,87,93,88,86,90,95,89,78,91,82,95;以行构造方式提供各数据值 int score34= 85,87,93,88, 86,90,95,89, 78,91,82,95 ; C+语言允许在为二维

28、数组初始化时省略行下标值,但列下标值不能省略。int score 4= 85, 87, 93, 88, 86, 90, 95, 89, 78, 91, int score 4= 85, 87, 93, 88, 86, 90, 95, 89, 78, 91, 82, 95;82, 95;float matrix23=1.0,3.0;仅为数组matrix的前个元素提供初值,后面的元素赋初值0。3031二维数组例:二维数组rMN的输入/输出。分析:二维数组不能整体输入输出,只能单个元素输入输出。总共输入M行,每行输入N个,用双重循环实现。算法:fori=0;iM;i+ /二维数组行下标:0.M-1

29、forj=0;jrij;fori=0;iM;i+ forj=0;jN;j+ coutrij;数组下标不能数组下标不能超出边界超出边界3132歌手大赛【问题】【问题】某学校组织歌手大赛,聘请了某学校组织歌手大赛,聘请了N名评委为参赛选手名评委为参赛选手打分,评分原那么是去掉一个最高分和一个最低分,取剩下打分,评分原那么是去掉一个最高分和一个最低分,取剩下评分的平均值作为该选手的最后得分。评委给出的评分范围评分的平均值作为该选手的最后得分。评委给出的评分范围为为0.10,可以是小数。假设评委的评分由键盘输入,要求,可以是小数。假设评委的评分由键盘输入,要求输出参赛选手的最终得分,并且最后给出所有参

30、赛选手得分输出参赛选手的最终得分,并且最后给出所有参赛选手得分排名排名和所有评委打分和所有评委打分。【想法】【想法】所有参赛选手的所有评委打分保存在二维数组所有参赛选手的所有评委打分保存在二维数组scoreMN中中3233/歌手大赛歌手大赛#include void main const int M=20;/参赛选手数目参赛选手数目 const int N=7;/评委数目评委数目 int i,j; double scoreN,sum,max,min,averageM,temp; fori=0;iM;i+ cout请输入各评委打分请输入各评委打分: endl; forj=0; jscorej;

31、max=score0; min=score0; sum=score0; forj=1; jmax max=scorej; ifscorejmin min=scorej; sum=sum+scorej; averagei=sum-max-min/N-2; cout去掉最高分去掉最高分:max ,去掉最低分,去掉最低分:minendl; cout参赛选手的最终得分:参赛选手的最终得分:averageiendl; #include void main const int M=20; /参赛选手数目参赛选手数目 const int N=7; /评委数目评委数目 int i,j; double scor

32、eMN,sum,max,min,averageM,temp; fori=0;iM;i+ cout请输入各评委打分请输入各评委打分: endl; forj=0; jscoreij; max=scorei0; min=scorei0; sum=scorei0; forj=1; jmax max=scoreij; ifscoreijmin min=scoreij; sum=sum+scoreij; averagei=sum-max-min/N-2; cout去掉最高分去掉最高分:max ,去掉最低分,去掉最低分:minendl; cout参赛数选手的最终得分:参赛数选手的最终得分:averageie

33、ndl; 3334歌手大赛fori=0; ii;j- ifaveragej-1averagej temp=averagej-1; averagej-1=averagej; averagej=temp;fori=0; iM; i+ cout“各参赛选手的最终得分:各参赛选手的最终得分:averagei 打分:打分:; forforjj=0;jN;j+ coutscoreijt; coutnamecinname; /; /假如输入假如输入Liu XiangLiu Xiang,只接收,只接收LiuLiu运算符遇到空白字符就会停顿读入数据运算符遇到空白字符就会停顿读入数据字符串的输出coutname;

34、 /输出Liu3738字符串例:将小写字母转换为大写字母#include #include void mainvoid main char char str=This is a samplestr=This is a sample; ;coutThe original string is: coutThe original string is: strstrendl;=a & =a & stristri=z=z stristri = = stristri-a+A;-a+A; i = i+1i = i+1; /; /走到下一个字符走到下一个字符 coutAfter transform: cout

35、After transform: strstrendl;endl; The original string is: This is a sampleAfter transform: THIS IS A SAMPLE3839字符串处理库函数C/C+提供了许多字符串处理函数。使用这些函数,可以进步字符处理的效率。字符串处理函数的说明都包含在“cstring头文件中,所以使用时需要添加#include stpcpystpcpy: : 字符串拷贝字符串拷贝; ;strcatstrcat: : 字符串连接字符串连接; ;strchrstrchr: : 在字符串中查找字符在字符串中查找字符; ;strcm

36、pstrcmp: : 字符串比较字符串比较; ;strlenstrlen: : 求字符串长度求字符串长度; ;strlwrstrlwr: : 将字符串中的大写字母转换为小写字母将字符串中的大写字母转换为小写字母; ;strrevstrrev: : 反转字符串反转字符串; ;strstrstrstr: : 在字符串中查找另一个字符串在字符串中查找另一个字符串; ;struprstrupr: : 将字符串中的小写字母转换为大写字母将字符串中的小写字母转换为大写字母; ; 3940字符串处理库函数求字符串的长度:int strlenchar s ;例如例如: : len = strlen len =

37、 strlenThis is a sample.This is a sample.; ; 执行后,变量执行后,变量lenlen会被赋值会被赋值1717。字符串连接函数 strcatstrcatchar destin , char source char destin , char source ; ;复制字符串strcpychar destin , char source ;例如例如: : char weekday11; char weekday11; strcpy strcpyweekday, “MONDAYweekday, “MONDAY; ;/注意数组定义长度必须可以放下字注意数组定义长

38、度必须可以放下字符串符串字符串比较int strcmpchar string1 , char string2 ;4041字符串处理库函数例: 字符串连接。#include #include #include #include using namespace std;using namespace std;void mainvoid main char destination30 = abcdefg;char destination30 = abcdefg;char source = ABCDEFG;char source = ABCDEFG;strcatstrcatdestinationdes

39、tination, , sourcesource; ; / / 直接调用字符串连直接调用字符串连接函数接函数coutcout连接后的字符串为:连接后的字符串为:destinationdestinationendl;endl; 连接后的字符串为:连接后的字符串为:abcdefgABCDEFG4142函数与数组例:编写一个计算字符串长度的函数mystrlen,并用主函数验证。分析:如何保存字符串?用字符数组来保存。这样给函数传递的参数就是字符数组。数组作为参数如何传递?4243函数与数组数组元素作为函数参数与普通变量一样传值调用传值调用单向传递单向传递数组名作为函数参数引用调用引用调用双向传递双向

40、传递4344函数与数组例:输入一组整数,判断哪一个是素数。分析:输入的整数保存在哪里?保存在一个整型数组输入的整数保存在哪里?保存在一个整型数组中。中。判断素数最好独立编写为函数,参数为数组中判断素数最好独立编写为函数,参数为数组中的元素的元素单个元素变量单个元素变量,返回值为布尔型,返回值为布尔型,1 1为素数,为素数,0 0为非素数。为非素数。4445函数与数组/输入一组整数,判断哪一个是素数。#include#includebool isprimeint a; /判断a是否为素数,假如是那么返回1,否那么返回0void main const int N=10; int i; int ar

41、rayN; fori=0;iN;i+ coutarrayi; ifisprimearrayi=1 coutarrayi“是素数endl;else coutarrayi“不是素数endl; 4546函数与数组/判断a是否为素数的函数,假如是那么返回1,否那么返回0bool isprimeint aint i;fori=2;i=sqrta;i+ ifa%i=0 return 0; return 1;4647函数与数组例:编写一个计算字符串长度的函数Mystrlen,并用主函数验证。分析:如何保存字符串?用字符数组来保存。这样给函数传递如何保存字符串?用字符数组来保存。这样给函数传递的参数就是字符数

42、组的参数就是字符数组数组整体数组整体。数组名数组名作为参数传作为参数传递。递。函数算法:1.1.设一个计数器变量设一个计数器变量len=0len=0。2.2.从数组元素从数组元素strlenstrlen开场依次扫描每个元素开场依次扫描每个元素2.12.1假设当前的元素值假设当前的元素值strlenstrlen非空非空00,那,那么么len+1len+1,继续执行,继续执行2.12.1;否那么,退出循环。;否那么,退出循环。3.3.返回结果返回结果lenlen4748函数与数组例:编写一个计算字符串长度的函数Mystrlen,并用主函数验证。#include #include /计算字符串长度函

43、数,输入字符串,返回字符串长度计算字符串长度函数,输入字符串,返回字符串长度int MyStrlenint MyStrlenchar stringchar string / /数组名作为参数,引用调用数组名作为参数,引用调用 int len = 0; int len = 0; while whilestringlen!=0stringlen!=0 len = len+1; len = len+1; return len; return len; void mainvoid main / /验证字符串长度函数验证字符串长度函数 const int N=10; /const int N=10; /

44、字符串最大的可能长度字符串最大的可能长度char stringN; /char stringN; /保存字符串保存字符串coutPlease input a string coutPlease input a string within 9 characterswithin 9 characters: endl;: string;cinstring;coutThe length of the string iscoutThe length of the string is:MyStrlenMyStrlenstringstringendl;endl; Please input a string

45、within 9 characters:chinaThe length of the string is:54849函数与数组例:编写字符串比较的函数MyStrcmps1,s2 ,假如s1s2返回正数。在主函数中调用验证。分析:两个字符串比较的函数,参数应为两个字符串。返两个字符串比较的函数,参数应为两个字符串。返回值为整型数,负数,回值为整型数,负数,0 0,正数。,正数。字符串如何比较?按照字符串如何比较?按照ASCIIASCII码一一对应比较。相等:码一一对应比较。相等:字符串长度相等,每一个对应字符相等。用一个循字符串长度相等,每一个对应字符相等。用一个循环比较两个字符串的对应字符。环

46、比较两个字符串的对应字符。4950函数与数组例:编写字符串比较的函数MyStrcmps1,s2 ,假如s1s2返回正数。在主函数中调用验证。#includeint MyStrcmpchar s1, char s2 /数组名作为参数,引用调用/比较字符串s1,s2。假如s1s2返回正数int i = 0;whiles1i=s2i & s1i!=0 & s2i!=0 /有一个为0表示已经结尾 i+; /指向下一个字符return s1i-s2i;5051函数与数组例:编写用于字符串比较的函数MyStrcmps1,s2 ,假如s1s2返回正数。在主函数中调用验证。void main /测试字符串比较

47、函数的主程序const int N=20;char string1N,string2N;coutPlease input a string within 9 characters: ;coutstring1;coutPlease input another string within 9 characters: ;coutstring2;coutCompare the two string is:;coutMyStrcmpstring1,string2endl;5152函数与数组例:编写用于字符串连接的函数Strcats1,s2 ,将字符串s2连接在字符串s1的后面。在主函数中调用验证。#in

48、clude using namespace std;/连接两个字符串的函数,将sour中字符串连接到dest中的字符串后面void Strcatchar dest,char sour /数组名作为参数,引用调用int i=0;whiledesti!=0i+;int j=0;whilesourj!=0desti=sourj;i+;j+;desti=0;5253函数与数组例:编写用于字符串连接的函数Strcats1,s2 ,将字符串s2连接在字符串s1的后面。在主函数中调用验证。void main /验证字符串连接函数char destination30 = abcdefg;char source

49、 = ABCDEFG;Strcatdestination, source; / 调用字符串连接函数cout连接后的字符串为:destinationendl;连接后的字符串为:连接后的字符串为:abcdefgABCDEFG5354函数与数组例:编写一个函数,实现矩阵相乘运算,在主函数中调用。分析:如何计算矩阵相乘? 5455函数与数组例: 矩阵相乘运算A = 1 0 3 2 1 1 B = 3 1 2 2 0 1 1 2 1 AB = 1*3+0*2+3*1 1*1+0*0+3*2 1*2+0*1+3*12*3+1*2+1*1 2*1+1*0+1*2 2*2+1*1+1*1 = CC11 C12

50、 C13C21 C22 C23 5556函数与数组例:编写一个函数,实现矩阵相乘运算,在主函数中调用。分析:矩阵矩阵A AL LM M和矩阵和矩阵B BM MN N相乘相乘 A A是是L L行、行、M M列;列;B B是是M M行、行、N N列列要求要求:A:A的列数和的列数和B B的行数必须一样的行数必须一样结果结果:C=A:C=AB B是是L L行、行、N N列列 NjLiBACMkkjikij,.,2 , 1;,.,2 , 1,15657矩阵相乘算法用两重循环实现对ij的求值: fori=0; il; i=i+1 forj=0; in; j=j+1 求ij;其中“求ij又可以细化为: i

51、j = 0; fork=0; km; k=k+1 ij ij+ikkj5758函数与数组例:编写一个函数,实现矩阵相乘运算,在主函数中调用。#include const int L=4; /定义全局常量const int M=5;const int N=3;/计算矩阵c=ab,返回矩阵c,矩阵a为lm,矩阵b为mn,矩阵c为lnvoid MatrixMultidouble aLM, double bMN, double cLN, int l, int m, int nint i, j, k;fori=0; il; i+ /三重循环 forj=0; jn; j+ cij = 0; fork=0;

52、 km; k+ cij = cij+aik*bkj; 5859函数与数组/编写一个函数,实现矩阵相乘运算,在主函数中调用。void main / 测试上述矩阵相乘函数的主程序double aLM=1.0, 3.0,-2.0, 0.0, 4.0,-2.0,-1.0, 5.0,-7.0, 2.0, 0.0, 8.0, 4.0, 1.0,-5.0,3.0,-3.0, 2.0,-4.0, 1.0;double bMN=4.0, 5.0,-1.0,2.0,-2.0, 6.0,7.0, 8.0, 1.0,0.0, 3.0,-5.0,9.0, 8.0,-6.0; double cLN;MatrixMulti

53、a, b, c, L, M, N;cout The result is c= endl;forint i=0; iL; i+ forint j=0; jN; j+cout cij t; cout endl;The result is c=3215-9432724-1-21772933-5为什么能够得到矩阵为什么能够得到矩阵C的结果?的结果?5960函数与数组例:编写一个函数,实现矩阵相乘运算,在主函数中调用。#include const int L=4;const int M=5;const int N=3;/计算矩阵c=ab,返回矩阵c,矩阵a为lm,矩阵b为mn,矩阵c为lnvoid Ma

54、trixMultidouble aLM, double bMN, double cLN, int l, int m, int nint i, j, k;fori=0; il; i+ /三重循环 forj=0; jn; j+ cij = 0; fork=0; km; k+ cij = cij+aik*bkj; 如果用一维数组表示矩阵,程序如何写?如果用一维数组表示矩阵,程序如何写?6061函数与数组例:编写一个函数,实现矩阵相乘运算,在主函数中调用。#include /计算矩阵c=ab,返回矩阵c,矩阵a为lm,矩阵b为mn,矩阵c为lnvoid MatrixMultidouble a, dou

55、ble b, double c, int l, int m, int nint i, j, k;fori=0; il; i+ /三重循环 forj=0; jn; j+ ci*n+j = 0; /二维到一维的转换 fork=0; km; k+ ci*n+j = ci*n+j+ai*m+k*bk*n+j; /二维到一维的转换 6162函数与数组例:编写一个函数,实现矩阵相乘运算,在主函数中调用。void main / 测试上述矩阵相乘函数的主程序const int L=4; /定义部分常量const int M=5;const int N=3;double aL*M=1.0, 3.0,-2.0,

56、0.0, 4.0,-2.0,-1.0, 5.0,-7.0, 2.0, 0.0, 8.0, 4.0, 1.0,-5.0,3.0,-3.0, 2.0,-4.0, 1.0;double bM*N=4.0, 5.0,-1.0,2.0,-2.0, 6.0,7.0, 8.0, 1.0,0.0, 3.0,-5.0,9.0, 8.0,-6.0; double cL*N;MatrixMultia, b, c, L, M, N;cout The result is c= endl;forint i=0; iL; i+ forint j=0; jN; j+cout ci*N+j t; cout endl;The r

57、esult is c=3215-9432724-1-21772933-56263学籍管理系统【问题】【问题】学籍包括学生学号、姓名、各科成绩等,要求统计学籍包括学生学号、姓名、各科成绩等,要求统计各学生成绩的平均分。各学生成绩的平均分。【关键】【关键】如何保存学生学籍信息?如何保存学生学籍信息?每个学生的信息都一样,每个学生的信息都一样,但一个学生的各信息类型不同。但一个学生的各信息类型不同。 【想法】【想法】把一个学生看成一个整体,各信息项用一个变量保把一个学生看成一个整体,各信息项用一个变量保存。存。假如不看成一个整体可以吗?难以反映它们之间的内在联络,假如不看成一个整体可以吗?难以反映它

58、们之间的内在联络,这些变量一起构成一个学生的完好信息。这些变量一起构成一个学生的完好信息。6364构造体类型构造体是一种构造的数据类型。构造体是由不同的数据类型的数据组成的集合。组成构造体的每个数据成为该构造体的成员项简称成员。在程序使用构造体时,先要对构造体进展描绘,这称为构造体的定义。必须先定义,再使用。6465构造体类型的定义struct 构造体类型名 数据类型 成员名1; 数据类型 成员名2; 数据类型 成员名n; ;struct Student unsigned long number; char name20; float math; float english; float sp

59、orts;6566三种构造体变量的声明1先定义构造体类型,再定义构造体类型变量。例如,日期类型可以定义为 struct Date int year; int month; int day; ;Date yesterday,today,tomorrow; /声明了3个Date类型的变量: yesterday、today和tomorrow。 6667三种声明构造体变量的方式22定义类型的同时声明变量。例如, struct Date int year; int month; int day; yesterday, today, tomorrow;6768三种声明构造体变量的方式33直接定义构造体类型

60、变量。例如, struct int year; int month; int day; yesterday, today, tomorrow;/不出现构造体类型名 结构体变量如何初始化?结构体变量如何初始化?结构体类型中的成员如何使用?结构体类型中的成员如何使用?6869构造体变量初始化与成员的引用构造体变量初始化 例如:Date yesterday=2020,11,15成员引用方式: 构造体类型变量名.成员名例如: yesterday.year=2020; yesterday.month=11; yesterday.day=15;构造体中的每个成员相当于一个变量。这些成员一起构成一个整体构造

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论