官术网_书友最值得收藏!

第一部分 考研真題精選

一、選擇題

1以下均是合法變量名的是(  )。[武漢科技大學2019研]

A.#name   total

B.node  value_max

C._var  long

D.stu-code   a+b

【答案】B

【解析】C語言中變量名只能包含數字,字母和下劃線,且只能以字母和下劃線開始。A項含非法字符#,錯誤;C中long為關鍵字,變量不能以關鍵字命名;D中含非法字符-和+。

2以下選項中不屬于C語言類型的是(  )。[武漢科技大學2019研]

A.short int

B.unsigned long int

C.char

D.bool

【答案】D

【解析】C語言中沒有bool型,只有C++才有boolean型,也稱bool。C語言中一般用“0”表示“假”,用“1”表示“真”。

3若有聲明語句:int x; char y[20]; double z; 則正確的輸入語句是(  )。[武漢科技大學2019研]

A.scanf("%d%c%le\n",&x,&y,&z);

B.scanf("%2d%s%lf",&x,&y,&z);

C.scanf("%d%s%lf",&x,y,&z);

D.scanf("%x%s%3.2f",&x,y,&z);

【答案】C

【解析】y為一維數組名,指向數組首元素的地址,因此不需要再使用取地址運算符&,AB錯誤;D中%3.2f表示長度為3,小數為2位,但是小數點也占一位,因此D錯誤,答案選C。

4若a、b和t都為int變量,則下面不能交換變量a和b值的是(  )。[武漢科技大學2019研]

A.t=a; a=b; b=t;

B.a=t; t=b; b=a;

C.t=b; b=a; a=t;

D.a=a+b; b=a-b; a=a-b;

【答案】B

【解析】B中首先把t的值賦值給了a,則a的值已經被取代了,后面執行b=a,則ab的值都等于t的值。

5若有定義:int a=1,b=2; float x=3,w; 則合法的switch語句是(  )。[武漢科技大學2019研]

A.

switch(a)
{
  case 1:w=a/b; break;
  case 2: w=a%b; break;
}

B.

switch(b)
{
  case 1:z=a%b;
  case 2: z=a/b; break;
}

C.

switch(x)
{
  case 2:w=a%b; break;
  case 1:w=a/b; break;
}

D.

switch(a+b);
{
  case 3:
  case 2:w=a%b; break;
}

【答案】A

【解析】B中,變量z未定義;C中x為浮點型,switch后面的表達式不能是浮點型,只能是整型和字符型;D中swith表達式后面不能加分號,答案選A。

6對下述程序段的描述正確的是(  )。[武漢科技大學2019研]

scanf("%d,%d",&a,&b);
if(a>b)
  a=b;b=a;
else
  a++; b++;
printf("a=%d,b=%d",a,b);

A.若輸入4,5則輸出a=5,b=6

B.若輸入5,4則輸出a=4,b=5

C.若輸入5,4則輸出a=5,b=5

D.有語法錯誤,不能通過編譯

【答案】D

【解析】if(表達式)后面如果沒有用花括號括起來,那么if的子語句只包括第一條語句,即在程序中只有a=b是屬于if語句塊的,if和else中間隔了一條語句b=a,編譯無法通過。

7以下正確的描述是(  )。[武漢科技大學2019研]

A.從多層循環嵌套中退出時,只能使用break語句

B.在循環體內使用continue和break語句,作用相同

C.只能在循環體內和switch體內使用break語句

D.continue語句的作用是結束整個循環的執行

【答案】C

【解析】從多層嵌套中退出不是只能使用break語句,也可以使用return或者程序自己執行完,A錯誤;在循環體內continue代表不執行該次循環中的剩余未執行語句,break代表直接跳出本層循環,BD錯誤,答案選C。

8如果有定義:int x=0,s=0; 則下面程序段的執行結果是(  )。[武漢科技大學2019研]

while(!x!= 0)
  s+=x++;
printf(“%d”,s);

A.1

B.0

C.無限循環

