鱼C论坛

 找回密码
 立即注册
查看: 619|回复: 11

[已解决]代码运行不出来。。。

[复制链接]
发表于 2024-7-15 19:57:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面这段代码运行不出来,我盯了俩小时了,编译显示没问题,可为啥运行不出来呢?
#include<stdio.h>
#include<math.h>
int main()
{
        long long  i,s; 
        long long wheats;
        i = 1;
        s = 0;
while (i<=64);
{
        wheats = pow(2, i-1);
    s = s + wheats;
    i = i + 1;
}
 

printf("舍罕王应该给达依尔%d粒麦子!",s);

}
最佳答案
2024-7-15 19:57:27
哈哈,看起来你遇到了一点小问题。这段代码运行不出来的原因是因为`while (i)`这个循环条件后面缺少一个比较操作符和阈值。好消息是,这个问题很容易修复!我们一起来看看如何修复它吧。

首先呢,你的`while`循环条件没有结束。通常我们需要指定一个条件来控制循环,比如`while (i < 64)`,这样当`i`达到64时循环就会停止。

其次,你的`#include`语句也有点问题。应该包括标准库,比如`<stdio.h>`来进行输入输出操作。

好了,我给你改一下这段代码,让它可以运行:
#include <stdio.h>

int main()
{
    long long i, s;
    long long wheats;
    
    i = 1;
    s = 0;

    while (i <= 64) // 假设我们想要重复64次
    {
        wheats = 1LL << (i - 1); // 使用位移运算符计算2的i-1次方
        s += wheats; // 累加麦粒数
        printf("第%lld个棋盘格上有%lld粒麦子,总共有%lld粒麦子。\n", i, wheats, s);
        i++;
    }

    return 0;
}

解释一下:
1. `#include <stdio.h>` 是为了使用 `printf` 函数。
2. `while (i <= 64)` 是循环条件,表示从第1个到第64个棋盘格。
3. `wheats = 1LL << (i - 1);` 使用位移运算符计算第`i`个棋盘格上的麦粒数。
4. `s += wheats;` 累加总麦粒数。
5. `printf`函数用于输出每个棋盘格上的麦粒数及累积总和。

如果你对具体某个功能有更多疑问或者需要进一步优化代码,请告诉我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-15 19:57:27 | 显示全部楼层    本楼为最佳答案   
哈哈,看起来你遇到了一点小问题。这段代码运行不出来的原因是因为`while (i)`这个循环条件后面缺少一个比较操作符和阈值。好消息是,这个问题很容易修复!我们一起来看看如何修复它吧。

首先呢,你的`while`循环条件没有结束。通常我们需要指定一个条件来控制循环,比如`while (i < 64)`,这样当`i`达到64时循环就会停止。

其次,你的`#include`语句也有点问题。应该包括标准库,比如`<stdio.h>`来进行输入输出操作。

好了,我给你改一下这段代码,让它可以运行:
#include <stdio.h>

int main()
{
    long long i, s;
    long long wheats;
    
    i = 1;
    s = 0;

    while (i <= 64) // 假设我们想要重复64次
    {
        wheats = 1LL << (i - 1); // 使用位移运算符计算2的i-1次方
        s += wheats; // 累加麦粒数
        printf("第%lld个棋盘格上有%lld粒麦子,总共有%lld粒麦子。\n", i, wheats, s);
        i++;
    }

    return 0;
}

解释一下:
1. `#include <stdio.h>` 是为了使用 `printf` 函数。
2. `while (i <= 64)` 是循环条件,表示从第1个到第64个棋盘格。
3. `wheats = 1LL << (i - 1);` 使用位移运算符计算第`i`个棋盘格上的麦粒数。
4. `s += wheats;` 累加总麦粒数。
5. `printf`函数用于输出每个棋盘格上的麦粒数及累积总和。

如果你对具体某个功能有更多疑问或者需要进一步优化代码,请告诉我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-15 22:53:56 | 显示全部楼层
问题似乎仍未解决,FishC的答案和你的源代码没有逻辑上的改动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 05:59:14 | 显示全部楼层
歌者文明清理员 发表于 2024-7-15 22:53
问题似乎仍未解决,FishC的答案和你的源代码没有逻辑上的改动

源代码如果只用循环可能做不出来,我再问问FishC
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 06:00:13 | 显示全部楼层
FishC 发表于 2024-7-15 19:57
哈哈,看起来你遇到了一点小问题。这段代码运行不出来的原因是因为`while (i)`这个循环条件后面缺少一个比 ...

