⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 练习.txt

📁 钱能主编 C++程序设计教程(第一版) 该书习题的答案代码
💻 TXT
字号:
8.1
#include <iostream.h>

int* findmax(int* array, int size, int* index);

void main()
{
	int a[10]={33,91,54,67,82,37,85,63,19,68};
	int* maxaddr;
	int idx;

	maxaddr=findmax(a,sizeof(a)/sizeof(*a),&idx);

	cout<<"the index of maximum element is "<<idx<<endl
		<<"the address of it is "<<maxaddr<<endl
		<<"the value of it is "<<a[idx]<<endl;
}

int* findmax(int* array, int size, int* index)
{
	int max=0;
	int* addr=0;
	cout<<"in function findmax"<<endl;
	for(int n=0;n<size;n++)
	{
		if(max<array[n])
		{
			max=array[n];
			addr=array+n;
			*index=n;
		}
	}
	cout<<"exiting..."<<endl;
	return addr;
}

8.2
//****************************
//**      Josephus.cpp      **
//****************************
//sele-adjust version

#include <iostream.h>
#include <stdlib.h>
#include <memory.h>

void main()
{
	//每次数interval个小孩,让其离开
	int num,interval;
	int *array;
	cout<<"please input the number of childs:"<<endl;
	cin>>num;

	//申请数组
	if((array=new int[num])==NULL)  //注意new的用法,此处曾因为把[]写成(),而导致Debug时出错
	{
		cout<<"can't allocate more memory, terminating."<<endl;
		exit(1);
	}

	//input the interval
	cout<<"please input the interval:"<<endl
		<<"(note: the value of interval must in the range of [1,"<<num<<"]."<<endl;
	cin>>interval;	
	
	if(num<=1||(interval<=1||interval>num))
	{
		cout<<"there are some problems with the number of child or interval, program execute by default!"<<endl;
		num=10;
		interval=3;
		delete []array;
		array=new int[num];
	}


	
	//给小孩编号
	for(int i=0;i<num;i++)
		*(array+i)=i+1;

	//output all the children
	for(i=0;i<num;i++)
		cout<<*(array+i)<<",";
	cout<<endl;

	int k=1;
	i=-1;

	//process the win boy
	while(1)
	{
		for(int j=0;j<interval;)
		{
			i=(i+1)%num;
			if(*(array+i)!=0)
				j++;
		}

		if(k==num) break;

		cout<<*(array+i)<<" , ";
		*(array+i)=0;

		k++;
	}

	cout<<endl<<"No."<<*(array+i)<<" boy've won."<<endl;
	delete []array;
	return;
}
8.3
(1)
#include <iostream.h>
#include <stdlib.h>

int compare(const void* a, const void* b);

int list[10]={12,32,42,51,8,16,51,21,19,9};

void main()
{
	for(int i=0;i<10;i++)            //origin
		cout<<list[i]<<",";
	cout<<endl;

	qsort((void*)list,10,sizeof(list[0]),compare);

	for(i=0;i<10;i++)            //changed
		cout<<list[i]<<",";
	cout<<endl;
}

int compare(const void* a, const void* b)
{
	int s1=0,s2=0;
	
	cout<<"a:"<<*((int*)a)<<","
		<<"b:"<<*((int*)b)<<endl;

	s1=*((int*)a)/10 + *((int*)a)%10;
	//cout<<"s1:"<<s1<<",";
	s2=*((int*)b)/10 + *((int*)b)%10;
	//cout<<"s2:"<<s2<<endl;

	if(s1==s2)
		return 0;
	else
		if(s1>s2)
			return 1;
		else
			return -1;
}

(2)
#include <iostream.h>
#include <stdlib.h>

int compare(const void* a, const void* b);

float list[10]={32.1,456.87,332.67,442.0,98.12,451.79,340.12,54.55,99.87,72.5};

void main()
{
	for(int i=0;i<10;i++)            //origin
		cout<<list[i]<<",";
	cout<<endl;

	qsort((void*)list,10,sizeof(list[0]),compare);

	for(i=0;i<10;i++)            //changed
		cout<<list[i]<<",";
	cout<<endl;
}

