例5.1 数组元素的引用。
#include <iostream>
usingnamespacestd;
intmain( )
{inti,a[10];
for(i=0;i<=9;i++)
a[i]=i;
for(i=9;i>=0;i--)
cout<<a[i]<<" ";
cout<<endl;
return0;
}
例5.10 有3个字符串,要求找出其中最大者。要求用函数调用。
程序如下:
#include <iostream>
#include <string>
usingnamespacestd;
intmain( )
{ voidmax_string(charstr[][30],inti); //函数声明
inti;
charcountry_name[3][30];
for(i=0;i<3;i++)
cin>>country_name[i]; //输入3个国家名
max_string(country_name,3); //调用max_string函数
return0;
}
voidmax_string(charstr[][30],intn)
{
inti;
charstring[30];
strcpy(string,str[0]); //使string的值为str[0]的值
for(i=0;i<n;i++)
if(strcmp(str[i],string)>0) //如果str[i]>string
strcpy(string,str[i]); //将str[i]中的字符串复制到string
cout<<endl<<"the largest string is:"<<string<<endl;
}
例5.11 输入3个字符串,要求将字母按由小到大的顺序输出。
#include <iostream>
#include <string>
usingnamespacestd;
intmain( )
{string string1,string2,string3,temp;
cout<<"please input three strings:"; //这是对用户输入的提示
cin>>string1>>string2>>string3; //输入3个字符串
if(string2>string3) {temp=string2;string2=string3;string3=temp;}
//使串2≤串3
if(string1<=string2) cout<<string1<<" "<<string2<<" "<<string3<<endl;
//如果串1≤串2,则串1≤串2≤串3
elseif(string1<=string3) cout<<string2<<" "<<string1<<" "<<string3<<endl;
//如果串1>串2,且串1≤串3,则串2<串1≤串3
elsecout<<string2<<" "<<string3<<" "<<string1<<endl;
//如果串1>串2,且串1>串3,则串2<串3<串1
}
例5.12 一个班有n个学生,需要把每个学生的简单材料(姓名和学号)输入计算机保存。然后可以通过输入某一学生的姓名查找其有关资料。当输入一个姓名后,程序就查找该班中有无此学生,如果有,则输出他的姓名和学号,如果查不到,则输出“本班无此人”。
为解此问题,可以分别编写两个函数,函数input_data用来输入n个学生的姓名和学号,函数search用来查找要找的学生是否在本班。
程序可编写如下:
#include <iostream>
#include <string>
usingnamespacestd;
string name[50],num[50]; //定义两个字符串数组,分别存放姓名和学号
intn; //n是实际的学生数
intmain( )
{voidinput_data( ); //函数声明
voidsearch(string find_name); //函数声明
string find_name; //定义字符串变量,find_name是要找的学生
cout<<"please input number of this class:"; //输入提示:请输入本班学生的人数
cin>>n; //输入学生数
input_data( ); //调用input_data函数,输入学生数据
cout<<"please input name you want find:"; //输入提示:请输入你要找的学生名
cin>>find_name; //输入要找的学生的姓名
search(find_name); //调用search函数,寻找该学生姓名
return0;
}
voidinput_data( ) //函数首部
{inti;
for(i=0;i<n;i++)
{cout<<"input name and NO. of student "<<i+1<<":";
//输入提示
cin>>name[i]>>num[i];} //输入n个学生的姓名和学号
}
voidsearch(string find_name) //函数首部
{inti;
boolflag=false;
for(i=0;i<n;i++)
if(name[i]==find_name) //如果要找的姓名与本班某一学生姓名相同
{ cout<<name[i]<<" has been found, his number is "<<num[i]<<endl;
//输出姓名与学号
flag=true;
break;
}
if(flag==false) cout<<"can't find this name";//如找不到,输出“找不到”的信息
}
例5.2 用数组来处理求Fibonacci数列问题。
可以用20个元素代表数列中的20个数,从第3个数开始,可以直接用表达式f[i]=f[i-2]+f[i-1]求出各数。
程序如下:
#include <iostream>
#include <iomanip>
usingnamespacestd;
intmain( )
{ inti;
intf[20]={1,1}; //f[0]=1,f[1]=1
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1]; //在i的值为2时,f[2]=f[0]+f[1],依此类推
for(i=0;i<20;i++) //此循环的作用是输出20个数
{if(i%5==0) cout<<endl; //控制换行,每行输出5个数据
cout<<setw(8)<<f[i]; //每个数据输出时占8列宽度
}
cout<<endl; //最后执行一次换行
return0;
}
例5.3 编写程序,用起泡法对10个数排序(按由小到大顺序)。
#include <iostream>
usingnamespacestd;
intmain( )
{
inta[11];
inti,j,t;
cout<<"input 10 numbers :"<<endl;
for(i=1;i<11;i++) //输入a[1]~a[10]
cin>>a[i];
cout<<endl;
for(j=1;j<=9;j++) //共进行9趟比较
for(i=1;i<=10-j;i++) //在每趟中要进行(10-j)次两两比较
if(a[i]>a[i+1]) //如果前面的数大于后面的数
{t=a[i];a[i]=a[i+1];a[i+1]=t;} //交换两个数的位置,使小数上浮
cout<<"the sorted numbers :"<<endl;
for(i=1;i<11;i++) //输出10个数
cout<<a[i]<<" ";
cout<<endl;
return0;
}
例5.4 将一个二维数组行和列元素互换,存到另一个二维数组中。例如
a=123
456b=14
25
36
程序如下:
#include <iostream>
usingnamespacestd;
intmain( )
{
inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
cout<<"array a:"<<endl;
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{ cout<<a[i][j]<<" ";
b[j][i]=a[i][j];
}
cout<<endl;
}
cout<<"array b:"<<endl;
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
return0;
}
例5.5 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
开始时把a[0][0]的值赋给变量max,然后让下一个元素与它比较,将二者中值大者保存在max中,然后再让下一个元素与新的max比,直到最后一个元素比完为止。max最后的值就是数组所有元素中的最大值。
程序如下:
#include <iostream>
usingnamespacestd;
intmain( )
{ inti,j,row=0,colum=0,max;
inta[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
max=a[0][0]; //使max开始时取a[0][0]的值
for(i=0;i<=2;i++) //从第0行~第2行
for(j=0;j<=3;j++) //从第0列~第3列
if(a[i][j]>max) //如果某元素大于max
{max=a[i][j]; //max将取该元素的值
row=i; //记下该元素的行号i
colum=j; //记下该元素的列号j
}
cout<<"max="<<max<<",row="<<row<<",colum="<<colum<<endl;
return0;
}
例5.6 用函数处理例5.5。
算法和例5.5是一样的,今设一函数max_value,用来进行比较并返回结果。可编写程序如下:
#include <iostream>
usingnamespacestd;
intmain( )
{ intmax_value(intx,intmax); //函数声明
inti,j,row=0,colum=0,max
inta[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}}; //数组初始化
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
{ max=max_value(a[i][j],max); //调用max_value函数
if(max==a[i][j]) //如果函数返回的是a[i][j]的值
{row=i; //记下该元素行号i
colum=j; //记下该元素列号j
}
}
cout<<"max="<<max<<",row="<<row<<",colum="<<colum<<endl;
}
intmax_value(intx,intmax) //定义max_value函数
{if(x>max) returnx; //如果x>max,函数返回值为x
elsereturnmax; //如果x≤max,函数返回值为max
}
例5.7 用选择法对数组中10个整数按由小到大排序。
所谓选择法就是先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。
根据此思路编写程序如下:
#include <iostream>
usingnamespacestd;
intmain( )
{voidselect_sort(intarray[],intn); //函数声明
inta[10],i;
cout<<"enter the originl array:"<<endl;
for(i=0;i<10;i++) //输入10个数
cin>>a[i];
cout<<endl;
select_sort(a,10); //函数调用,数组名作实参
cout<<"the sorted array:"<<endl;
for(i=0;i<10;i++) //输出10个已排好序的数
cout<<a[i]<<" ";
cout<<endl;
return0;
}
voidselect_sort(intarray[],intn) //形参array是数组名
{inti,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k]) k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
例5.8 有一个3×4的矩阵,求矩阵中所有元素中的最大值。要求用函数处理。
解此题的算法已在例5.5中介绍。
程序如下:
#include <iostream>
usingnamespacestd;
intmain( )
{intmax_value(intarray[][4]);
inta[3][4]={{11,32,45,67},{22,44,66,88},{15,72,43,37}};
cout<<"max value is "<<max_value(a)<<endl;
return0;
}
intmax_value(intarray[][4])
{inti,j,max;
max=array[0][0];
for( i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max) max=array[i][j];
returnmax;
}
例5.9 设计和输出一个钻石图形。
#include <iostream>
usingnamespacestd;
voidmain( )
{chardiamond[][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},
{' ','*',' ','*'},{' ',' ','*'}};
inti,j;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
cout<<diamond[i][j]; //逐个引用数组元素,每次输出一个字符
cout<<endl;
}
}