Assignment 10

1. 数组中的数据经常可以用多种不同的格式显示。当用户向数组输入整数时,则分别用二进制、八进制、十进制和十六进制的格式输出表中的数。编写函数convertBinary来实现将一个数转换为其二进制表示的函数这一功能。

程序代码:

#include

usingnamespace std;

intmain(int argc,char* argv[])

{

       void convertBinary(int m);

       int iNumber = 0;

       cout << "Please input thenumber you want to transform" << endl;

       cin >> iNumber;

       convertBinary(iNumber);

       return 0;

}

voidconvertBinary(int m)

{

       int iA[100] = {0};

       int i = 0;

       do

       {

              iA[i++] = m % 2;

              m = m / 2;

       }

       while(m);

       for(i = i - 1;i >= 0;i --)

       {

              cout << iA[i] ;

       }

       cout << endl;

}

2. 建立两个磁盘文件f1.dat和f2.dat

要求:

(1)从键盘输入20个整数,存放在磁盘文件f1.dat中;

(2)从f1.dat中读入10个数,存放到f2.dat文件中;

(3)将f2.dat中的数据按由小到大的顺序存放,不保留原有文件内容

程序代码:

#include

#include

usingnamespace std;

//set_files函数的功能:从键盘输入20个整数,存放在磁盘文件f1.dat中;

voidset_files()

{

       int iA[20] = {0};

       ofstream outfile1("f1.dat");

       if(!outfile1)                        //检查打开f1.dat是否成功

       {

              cerr<<"open f1.daterror!"<

              exit(1);

       }

       cout << "please input 20numbers to f1.dat:" << endl;

       for (int i = 0;i < 20;i ++)

       {

              cin >> iA[i];

              outfile1 << iA[i] << '';

       }

       outfile1.close();

}

 

//fun函数的功能是:从f1.dat中取出十个数据放到f2.dat中

voidfun()

{

       ifstreaminfile("f1.dat",ios::in);

       if (!infile)

       {

              cerr << "open f1.daterror!" << endl;

              exit(1);

       }

       ofstream outfile("f2.dat",ios::out);

       if (!outfile)

       {

              cerr << "open f2.daterror!" << endl;

              exit(1);

       }

       int iA = 0;

       for (int i = 0;i < 10;i ++)

       {

              infile >> iA;

              outfile << iA << ' ';

       }

       infile.close();

       outfile.close();

}

//对f2.dat中的数字进行排序

voidset_order()

{

       ifstream infile("f2.dat");

       if (!infile)

       {

              cerr << "open f2.daterror!" << endl;

              exit(1);

       }

       int iA[10] = {0};

       for (int i = 0;i < 10;i ++)

       {

              infile >> iA[i];

       }

       //起泡法对10个数字进行排序

       int iTemp = 0;

       for (i = 0;i < 9;i ++)

       {

              for (int j = 0;j < 9 - i;j ++)

              {

                     if (iA[j] > iA[j + 1])

                     {

                            iTemp = iA[j];

                            iA[j] = iA[j+1];

                            iA[j+1] = iTemp;

                     }

              }

       }

       infile.close();

       ofstreamoutfile("f2.dat",ios::out);

       if (!outfile)

       {

              cerr << "open f2.daterror!" << endl;

              exit(1);

       }

       cout<<"data inf2.dat:"<

       for (i = 0;i < 10;i ++)

       {

              outfile << iA[i] << '';   //向f2.dat在中输入已经排好序的10个数字

              cout << iA[i] << ' ';              //同时向显示器输出那十个数字

       }

       cout << endl;

       outfile.close();

}

intmain(int argc,char* argv[])

{

       set_files();

       fun();

       set_order();

       return 0;

}

3.设计一个管理图书的简单程序,提供的基本功能包括:可连续将新书存入文件“book.dat”中,新书信息加入到文件的尾部;也可以根据输入的书名进行查找;把文件“book.dat”中同书名的所有书显示出来。为简单起见,描述一本书的信息包括:书号,书名,出版社和作者。

程序代码:

#include

using namespacestd;

struct Library

{

       int iNumber;

       char chBookName[30];

