鱼C论坛

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

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

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

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

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

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

int main()
{
    int i,j,k;
    char str[4][7]={{
        "########",
        "##      ",
        "##      ",
        "######  ",
        "##      ",
        "##      ",
        "##      "
    },
    {
        "####",
        " ## ",
        " ## ",
        " ## ",
        " ## ",
        " ## ",
        "####"
    },
    {
        " ###### ",
        "##    ##",
        "##      ",
        " ###### ",
        "      ##",
        "##    ##",
        " ###### "
    },
    {
        "##    ##",
        "##    ##",
        "##    ##",
        "########",
        "##    ##",
        "##    ##",
        "##    ##"
    }};
        
    char *p[4][7]=&str;
    for (i=0;i<7;i++)
    {
        for (j=0;j<4;j++)
        {
            printf("%s",*p[j][i]);
        }
    }

    
    

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

如果您想用指针数组来输出打印"FISH"这四个字母,可以按照以下方式编写代码:
#include <stdio.h>int main() {    char str[4][7][9] = {        {            "########",            "##      ",            "##      ",            "######  ",            "##      ",            "##      ",            "##      "        },        {            "####",            " ## ",            " ## ",            " ## ",            " ## ",            " ## ",            "####"        },        {            " ###### ",            "##    ##",            "##      ",            " ###### ",            "      ##",            "##    ##",            " ###### "        },        {            "##    ##",            "##    ##",            "##    ##",            "########",            "##    ##",            "##    ##",            "##    ##"        }    };    char *str_ptr[4];    for (int i = 0; i < 4; i++) {        str_ptr[i] = str[i][0];    }    for (int i = 0; i < 7; i++) {        for (int j = 0; j < 4; j++) {            printf("%s ", str_ptr[j]);            str_ptr[j] += 9;  // 指针偏移9个字符的长度,指向下一行        }        printf("\n");    }    return 0;}
在这段代码中,我们首先定义了一个二维字符数组`str`,用来存储"FISH"这四个字母的图案。然后我们定义了一个指针数组`str_ptr`,用来存储指向`str`每个字母图案的指针。通过`for`循环将每个字母图案的第一行的地址赋值给`str_ptr`中的元素。

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

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

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

使用道具 举报

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

以下是修正后的代码示例:
#include <stdio.h>int main(){    int i, j, k;    char str[4][7][9] = {        {            "########",            "##      ",            "##      ",            "######  ",            "##      ",            "##      ",            "##      "        },        {            "####",            " ## ",            " ## ",            " ## ",            " ## ",            " ## ",            "####"        },        {            " ###### ",            "##    ##",            "##      ",            " ###### ",            "      ##",            "##    ##",            " ###### "        },        {            "##    ##",            "##    ##",            "##    ##",            "########",            "##    ##",            "##    ##",            "##    ##"        }    };    for (i = 0; i < 4; i++) {        for (j = 0; j < 7; j++) {            printf("%s\n", str[i][j]);        }        printf("\n");    }    return 0;}
这样修改后,可以将整个鱼的图案打印出来。注意,`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,应该是这样
    for (i=0;i<7;i++)
    {
        for (j=0;j<4;j++)
        {
            printf("%s  ",str[j][i]);
        }
        printf("\n");
    }

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

使用道具 举报

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

如果您想横向打印字母"fish",可以尝试以下代码:
++#include <iostream>using namespace std;int main() {    char letters[4] = {'f', 'i', 's', 'h'};        for (int i = 0; i < 4; i++) {        cout << letters[i] << " ";    }        return 0;}
以上代码定义了一个字符数组 `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=。。。,再 ...

如果要定义一个指向二维字符数组的指针,您可以使用以下语法:
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循环代码:
for (int i = 0; i < 4; i++) {    for (int j = 0; j < 7; j++) {        printf("%c", *(p[i] + j));    }    printf("\n");}
在这段代码中,外层的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循环代码:

这样不对。我想要输出
######## ####  ######  ##    ## 
##        ##  ##    ## ##    ## 
##        ##  ##       ##    ## 
######    ##   ######  ######## 
##        ##        ## ##    ## 
##        ##  ##    ## ##    ## 
##       ####  ######  ##    ## 
这样的结果
想知道小甲鱼最近在做啥?请访问 -> 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][i][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"这四个字母,可以按照以下方式编写代码:
#include <stdio.h>int main() {    char str[4][7][9] = {        {            "########",            "##      ",            "##      ",            "######  ",            "##      ",            "##      ",            "##      "        },        {            "####",            " ## ",            " ## ",            " ## ",            " ## ",            " ## ",            "####"        },        {            " ###### ",            "##    ##",            "##      ",            " ###### ",            "      ##",            "##    ##",            " ###### "        },        {            "##    ##",            "##    ##",            "##    ##",            "########",            "##    ##",            "##    ##",            "##    ##"        }    };    char *str_ptr[4];    for (int i = 0; i < 4; i++) {        str_ptr[i] = str[i][0];    }    for (int i = 0; i < 7; i++) {        for (int j = 0; j < 4; j++) {            printf("%s ", str_ptr[j]);            str_ptr[j] += 9;  // 指针偏移9个字符的长度,指向下一行        }        printf("\n");    }    return 0;}
在这段代码中,我们首先定义了一个二维字符数组`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-10-5 05:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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