1. 程式人生 > >c/c++面試程式設計題

c/c++面試程式設計題

 2. 編寫一個c函式,將“I am from shanghai”,倒置為“shanghai from am I”,及將句子的單詞位置倒置,而不改變單詞內部結構
//編寫一個c函式,將“I am from shanghai”倒置為“shanghai from am I”,及將句子的單詞位置倒置,而不會改變單詞內部結構
//思路:先將字串中單詞的倒置,再將字串倒置
#include <iostream>
using namespace std;

void change(char *p)
{
	int n = 0;
	int length = strlen(p); //字串的長度
	for(int i = 0;i<length+1;i++)
	{
		//判斷字串中空格的位置,和結束的位置
		if((*(p+i+1) ==' ')||(*(p+i+1) == '\0'))
		{
			//*(p+i+1)是判斷當前位置後一位是否為空格或者指標結束的位置
			int m = i;
			//*(p+n)上一個空格的後一位即當前單詞的首字母,*(p+m)當前單詞的末字母
			for(;n<m;n++,m--)
			{
				char temp = *(p+m);
				*(p+m) = *(p+n);
				*(p+n) = temp;
			}
			n = i+2;
		}
		////*(p+i)是判斷當前位置是否為空格或者指標結束的位置
		//if(*(p+i) == ' '||*(p+i) == 0)
		//{
		////*(p+n)上一個空格的後一位即當前單詞的首字母,*(p+m)當前單詞的末字母
		//	int m = i-1;
		//	for(;n<m;n++,m--)
		//	{
		//		char temp = *(p+m);
		//		*(p+m) = *(p+n);
		//		*(p+n) = temp;
		//	}
		//	n = i+1;
		// }
	}
	//將字串整體倒置
	for(int i = 0;i<length; i++,length--)
	{
		char temp = *(p+length-1);
		*(p+length-1) = *(p+i);
		*(p+i) = temp;
	}	
}

void main()
{
	char str[] ="I am from shanghai";
	cout<<"正序:"<<str<<endl;
	change(str);
	cout<<"倒序:"<<str<<endl;
	cin.get();
}
3. 寫一個函式找出一個整數陣列中,第二大的數
 //寫一個函式找出一個整數陣列中,第二大的數
 #include <iostream>

using namespace std;
int search(int *str)
{
	int max = str[0];
	int second = 0;
	int i = 0;
	while(str[i] != '\0')
	{
		if(second <=str[i])//比第二大
		{
			if(max <= str[i])//比第一大
			{
				//第二繼承第一,第一繼承str[i]
				second = max;
				max = str[i];				
			}	
			else//比第一小
				second = str[i];
		}
		i++;
	}
	return second;
}

void main()
{

	int str[100]={90,84,65,95,87};
	int second = search(str);
	cout<<second<<endl;
	cin.get();
}
     4.  通過程式設計實現輸出2的1000次方
//通過程式設計實現輸出2的1000次方
#include<iostream>
#define N 1000
using namespace std;
void count(int *num)
{
	*num = 1;
	int opt = 0;
	for(int i = 0;i<N;i++)
	{
		for(int j = 0;j<999;j++)//將數組裡面的每一位*2
		{
			*(num+j) *= 2;
		}
		for(int j = 0;j<999;j++)
		{
			//判斷數組裡面的每一位是否大於9,進位
			if(*(num + j) > 9)
			{
				*(num +j+1) += 1;
				*(num + j) %= 10; 
			}
		}
	}
	for(int i = 998;i >= 0; i--)
	{
		if(num[i] != 0)
		{
			opt = 1;
		}
		if(opt == 1)
		{
			cout<<*(num+i);
		}
	}
	cout<<endl;
}
void main()
{
	int num[999];
	memset(num,0,sizeof(num));//將數組裡面的內容清0
	count(num);
	cin.get();

}
 6.有一分數序列:1/2,1/4,1/6,1/8.....,用函式呼叫的方法,此數列前20項的和
//有一分數序列:1/2,1/4,1/6,1/8.....,用函式呼叫的方法,此數列前20項的和
//我用的遞迴的方法
#include <iostream>

using namespace std;

double num(double N)
{
	if(N == 42)
	{
		return 0;
	}
	return 1/N + num(N+2);
}
void main()
{
	double N = 2;
	cout<<num(N)<<endl;
	system("pause");
}