张德长

导航

C++学习笔记(4)--练习题

 

 

 

 

 

 

 

 给出年、月、日 , 计算该日是该年的第几天? 

//编写函数,将给定的字符串的大写字母转变成小写字母; 其它字符不变。
//ASCⅡ码表:大写字母[65-90]小写字母[97-122]
void exam8()
{
	string s = "Hello World";
	cout << s << endl;
	for (size_t i = 0; i < s.length(); i++)
	{
		if (s[i] >= 'A' && s[i] <= 'Z')s[i] = (char)((int)s[i] + 32);
	}
	cout << s << endl;
}
//给出年、月、日 , 计算该日是该年的第几天?
//“能被400整除,或者能被4整除但不能被100整除的都是闰年,其余的年份均为平年。能被400整除的为世纪闰年,如2000年就是世纪闰年。
bool isLeap(int y)//是否是闰年
{
	return (y % 400 == 0) || ((y % 4 == 0) && (y % 100 != 0));
}
int getDays(int y, int m)//获取某个月的天数
{
	//if (m < 1 || m>12||y<0)return 0;
	switch (m)
	{
	case 2:
		if (isLeap(y))return 29;
		else return 28;
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		return 31;
	default: return 30;
	}
}
int getAllDays(int y, int m, int d)
{
	int count = 0;
	for (size_t i = 1; i <= m - 1; i++)//所有月份天数相加
	{
		count += getDays(y, i);
	}
	count += d;
	return count;
}
void exam9()
{
	int y = 2008, m = 3, d = 1;
	int count = getAllDays(y, m, d);
	cout << y << "年" << m << "月" << d << "日" << "	是本年中第" << count << "天" << endl;

	y = 2022, m = 12, d = 31;
	count = getAllDays(y, m, d);
	cout << y << "年" << m << "月" << d << "日" << "	是本年中第" << count << "天" << endl;
}

编写函数,将给定的字符串的大写字母转变成小写字母; 其它字符不变。

//编写函数,将给定的字符串的大写字母转变成小写字母; 其它字符不变。
//ASCⅡ码表:大写字母[65-90]小写字母[97-122]
void exam8()
{
	string s = "Hello World";
	cout << s << endl;
	for (size_t i = 0; i < s.length(); i++)
	{
		if (s[i] >= 'A' && s[i] <= 'Z')s[i] = (char)((int)s[i] + 32);
	}
	cout << s << endl;
}

 

编写一个函数 converse ,将一维数组中的数逆序存放,不允许使用辅助数组。主函数输入原始数据,调用 converse ,实现逆置。并将原数组和逆置后的数组输出

//编写一个函数 converse ,将一维数组中的数逆序存放,不允许使用辅助数组。主函数输入原始数据,调用 converse ,实现逆置。并将原数组和逆置后的数组输出
void converse(int arr[],int len)
{
	int half = len / 2;
	int temp;
	for (size_t i = 0; i < half; i++)
	{
		temp = arr[i];
		arr[i] = arr[len - i - 1];
		arr[len - i - 1] = temp;
	}

}
void showArr(int arr[], int len)
{
	for (size_t i = 0; i < len; i++)
	{
		cout << arr[i] << ",";
	}
	cout << endl;
}

void exam7()
{
	int arr[] = { 1,2,3,4,5,6 };
	int len = sizeof(arr) / sizeof(arr[0]);
	showArr(arr,len);
	converse(arr,len);
	showArr(arr, len);
	int arr2[] = { 10,20,30,40,50,80,90 };
	 len = sizeof(arr2) / sizeof(arr[0]);
	showArr(arr2, len);
	converse(arr2, len);
	showArr(arr2, len);
}

 编一个函数 GCD,求两个无符号整数的最大公约数。主函数输入两个正整数 m n, 调用 GCD,求出 mn 的最大公约数和最小公倍数 . 并输出。 

