第四章作业一:课本习题
第一题:排序练习
1.冒泡法排序:
// leason4.cpp : Defines the entry point for the console application.
//课本习题:冒泡法排序
//#include "stdafx.h"
#include<iostream>
using namespace std;
#include<iomanip>
int num[5];
int main()
{
int a,b,i;
cout<<"please input 5 numbers:"<<endl;
for(a=0;a<5;a++)
cin>>num[a];
cout<<"这五个数是:";
for(a=0;a<5;a++)
cout<<setw(5)<<num[a];
cout<<endl;
for(a=0;a<5;a++)
for(i=4;i>0;i--)
if(num[i]>num[i-1])
{ b=num[i];
num[i]=num[i-1];
num[i-1]=b;
}
cout<<"排序后:";
for(a=0;a<5;a++)
cout<<setw(4)<<num[a];
cout<<endl;
return 0;
}
2.选择法排序:
// 第四章1.cpp : 定义控制台应用程序的入口点。
//选择排序
#include "stdafx.h"
#include<iostream>
using namespace std;
//int num[10];
int _tmain(int argc, _TCHAR* argv[])
{
int num[10];
int a,b;
int min,n;
cout<<"请输入十个数"<<endl;
for(a=0;a<10;a++)
cin>>num[a];
for(a=0;a<9;a++)
{
min=a;
for(b=a+1;b<10;b++)
{if(num[b]<num[min])
min=b;}
if(min!=a)
{n=num[a];num[a]=num[min];num[min]=n;}
cout<<"第"<<a+1<<"次排序结果:"<<endl;
for(b=0;b<10;b++)
cout<<num[b]<<'\t';
cout<<endl;
};
cout<<"最后排列结果:"<<endl;
for(a=0;a<10;a++)
cout<<num[a]<<'\t';
cout<<endl;
return 0;
}
3.插入法排序:
// 第四章1.cpp : 定义控制台应用程序的入口点。
//插入法排序
#include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
int num[10]={45,62,18,73,64,58,39,57,85,28};
int _tmain(int argc, _TCHAR* argv[])
{
int a,b;
int min,n;
//cout<<"请输入十个数"<<endl;
//for(a=0;a<10;a++) //每次调试都要输数,真的很麻烦
//cin>>num[a]; //所以就在开头定义了
cout<<"初始数据:"<<endl;
for(a=0;a<10;a++)
cout<<setw(5)<<num[a];
cout<<endl;
for(a=1;a<10;a++)
{
min=num[a];
b=a-1;
while(b>=0&&num[b]>min)
{
num[b+1]=num[b];
b--;
}
num[b+1]=min;
cout<<"第"<<a<<"次排序结果:"<<endl;
for(b=0;b<10;b++)
cout<<setw(5)<<num[b];
cout<<endl;
};
cout<<"最后排列结果:"<<endl;
for(a=0;a<10;a++)
cout<<setw(5)<<num[a];
cout<<endl;
return 0;
}
排序到此先告一段落,虽然方法不同,但都是大同小异,每次循环都只能确定一个数的位置
2.输入一个二维数组并显示,找出最大元素及该元素下标
// 第四章1.cpp : 定义控制台应用程序的入口点。
//习题4-2
#include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
int num[3][4];
int main()
{
int a,b;
int min,max;
cout<<"请输入12个数"<<endl;
for(a=0;a<3;a++)
for(b=0;b<4;b++)
cin>>num[a][b];
cout<<"初始数据:"<<endl;
for(a=0;a<3;a++)
{
for(b=0;b<4;b++)
cout<<"num["<<a<<"]["<<b<<"]="<<num[a][b]<<'\t';
cout<<endl;
}
cout<<endl;
max=num[0][0];
min=num[0][0];
for(a=0;a<3;a++)
for(b=0;b<4;b++)
{
if(max<num[a][b])
max=num[a][b];;
if(min>num[a][b])
min=num[a][b];
}
for(a=0;a<3;a++)
for(b=0;b<4;b++)
{
if(max==num[a][b])
cout<<"最大项max=num["<<a<<"]["
<<b<<"]="<<num[a][b]<<endl;;
if(min==num[a][b])
cout<<"最小项min=num["<<a<<"]["
<<b<<"]="<<num[a][b]<<endl;
}
return 0;
}
习题4-3:编写程序,统计Fibonacci数列钱20个数中有多少个三位数,并输出数列中第16项数据。
// 第四章1.cpp : 定义控制台应用程序的入口点。
//习题4-3
#include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
int num[20]={1,1};
int main()
{
int a,b=0;
for(a=2;a<20;a++)
num[a]=num[a-2]+num[a-1];
cout<<"初始数据:"<<endl;
for(a=1;a<=20;a++)
{
cout<<setw(8)<<num[a-1];
if(a%5==0)
cout<<endl;
}
for(a=0;a<20;a++)
if(num[a]>99&&num[a]<1000)
b++;
cout<<"数列中共有"<<b<<"个三位数"<<endl;
cout<<"第十六项数是:"<<num[15]<<endl;
return 0;
}
4.输入一个字符串,统计其中大写字母、小写字母、空格、数字及其他字符的个数
5.输入一个字符串,反向输出每一个字符,并求此字符串长度。
6.输入一个字符串,将其中所有数字删除,并输出改动后的字符串及长度。
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//课本第四章习题4-6
#include "stdafx.h"
#include<iostream>
#include<cstring>
char no_4a[100];
char no_5a[100];
char no_6a[100];
char no_6b[100];
using namespace std;
void NO_4();
void NO_5();
void NO_6();
int _tmain(int argc, _TCHAR* argv[])
{
int a,b=1;
char c;
while(b)
{
cout<<"请输入要查看的题目编号(4~6)"<<endl;
cin>>a;
switch(a)
{
case(4):
NO_4();break;
case(5):
NO_5();break;
case(6):
NO_6();break;
default :
cout<<"输入无效"<<endl;
}
cout<<"是否要查看其它题目:按N退出,任意键继续"<<endl;
cin>>c;
if(c=='N'||c=='n')
b=0;
}
return 0;
}
void NO_4()
{
int a=0,b=0,c=0,d=0,e=0,t=0;
cout<<"请输入一个字符串"<<endl;
cin>>no_4a;
//e=strlen(no_4a);
while(no_4a[t]!='\0')
{
if((no_4a[t]>='0')&&(no_4a[t]<='9'))
a++; //数字长度
else if((no_4a[t]<='z')&&(no_4a[t]>='a'))
b++; //小写字母长度
else if((no_4a[t]>='A')&&(no_4a[t]<='Z'))
c++; //大写字母长度
else if(no_4a[t]==' ')
d++; //空字符长度
t++;
e++; //此时e为字符串总长
}
e=e-a-b-c-d; //此处e为其它类字符长度
cout<<"大写字母有"<<c<<"个"<<endl
<<"小写写字母有"<<b<<"个"<<endl
<<"空格有"<<d<<"个"<<endl
<<"数字有"<<a<<"个"<<endl
<<"其它字符有"<<e<<"个"<<endl;
}
void NO_5()
{
int a,b,c;
cout<<"请输入一个字符串"<<endl;
cin>>no_5a;
a=strlen(no_5a);
if(a%2==0)
for(b=0;b<a/2;b++)
{c=no_5a[b];no_5a[b]=no_5a[a-b-1];no_5a[a-b-1]=c;}
else
for(b=0;b<(a-1)/2;b++)
{c=no_5a[b];no_5a[b]=no_5a[a-b-1];no_5a[a-b-1]=c;}
cout<<"倒序输出:"<<no_5a<<endl
<<"该字符串长度为:"<<a<<"字节"<<endl;
}
void NO_6()
{
int a,b,c;
cout<<"请输入一个字符串"<<endl;
cin>>no_6a;
a=strlen(no_6a);
c=0;
for(b=0;b<a;b++)
if((no_6a[b]<'0')||(no_6a[b]>'9'))
{
no_6b[c]=no_6a[b];
c++;
}
cout<<"删除数字的字符串为"<<no_6b<<endl
<<"该字符串长度为"<<strlen(no_6b)<<"字节"<<endl;
}
终于完成课本例题了,对于第四题输入空格会出错,这是为什么呢?感觉程序没有问题呀。