D.控制表達式非法,無法編譯

【答案】B

【解析】while后面的表達式中,首先執行!運算符,然后再執行!=運算符,第一次判斷中,x=0則!x!=0滿足條件,進入循環中,執行s+=x++,x++是先運算,再自加,執行完后s=0,x=1,再回到while的判斷條件,判斷為false,跳出循環,輸出s的值為0,答案選B。

9下面各語句中,能正確進行字符串操作的語句是(  )。[武漢科技大學2019研]

A.char a[10]={'A','B','C','D','\0'};

B.char a[10];  a="ABCDE";

C.char *p;  *p="ABCDE";

D.char *s; scanf("%s", s);

【答案】A

【解析】B項中,字符數組的數組名指向數組的首元素地址,初始化后不可再被更改;CD兩項中的字符指針在定義時均沒有進行初始化,對其賦值是非法的,答案選A。

10以下能對數組value進行正確初始化的語句是(  )。[武漢科技大學2019研]

A.int value[2][]={{1,1},{2,2}};

B.int value[][3]={{1,,3},{4,5,6}};

C.int value[2][3]={1,2,3,4,5,6};

D.int value[][3]={{1},{4,6,}};

【答案】C

【解析】二維數組的定義必須指定列數,可以不用指定行數,A錯誤;數組value為int型數組,不能給數組里面的元素賦空值,BD錯誤,答案選C。

11函數fun和實參數組的聲明形式為:void fun(char ch,float x[]); float a[5];

以下對函數的調用語句中,正確的是(  )。[武漢科技大學2019研]

A.fun("a",a[]);

B.t=fun('D',a);

C.fun('65',2.8);

D.fun(32,a[5]);

【答案】B

【解析】調用函數fun需要傳入兩個實參,第一個實參的類型是char字符型,第二個實參的類型是float數組型,只有選項B滿足條件。其中C項'65'本身有語法錯誤,D項在傳遞數組時只需要數組名即可。

12設有定義int a[3][3];和函數調用語句sort(a,3); 則正確的函數聲明是(  )。[武漢科技大學2019研]

A.void sort(int a,n);

B.void sort(int a[][],int n);

C.void sort(int a[][3],int n);

D.void sort(int a[][3],n);

【答案】C

【解析】根據函數調用語句可以知道sort函數有兩個參數,第一個參數的類型是一個二維int型數組,第二個參數是一個int型數據,所以A錯誤;B中因為二維數組一定要指定列數,B錯誤;D中形參n沒有指定數據類型,錯誤;答案選C。

13有函數定義:int func(int *p),x和y是int型變量,則正確的調用是(  )。[武漢科技大學2019研]

A.y=func(x);

B.func(x);

C.func()=x;

D.y=func(&x);

【答案】D

【解析】根據func函數的定義可以知道調用func函數需要傳入一個指針,且該指針的指向類型是int型,只有D傳入的是指向int型數據的指針,答案選D。

14已知書籍結構定義如下,則對結構變量bk的正確賦值是(  )。[武漢科技大學2019研]

struct BOOK
{
  struct
  {
    int year,month,day;
  }publish;
}bk;

A.bk.year=1998;  bk.month=11;  bk.day=11;

B.publish.year=1998;  publish.month=11;  publish.day=11;

C.year=1998;  month=11;  day=11;

D.bk.publish.year=1998;  bk.publish.month=11;  bk.publish.day=11;

【答案】D

【解析】變量bk是結構體BOOK的一個結構體變量,該變量含有一個成員變量publish,publish也是一個結構體變量,該結構變量含三個成員變量,分別是year、month、day,結構體變量中的成員變量不可直接訪問,必須以結構體變量名.成員變量名形式訪問,所以只能通過bk.publish.year形式訪問到最內層的變量并為其賦值,答案選D。

15對于以下定義,能打印出字母h的語句是(  )。[武漢科技大學2019研]

struct person{ char title[20];  int code;};

struct person book[5]={"Physics",17,"Math",18,"English",20,"History",18};

