C++練習題(2)

動態參數函數

編寫一個動態參數的函數,使函數能夠適應不同的參數個數。

思路:利用函數的省略參數,功能實現依賴於幾個stdarg.h中定義的宏:
1、 va_list:行爲有點像數據類型,定義一個參數列表
2、 va_start:行爲有點像函數,參數爲va_list類型的參數列表以及參數個數
3、 va_arg:行爲像函數,參數爲va_list參數表以及參數數據類型,返回對應類型的參數值。
4、 va_end:行爲像函數,參數爲va_list的參數表

函數功能:接收不同個數和類型的參數,,當然參數給的規律還是需要約定好的,這裏約定每組一個字符串類型和整型,供N組。

#include <iostream>
#include <stdarg.h>
void arameter(int num, ...) {
	va_list arg_list;
	va_start(arg_list,num); //讀取所有參數數據
	while (num--) {
		char* arg_string = va_arg(arg_list, char*);
		int arg_int = va_arg(arg_list,int);
		//float arg_float = va_arg(arg_list, float);
		cout << arg_string << '\t' << arg_int << '\t' << endl;
	}
	va_end(arg_list);
}
arameter(2, "world", 5,"hello",4);

利用指針做參數,實現兩數互換

編寫一個函數,利用指針作爲參數,實現兩個數的互換。

#include <iostream>
void swap(int* a, int* b) {
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
int x = 10, y = 20;
	cout << "互換前的x爲" << x << ",y爲:" << y << endl;
	swap(&x, &y);
	cout << "互換前的x爲" << x << ",y爲:" << y << endl;

利用遞歸函數,遍歷指定目錄下的所有文件

用C++語言編寫一個遞歸函數,遍歷指定目錄下的所有文件。

選需要了解文件查找的相關信息,這樣才能理解下面的代碼。

#include<io.h>
#include<stdio.h>
#include <string>
void ListDir(const char* pchData)
{
	_finddata_t   fdata;   //定義存儲文件信息的結構體
	char tempdir[MAXLEN] = { 0 };
	strcat(tempdir, pchData);
	strcat(tempdir, "\\*");
	long done = _findfirst(tempdir, &fdata);//充當手柄
	if (done != -1)
	{
		int ret = 0;
		while (ret != -1)     //直到_findnext返回-1爲止,即已經到達最後一個文件位置
		{
			if (fdata.attrib != _A_SUBDIR) //不是文件夾,即文件,就輸出文件名,文件數量加1
			{
				if (strcmp(fdata.name, "...") != 0 &&
					strcmp(fdata.name, "..") != 0 &&  //..表示上一級目錄
					strcmp(fdata.name, ".") != 0)  //.表示當前目錄
				{
					char dir[MAXLEN] = "";
					strcat(dir, pchData);
					strcat(dir, "\\");
					strcat(dir, fdata.name);
					printf("%s\n", dir);
					filenum++;
				}
			}
			ret = _findnext(done, &fdata);
			if (fdata.attrib == _A_SUBDIR && ret != -1) //是文件夾(目錄),就遞歸
			{
				if (strcmp(fdata.name, "...") != 0 &&
					strcmp(fdata.name, "..") != 0 &&
					strcmp(fdata.name, ".") != 0)
				{
					char pdir[MAXLEN] ="";//{ 0 }
					strcat(pdir, pchData);
					strcat(pdir, "\\");
					strcat(pdir, fdata.name);
					ListDir(pdir);
				}
			}
		}
	}
}
filenum = 0;
ListDir("D:\\Pyvirtual\\Test\\Include");
printf("共計%d個文件\n", filenum);

利用函數模板,實現各種數據類型數組進行排序

編寫一個函數模板,實現對各種數據類型數組進行從小到大的排序。

#include <iostream>
template <class type,int len>
void any_bubble(type intlist[len]) {
	type temp;
	int 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;
			}
		}
	}
}
int arr_i[10] = { 1,8,5,6,7,2,3,10,11,12 };
	any_bubble<int,10>(arr_i);
	for (int i = 0; i < 10; i++) cout << arr_i[i] << " ";
	float arr_f[10] = { 5.1,3.8,2.5,6.9,4.7,8.2,10.3,10.9,9.1,12.9 };
	any_bubble<float,10>(arr_f);
	cout << endl;
	for (int i = 0; i < 10; i++)
		cout << arr_f[i] << " ";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章