C++编程题总结

1、重复打印+换行

	for (int n = 5;n > 0;n--)
	{
		for (int j = 1;j <= n;j++)
		{
			printf("*");
			//if (j == n)
				//printf("\n");//循环结束,自动打印换行,直接放在for循环外面,无需if判断
		}
		printf("\n");
	}

printf和for循环能实现重复打印

printf("\n")实现换行打印

	for (int i = 1;i <= 5;i++)
	{
		for (int j = 1;j <= 5;j++)
		{
			if (j == i || j == 5 - i + 1)
				printf("*");
			else
				printf(" ");
		}
		printf("\n");
	}

是对称,打印对称位置即可(用||进行if条件判断)

空格的打印直接用printf(" "),,另外用printf("\t")也能打印出空格

总结套路:外层for循环行数,内层for循环列数并用  if、或  条件来限定打印

2、取出开方数

嵌套for取开方数,第二个for逐一判断

	for (int i = 1;i <= 40;i++)
	{
		int result = i * i;
		if (result > 1000)
			break;
		printf("%d\t", result);
	}

自己写的虽然满足题意,但是不能把开方数打印出来

3、打印9×9乘法表

	for (int i = 1;i <= 9;i++)
	{
		for (int j = 1;j <= i;j++)
			printf("%d×%d=%d ", j, i, i*j);
		printf("\n");
	}

第一个for循环不加大括号的话,虽然第二个printf的格式没问题,但是程序会一直执行完最外层的for循环后才执行printf("\n"),这样就无法达到乘法表的效果

4、倒序

①倒序打印某数

自己方法是分1-9,10-99,100-999,1000-9999,10000这5种情况

优化:对10取余不停获取到末尾数,知道取余结果为0则break(无论几位数,对10取余)

{
	/*倒序打印数字*/
	int n = 0;
	scanf_s("%d", &n);
	while (1)
	{
		int ge = n % 10;
		printf("%d", ge);
		n = n / 10;
		if (n == 0)
			break;
		printf("-");
	}

取位数的方法和保留除掉位数的其余数,这与固定的三位数取个(n%100/10,可直接替换成n%10),十,百位数字的方法不同

 ②反转数组

方法1:数组中线,两边对调,需要定义一个temp临时变量。由于中线,所以for循环只需取数组长度一半即可

void reverse(int* arr, int size)
{
	for (int i = 0; i < size/2; i++)
	{
		int temp = arr[i];
		arr[i] = arr[size - 1 - i];
		arr[size - 1 - i] = temp;
	}
}

5、四舍五入(加减0.5)

自己思路:取整后与原数做差再与0.5比较。(对于负数而言这种方法就需要改变符号进行处理,较麻烦)

int round(double x)
{
	if (x >= 0)
	{
		return (int)(x + 0.5);
	}
	else
	{
		return (int)(x - 0.5);
	}
}

大于0加0.5取整,小于0减0.5取整

猜你喜欢

转载自blog.csdn.net/qq_20386411/article/details/88962558