int compare(const void* a, const void* b)
{
	float s1=*((float*)a),s2=*((float*)b);
	cout<<"s1="<<s1<<","
		<<"s2="<<s2<<endl;

	if(s1==s2)
		return 0;
	else
		if(s1>s2)
			return 1;
		else
			return -1;
}

(3)
#include <iostream.h>
#include <stdlib.h>
#include <string.h>

int compare(const void* a, const void* b);

char* list[10]={"enter","number","size","begin","of","cat","case","program","certain","a"};

void main()
{
	for(int i=0;i<10;i++)            //origin
		cout<<list[i]<<",";
	cout<<endl;

	qsort((void*)list,10,sizeof(list[0]),compare);

	for(i=0;i<10;i++)            //changed
		cout<<list[i]<<",";
	cout<<endl;
}

int compare(const void* a, const void* b)
{
	char* a1=*(char**)a;
	char* b1=*(char**)b;
	int i1=0,i2=0;
	int sum1=0,sum2=0;

	while((*(a1+i1))!='\0')
	{
		sum1+=*(int*)a1;
		i1++;
	}
	while((*(b1+i2))!='\0')
	{
		sum2+=*(int*)b1;
		i2++;
	}

	if(i1==i2)
	{
		if(sum1==sum2) 
			return 0;
		else
			if(sum1>sum2)
				return 1;
			else
				return -1;
	}
	else
		if(i1>i2)
			return 1;
		else
			return -1;
}

8.4
#include <iostream.h>
#include <string.h>

char* encrypt(char* a,int* num);
char* decrypt(char* b,int* num);

char s[]={"the resultof 3 and 2 is not 8"};
int num[]={4,9,6,2,8,7,3};

void main()
{
	int i=0;
	char* x=s;
	int* number=num;

	while(x[i]!='\0')           //original content
	{
		cout<<x[i];
		i++;
	}
	cout<<endl;

	char* y=encrypt(x,number);  //encrypted content
	cout<<"Encrypted:"<<endl;
	i=0;
	while(*(y+i)!='\0')
	{
		cout<<(char)*(y+i);
		i++;
	}
	cout<<endl;
	
	char* z=decrypt(y,number);
	cout<<"Decrypted:"<<endl;
	i=0;
	while(*(z+i)!='\0')
	{
		cout<<(char)*(z+i);
		i++;
	}
	cout<<endl;
}

char* encrypt(char* a,int* num)
{
	int i=0;
	while(a[i]!='\0')
	{
		cout<<a[i]<<",";
		a[i]=char(((int)a[i]+num[i%7]-32)%91+32);
		i++;
	}
	cout<<endl;
	return a;
}

char* decrypt(char* b,int* num)
{
	int i=0;
	while(b[i]!='\0')
	{
		b[i]=char((int)b[i]-num[i%7]-32);
		if((int)b[i]<0)
			b[i]=b[i]+91+32;
		else
			b[i]+=32;
		i++;
	}
	return b;
}

8.5
#include <iostream.h>

int strcmp(const char* str1, char* str2);

char str1[]="hello, the linux world!";
char str2[]="hello, the embeded world!";

void main()
{
	char* s1=str1;
	char* s2=str2;
	int r=0;

	r=strcmp(s1,s2);
	cout<<"the compare result is : "<<r<<endl;
}

int strcmp(const char* str1, char* str2)
{
	int sum1=0,sum2=0,i=0;
	while(*(str1+i)!='\0')
	{
		sum1++;
		i++;
	}
	i=0;
	while(*(str2+i)!='\0')
	{
		sum2++;
		i++;
	}

	if(sum1==sum2)
		return 0;
	else
		if(sum1>sum2)
			return 1;
		else 
			return -1;
}

8.6
#include <iostream.h>

char* strcpy(char* dest, const char* source);

char src[]="good!\nthis is the source content:)";  //note: \a means PC beep
const int size=sizeof(src);
char dst[size];

