C++練習題(1)

不使用庫函數,實現strcpy功能

不使用庫函數,複製源字符串到目標字符串中,即實現strcpy函數的功能。

思路:
1、函數的參數類型和返回類型肯定是字符指針,便於操作;
2、增加程序健壯性,對於參數需要進行檢查,並且對於可能的錯誤進行異常拋出。
3、利用一個臨時字符指針變量存放目標字符串的首地址。
4、將源字符串從首字母到最後的‘\0’賦值給目標字符串,最後返回臨時字符指針變量。

#include <iostream>
using namespace std;

char* my_strcpy(char* strdes, const char* strsrc)
{
	if (NULL == strdes || NULL == strsrc) {
		throw "參數錯誤";
	}
	char* temp = strdes;
	while ((*strdes++ = *strsrc++) != '\0');
	return temp;
}
int main() {
	char a[20];
	const char b[] = "hello world!";
	my_strcpy(a, b);
	cout << a << endl;
	return 1;
}

char *a、char a[]、char a[20]都可以初始化長度可變的字符串,但是*a和char a[]初始化不能使用cin交互,而char a[20]可以通過cin交互。
*a會報使用了未初始化的局部變量,char a[]會報爲a未知大小。

逆序輸出字符串

不使用庫函數,寫一個函數,接收一個字符串作爲輸入參數,將其逆序輸出。

思路:檢查字符串‘\0’的位置,然後從該位置向前輸出字符。

#include <iostream>
using namespace std;
void output_reverse_string(char a[20])
{
	if (NULL == a)  throw("error parameter");
	int i = 0,k;
	while (i < 20) {
		if (a[i] == '\0') {
			k = i-1;
			break;
		}
		i++;
	}
	cout << "reverst result is:";
	for(;k>=0;k--)cout << a[k];
	cout << endl;
}
int main() {
	char a[20];
	cout << "please input a string:";
	cin >> a;
	output_reverse_string(a);
	return 1;
}

可使用string庫函數,寫一個函數,接收一個字符串作爲輸入參數,將其逆序輸出。

#include <iostream>
#include <string>
using namespace std;
int main() {
	char a[20];
	cout << "please input a string:";
	cin >> a;
	int k;
	k = strlen(a);
	for (; k >= 0; k--)cout << a[k];
	cout << endl;
	return 1;
}

對數組元素進行冒泡排序

使用冒泡法對數組元素排序

#include <iostream>
int* bubble(int *intlist, int len) {
	/*思想:每一趟將最大值放置最後面,即從前往後,只要前面的值大於後面的值,就交換位置,10個數就跑9躺*/
	int temp, i,j;
	for (i = 1; i < len; i++) {
		for (j = 0; j < len - i; j++) {
			temp = intlist[j];
			if (intlist[j] > intlist[j + 1]) {
				intlist[j ] = intlist[j+1];
				intlist[j + 1] = temp;
			}
		}
	}
	return intlist;
}
int main() {
	int a[] = {11,25,14,58,36,10,5,9,7,6 };
	int len;
	len = sizeof(a) / 4;
	for (int i = 0; i < len; i++)cout << a[i]<<" ";
	int* b = bubble(a,len);
	cout << endl;
	for (int i = 0; i < len; i++)cout << b[i]<< " ";
	return 1;
}

利用數組輸出Fibonacci數列

斐波那契數列: F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)

#include <iostream>
int main() {
	int a[20] = { 1,1 };
	for (int i = 2; i < 20; i++)a[i] = a[i - 1] + a[i - 2];
	for (int j = 0; j < 20; j++)cout << a[j] << "  ";
	return 1;
}

判斷閏年年份

閏年是能被四整除,但不能被100整除或者是可以被400整除。

#include <iostream>
bool leap_year(int year) {
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) return true;
	else return false;
}
int main() {
	int year;
	cout<< "please input year:";
	cin >> year;
	if (leap_year(year)) cout << endl << year << "是閏年";
	else cout << endl << year << "不是閏年";
	return 1;
}

輸出1000以內的素數

素數:大於一的整數,且只能被1和自己整除。

思路:使用for循環的兩層遍歷,外層遍歷從2到1000的所有可能是素數的數字,內層遍歷用於篩選出屬於素數的整數。

void mersenne(int rang) {
	for (int i = 2; i <= rang; i++) {
		static int flag = 1;
		for (int j = 2; j <= i/2; j++) {
			if (i % j == 0) {
				flag = 0;
				break;
			}
			else flag = 2;
		}
		if (flag > 0) cout << i << "  ";
	}
}
mersenne(1000)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章