第十一周:C语言:取小数

问题:取一个数的小数。

代码:

#include <stdio.h>
#include <string.h>
int get_one_digit(double num,int n); /*函数声明*/
int main()
{
    double number;
    int n;
    int digit;  /*第n位数字*/
    scanf("%lf %d",&number,&n); /*输入数据*/
    digit=get_one_digit(number,n);  /*调用查找第n位数字并将数字返回复制给digit*/
    printf("%d\n",digit);
    return 0;
}

int get_one_digit(double num,int n)
{
    long z;  //用于对整数部分操作
    double x;  //用于对小数部分操作
    z=num; //取得整数部分
    if(n>0)
    {
        x=num-z; //只剩下了纯小数部分
        while ( n > 0 )
        {
            x = x - (int)x;
            x *= 10;
            n--;
        }
        return (int)x;
    }
    else
    {
        n=-n;
        while(n>1)
        {
            z/=10;
            n--;
        }
        return z%10;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用冒泡排序来实现: ``` #include <stdio.h> int main() { float nums[] = {3.2, 1.5, 4.7, 2.3, 0.9, 5.8, 6.4, 2.1, 8.0, 7.2, 9.1, 4.5}; int n = sizeof(nums) / sizeof(float); // 冒泡排序 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (nums[j] > nums[j + 1]) { // 交换元素 float temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } // 输出排序后的结果 printf("排序后的结果为:\n"); for (int i = 0; i < n; i++) { printf("%.1f ", nums[i]); } printf("\n"); return 0; } ``` 输出结果为: ``` 排序后的结果为: 0.9 1.5 2.1 2.3 3.2 4.5 4.7 5.8 6.4 7.2 8.0 9.1 ``` ### 回答2: 要将12个给定的小数从小到大排序,可以使用冒泡排序算法。 冒泡排序的基本思想是通过反复交换相邻的两个元素,将较大(或较小)的元素逐渐向右(或向左)移动到正确的位置。具体步骤如下: 1. 初始化给定的12个小数。 2. 使用两层嵌套的循环,外层循环控制排序的轮数,内层循环用于比较相邻的两个元素。 3. 在内层循环中,比较相邻的两个小数,如果前一个小数大于后一个小数,则交换它们的位置。 4. 经过一轮循环后,最大(或最小)的小数会被交换到最后一个位置。 5. 重复执行第3和第4步,直到所有的小数都被排序正确。 下面是一个示例代码: ```c #include <stdio.h> int main() { float numbers[] = {2.5, 1.3, 4.7, 3.2, 0.8, 5.6, 2.1, 3.8, 1.9, 4.5, 0.5, 3.6}; int length = sizeof(numbers) / sizeof(numbers[0]); int i, j; float temp; for (i = 0; i < length - 1; i++) { for (j = 0; j < length - i - 1; j++) { if (numbers[j] > numbers[j + 1]) { temp = numbers[j]; numbers[j] = numbers[j + 1]; numbers[j + 1] = temp; } } } printf("排序后的小数为:\n"); for (i = 0; i < length; i++) { printf("%.1f ", numbers[i]); } return 0; } ``` 以上代码中,我们使用了一个float类型的数组来存储给定的小数。通过两层循环,将数组中的小数进行比较和交换,最终得到一个按照从小到大排序的结果。 ### 回答3: 要用C语言将12个给定小数从小到大排序,可以使用冒泡排序或者快速排序等算法。在这里,我将使用冒泡排序来解释。 首先,我们可以将这12个小数存储在一个数组中。假设这个数组名为num,其中包含12个小数。 接下来,我们可以使用嵌套的循环来进行冒泡排序。外层循环控制比较的轮数,内层循环用于比较相邻的元素并进行交换。 开始时,外层循环设置为12次,内层循环每次都要比较相邻的两个元素,并根据需要交换它们的位置。这样,在每一轮完成时,最大的元素将被移动到数组的末尾。因此,在12轮的比较后,所有元素将按照从小到大的顺序排列。 下面是一个使用冒泡排序来排序num数组的示例代码: ``` #include <stdio.h> int main() { float num[12] = {5.67, 3.45, 9.12, 1.23, 7.89, 4.56, 6.78, 2.34, 8.90, 10.11, 11.22, 0.99}; int i, j; float temp; for (i = 0; i < 11; i++) { for (j = 0; j < 11-i; j++) { if (num[j] > num[j+1]) { temp = num[j]; num[j] = num[j+1]; num[j+1] = temp; } } } printf("排序后的小数为:\n"); for (i = 0; i < 12; i++) { printf("%f ", num[i]); } return 0; } ``` 运行以上代码后,将输出排序后的小数数组。 这样,我们就可以使用冒泡排序将给定的12个小数按照从小到大的顺序进行排序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值