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] << " ";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章