- 譚浩強《C程序設計》(第4版)配套題庫【考研真題精選+章節題庫】
- 圣才電子書
- 6506字
- 2021-06-24 18:09:50
第一部分 考研真題精選
一、選擇題
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。
- 2018歷年考研英語真題名家詳解
- 聊城大學外國語學院357英語翻譯基礎[專業碩士]歷年考研真題及詳解
- 江西師范大學外國語學院716綜合英語歷年考研真題及詳解
- 朱維之《外國文學史(歐美卷)》課后習題詳解(第4版)
- 高成興《國際貿易教程》(第4版)課后習題詳解
- 上海海事大學外國語學院621綜合英語歷年考研真題及詳解
- 鄭永廷《思想政治教育方法論》配套題庫【名校考研真題+章節題庫+模擬試題】
- 2014年國際商務師《國際商務理論與實務》歷年真題與模擬試題詳解
- 劉建明《新聞學概論》配套題庫【名校考研真題+課后習題+章節題庫+模擬試題】
- 寧波大學馬克思主義學院626毛澤東思想和中特理論概論歷年考研真題及詳解
- 2020年南京財經大學812西方經濟學(宏觀經濟學、微觀經濟學)考研模擬試題及詳解
- 碩士學位研究生入學資格考試GCT歷年真題及詳解—英語分冊
- 2020年同等學力申碩《法學學科綜合水平考試》歷年真題與模擬試題詳解
- 鄭君里《信號與系統》(第3版)(下冊)配套題庫【名校考研真題+課后習題+章節題庫+模擬試題】
- 朱維之《外國文學史(歐美卷)》(第5版)筆記和課后習題(含考研真題)詳解