不用位移方面的知识,只用分支和循环,如何实现程序?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 06:02:27 | 显示全部楼层
三体人的智子 发表于 2024-07-16 06:00
不用位移方面的知识,只用分支和循环,如何实现程序?


你提到了一个很有趣的问题,用分支和循环来模拟位移操作。实际上,在计算机中,位移操作(比如左移、右移)通常是通过循环和分支来模拟的。这里有一个例子,假设我们想要实现一个左移操作,我们可以使用循环和位运算来模拟。

例如,如果我们想要模拟一个8位整数的左移操作,我们可以使用以下的C++代码:

#include <iostream>

int leftShift(int num, int shift) {
    int result = 0;
    for (int i = 0; i < shift; ++i) {
        result = (result << 1) | (num & 1);
        num >>= 1;
    }
    return result;
}

int main() {
    int num = 15;  // 二进制表示:0000 1111
    int shift = 2;
    std::cout << "The result of left shift is: " << leftShift(num, shift) << std::endl;
    return 0;
}
这个代码中,我们创建了一个`leftShift`函数,该函数接收一个整数`num`和一个位移量`shift`,并返回`num`左移`shift`位的结果。

在函数内部,我们创建了一个循环,该循环运行`shift`次。在每次循环中,我们都把`result`左移一位,并把`num`的最低位添加到`result`的最右边。然后,我们把`num`右移一位,以便在下一次循环中处理`num`的下一个最低位。

这个代码示例展示了如何使用循环和位运算来模拟位移操作。虽然这个代码使用了位移操作(`<<`和`>>`),但它是通过循环和位运算来模拟的,而不是直接使用位移指令。

需要注意的是,这个代码只适用于有符号整数,并且假设整数的大小是固定的(在这个例子中是8位)。对于更大或更小的整数,或者对于无符号整数,你可能需要修改这个代码。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 06:08:19 | 显示全部楼层
FishC 发表于 2024-7-16 06:02
你提到了一个很有趣的问题,用分支和循环来模拟位移操作。实际上,在计算机中,位移操作(比如左移、右 ...

不创建函数,也不使用位移操作,只用分支和循环的知识,如何完成程序?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 06:09:32 | 显示全部楼层
三体人的智子 发表于 2024-07-16 06:08
不创建函数,也不使用位移操作,只用分支和循环的知识 ...


了解了你的要求,不用位移操作,只用分支和循环来完成程序。我们可以通过乘以2的方式来模拟左移操作,因为左移一位相当于乘以2。

让我们考虑一个常见的例子:计算某个棋盘上的麦粒数目。这里是一个简单的程序,用分支和循环来实现这个计算,不使用位移操作:
#include <iostream>

int main()
{
    long long i, s, wheats;
    i = 1; // 起始位置
    s = 0; // 总数
    wheats = 1; // 第一个格子上的小麦数量

    while (i <= 64)
    {
        s += wheats; // 将当前格子的小麦数加到总数中
        if (i == 64) break; // 如果已经达到64个格子,停止循环
        wheats *= 2; // 下一格小麦数量是当前的2倍
        i++;
    }

    std::cout << "棋盘上有" << s << "粒麦子。" << std::endl;

    return 0;
}

解释一下这段代码:
1. `i`是格子的索引,从1开始。
2. `s`是累计的小麦总数,最初为0。
3. `wheats`是当前格子的小麦数,第一格是1粒。
4. 使用`while`循环遍历每个格子,每次循环中:
   - 将当前格子的小麦数加到总数`s`中。
   - 如果已经到了第64格,跳出循环。
   - 将当前格子的麦粒数乘以2以得到下一个格子的麦粒数。
   - 增加格子索引`i`。

通过这个逻辑,你不需要使用位移操作,也能成功地实现我们的目标。希望这段代码能够帮助你解决问题!如果还有其他问题,请随时问,我会尽力帮忙解答。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2024-7-16 06:48
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 21:06:35 | 显示全部楼层
三体人的智子 发表于 2024-7-16 06:00
不用位移方面的知识,只用分支和循环,如何实现程序?

实际上这是做不到的,cout<<就是位移
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 21:41:20 | 显示全部楼层
歌者文明清理员 发表于 2024-7-16 21:06
实际上这是做不到的,cout

啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 21:41:51 | 显示全部楼层
歌者文明清理员 发表于 2024-7-16 21:06
实际上这是做不到的,cout

我一以为cout<<就是个输出函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 22:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表