PTA程序填空题:使用指针数组输出字符串

以下程序可以逐行输出由language数组元素所指向的5个字符串。
#include
int main(void)
{
const char *language[] = {"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++" } ;
const char 【 填空 】;
int k;

for(k = 0 ; k < 5 ; k++) {
【 填空 】;
printf ("%s\n", *q);
}

return 0;

}

第一空:

**q

第二空

q = &language[k]

完整代码:

#include<stdio.h>
int main(void)
{
const char *language[] = {"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++" } ;
const char **q; // 双重指针,指向字符指针的指针
int k;
int k;

for(k = 0 ; k < 5 ; k++) {
q = &language[k];// 取地址符&获取当前语言字符串的地址赋给q
printf ("%s\n", *q);// 用间接寻址符获取q所指向的字符串并输出
}

return 0;
}

运行结果:

img

运行结果如下:

img

以下是填空后的程序:

#include<stdio.h>
int main(void)
{
const char *language[] = {"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++" } ;
const char **q; // 填空处
int k;

for(k = 0 ; k < 5 ; k++) {
    q = &language[k]; // 填空处
    printf ("%s\n", *q);
}

return 0;
}

解释:

在这个程序中,language数组包含了5个指向字符串常量的指针。要输出这些字符串,我们需要使用指针数组和指针的指针来完成。

首先,在第一个填空处,我们需要定义一个指向指针的指针q。这是因为我们需要让q指向每个字符串的指针,而每个字符串的指针又存储在language数组中。

然后,在for循环中,我们使用q = &language[k]语句将q指向当前字符串的指针。注意,&language[k]返回的是指向指针的指针,所以q的类型应该是const char **。

最后,我们使用printf("%s\n", q)语句输出字符串。由于q是一个指向字符串的指针,因此我们可以直接将它传递给printf函数,并使用%s格式指定符打印字符串。

第一个空 **q=language;
第二个空 q+=k;
估计主要考指针的运算

它定义了一个指向字符串的指针数组 language,并且使用一个循环来逐行输出数组中的字符串。要使程序能够正常运行,需要在第 6 行填写 **q,在第 10 行填写 q = &language [k];。这样,q 指针将指向 language 数组中的每个元素,并且在循环中逐个输出。

完整的程序如下所示:


#include<stdio.h>
int main(void)
{
    const char *language[] = {"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++" } ;
    const char **q;
    int k;

    for(k = 0 ; k < 5 ; k++) {
        q = &language [k];
        printf ("%s\n", *q);
    }

    return 0;
}

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这道程序填空题需要我们使用指针数组来输出字符串。下面是具体的解答:

#include<stdio.h>
int main(void){
    const char *language[] = {"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++" } ;
    const char **q;   //使用指向指针的指针
    int k;
    for(k = 0 ; k < 5 ; k++) {
        q = &language[k];  //将指针数组元素的地址赋值给指向指针的指针
        printf ("%s\n", *q);  //输出指向指针的指针所指向的字符串
    }
    return 0;
}

在程序中,我们定义了一个指向指针的指针 q,用于存储指针数组元素的地址。在循环中,我们将指针数组元素的地址赋值给 q,然后使用 *q 来输出指向指针的指针所指向的字符串。这样就可以逐行输出指针数组中存储的字符串了。

输出结果如下:

BASIC
FORTRAN
PROLOG
JAVA
C++

如果我的回答解决了您的问题,请采纳!

引用chatGPT作答,
第一空: **q
第二空:q = &language[k]

在上面的程序中,应该在第6行中填写 const char **q; 以声明一个指向指针的指针变量,这是因为 language 数组的每个元素都是一个指向 char 类型的指针,因此我们需要一个指向这些指针的指针变量来访问它们。

在第10行中,应该填写 q = &language[k]; 以将 q 指向当前 language 数组元素的地址。然后在第11行中,我们使用 *q 访问当前 language 数组元素指向的字符串,并将其作为参数传递给 printf 函数以打印它。

填空代码如下:

c
const char *language[] = {"BASIC", "FORTRAN", "PROLOG", "JAVA", "C++" } ;  
const char *q;
int k;
for(k = 0 ; k < 5 ; k++) {
     q = language[k];
     printf ("%s\n", *q);
}  
return 0;  
}

解释:

  1. const char *q; 定义一个字符指针q。
  2. q = language[k]; 在循环体内,将q指向language数组的当前元素。
  3. printf ("%s\n", *q); 打印q指向的字符串。
  4. 下一轮循环,q指向下一个数组元素,继续打印。
  5. 循环完毕,打印language数组所有5个元素所指字符串。
    所以,该程序使用一个指针q,指向language数组的各元素,逐行打印这5个字符串。填空语句为定义指针和在循环体内指向数组元素这两个语句。
    此题考察指针与数组的应用,以及通过指针访问数组元素的方法。指针是数组使用中很常用的手段,其本质是通过指针间接访问数组数据。理解了这一点,这类填空题目就很好解答。
    除此之外,这也是一个典型的使用指针输出字符串的案例。通过移动指针,依次访问各字符串并输出,这是使用指针处理数组里字符串(或其他数据)的一般模式。掌握了这一模式,对学习处理指针和字符串都很有帮助。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    答案:

    指针数组的定义:const char *language[] = {"C", "C++", "Java", "Python", "JavaScript"};

    逐行输出所指向的字符串:

    for(int i = 0; i < 5; i++){
        printf("%s\n", language[i]);
    }
    

    解释:首先,我们需要定义一个指针数组,其中每个指针指向一个字符串常量,用const char 来修饰,表示这些字符串不能被修改。所以,指针数组的定义为const char language[] = {"C", "C++", "Java", "Python", "JavaScript"};。

    然后,我们需要逐行输出这些字符串,只需要使用for循环遍历指针数组,每次输出对应指针所指向的字符串即可,即printf("%s\n", language[i])。其中,%s表示输出的是一个字符串,\n表示换行,i表示循环变量,从0到4依次输出。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^