C语言综合应用2(大一上)

例4.一个球从100米高度自由落下, 每次落地后反弹到原高度的一半再落下,求它在第10次落地时共经过了多少米?第10次反弹高度是多少?

问题分析:这是一个物理问题,涉及到自由落体和反弹。我们可以通过模拟的方式来解决这个问题。首先,我们需要计算每次落地时的累计距离,然后计算第10次落地时的距离和反弹高度。

设H为经过的路程,h为反弹高度,则有:

第一次反弹时经过的路程:H=100;

第二次反弹时经过的路程:H=100+h₁*2;

------

第十次反弹时经过的路程:H=100+h₁*2+h₂*2------+h₉*2;

程序:

#include <stdio.h>
int main() 
{
    float H = 100;// 初始高度
	float h=100; //第一次反弹前的高度
    int count = 1; // 落地次数
    while (count < 10) 
	{
        h=h/2;// 计算反弹后的高度
		H=H+2*h;
        count++;
    }
    printf("第10次落地时共经过:%f米\n", H);
    printf("第十次反弹的高度是:%f米\n",h/2.0);
    return 0;
}

输出:第10次落地时共经过:299.609375米,第十次反弹的高度是:0.097656米

注意:循环中得到的只是第九次反弹的高度,所以最后输出时要h/2;

例5.将十进制数 M 转换为八进制数。(无数组的算法)

分析:

首先定义一个整型变量octal_num,用于存储转换后的八进制数。

然后使用for循环进行转换:
   a=M%8;  //使用模运算符(%)计算M的个位数(即a),并存储在变量a中。
   b=M/8;  //计算M除以8的商(即b),并存储在变量b中。
   octal_num=octal_num+a*i;   //将a乘以i(即10的当前位数),然后加到octal_num上。
   i=i*10;  //将i乘以10,以便计算下一位的值。
   M=b;  //将b更新为M。

程序:

#include <stdio.h>
int main() 
{
    int a,b,M;
    int i=1;
    printf("请输入一个十进制数:");
    scanf("%d", &M);
    int octal_num = 0;
    for(b=0;M>0;)
    {
		a=M%8;
		b=M/8;
		octal_num=octal_num+a*i;
		i=i*10;
		M=b;
	}
    printf("转换后的八进制数:%d\n", octal_num);
    return 0;
}

输入:20   输出:16  ; 输入:40  输出:32

如果你需要将一个八进制数转换为十进制数,只需对原代码进行少量修改。

主要修改修改循环内的操作  :    

         a = M % 10;
         b= M / 10;

          i=i*8;

程序:

#include <stdio.h>
int main()
{
    int a,b,M;
    int i=1;
    printf("请输入一个八进制数:");
    scanf("%d", &M);
    int decimal_num = 0;
    for (b = 0; M > 0;)
    {
        a = M % 10;
        b= M / 10;
        decimal_num = decimal_num + a * i;
        i=i*8;
        M=b;
    }
    printf("转换后的十进制数:%d\n", decimal_num);
    return 0;
}

输入:16  输出:20  ; 输入:32  输出:40

例6.有 N 个数在数组 A[N]中, 按从小到大的顺序存放,现有 一个值 KEY,将 KEY 插入 数组A[N] 中,保持升序不变

分析:

这个程序首先定义了一个名为 `insert` 的函数,该函数接受一个整数数组arr、数组长度n和一个要插入的数key。

关于insert函数:

  1. 在函数中,使用两个循环来遍历数组。第一个循环用于查找第一个大于key的元素,第二个循环用于将该元素及其后面的元素向右移动一个位置,以便为key腾出空间。
  2. 如果找到了第一个大于key的元素,则将key插入到该元素的位置。否则,将key插入到数组的末尾。
  3. 最后,使用循环遍历数组并得到结果。

然后,在 `main` 函数中,我们创建了一个示例数组,并调用 `insert` 函数将这个key数插入到数组中。最后,我们打印出修改后的数组,可以看到 KEY 已经被插入并保持升序不变。

程序:

#include <stdio.h>
void insert(int arr[], int n, int key) 
{
    int i, j;
    for (i = 0; i < n; i++) 
	{
        if (arr[i] > key) 
		{
            for (j = n - 1; j >= i; j--) 
			{
                arr[j + 1] = arr[j];
            }
            arr[i] = key;
            break;
        }
    }
    if (i == n) 
	{
        arr[n] = key;
    }
}
int main() 
{	
    int arr[10] = {1, 3, 5, 7, 9};
    int n = 5;
    int key ;
    scanf("%d",&key);
    insert(arr, n, key);
    for (int i = 0; i < n + 1; i++) 
	{
        printf("%d ", arr[i]);
    }
    return 0;
}

输入输出:

  • 17
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梧桐810

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值