A.printf("%c",book[0].title[1]);

B.printf("%c",book[1].title[4]);

C.printf("%c",book[2].title[7]);

D.printf("%c",book[3].title[6]);

【答案】A

【解析】person是一個自定義結構體類型,該結構體含有兩個成員變量,分別是一個字符數組和一個int數據,BC選項打印出來的是'\0';D選項打印出來的是y,只有A打印出來的是h,答案選A。

16與十進制1100等值的十六進制數是(  )。[華南理工大學2018研]

A.44A

B.44C

C.54A

D.54C

【答案】B

【解析】1100轉換成二進制為0100 0100 1100,因此轉換為十六進制為44C。

17設int a=3;,下列哪一個表達式的值等于0(  )。[華南理工大學2018研]

A.a&&(a>0)

B.!a||a

C.a%=a

D.a>=a

【答案】C

【解析】A中a!=0且a>0所以表達式的值為1;B中||表示或,所以值也為1;D中表達式值也為1;答案選C。

18在C語言中,當函數的返回值缺省時,表示該函數返回值的類型是(  )。[華南理工大學2018研]

A.char

B.float

C.long

D.int

【答案】D

【解析】在C語言中,當函數的返回值缺省時,函數返回值的類型默認為int型。

19十六進制形式輸出整數的格式說明符是(  )。[華南理工大學2018研]

A.%u

B.%ld

C.%x

D.%o

【答案】C

【解析】A表示輸出的是無符號整型;B表示輸出的是有符號長整型;D表示輸出的是八進制。

20若有說明:int *p,m=5,n;,以下正確的程序段是(  )。[華南理工大學2018研]

A.

p=&n;
  scanf("%d",n);

B.

p=&n;
  scanf("%d",*p);

C.

scanf("%d",&n);
  p=n

D.

p=&n;
  *p=n;

【答案】D

【解析】scanf語句中第二個參數應該是變量的地址,AB錯誤;C中p為指針變量,不可以直接把一個int型變量賦值給指針型,C錯誤;答案選D。

21兩次運行下面的程序,如果從鍵盤上分別輸入6和4,則輸出的結果是(  )。[華南理工大學2018研]

void main(void)
{
  int x;
  scanf(“%d”,&x);
  if(x++>5) printf(“%d”,x);
  else printf(“%d\n”,x--);
}

A.7和5

B.6和3

C.7和4

D.6和4

【答案】A

【解析】當輸入6時,判斷x++>5為真,進入if語句塊,此時x=7,輸出7;當輸入4時,進入else語句塊,此時x=5,然后因為--是先運算后自減,所以先輸出5,后x的值為4,答案選A。

22以下敘述中不正確的是(  )。[華南理工大學2018研]

A.在不同的函數中可以使用相同名字的變量

B.函數中的形式參數是局部變量

C.在一個函數內定義的變量只能在本函數范圍內有效

D.在一個函數的復合語句中定義的變量在本函數范圍內有效

【答案】D

【解析】在一個函數的復合語句中定義的變量只在該復合語句中有效。

23設有下列程序

ff( )
{
  int c=9;
  static int a=1, b=4;
  if (b == 4)
    {a+=c; b++;}
  else
    {a+= c; b-- ;}
  printf (“a=%d,b=%d\n”, a, b);
}
main ( )
{ ff( ); ff( ); }

則該程序執行后,顯示的結果為(  )。[華南理工大學2018研]

A.a=10,b=5

a=19,b=5

B.a=10,b=4

a=19,b=5

C.a=10,b=4

a=19,b=4

D.a=10,b=5

a=19,b=4

【答案】D

【解析】第一次調用ff()時,c=9,a=1,b=4,程序進入if語句塊,執行完后a=10,b=5;第二次調用ff(),因為a、b是靜態變量,所以a、b的值不會重新初始化,所以進入else語句塊,執行完后a=19,b=4,答案選D。

24以下數組定義中不正確的是(  )。[華南理工大學2018研]

A.int a[2][3];

B.int b[][3] = {0};

