第六周作业一 —— 编程实现数组排序

第四章作业一:课本习题

第一题:排序练习

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


终于完成课本例题了,对于第四题输入空格会出错,这是为什么呢?感觉程序没有问题呀。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值