您好,欢迎来电子发烧友网! ,新用户?[免费注册]

当前位置:电子发烧友网 > 图书频道 > 电子 > 《C++程序设计实践例题》 > 第2章 第二章

第2节 第二部分

例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;

}

}