C.int c[100][100] = {0};

D.int d[3][] = {{1}, {1, 2, 3},{1}};

【答案】D

【解析】定義二維數組時一定要指定數組的列數,可以不指定數組的行數,D錯誤。

25若有定義:int *p,*s,c;,且各變量已正確賦值,則非法的賦值表達式是(  )。[華南理工大學2018研]

A.p = s

B.c = *s

C.*s = &p

D.p = &c

【答案】C

【解析】C中p為指針變量,則&p表示的是指針的地址,若要賦值,則左邊變量應該是一個二級指針,而*s代表的是s所指向地址的變量值,這個變量是一個int型,顯然不正確。

26若有以下說明:

int w[3][4]={{0,1},{2,4},{5,8}};

int (*p)[4]=w;

則數值為4的表達式是(  )。[華南理工大學2018研]

A.*w[1]+1

B.p++,*(p+1)

C.w[2][2]

D.p[1][1]

【答案】D

【解析】A中*w[1]表示的的是數值2,則表達式的值為3,錯誤;B中p+1表示指向二位數組第二行的首元素地址,而*(p+1)代表的是第三行首元素值,B錯誤;C中表示的是數值0,答案選D。

27下列函數的功能是(  )。[華南理工大學2018研]

int fun1(char *x)
{
  char *y=x;
  while(* y++);
  return (y-x-1);
}

A.求字符串的長度

B.比較兩個字符串的大小

C.將字符串X復制到字符串Y

D.將字符串X連接到字符串Y后

【答案】A

【解析】while后面的表達式是指針依次遍歷直到碰到\0,此時y指向字符串最后一個元素的后一個位置,但是由于y++,因此y會繼續后移一位,而x指向字符串的頭部,后面的y-x-1顯然是用于計算字符串的長度。

28feof函數用來判斷文件是否結束,如果文件沒有結束,則返回值是(  )。[華南理工大學2018研]

A.-1

B.0

C.1

D.EOF

【答案】B

【解析】此題考查feof函數的定義與作用。

29設有說明:FILE *fp; char *filename ="paper";

對于fp=fopen(filename,"rb+");語句,下面說法正確的是(  )。[華南理工大學2018研]

A.打開名為filename的文件讀寫

B.打開名為paper的文件讀寫

C.打開名為filename的文件只讀

D.打開名為paper的文件只讀

【答案】B

【解析】filename只是一個字符指針變量的名字,不是文件的名字AC錯誤;rb+表示打開二進制文件,且該文件可以讀寫,答案選B。

30若變量a,b,c的取值分別是1,2,3,則表達式“!((b+c)>(a+4))”的值是(  )。[北京航空航天大學2018研]

A.0

B.1

C.2

D.3

【答案】B

【解析】首先b+c等于5,a+4也等于5,因此(b+c)>(a+4)為“假”,即0,對0取非結果為1,因此答案為B。

31以下關于循環語句的敘述中,正確的是(  )。[北京航空航天大學2018研]

A.for循環語句的三個部分必須都要有表達式

B.while循環語句的循環體內至少要有一條語句

C.do…while循環語句的循環體至少會被執行一次

D.continue語句可以退出包含它的整個循環體

【答案】C

【解析】for循環的三個表達式都可以省略,但是之間的分號不能省略,同時要有退出循環的機制,因此A項錯誤;while循環語句的循環體內可以為空,并不違反相應語法,只不過循環什么也不執行,因此B項錯誤;continue語句只是不執行本次循環的剩余語句,而并非退出整個循環,因此D項錯誤,答案選C。

32對于下列代碼:

switch(option)
{
  case 'H':printf("Hello ");
  case 'W':printf("Welcome ");
  case 'B':printf("Bye");
  break;
}

若option的取值為'W',則該代碼段的輸出結果是(  )。[北京航空航天大學2018研]

A.Welcome

B.Welcome Bye

C.Hello Welcome Bye

D.以上結果都不對

【答案】B