//编一个函数 GCD,求两个无符号整数的最大公约数。主函数输入两个正整数 m 和 n, 调用 GCD,求出 m和 n 的最大公约数和最小公倍数.并输出。
//两个数的乘积等于抄这两个数的最大公约数与最小公倍数的乘积。假设有两个数是a、b,它们的最大公约数是p,最小公倍数是q。那么有这样的关系:ab = pq
int GCD(int m, int n)
{
	int min = m > n ? m : n;
	int commonDivisor=1;
	for (size_t i = 2; i <= min; i++)
	{
		if (m % i == 0 && n % i == 0)commonDivisor = i;
	}
	return commonDivisor;
	
}
void exam6()
{
	int m = 12, n = 15;
	cout << "m=" << m << "	n=" << n << "	最大公约数=" << GCD(m,n) << "	最小公倍数=" << m * n / GCD(m, n) << endl;
	m = 100, n = 75;
	cout << "m=" << m << "	n=" << n << "	最大公约数=" << GCD(m, n) << "	最小公倍数=" << m * n / GCD(m, n) << endl;
	m = 66, n = 666;
	cout << "m=" << m << "	n=" << n << "	最大公约数=" << GCD(m, n) << "	最小公倍数=" << m * n / GCD(m, n) << endl;

}

 

//编程计算 : 1*2*3+3*4*5+ …+99*100*101 的值
void exam5()
{
	int sum = 0;
	for (size_t i = 1; i <= 99; i+=2)
	{
		sum += i * (i + 1) * (i + 2);
	}
	cout << "sum=" << sum << endl;
}

计算: 1+1/ (1+2) +1/ (1+2+3) +…+ 1/ (1+2+…+n) , n 由键盘输入

//计算: 1+1/ (1+2) +1/ (1+2+3) +…+ 1/ (1+2+…+n) , n 由键盘输入
void exam4()
{	
	string s; int n;
	while (true)
	{
		
		cout << "请输入正整数..." << endl;
		getline(cin, s);
		try
		{
			n = stoi(s);
			break;
		}
		catch (const std::exception&)
		{
			cout << "输入错误..." << endl;
			continue;
		}
	}
	float sum = 0, temp = 0;
	for (size_t i = 1; i <= n; i++)
	{
		temp += i;
		sum += 1 / temp;
	}
	cout << "n=" << n << "	temp=" << temp << "	sum=" << sum << endl;
}

求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如: 153 = 1*1*1+ 5*5*5 + 3*3*3。

//求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如: 153 = 13+ 5 3 + 3 3。
void exam3()
{
	list<int> flower;
	int a, b, c;//分别表示个位数,十位数,百位数
	for (size_t i = 100; i < 1000; i++)
	{
		a = i % 10;
		b = i / 10 % 10;
		c = i / 100;
		if (i == a * a * a + b * b * b + c * c * c)flower.push_back(i);
	}
	for (list<int>::iterator i = flower.begin(); i !=flower.end();i++)
	{
		cout <<"水仙花数:" << *i << endl;
	}
}

由键盘输入的任意一组字符, 统计其中大写字母的个数 m和小写字母的个数 n

//由键盘输入的任意一组字符, 统计其中大写字母的个数 m和小写字母的个数 n
//ASCⅡ码表:大写字母[65-90]小写字母[97-122]
void exam2()
{
	string s;
	getline(cin,s);
	int m = 0, n = 0, temp = 0;
	for (size_t i = 0; i < s.length(); i++)
	{
		temp = (int)s[i];
		if (temp >= 65 && temp <= 90)m++;
		else if (temp >= 97 && temp <= 122)n++;
	}
	cout << "大写字母个数=" << m << "	小写字母个数=" << n << endl;
}

void exam2_2()
{
	string s;
	getline(cin, s);
	int m = 0, n = 0;
	for (size_t i = 0; i < s.length(); i++)
	{
		
		if (s[i] >= 'A' && s[i] <= 'Z')m++;
		else if (s[i] >= 'a' && s[i] <= 'z')n++;
	}
	cout << "大写字母个数=" << m << "	小写字母个数=" << n << endl;
}

 编程计算: 1!+2!+3!+ +20! ,并将结果输出 

//编程计算: 1!+2!+3!+ …+20! ,并将结果输出
void exam1()
{
	long long sum = 0;
	long long  fac = 1;
	for (size_t i = 1; i <= 20; i++)
	{
		fac *= i;
		sum += fac;
		cout <<"i="<<i<< "	fac=" << fac << "					sum=" << sum << endl;
	}
	cout << "intMax=" << numeric_limits<int>::max << endl;
	cout << "longMax=" << numeric_limits<long>::max << endl;
	cout << "longlongMax=" << numeric_limits<long long>::max << endl;

}

 

posted on 2022-06-19 16:01  张德长  阅读(37)  评论(0编辑  收藏  举报