void main()
{
	char* source=src;
	char* dest=dst;
	strcpy(dest,source);
	
	int i=0;
	
	while(*(dest+i)!='\0')
	{
		cout<<*(dest+i);
		i++;
	}
	cout<<endl;
}

char* strcpy(char* dest, const char* source)
{
	int i=0;
	while(*(source+i)!='\0')
	{
		*(dest+i)=*(source+i);
		i++;
	}
	return dest;
}

8.7
#include <iostream.h>

int strcmp(const char* str1, char* str2);

void main(int argc,char* argv[])
{
	int r=0;
	char* s1=argv[1];
	char* s2=argv[2];

	cout<<"argv[1]"<<argv[1]<<"	"
		<<"argv[2]"<<argv[2]<<endl;

	r=strcmp(s1,s2);
	cout<<"the compare result is : "<<r<<endl;
}

int strcmp(const char* str1, char* str2)
{
	int sum1=0,sum2=0,i=0;
	while(*(str1+i)!='\0')
	{
		sum1++;
		i++;
	}
	i=0;
	while(*(str2+i)!='\0')
	{
		sum2++;
		i++;
	}

	if(sum1==sum2)
		return 0;
	else
		if(sum1>sum2)
			return 1;
		else 
			return -1;
}

指针练习:
(1)
#include <iostream.h>
#include <iomanip.h>

void main()
{
	static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
	int (*p);
	p=a[0];
	for(;p<a[0]+12;p++)
	{
		if((p-a[0])%4==0) cout<<endl;
		cout<<setw(4)<<*p<<",";
	}
	cout<<endl;
}
(2)
#include <iostream.h>
#include <iomanip.h>

void main()
{
	static int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
	//int i,j;
	int (*p)[4]=a;
	cout<<"a[1][2]="<<*(*(p+1)+2)<<endl;
}

8.8
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>

void transpose(int (*a)[5],int n);

void main()
{
	int a[5][5];
	//int** mat=&(&(a[0][0]));
	cout<<"original matrix:"<<endl;
	for(int i=0;i<5;i++)
	{
		for(int j=0;j<5;j++)
		{
			a[i][j]=rand();
			cout<<setw(6)<<a[i][j]<<",";
		}
		cout<<endl;
	}
	cout<<endl;

	//key process: the transposing
	int (*p)[5]=a;
	//int (*p2)[5];
	//p2=transpose(p,5);
	transpose(p,5);

	cout<<endl<<"transpose matrix:"<<endl;
	for(i=0;i<5;i++)
	{
		for(int j=0;j<5;j++)
		{
			//cout<<setw(6)<<*((*(p)+i)+j)<<",";
			//the right using: *(*(P+i)+j); equal to p[i][j];
			cout<<setw(6)<<p[i][j]<<",";
		}
		cout<<endl;
	}
}

void transpose(int (*p)[5],int n)
{
	int i,j,tmp=0;
	cout<<"in transpose func..."<<endl;
	for(i=0;i<n;i++)
	{
		for(j=0;j<i;j++)
		{
			if(j==i)
				continue;
			//the wrong using
			//tmp=*((*p+i)+j);  
			//*((*p+i)+j)=*((*p+j)+i);
			//*((*p+j)+i)=tmp;

			//the right using
			//tmp=*(*(p+i)+j);
			//*(*(p+i)+j)=*(*(p+j)+i);
			//*(*(p+j)+i)=tmp;			

			tmp=p[i][j];
			p[i][j]=p[j][i];
			p[j][i]=tmp;

			//test code
			//cout<<"i,j: "<<i<<","<<j<<endl
			//	<<"tmp:"<<tmp<<endl;
			//cout<<p[i][j]<<","<<p[j][i]<<endl;

		}
	}
	cout<<"exit func."<<endl;
}

8.9
#include <iostream.h>
#include <stdlib.h>
//#include <iomanip.h>

void main()
{
	int count=0,arraysize=100;
	long i=0;
	int *array; 
	while((array=new int[100])!=NULL)
	{
		count++;
		i++;
		cout<<i<<endl;
	}
	cout<<"the heap size parameter: count="<<count<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -