当前位置:首页 > 面向对象程序设计教案
void efFind(int DataArray[],int nSize,int fValue) {
int flag=0; //设置flag为查找标记 int nStart=0; //开始元素下标 int nEnd=nSize-1; //结尾元素下标
int nMid; //二分法中间元素下标 while(nStart<=nEnd) {
nMid=(nStart+nEnd)/2; //计算中间元素下标 if(DataArray[nMid]==fValue) {
flag=1; //标记查找成功 break; //退出循环 }
/*如果待查找的值大于中间元素的值,取后半边继续查找; 否则,取前半边继续查找*/ if(fValue>DataArray[nMid]) nStart=nMid+1; else
nEnd=nMid-1; }
if(flag)
cout<<\元素找到了!是第 \个\ else
cout<<\在数组中没有要找的元素!\}
3.统计
当需要知道一个元素在数组中出现的次数时,就要用到统计的算法。常用的统计方法有顺序查找统计法和借用数组下标值的统计方法。
顺序查找统计,即按顺序逐个访问数组元素,每找到一个要统计的元素,就给计数器变量加一。
借用数组下标值进行统计方法是一种技巧性算法,主要借用统计元素的一些特性,比如整除某数后的商均相等或其值就等于数组下标等来进行。
例2-4 输入若干整数,其值均在1至4的范围内,使用借用数组下标值进行统计方法统计每个整数的出现的次数的程序代码如下:
#include
13
{
int tj[4]={0,0,0,0}; //存放统计结果 int tjData;
cout<<\请输入数据(1~4),输入其它时结束:\ cin>>tjData;
while(tjData>0&&tjData<5) //限定数据范围的循环 {
tj[tjData-1]++; //注意数组tj的下标[tjData-1]作用 cin>>tjData; };
cout<<\统计结果为:\ for(int i=0;i<4;i++)
cout<<\: \}
程序运行结果为:
请输入数据(1~4),输入其它时结束: 1 2 3 4 1 2 6 统计结果为: 1 ∶ 2 2 ∶ 2 3 ∶ 1 4 ∶ 1
2.4.4 数组作为函数的参数
要将整个数组作为参数传递给函数,可通过传递不带方括号的数组名来进行,其形式大体上有以下两种形式:
形式1:
<类型标识符> <函数名>(类型标识符 数组名[],int长度) 形式2:
<类型标识符> <函数名>(类型标识符 数组名[长度])
第一种形式适于处理不同长度的数组,数组的实际长度通过另一个参数传递给函数,而第二种形式只可用于传递长度固定的数组。不管哪一种形式,传递给函数的都不是数组本身,而是保存数组第0个元素的内存单元的地址,即存储数组的起始地址,这样,被调用函数就可以得到实际数组的准确存放位置。因此,被调用函数在函数体中修改数组元素时,实际上是修改原内存地址中的数组元素。
例2-5 某次歌唱比赛有5名选手参加,有6名评委分别为选手打分,得分如下表2-4所示。
表2-4 歌唱比赛记分表
14
评委号 选手号 1 9.31 9.71 8.89 9.38 9.30 2 9.20 9.52 8.80 9.50 8.84 3 9.00 9.50 9.10 9.40 9.40 4 9.40 9.66 9.25 9.20 9.45 5 9.35 9.49 8.90 9.90 9.10 6 9.20 9.57 9.00 8.90 8.89 1 2 3 4 5 规定的积分规则是:每位选手去掉一个最高分,再去掉一个最低分, 然后取剩下的得分的平均分。编写程序计算各选手的成绩,并在窗口输出选手号和成绩。
程序代码如下:
#include
double Context(double pArry[],int nNum) //评分函数 {
int nInum;
double fMark,fMax,fMin; //定义记录成绩、最高分、最低分的变量 fMark=fMax=fMin=pArry[0];
for(nInum=1;nInum if(pArry[nInum]>fMax) fMax=pArry[nInum]; if(pArry[nInum] fMark+=pArry[nInum]; //fMark先记录着所有评委的总分 } return (fMark-fMax-fMin)/4; //计算出平均分并返回调用函数 } void main() { double pfSoreData[5][6]= { {9.31,9.20,9.00,9.40,9.35,9.20}, {9.71,9.52,9.50,9.66,9.49,9.57}, {8.89,8.80,9.10,9.25,8.90,9.00}, {9.38,9.50,9.40,9.20,9.90,8.90}, {9.30,8.84,9.40,9.45,9.10,8.89} }; 15 int nRow; cout.precision(3); //设置小数点后的位数 for(nRow=0;nRow<5;nRow++) { cout< cout< 程序运行结果为: 1号选手成绩为:9.26 2号选手成绩为:9.56 3号选手成绩为:8.97 4号选手成绩为:9.37 5号选手成绩为:9.17 注意:本例调用函数形式为Context(pfSoreData[nRow],6),将二维数组的第一维数组名作为实际参数传递给了形式参数,由此可进一步理解二维数组是若干个一维数组所组成的概念。 2.4.5 数组与字符串 在C语言中没有字符串变量类型,为了表示字符串,要用到字符数组。字符型数组就是数组元素的类型是字符型的数组,它是通过字符数组的每一个元素保存字符串内的每一个字符来进行处理。而在VC++中,是由其MFC类库中提供的功能完善的字符串类CString来完成对字符串的各种功能。 1.字符数组的初始化 字符型数组通常有两种特殊的初始化方法,形式如下: 形式1: char <数组名>[]=\字符串\形式2: char <数组名>[]={\字符串\这两种形式产生的效果是相同的,它们会产生一个以字符串常量中的每个字符为数组元素且在末尾加个“\\0”的特殊数组,例如: char pMyStrinq[]=\执行后,pMyString数组中的元素依次是:'T','h','i','s',' ','a',’','c','o','m','p','u','t','e','r ','\\0'。它等同于: char pMyString[]={'T','h','i','s',' ','a',’','c','o','m','p','u','t','e','r ','\\0'}; 或:char pMyStrinq[]={\ 2.字符串的基本运算 16
共分享92篇相关文档