编程语言基础 C语言

以下の問に答えよ。
[1] 次のC言語プログラムの標準出力への表示結果を示せ。

#include <stdio.h>
int main(void)
{
    int x1 = 4321, x2 = 0xf0f0;
    printf(" %x %d %d %x \n", x1, x1+x2, x1&x2, x1>>4);
    return 0;
}

[2] 整数値を要素とする配列変数の要素を逆順に並べるプログラムをC言語で作成した。関数fには整数型配列変数aと整数型変数nを引数として与える。下線部を適切に埋めよ。

#include <stdio.h>
int f(int a[], int n)
{
    int (1) ;
    while( i < n/2 ){
        b = a[i];
        a[i] = (2) ;
        (2) = b;
        (3) ;
    }
    return 0;
}
int main(void)
{
    int n = 5,i;
    int a[] = {1,2,3,4,5};
    f(a,n);
    for( i=0; i<n; i++ ) printf("%d",a[i]);
    return 0;
}

標準出力結果例:

54321

[3] 文字列変数の長さを計算するプログラムを、再帰的プログラミングを用いてC言語で作成した。関数fには文字型配列変数aと整数型変数nを引数として与える。下線部を適切に埋めよ。

#include <stdio.h>
int f(char *a, int n)
{
    if( *a == (1) ){
        return (2) ;
    }else{
        return f( (3) ) ;
    }
}
int main(void)
{
    int n = 0;
    char a[] = "This is a pen.";
    printf("%d", f(a,n));
    return 0;
}

標準出力結果例:

14

解答:

[1]

出力文字列の先頭には空白が含まれる。

[2]

[3]


题目1考察了C语言中不同格式控制符的输出以及位运算机制,将十进制转换为十六进制、进行按位与运算以及右移运算是得出对应输出结果的关键,同时要注意输出字符串中预留的空格。题目2考察了数组元素的遍历以及首尾对称位置元素的交换,必须在循环前定义好循环控制变量与交换所需的中间暂存变量。题目3利用递归计算字符串长度,基准条件是遇到字符串结束的空字符时直接返回当前的长度计数,否则将字符指针向后移动一位并使长度计数器自增,将更新后的参数传入下一次递归调用中。