📌  相关文章
📜  教资会网络 | UGC NET CS 2014 年 12 月 – II |问题 42(1)

📅  最后修改于: 2023-12-03 15:39:54.030000             🧑  作者: Mango

介绍UGC NET CS 2014年12月 - II问题42

UGC NET是印度国家资格测试,旨在评估大学和学院教授的资格。 UGC NET CS 2014年12月-II试卷是计算机科学的一部分。问题42是其中的一个问题。

问题描述

给定以下C程序,输出结果是什么?

#include <stdio.h>

int main() {
    char str[] = "Hello World!";
    char *p1, *p2;
    p1 = str;
    p2 = str + sizeof(str) - 2;
    while(p1 < p2) {
        *p1 ^= *p2 ^= *p1 ^= *p2;
        p1++;
        p2--;
    }
    printf("%s\n", str);
    return 0;
}

(A) None of these
(B) dlroW olleH
(C) Hello World!
(D) !dlroW olleH

问题分析

该程序使用异或交换两个变量的值。 对于字符串,可以通过这种方法颠倒所有字符的位置。该程序使用两个指针p1和p2来分别指向字符串str的开头和结尾。

p1 = str;
p2 = str + sizeof(str) - 2;

在while循环中,它颠倒字符串中p1和p2位置上的字符,非常巧妙地使用了异或运算符(^)来交换两个字符的值。

*p1 ^= *p2 ^= *p1 ^= *p2;

每一次循环,p1和p2都向字符串的中心移动。 当p1 == p2或p1 > p2时停止while循环。 然后,该程序使用printf函数打印颠倒后的字符串。

问题答案

由于该程序颠倒了字符串的顺序,因此输出结果为

(D) !dlroW olleH

参考文献
  • https://www.geeksforgeeks.org/write-a-c-program-to-reverse-an-array-using-pointer/
  • https://www.tutorialspoint.com/ugc_net/ugc_net_computer_science_2014_december_ii/ugc_net_computer_science_2014_december_ii_mcq_42.htm