       char chPublisher[30];

       char chAuthorName[30];

};

int main(intargc,char* argv[])

{

       ofstream outfile("book.dat");

       Library book[7] = {{2000,"高等数学","矿大出版社","杨老师"},

       {2001,"大学物理","清华出版社","孙老师"},

       {2002,"大学英语","外文出版社","张老师"},

       {2003,"c++","机械工业出版社","席老师"},

       {2004,"电路","上海交通大学出版社","陈老师"}};

       Library BookExtre;

       fstreamiofile("book.dat",ios::in|ios::out|ios::binary);

       if (!iofile)

       {

              cerr << "open book.daterror!" << endl;

              abort();

       }

       cout << "five books:"<< endl;

       for (int i = 0;i < 5;i ++)

       {

              cout << book[i].iNumber<<" " << book[i].chBookName << ' ' << ' ';

              cout << book[i].chPublisher<< ' ' << book[i].chAuthorName << endl;

              iofile.write((char*)&book[i],sizeof(book[i]));

       }

       cout << "please input the dataof books you want to insert:" << endl;

       for (i = 0;i < 2; i ++)

       {

              cin >> BookExtre.iNumber>> BookExtre.chBookName >> BookExtre.chPublisher >>BookExtre.chAuthorName ;

              iofile.seekp(0,ios::end);

              iofile.write((char*)&BookExtre,sizeof(BookExtre));

       }

       iofile.seekg(0,ios::beg);

       for (i = 0 ;i < 7;i ++)

       {

              iofile.read((char*)&book[i],sizeof(book[i]));

              cout<

       }

       bool bFind;

       int SearchNumber = 0,temp = 0;

       cout << "Please input the booknumber you want to search:" << endl;

       cin >> SearchNumber;

       while(SearchNumber)

       {

              bFind=false;

              iofile.seekg(0,ios::beg);

              for(i=0;i<7;i++)

              {

                     iofile.read((char*)&book[i],sizeof(book[i]));

                     if(SearchNumber ==book[i].iNumber)

                     {

                            temp= iofile.tellg();

                            cout<

                            cout<

                            cout<

                            bFind=true;

                     }

                     break;

              }

              break;

       }

       if (!bFind)

       {

              cout << "The book notfind!" << endl;

              cout << "input the booknumber you want to search:" << endl;

              cin >> SearchNumber;

       }

       iofile.close();

       return 0;

}

4.传说婆罗门庙中有一个塔台,台上有三根用钻石镶嵌的柱子,分别记作A柱、B柱和C柱,在A柱上放着64个金盘,每个金盘的大小都不一样,并且小金盘子放在大金盘的上面,显然,最大的金盘位于最下面,最小的金盘位于最上面。

现在,试着把A柱上的盘子移到C柱上,移动规则是一次只能移动一个金盘,并且在移动过程中大金盘不能位于小金盘的上面。据说,当A柱上的所有金盘都移到C柱上的那一天,就是世界末日。试着用递归法编写一个程序,输入A柱上的盘子数量,输出正确的移动步骤和总的步数。

代码程序:

#include

usingnamespace std;

intmain(int argc,char* argv[])

{

       int iNumber = 0;

       int iSum = 0;

       int move_plate(int,char ,char ,char );

       cout << "please input thenumber of plates you want to move:";

       cin >> iNumber;

       cout << "移动的步骤是:" << endl;

       iSum = move_plate(iNumber,'A','B','C');

       cout << "总共移动的步数:";

       cout <

       cout << "Today is the judgmentday in the world!" << endl;

       cout << "You are going todie!!" << endl;

       return 0;

}

 

intmove_plate(int m,char A,char B,char C)

{

       int iCounter = 0;

       void movePath(char ,char);

       if (m ==1)

       {

              movePath(A,C);

              iCounter ++;

       }

       else

       {

              iCounter += move_plate(m -1,A,C,B);

              movePath(A,C);

              iCounter ++;

              iCounter += move_plate(m -1,B,A,C);

       }

       return iCounter;

}

voidmovePath(char x,char y)

{

       cout << x <<"-->" << y << endl;

}

你可能感兴趣的:(C/C++)