【解析】由于option為'W',所以首先應該輸出Welcome,但是由于該語句后面沒有break語句來終止選擇語句switch,因此會繼續執行下面的語句,直到遇上break,所以最后輸出Welcome Bye,答案為B。

33若有以下變量的聲明語句:

int i=1,a[]={0,2,4},*b;

b=&i;

則下列選項中,其結果與表達式“*(a+1)”相等的是(  )。[北京航空航天大學2018研]

A.a[0]

B.*a+i

C.*(a+b)

D.*(a+*b)

【答案】D

【解析】a指向數組的首元素,因此*(a+1)表示取數組第二個元素的值,為2。A項,a[0]=0,不相等;B項,*a為數組第一個元素的值為0,再加上i=1,因此結果為1,不相等;C項,a和b都是指針,相加沒有意義,錯誤;D項,*b的值i的值,即1,*(a+1)表示取數組第二個元素的值為2,相等,因此答案選D。

34若已知有如下宏定義

#define  CANBERRA(x,y)  ((x-y)/(x+y))

則以下表達式中,返回結果值最大的是(  )。[北京航空航天大學2018研]

A.CANBERRA(3.0,2.0);

B.CANBERRA(4.0,1.0);

C.CANBERRA(1.0+2.0,0.0+2.0);

D.CANBERRA(1.0+2.0,1.0+1.0);

【答案】C

【解析】A項中為1.0/5.0,結果為0.2;B項中為3.0/5.0,結果為0.6;C項中的宏替換后為(1.0+2.0-0.0+2.0)/(1.0+2.0+0+2.0)=1.0;D項中宏替換后為(1.0+2.0-1.0+1.0)/(1.0+2.0+1.0+1.0)=0.6,因此最后答案為C。

35對于以下C程序,其正確的是(  )。[北京航空航天大學2018研]

#include<stdio.h>
int main()
{
  char str1[]="Hello";
  char str2[]="Hello";
  if(str1==str2)
    printf("Equal\n");
  else
    printf("Unequal\n");
  return 0;
}

A.Unequal

B.Equal

C.該程序無法通過編譯

D.該程序運行時出錯

【答案】A

【解析】首先該程序符合語法規則,因此不會編譯時產生錯誤,其次字符數組str1和str2都為指針常量,將他們直接用關系運算符進行比較肯定是不相等的,但是它們所指的字符串是相等的,因此最后輸出Unequal。

36已知有以下sample.c程序的定義:

/*sample.c*/
#include<stdio.h>
int main(int argc,char *argv[])
{
  printf("%c",*++argv[2]);
  return 0;
}

將該程序編譯成可執行文件sample后,若在命令行下輸入如下命令:

sample  January  February  March

則該命令正確的輸出是(  )。[北京航空航天大學2018研]

A.J

B.a

C.F

D.e

【答案】D

【解析】根據命令行的輸入可知,四個字符串賦給相應的指針數組,所以argv[2]表示第三個字符串February,再進行++操作,指針指向字符串的第二個字符e,最后進行取值操作,結果為e,答案為D。

37以下程序運行后的輸出結果是(  )。[中央財經大學2018研]

int main()
{
  double d;
  float f;
  long l;
  int i;
  i=f=l=d=20/3;
  printf("%d %ld %.1f %.1f\n",i,l,f,d);
  return 0;
}

A.6 6 6.0 6.0

B.6 6 6.7 6.7

C.6 6 6.0 6.7

D.6 6 6.7 6.0

【答案】C

【解析】賦值運算符是自右向左結合的,所以首先執行d=20/3=6,同時i、l、f也全為6,在進行輸出時,f和d要保留一位小數,所以答案選C。

38若有定義和語句:char s[10];s="abcd";printf("%s\n",s);,則結果是(  )。[中央財經大學2018研]

A.輸出abcd@#$

B.輸出a

C.輸出abcd

D.編譯不通過

【答案】D

【解析】在定義一維字符數組時,s為數組名,指向數組首元素的地址,為地址常量,不可更改,因此語句s="abcd"是非法的,編譯不會通過。

