鱼C论坛

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

[已解决]28节课后题求助大神点拨

[复制链接]
发表于 2023-12-1 14:55:19 | 显示全部楼层 |阅读模式

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

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

x
请问我这样编写把fish横向打印,哪里不对,如何修改?想用指针但还是懵懵的

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int i,j,k;
  5.     char str[4][7]={{
  6.         "########",
  7.         "##      ",
  8.         "##      ",
  9.         "######  ",
  10.         "##      ",
  11.         "##      ",
  12.         "##      "
  13.     },
  14.     {
  15.         "####",
  16.         " ## ",
  17.         " ## ",
  18.         " ## ",
  19.         " ## ",
  20.         " ## ",
  21.         "####"
  22.     },
  23.     {
  24.         " ###### ",
  25.         "##    ##",
  26.         "##      ",
  27.         " ###### ",
  28.         "      ##",
  29.         "##    ##",
  30.         " ###### "
  31.     },
  32.     {
  33.         "##    ##",
  34.         "##    ##",
  35.         "##    ##",
  36.         "########",
  37.         "##    ##",
  38.         "##    ##",
  39.         "##    ##"
  40.     }};
  41.         
  42.     char *p[4][7]=&str;
  43.     for (i=0;i<7;i++)
  44.     {
  45.         for (j=0;j<4;j++)
  46.         {
  47.             printf("%s",*p[j][i]);
  48.         }
  49.     }

  50.    
  51.    

  52.    
  53.     return 0;
  54. }
复制代码
最佳答案
2023-12-1 15:36:24
疯狗马德森 发表于 2023-12-01 15:35
如果把str定义成一个二维数组,再定义一个指针数组指 ...

如果您想用指针数组来输出打印"FISH"这四个字母,可以按照以下方式编写代码:
  1. #include <stdio.h>
  2. int main() {
  3.     char str[4][7][9] = {
  4.         {
  5.             "########",
  6.             "##      ",
  7.             "##      ",
  8.             "######  ",
  9.             "##      ",
  10.             "##      ",
  11.             "##      "
  12.         },
  13.         {
  14.             "####",
  15.             " ## ",
  16.             " ## ",
  17.             " ## ",
  18.             " ## ",
  19.             " ## ",
  20.             "####"
  21.         },
  22.         {
  23.             " ###### ",
  24.             "##    ##",
  25.             "##      ",
  26.             " ###### ",
  27.             "      ##",
  28.             "##    ##",
  29.             " ###### "
  30.         },
  31.         {
  32.             "##    ##",
  33.             "##    ##",
  34.             "##    ##",
  35.             "########",
  36.             "##    ##",
  37.             "##    ##",
  38.             "##    ##"
  39.         }
  40.     };
  41.     char *str_ptr[4];
  42.     for (int i = 0; i < 4; i++) {
  43.         str_ptr[i] = str[i][0];
  44.     }
  45.     for (int i = 0; i < 7; i++) {
  46.         for (int j = 0; j < 4; j++) {
  47.             printf("%s ", str_ptr[j]);
  48.             str_ptr[j] += 9;  // 指针偏移9个字符的长度,指向下一行
  49.         }
  50.         printf("\n");
  51.     }
  52.     return 0;
  53. }
复制代码

在这段代码中,我们首先定义了一个二维字符数组`str`,用来存储"FISH"这四个字母的图案。然后我们定义了一个指针数组`str_ptr`,用来存储指向`str`每个字母图案的指针。通过`for`循环将每个字母图案的第一行的地址赋值给`str_ptr`中的元素。

接着,我们使用两个嵌套的`for`循环来遍历打印每行字符。外层循环控制行数,内层循环控制每个字母图案的打印。在内层循环中,我们通过`printf`函数打印每个字母图案的当前行,然后将指针偏移9个字符的长度,以便指向下一行。

这样,就可以使用指针数组按照水平方向打印"FISH"这四个字母的图案了。

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

使用道具 举报

发表于 2023-12-1 14:55:43 | 显示全部楼层
您好,您的代码存在一些问题。首先,`str`应该是一个二维字符数组,而不是一个指向字符数组的指针。其次,您在使用`for`循环打印字符时,只打印了第一行的字符,没有把整个鱼的图案打印出来。

以下是修正后的代码示例:
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int i, j, k;
  5.     char str[4][7][9] = {
  6.         {
  7.             "########",
  8.             "##      ",
  9.             "##      ",
  10.             "######  ",
  11.             "##      ",
  12.             "##      ",
  13.             "##      "
  14.         },
  15.         {
  16.             "####",
  17.             " ## ",
  18.             " ## ",
  19.             " ## ",
  20.             " ## ",
  21.             " ## ",
  22.             "####"
  23.         },
  24.         {
  25.             " ###### ",
  26.             "##    ##",
  27.             "##      ",
  28.             " ###### ",
  29.             "      ##",
  30.             "##    ##",
  31.             " ###### "
  32.         },
  33.         {
  34.             "##    ##",
  35.             "##    ##",
  36.             "##    ##",
  37.             "########",
  38.             "##    ##",
  39.             "##    ##",
  40.             "##    ##"
  41.         }
  42.     };
  43.     for (i = 0; i < 4; i++) {
  44.         for (j = 0; j < 7; j++) {
  45.             printf("%s\n", str[i][j]);
  46.         }
  47.         printf("\n");
  48.     }
  49.     return 0;
  50. }
