【C ブラッシングの質問】day1

1. 多肢選択問題

1. 正しい出力結果は次のとおりです。

int x=5,y=7;
void swap()
{
int z;
z=x;
x=y;
y=z;
} 
int main()
{
int x=3,y=8;
swap();
printf("%d,%d\n",x, y);
return 0;
}

【答え】:

3,8

[分析] :

テストポイント:

(1) ローカル変数は、変数が定義されている領域でのみ使用されます main 関数内で定義されたローカル変数は、main 関数内でのみ使用できます。

(2) ローカル変数とグローバル変数が同じ名前の場合、ローカル変数が優先されます。

swap() 関数は、グローバル変数の x と y を交換します。つまり、グローバル変数 x=5、y=7 は x=7、y=5 に交換されます。

swap 関数で x と y を出力すると、結果は x=7、y=5 になります。

出力ステートメントでは、ローカル変数が最初に考慮されます。


2. 次の誤った定義ステートメントは () です。

A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};

B: char c2[] = {'\x10', '\xa', '\8'};

C: char c1[] = {'1','2','3','4','5'};

D: int y[5+3]={0, 1, 3, 5, 7, 9};

【答え】:

B

[分析]:

テストポイント:

\ddd: ddd は 1 ~ 3 の 8 進数を表します (必ずしも 3 つの d である必要はなく、1 つまたは 2 つの d の場合もあります)

\xdd:dd は 2 つの 16 進数を表します

B. \8 は \ddd の形式ですが、8 進数には 8 はありません

D.配列名の後の[ ] は、整数定数または整数式である必要があります。


3. test.c ファイルには、ファイル内で定義されている 4 つの変数のうち、ポインタ型の変数は [複数選択] () という記述が含まれています。

#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;

Aa Bb Cc Dd

【答え】:

ACD

[分析]:

テストポイント:defineとtypedefの違い

定義マクロ定義は単なる置き換えです

typedef は型の別名を定義し、その別名は独立した型です

重要な点を理解しましょう: 

int *p;
//
用int这个单类型和表达式“*p”来定义变量p
直接的意思是*p是int类型,因此倒推p是int的指针//

(1) 上記のdefineを直接置き換えると、結果は int *a, b (この * をできるだけ右に書いてください)、*a と b は両方とも int 型、つまり a は int * 型です、 b は int 型です。

(2) 次の typedef の名前変更は、int * 型、int * a、b を再定義することと同じになります。つまり、a と b は両方とも int * 型です。


4. 条件式 (M)?(a++):(a--) が与えられた場合、式 M ( )

A: (M==0) に相当 B: (M==1) に相当 C: (M!=0) に相当 D: (M!=1) に相当

【答え】 :

C

[分析]:

テストポイント: C 言語では、0 は false を意味し、0 以外は true を意味します

まず式 1、つまり M が true かどうかを判断します。M が true の場合は a++、M が false の場合は a--

つまり、M が 0 の場合は a--、M が 0 以外の場合は a++ となり、これはオプション C に対応します。

5. 以下の定義文がある場合、正しい入力文は[複数選択] ( )です。

int b;
char c[10];

A: scanf("%d%s",&b,&c); B: scanf("%d%s",&b,c); C: scanf("%d%s",b,c); D: scanf("%d%s",b,&c);


【答え】:

AB

[分析]:

テストサイト: scanf が必要になるのはいつですか &

住所情報そのものを表現できないものには&を付け、アドレス情報そのものを表現できるものには&を付ける必要はありません。

注: &c と c の 2 つのアドレスはここでは同じであり、プログラムの効果は同じですが、int b の場合は &b でなければなりません。


2. プログラミングに関する質問

1. 1 から最大値までの n 桁を出力します。

 【答え】:

 * @param n int整型 最大位数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
#include<math.h>
int* printNumbers(int n, int* returnSize ) 
{
    //返回元素的个数
    *returnSize=pow(10,n)-1;
    //动态分配空间
    int *arr=(int*)malloc(*returnSize*sizeof(int));
    //赋值
    for(int i=0;i<*returnSize;i++)
    {
        arr[i]=i+1;
    }
    //返回
    return arr;
}

2.日付から日への換算を計算する

【答え】:

#include <stdio.h>

int main() 
{
    int year,month_real,day=0;
    int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    //输入年月日
    scanf("%d %d %d",&year,&month_real,&day);
    int date=day;
    for(int i=0;i<month_real-1;i++)
    {
        date+=month[i];
    }
    //闰年并且超过二月
    if((year%4==0&&year%100!=0)||(year%400==0)&&month_real>2)
    {
        date+=1;
    }
    printf("%d",date);
    return 0;
}

おすすめ

転載: blog.csdn.net/qq_73017178/article/details/132794677