(C语言)1005 整数幂

题目描述

输入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)使用合适的数据类型

选择合适的浮点数数据类型(floatdouble)对于控制精度很重要。double类型的精度通常高于float

(3)格式化输出

 使用printfscanf时,可以通过格式化字符串指定小数点后的位数,例如%.3f表示保留三位小数。

(4)四舍五入

 可以使用round函数来四舍五入浮点数到指定的精度。

(5)避免不必要的精度问题

 在进行比较之前,考虑将浮点数四舍五入到合适的精度,或者使用一个误差范围(epsilon)来判断两个浮点数是否“相等”。

(6)使用整数类型

 如果精度问题是由于浮点数的表示限制造成的,可以考虑使用整数类型来表示某些值,例如货币。

(7)使用库函数

某些库提供了更精确的数学函数,例如<math.h>中的fabssqrt等。

(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变量存储了四舍五入到小数点后三位的值。在比较ab时,使用了epsilon来确定它们是否足够接近,从而避免直接比较可能由于精度问题导致的不准确结果。

3.n次幂的实现

(1)一次累计相乘

1次幂2次幂3次幂........ n次幂
aa*aa*a*a........a*a*...*a

(2)n次方幂

1次幂2次幂3次幂........ n次幂
aa^2a^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;
}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值