复制代码

这样修改后,可以将整个鱼的图案打印出来。注意,`str`数组定义为 `char str[4][7][9]`,表示有4种不同的鱼的图案,每种图案有7行9列的字符。外层的两个循环遍历四种鱼的图案,内层的循环打印每一行的字符。

希望对您有帮助!

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

使用道具 举报

 楼主| 发表于 2023-12-1 15:01:53 | 显示全部楼层
FishC_GPT 发表于 2023-12-1 14:55
您好,您的代码存在一些问题。首先,`str`应该是一个二维字符数组,而不是一个指向字符数组的指针。其次, ...

横向打印四个字母fish,应该是这样
  1.     for (i=0;i<7;i++)
  2.     {
  3.         for (j=0;j<4;j++)
  4.         {
  5.             printf("%s  ",str[j][i]);
  6.         }
  7.         printf("\n");
  8.     }
复制代码


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

使用道具 举报

发表于 2023-12-1 15:02:08 | 显示全部楼层
疯狗马德森 发表于 2023-12-01 15:01
横向打印四个字母fish,应该是这样
    for (i=0;i

如果您想横向打印字母"fish",可以尝试以下代码:
  1. ++
  2. #include <iostream>
  3. using namespace std;
  4. int main() {
  5.     char letters[4] = {'f', 'i', 's', 'h'};
  6.    
  7.     for (int i = 0; i < 4; i++) {
  8.         cout << letters[i] << " ";
  9.     }
  10.    
  11.     return 0;
  12. }
复制代码

以上代码定义了一个字符数组 `letters` 存储了四个字母 'f', 'i', 's', 'h'。然后使用循环遍历数组,并在每个字母后面加一个空格输出。这样就实现了将字母 "fish" 横向打印的效果。希望能帮到您!

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

使用道具 举报

 楼主| 发表于 2023-12-1 15:04:32 | 显示全部楼层
FishC_GPT 发表于 2023-12-1 14:55
您好,您的代码存在一些问题。首先,`str`应该是一个二维字符数组,而不是一个指向字符数组的指针。其次, ...

如果把字符串定义成一个二维数组char str[4][7]=。。。,再定义一个指针指向这个字符串数组的话,请问这个如何定义指针?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-1 15:04:48 | 显示全部楼层
疯狗马德森 发表于 2023-12-01 15:04
如果把字符串定义成一个二维数组char str=。。。,再 ...

如果要定义一个指向二维字符数组的指针,您可以使用以下语法:
  1. str[][9] = {    {        "########",        "##      ",        "##      ",        "######  ",        "##      ",        "##      ",        "##      "    },    {        "####",        " ## ",        " ## ",        " ## ",        " ## ",        " ## ",        "####"    },    {        " ###### ",        "##    ##",        "##      ",        " ###### ",        "      ##",        "##    ##",        " ###### "    },    {        "##    ##",        "##    ##",        "##    ##",        "########",        "##    ##",        "##    ##",        "##    ##"    }};char (*p)[9] = str;
复制代码
在这个例子中,`str`是一个二维字符数组,每个字符串的长度是9个字符。`(*p)[9]`表示一个指向长度为9的字符数组的指针。我们将 `str` 赋值给指针 `p`,这样 `p` 就指向了 `str` 数组的首地址。您可以使用指针 `p` 来访问和操作 `str` 数组中的元素。希望对您有帮助!

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

使用道具 举报

 楼主| 发表于 2023-12-1 15:18:09 | 显示全部楼层
FishC_GPT 发表于 2023-12-1 15:04
如果要定义一个指向二维字符数组的指针,您可以使用以下语法:在这个例子中,`str`是一个二维字符数组, ...

如果按照str[][9]和char (*p)[9] = str这样定义的话,请问如何将FISH这四个横向打印出来呢?for语句代码如何编写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-1 15:18:22 | 显示全部楼层
疯狗马德森 发表于 2023-12-01 15:18
如果按照str和char (*p) = str这样定义的话,请问如何 ...

要将"FISH"这四个横向打印出来,您可以使用如下的for循环代码:
  1. for (int i = 0; i < 4; i++) {
  2.     for (int j = 0; j < 7; j++) {
  3.         printf("%c", *(p[i] + j));
  4.     }
  5.     printf("\n");
  6. }
复制代码
在这段代码中,外层的for循环用于遍历行,内层的for循环用于遍历列。通过指针 `p` 加上索引 `i` 和 `j` 的偏移,可以访问到 `str` 数组中相应位置的字符。使用`printf`函数打印字符时,用`%c`作为格式控制符。

这样就能够将鱼的每一行横向打印出来。希望对您有帮助!

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

使用道具 举报

 楼主| 发表于 2023-12-1 15:24:12 | 显示全部楼层
FishC_GPT 发表于 2023-12-1 15:18
要将"FISH"这四个横向打印出来,您可以使用如下的for循环代码:

这样不对。我想要输出
  1. ######## ####  ######  ##    ##
  2. ##        ##  ##    ## ##    ##
  3. ##        ##  ##       ##    ##
  4. ######    ##   ######  ########
  5. ##        ##        ## ##    ##
  6. ##        ##  ##    ## ##    ##
  7. ##       ####  ######  ##    ##
复制代码

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

使用道具 举报

发表于 2023-12-1 15:24:39 | 显示全部楼层
疯狗马德森 发表于 2023-12-01 15:24
这样不对。我想要输出######## ####  ######  ##    # ...

非常抱歉,我之前的回答有误。如果您想要将`FISH`这四个横向打印出来,您可以使用如下代码:#include <stdio.h>int main() {    char str[4][7][9] = {        {            "########",            "##      ",            "##      ",            "######  ",            "##      ",            "##      ",            "##      "        },        {            "####",            " ## ",            " ## ",            " ## ",            " ## ",            " ## ",            "####"        },        {            " ###### ",            "##    ##",            "##      ",            " ###### ",            "      ##",            "##    ##",            " ###### "        },        {            "##    ##",            "##    ##",            "##    ##",            "########",            "##    ##",            "##    ##",            "##    ##"        }    };    for (int i = 0; i < 7; i++) {        for (int j = 0; j < 4; j++) {            for (int k = 0; k < 9; k++) {                printf("%c", str[j][k]);            }            printf(" ");        }        printf("\n");    }    return 0;}在这段代码中,`str`是一个三维字符数组,其中每个维度的大小分别为 `[4][7][9]`,表示四个鱼的图案,每个鱼有七行九列的字符。外层的两个循环用于遍历行和列,内层的循环用于遍历每个字符。通过访问 `str` 数组的不同维度,可以按照行将鱼的图案打印出来。希望对您有帮助!

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

使用道具 举报

 楼主| 发表于 2023-12-1 15:35:47 | 显示全部楼层
FishC_GPT 发表于 2023-12-1 15:24
非常抱歉,我之前的回答有误。如果您想要将`FISH`这四个横向打印出来,您可以使用如下代码:#include int ...

如果把str定义成一个二维数组,再定义一个指针数组指向这个二维数组,最终用指针数组输出打印“FISH”这四个字母,代码应该如何写呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-1 15:36:24 | 显示全部楼层    本楼为最佳答案   
疯狗马德森 发表于 2023-12-01 15:35
如果把str定义成一个二维数组,再定义一个指针数组指 ...

如果您想用指针数组来输出打印"FISH"这四个字母,可以按照以下方式编写代码:
  1. #include <stdio.h>
  2. int main() {
  3.     char str[4][7][9] = {
  4.         {
  5.             "########",
  6.             "##      ",
  7.             "##      ",
  8.             "######  ",
  9.             "##      ",
  10.             "##      ",
  11.             "##      "
  12.         },
  13.         {
  14.             "####",
  15.             " ## ",
  16.             " ## ",
  17.             " ## ",
  18.             " ## ",
  19.             " ## ",
  20.             "####"
  21.         },
  22.         {
  23.             " ###### ",
  24.             "##    ##",
  25.             "##      ",
  26.             " ###### ",
  27.             "      ##",
  28.             "##    ##",
  29.             " ###### "
  30.         },
  31.         {
  32.             "##    ##",
  33.             "##    ##",
  34.             "##    ##",
  35.             "########",
  36.             "##    ##",
  37.             "##    ##",
  38.             "##    ##"
  39.         }
  40.     };
  41.     char *str_ptr[4];
  42.     for (int i = 0; i < 4; i++) {
  43.         str_ptr[i] = str[i][0];
  44.     }
  45.     for (int i = 0; i < 7; i++) {
  46.         for (int j = 0; j < 4; j++) {
  47.             printf("%s ", str_ptr[j]);
  48.             str_ptr[j] += 9;  // 指针偏移9个字符的长度,指向下一行
  49.         }
  50.         printf("\n");
  51.     }
  52.     return 0;
  53. }
复制代码

在这段代码中,我们首先定义了一个二维字符数组`str`,用来存储"FISH"这四个字母的图案。然后我们定义了一个指针数组`str_ptr`,用来存储指向`str`每个字母图案的指针。通过`for`循环将每个字母图案的第一行的地址赋值给`str_ptr`中的元素。

接着,我们使用两个嵌套的`for`循环来遍历打印每行字符。外层循环控制行数,内层循环控制每个字母图案的打印。在内层循环中,我们通过`printf`函数打印每个字母图案的当前行,然后将指针偏移9个字符的长度,以便指向下一行。

这样,就可以使用指针数组按照水平方向打印"FISH"这四个字母的图案了。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 04:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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