例5.1 數(shù)組元素的引用。
#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個(gè)字符串,要求找出其中最大者。要求用函數(shù)調(diào)用。
程序如下:
#include <iostream>
#include <string>
usingnamespacestd;
intmain( )
{ voidmax_string(charstr[][30],inti); //函數(shù)聲明
inti;
charcountry_name[3][30];
for(i=0;i<3;i++)
cin>>country_name[i]; //輸入3個(gè)國家名
max_string(country_name,3); //調(diào)用max_string函數(shù)
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]中的字符串復(fù)制到string
cout<<endl<<"the largest string is:"<<string<<endl;
}
例5.11 輸入3個(gè)字符串,要求將字母按由小到大的順序輸出。
#include <iostream>
#include <string>
usingnamespacestd;
intmain( )
{string string1,string2,string3,temp;
cout<<"please input three strings:"; //這是對用戶輸入的提示
cin>>string1>>string2>>string3; //輸入3個(gè)字符串
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 一個(gè)班有n個(gè)學(xué)生,需要把每個(gè)學(xué)生的簡單材料(姓名和學(xué)號)輸入計(jì)算機(jī)保存。然后可以通過輸入某一學(xué)生的姓名查找其有關(guān)資料。當(dāng)輸入一個(gè)姓名后,程序就查找該班中有無此學(xué)生,如果有,則輸出他的姓名和學(xué)號,如果查不到,則輸出“本班無此人”。
為解此問題,可以分別編寫兩個(gè)函數(shù),函數(shù)input_data用來輸入n個(gè)學(xué)生的姓名和學(xué)號,函數(shù)search用來查找要找的學(xué)生是否在本班。
程序可編寫如下:
#include <iostream>
#include <string>
usingnamespacestd;
string name[50],num[50]; //定義兩個(gè)字符串?dāng)?shù)組,分別存放姓名和學(xué)號
intn; //n是實(shí)際的學(xué)生數(shù)
intmain( )
{voidinput_data( ); //函數(shù)聲明
voidsearch(string find_name); //函數(shù)聲明
string find_name; //定義字符串變量,find_name是要找的學(xué)生
cout<<"please input number of this class:"; //輸入提示:請輸入本班學(xué)生的人數(shù)
cin>>n; //輸入學(xué)生數(shù)
input_data( ); //調(diào)用input_data函數(shù),輸入學(xué)生數(shù)據(jù)
cout<<"please input name you want find:"; //輸入提示:請輸入你要找的學(xué)生名
cin>>find_name; //輸入要找的學(xué)生的姓名
search(find_name); //調(diào)用search函數(shù),尋找該學(xué)生姓名
return0;
}
voidinput_data( ) //函數(shù)首部
{inti;
for(i=0;i<n;i++)
{cout<<"input name and NO. of student "<<i+1<<":";
//輸入提示
cin>>name[i]>>num[i];} //輸入n個(gè)學(xué)生的姓名和學(xué)號
}
voidsearch(string find_name) //函數(shù)首部
{inti;
boolflag=false;
for(i=0;i<n;i++)
if(name[i]==find_name) //如果要找的姓名與本班某一學(xué)生姓名相同
{ cout<<name[i]<<" has been found, his number is "<<num[i]<<endl;
//輸出姓名與學(xué)號
flag=true;
break;
}
if(flag==false) cout<<"can't find this name";//如找不到,輸出“找不到”的信息
}
例5.2 用數(shù)組來處理求Fibonacci數(shù)列問題。
可以用20個(gè)元素代表數(shù)列中的20個(gè)數(shù),從第3個(gè)數(shù)開始,可以直接用表達(dá)式f[i]=f[i-2]+f[i-1]求出各數(shù)。
程序如下:
#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時(shí),f[2]=f[0]+f[1],依此類推
for(i=0;i<20;i++) //此循環(huán)的作用是輸出20個(gè)數(shù)
{if(i%5==0) cout<<endl; //控制換行,每行輸出5個(gè)數(shù)據(jù)
cout<<setw(8)<<f[i]; //每個(gè)數(shù)據(jù)輸出時(shí)占8列寬度
}
cout<<endl; //最后執(zhí)行一次換行
return0;
}
例5.3 編寫程序,用起泡法對10個(gè)數(shù)排序(按由小到大順序)。
#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++) //共進(jìn)行9趟比較
for(i=1;i<=10-j;i++) //在每趟中要進(jìn)行(10-j)次兩兩比較
if(a[i]>a[i+1]) //如果前面的數(shù)大于后面的數(shù)
{t=a[i];a[i]=a[i+1];a[i+1]=t;} //交換兩個(gè)數(shù)的位置,使小數(shù)上浮
cout<<"the sorted numbers :"<<endl;
for(i=1;i<11;i++) //輸出10個(gè)數(shù)
cout<<a[i]<<" ";
cout<<endl;
return0;
}
例5.4 將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中。例如
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 有一個(gè)3×4的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號和列號。
開始時(shí)把a(bǔ)[0][0]的值賦給變量max,然后讓下一個(gè)元素與它比較,將二者中值大者保存在max中,然后再讓下一個(gè)元素與新的max比,直到最后一個(gè)元素比完為止。max最后的值就是數(shù)組所有元素中的最大值。
程序如下:
#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開始時(shí)取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 用函數(shù)處理例5.5。
算法和例5.5是一樣的,今設(shè)一函數(shù)max_value,用來進(jìn)行比較并返回結(jié)果??删帉懗绦蛉缦拢?/p>
#include <iostream>
usingnamespacestd;
intmain( )
{ intmax_value(intx,intmax); //函數(shù)聲明
inti,j,row=0,colum=0,max
inta[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}}; //數(shù)組初始化
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
{ max=max_value(a[i][j],max); //調(diào)用max_value函數(shù)
if(max==a[i][j]) //如果函數(shù)返回的是a[i][j]的值
{row=i; //記下該元素行號i
colum=j; //記下該元素列號j
}
}
cout<<"max="<<max<<",row="<<row<<",colum="<<colum<<endl;
}
intmax_value(intx,intmax) //定義max_value函數(shù)
{if(x>max) returnx; //如果x>max,函數(shù)返回值為x
elsereturnmax; //如果x≤max,函數(shù)返回值為max
}
例5.7 用選擇法對數(shù)組中10個(gè)整數(shù)按由小到大排序。
所謂選擇法就是先將10個(gè)數(shù)中最小的數(shù)與a[0]對換;再將a[1]到a[9]中最小的數(shù)與a[1]對換……每比較一輪,找出一個(gè)未經(jīng)排序的數(shù)中最小的一個(gè)。共比較9輪。
根據(jù)此思路編寫程序如下:
#include <iostream>
usingnamespacestd;
intmain( )
{voidselect_sort(intarray[],intn); //函數(shù)聲明
inta[10],i;
cout<<"enter the originl array:"<<endl;
for(i=0;i<10;i++) //輸入10個(gè)數(shù)
cin>>a[i];
cout<<endl;
select_sort(a,10); //函數(shù)調(diào)用,數(shù)組名作實(shí)參
cout<<"the sorted array:"<<endl;
for(i=0;i<10;i++) //輸出10個(gè)已排好序的數(shù)
cout<<a[i]<<" ";
cout<<endl;
return0;
}
voidselect_sort(intarray[],intn) //形參array是數(shù)組名
{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 有一個(gè)3×4的矩陣,求矩陣中所有元素中的最大值。要求用函數(shù)處理。
解此題的算法已在例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 設(shè)計(jì)和輸出一個(gè)鉆石圖形。
#include <iostream>
usingnamespacestd;
voidmain( )
{chardiamond[][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},
{' ','*',' ','*'},{' ',' ','*'}};
inti,j;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
cout<<diamond[i][j]; //逐個(gè)引用數(shù)組元素,每次輸出一個(gè)字符
cout<<endl;
}
}
