题目描述
输入3个整数,输出它们的1次幂、2次幂和3次幂。
输入
输入3整数,用空格隔开。
输出
输出3行,每行3个整数,分别是它们的1次幂、2次幂和3次幂,每个整数占9列,不足9列左对齐。
样例输入 Copy
1 5 100
样例输出 Copy
1 1 1 5 25 125 100 10000 1000000
相关知识
1.输出一个数占n列
在C语言中,如果你想要控制输出时一个数所占的列数,你可以使用printf
函数的格式化输出功能。具体来说,你可以使用%widthd
的格式,其中width
是你想要数字占据的最小列数。如果数字的字符长度小于这个宽度,那么输出将在数字前面填充空格以满足宽度要求。
例如,如果你想要输出一个整数,让它至少占据5列,你可以这样写:
printf("%5d", number);
这里的%5d
表示输出的整数至少占据5列。如果整数number
是3,那么输出将会是:
----3 //这里横线表示空格,其实没有横线
注意,如果整数的字符长度大于指定的列数,实际输出的列数将等于整数的实际长度,不会截断数字。
(1)左对齐
如果你想要左对齐输出,可以在格式字符串中添加-
标志,如下所示:
printf("%-5d", number);
这将使得如果整数number
是3,那么输出将会是:
3
这里的-
标志表示左对齐,即使数字长度小于5,也不会在前面填充空格,而是在数字后面填充空格以达到指定的列数。
(2)居中对齐
在C语言的 printf
函数中,并没有直接的格式化选项来支持整数输出的居中对齐。通常,居中对齐需要手动计算并填充空格。
要实现居中对齐,你可以编写一个函数来计算数字的字符串长度,然后根据所需的宽度计算出应该在前面填充多少空格。以下是一个简单的示例,展示了如何实现一个整数的居中对齐输出:
#include <stdio.h>
#include <string.h>
void printCentered(int number, int width) {
// 将数字转换为字符串
char numStr[50];
sprintf(numStr, "%d", number);
// 计算填充的空格数
int len = strlen(numStr);
int spaces = (width - len) / 2;
// 输出前导空格
for (int i = 0; i < spaces; i++) {
printf(" ");
}
// 输出数字字符串
printf("%s", numStr);
// 如果宽度是奇数,则补充一个空格
if ((width - len) % 2 != 0) {
printf(" ");
}
}
int main() {
int number = 123;
int width = 10;
printCentered(number, width);
return 0;
}
在这个示例中,printCentered
函数接受一个整数 number
和一个指定宽度 width
。首先,它将整数转换为字符串,然后计算所需的空格数来居中对齐。如果指定宽度是奇数,那么在输出数字后还会额外输出一个空格,以确保居中。
请注意,这个函数没有处理负数的情况,如果需要处理负数,你还需要考虑负号 '-' 的长度。
(3)右对齐
在C语言中,右对齐可以通过在printf
函数的格式字符串中添加-
标志来实现。但是,这通常与指定字段宽度一起使用,以便在字段的左侧填充空格,从而将数值向右对齐。
以下是一个示例,展示了如何实现一个整数的右对齐输出:
#include <stdio.h>
int main() {
int number = 123;
int width = 10; // 指定字段宽度为10
// 使用 %-wd 格式说明符,- 表示左对齐,w 表示宽度
printf("%-*d\n", width, number);
// 如果想要在字段前添加0而不是空格,可以使用 %-0wd
printf("%-*d\n", width, number);
return 0;
}
在这个示例中,%-*d
格式说明符用于指定右对齐输出。*
是一个宽度说明符,它告诉printf
函数从后面的参数中获取宽度值。width
变量提供了这个宽度值,即10。这意味着如果number
的字符长度小于10,那么在它的左侧将填充空格,以确保数字右对齐。
如果你想要字段前填充0而不是空格,可以使用%-0wd
格式说明符,其中0
表示使用0来填充。
输出结果将是:
123
00000123
第一个数字前面填充了空格,第二个数字前面填充了0。
2.浮点数精度问题(易与1弄混,仅看加粗标红部分即可)
(1)理解浮点数的表示
浮点数在计算机中的表示通常遵循IEEE 754标准。这意味着浮点数可能不会精确地表示某些小数,特别是那些不能精确表示为二进制分数的十进制数。
(2)使用合适的数据类型:
选择合适的浮点数数据类型(float
或double
)对于控制精度很重要。double
类型的精度通常高于float
。
(3)格式化输出
使用printf
和scanf
时,可以通过格式化字符串指定小数点后的位数,例如%.3f
表示保留三位小数。
(4)四舍五入
可以使用round
函数来四舍五入浮点数到指定的精度。
(5)避免不必要的精度问题
在进行比较之前,考虑将浮点数四舍五入到合适的精度,或者使用一个误差范围(epsilon)来判断两个浮点数是否“相等”。
(6)使用整数类型
如果精度问题是由于浮点数的表示限制造成的,可以考虑使用整数类型来表示某些值,例如货币。
(7)使用库函数
某些库提供了更精确的数学函数,例如<math.h>
中的fabs
、sqrt
等。
(8)避免直接比较浮点数
由于精度问题,直接比较两个浮点数是否相等通常是不可靠的。应该使用一个误差范围来判断它们是否“足够接近”。
下面是一个示例,展示了如何在C语言中处理浮点数的精度问题:
#include <stdio.h>
#include <math.h>
int main() {
double pi = 3.141592653589793;
double roundedPi = round(pi * 1000) / 1000; // 四舍五入到小数点后三位
printf("Pi: %.3f\n", pi);
printf("Rounded Pi: %.3f\n", roundedPi);
// 比较两个浮点数是否相等
double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 0.0001; // 定义一个误差范围
if (fabs(a - b) < epsilon) {
printf("a and b are almost equal.\n");
} else {
printf("a and b are not equal.\n");
}
return 0;
}
在这个示例中,pi
变量存储了圆周率的值,roundedPi
变量存储了四舍五入到小数点后三位的值。在比较a
和b
时,使用了epsilon
来确定它们是否足够接近,从而避免直接比较可能由于精度问题导致的不准确结果。
3.n次幂的实现
(1)一次累计相乘
1次幂 | 2次幂 | 3次幂 | ........ | n次幂 |
a | a*a | a*a*a | ........ | a*a*...*a |
(2)n次方幂
1次幂 | 2次幂 | 3次幂 | ........ | n次幂 |
a | a^2 | a^3 | ........ | a^n |
示例代码
//示例代码1
#include<stdio.h>
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&c); //输入三个整数 ,用空格隔开
printf("%-9d%-9d%-9d\n",a,a*a,a*a*a);//输出1次幂,2次幂,3次幂.整数为右对齐,负数为左对齐,9为占9列
printf("%-9d%-9d%-9d\n",b,b*b,b*b*b);
printf("%-9d%-9d%-9d\n",c,c*c,c*c*c);
return 0;
}
运行结果
转载自CSDN-专业IT技术社区
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_50621473/article/details/142561387