39以下敘述錯誤的是(  )。[中央財經大學2018研]

A.在程序中凡是以“#”開始的語句行都是預處理命令行

B.預處理命令行的最后不能以分號表示結束

C.#include MAX是合法的宏定義命令行

D.C程序對預處理命令行的處理是在程序執行的過程中進行的

【答案】D

【解析】在C語言中,凡是以“#”開頭的行都稱為編譯預處理命令行,為了區別C語句,后面是不加分號的。編譯預處理是在編譯程序對C源程序進行編譯前執行的,而不是在程序執行過程中進行的。

40若有如下宏定義:

#define  N  2

#define  y(n)  ((N+1)*n)

則執行下列語句:z=4*(N+y(5));后的結果是(  )。[中央財經大學2018研]

A.語句有錯誤

B.z值為68

C.z值為60

D.z值為180

【答案】B

【解析】y(5)=15,z=4*(N+y(5))=4*17=68,答案選B。

41有如下說明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

則數值為9的表達式是(  )。[中央財經大學2018研]

A.*p+9

B.*(p+8)

C.*p+=9

D.p+8

【答案】B

【解析】A中*p=1,*p+9=10,A錯誤。C中*p得到的是一個常量,常量不可以被賦值,C錯誤。D中p是地址,p+8仍然表示一個地址。因此B項正確,p+8指向元素9,進行取值得9。

42若有以下說明和語句:

struct worker
{
  int no;
  char *name;
}work,*p=&work;

則以下引用方式不正確的是(  )。[中央財經大學2018研]

A.work.no

B.(*p).no

C.p->no

D.work->no

【答案】D

【解析】結構體變量訪問成員變量的引用方式采用“.”,而結構體指針采用“->”,因此AC是正確的,B項中*p表示結構體變量,因此可以用“.”,所以答案選擇D。

43以下不合法的用戶標識符是(  )。[四川大學2017研]

A.J2_KEY

B.Double

C.4d

D._8_

【答案】C

【解析】標識符只能包含數字,字母,下劃線,且不能以數字開頭,選項C錯誤。

44算法具有五個特性,以下選項中不屬于算法特征性的是(  )。[四川大學2017研]

A.有窮性

B.簡潔性

C.可行性

D.確定性

【答案】B

【解析】一個算法應該具有五個重要特征:有窮性;確切性;輸入性;輸出性;可行性。因此簡潔性并不屬于算法特征。

45已定義如下函數:

fun(int *p)

{return *p;}

該函數的返回值是(  )。[四川大學2017研]

A.不確定的值

B.形參p中存放的值

C.形參p所指存儲單元中的值

D.形參p的地址值

【答案】C

【解析】p是一個指向int型的指針變量,*p表示的是p所指向內存存放的變量,是一個int型,所以return *p表示返回p所指存儲單元中的值,答案選C。

46在C語言中,形參的缺省存儲類型是(  )。[四川大學2017研]

A.auto

B.register

C.static

D.extern

【答案】A

【解析】形參是局部變量,缺省類型為auto型。

47語句:printf("%d",(a=2)&&(b=-2));的輸出結果是(  )。[四川大學2017研]

A.無輸出

B.結果不確定

C.-1

D.1

【答案】D

【解析】a=2為真,b=-2也為真,所以輸出1,答案選D。

主站蜘蛛池模板: 满城县| 崇文区| 莱芜市| 长宁县| 乡宁县| 蒙城县| 郑州市| 古蔺县| 龙门县| 志丹县| 秦皇岛市| 河津市| 安徽省| 东阿县| 牡丹江市| 溆浦县| 盐边县| 息烽县| 南和县| 花莲市| 根河市| 图木舒克市| 长乐市| 清河县| 青河县| 易门县| 梅州市| 安达市| 蓬安县| 五寨县| 来凤县| 民乐县| 中方县| 彩票| 安图县| 平谷区| 新余市| 乐至县| 翼城县| 西峡县| 南投市|