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;