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;
}