關(guān)于概念的問題不做解析,都是死東西,也解析不了
選擇題(94題)
1 、以下關(guān)于源程序與目標(biāo)程序的關(guān)系,不正確的是 ( ) 。
A 、 用機(jī)器語言編寫的源程序就是目標(biāo)程序
B 、 用匯編語言編寫的源程序需要經(jīng)過匯編程序匯編為目標(biāo)程序
C 、 用 C 語言編寫的源程序需要經(jīng)過編譯程序編譯為目標(biāo)程序
D 、 C 語言與 Pascal 等其他高級(jí)語言的編譯器是完全一樣的。
答案:D
?
2 、以下敘述不正確的是 ( )
A 、一個(gè) C 源程序可由一個(gè)或多個(gè)函數(shù)組成
B 、一個(gè) C 源程序必須包含一個(gè) main 函數(shù)
C 、C 程序的基本組成單位是函數(shù)
D 、在 C 程序中, 自定義函數(shù)的定義需要在主函數(shù) main 體內(nèi)定義
答案:D
解析:這是一個(gè)算“1~100的和”的程序,可以看到,自定義函數(shù)sum的定義沒有在main里。
#include<stdio.h>
int sum();
int main()
{
int S = sum();
printf("1~100的和為:%d", S);
return 0;
}
int sum()
{
int a = 1, sum = 0;
for ( a=1;a <= 100; a++)
{
sum += a;
}
return sum;
}
?
3 、“程序存儲(chǔ)思想”的提出者是 ( ) 。
A 、Dennis M. Ritchie B 、Alan Turing
C 、John Von Neumann D 、Ken Thompson
答案:C`
?
4 、 計(jì)算機(jī)直接能識(shí)別的是 ( ) 的代碼。
A 、二進(jìn)制 B 、八進(jìn)制 C 、十進(jìn)制 D 、十六進(jìn)制
答案:A
?
5 、 計(jì)算機(jī)存儲(chǔ)的都是二進(jìn)制信息,信息存儲(chǔ)的最小單位是 ( ) 。
A 、字節(jié) (byte ) B 、二進(jìn)制位 (bit)
C 、字 (word) D 、雙字
答案:B
?
6 、若計(jì)算機(jī)有 32 根地址總線,則其存儲(chǔ)器的最大存儲(chǔ)容量可達(dá) ( ) 。
A 、32MB B 、32GB C 、4GB D 、8GB
答案:C
解析:存儲(chǔ)個(gè)數(shù)=2^地址線個(gè)數(shù)
1根地址總線是2B,32根就是:2^32=(2^10)^3 * 4
=4 * (1024B)^3
=4 * 1024MB
=4G
?
7 、下列數(shù)據(jù)表達(dá)的數(shù)值與十進(jìn)制77 不相等的是 ( ) 。
A 、0x4D B 、0x4B C 、0115 D 、1001101
答案:B
解析:A:這是16進(jìn)制,0x4D=4*16+13=77
B:這是16進(jìn)制,0x4B=4*16+11=75
C:這是8進(jìn)制,0115=1*8^2+1*8+5=77
D:這是2進(jìn)制,1001101=1*2^6+1*2^3+1*2^2+1=77
?
8 、以下選項(xiàng)中不屬于字符常量的是 ( ) 。
A 、/C/ B 、”C” C 、/\x0C/ D 、/\072/
答案:B
解析:“C”用的是雙引號(hào),是字符串
?
9 、在 C 語言中,不同數(shù)據(jù)類型占用內(nèi)存的字節(jié)長(zhǎng)度是 ( ) 。
A 、相同的 B 、由用戶自己定義的 C 、任意的 D 、與編譯環(huán)境有關(guān)的
答案:D
?
10 、C 語言中,“\x5d ”在內(nèi)存中占用的字節(jié)數(shù)是 ( ) 。
A 、2 B 、5 C 、4 D 、 1
答案:A
解析:用" "括起來的說明它是一個(gè)字符串,任何一個(gè)合法字符串都是以'\0'結(jié)尾的,
第一個(gè)字節(jié)是"\x5d"的ASCII碼字符,第二個(gè)字節(jié)是字符串結(jié)束符'\0',
'\0'是系統(tǒng)自動(dòng)加上去的。
?
11、C 語言 short 型數(shù)據(jù)占 2 個(gè)字節(jié),則 unsigned short 型數(shù)據(jù)的取值范圍是 ( ) 。
A 、2~255 B 、0~65535 C 、-256~255 D 、-32768~32767
答案:B
?
12 、下列哪個(gè)選項(xiàng)屬于 C 語言中的合法字符串常量 ( ) 。
A 、how are you B 、”china” C 、/hello/ D 、$abc$
答案:B
解析:”china”用的是雙引號(hào),是字符串
?
13 、以下哪一個(gè)可以作為正確的變量名 ( ) 。
A 、3*X B 、 filename
C 、for D 、 $X
答案:B
解析:1.一個(gè)變量名稱可以由數(shù)字、字母、下劃線、美元符號(hào)($) 組成
2.嚴(yán)格區(qū)分大小寫
3.不能由數(shù)字開頭,不要使用中文漢字命名
4.不能是保留字或者關(guān)鍵字
5.不能有空格
?
14 、有如下輸入語句:scanf(“x=%d,y=%d”,&x,&y);為使變量 x 的值為 10 ,y 的值為 20,
從鍵盤輸入數(shù)據(jù)的正確形式是 ( ) 。
A 、10 20<回車> B 、10 ,20<回車>
C 、x= 10 ,y=20<回車> D 、x= 10 y=20<回車>
答案:C
解析:按照scanf中" "內(nèi)定義的格式輸入
?
15 、如有下列程序,輸入數(shù)據(jù):12345 678<CR>后,程序輸出的結(jié)果是 ( ) 。
#include<stdio.h>
int main( )
{
int x;
double y;
scanf(“%3d%f”,&x,&y);
printf(“%d,%f\n ”,x,y);
return 0;
}
A 、12345 ,678.000000 B 、123 ,45.000000
C 、123 ,不確定的隨機(jī)數(shù) D 、345 ,678.000000
答案:B
解析:"%3d"表示以3位的固定寬度輸出整型數(shù)。
不足3位,在前面補(bǔ)空格; 超過3位,按實(shí)際位數(shù)輸出
"%f"表示單精度浮點(diǎn)型,即float,有效位數(shù)為7位,小數(shù)點(diǎn)后6位
補(bǔ)充:"%lf"表示雙精度浮點(diǎn)型,即double,有效位數(shù)為16位,小數(shù)點(diǎn)后15位。
?
16 、下列關(guān)于外部變量的說法,正確的是 ( ) 。
A 、外部變量是在函數(shù)外定義的變量,其作用域是整個(gè)程序
B 、全局外部變量可以用于多個(gè)模塊,但需用 extern 重新在各模塊中再定義一次
C 、全局外部變量可以用于多個(gè)模塊,extern 只是聲明而不是重新定義
D 、靜態(tài)外部變量只能作用于本模塊,因此它沒有什么實(shí)用價(jià)值
答案:C
?
17 、下列 4 組數(shù)據(jù)類型中,C 語言允許的一組是 ( ) 。
A 、整型、實(shí)型、邏輯型、雙精度型
B 、整型、實(shí)型、字符型、空類型
C 、整型、雙精度型、集合型、指針類型
D 、整型、實(shí)型、復(fù)數(shù)型、結(jié)構(gòu)體類型
答案:B
?
18 、下列哪一個(gè)是合法的實(shí)型常量 ( ) 。
A 、 8E3. 1 B 、E5
C 、234. D 、234
答案:C
解析:實(shí)型常量有兩種形式:
1、小數(shù)形式:小數(shù)形式是由數(shù)字和小數(shù)點(diǎn)組成的一種實(shí)數(shù)表示形式,
例如0.123、.123、123.、0.0等。
小數(shù)形式表示的實(shí)型常量必須要有小數(shù)點(diǎn)。
2、指數(shù)形式:這種形式類似數(shù)學(xué)中的指數(shù)形式。
在數(shù)學(xué)中,一個(gè)可以用冪的形式來表示,如2.3026可以表示為0.23026×10^1。
在C語言中,則以“e”或“E”后跟一個(gè)整數(shù)來表示以“10”為底數(shù)的冪數(shù),
2.3026可以表示為0.23026E1。
字母e或E之前必須有數(shù)字,且e或E后面的指數(shù)必須為整數(shù),
如e3、5e3.6、.e、e等都是非法指數(shù)形式。
在字母e或E的前后以及數(shù)字之間不得插入空格。
?
19 、設(shè)有說明;char z ;int w ;float y;double x ;則表達(dá)式 w-x +z-y 值的數(shù)據(jù) 類型為 ____。
A 、 float B 、char C 、 int D 、 double
答案:D
解析:兩個(gè)不同類型的運(yùn)算,要轉(zhuǎn)化成同類型的,
轉(zhuǎn)換從低到高 char-->float-->short-->int-->double
?
20 、下列運(yùn)算符中,優(yōu)先級(jí)最高的是( )
A 、 () B 、*
C 、== D 、+=
答案:A
?
21 、設(shè) a 、b 、c 都是 int 型變量,且 a=3,b=4,c=5 ,則下列表達(dá)式中值為 0 的是 ( ) 。
A 、 ‘a(chǎn)’&&‘b ’ B 、a<b
C 、a||b+c&&b-c D 、!(a<b&&!c||1)
答案:D
解析:首先要了解一點(diǎn),c語言中,錯(cuò)誤是0,正確是非0。
邏輯與(&&)要求均為正確(非0)才是正確(非0),否則為錯(cuò)誤(0)
邏輯或(||)要求有一個(gè)正確(非0)即為正確(非0)
這東西出題的話一般比較亂,如果沒懂一定要耐心理解
A:我也沒看懂這是的啥,這打了個(gè)單引號(hào),不知道是不是想表達(dá)這是個(gè)字符的意思,反正是錯(cuò)的
B:"a<b"是正確的,值為非0
C:"a||b+c"是兩個(gè)非0量通過邏輯或(||)鏈接,是非0.
然后"非0"與"b-c"這個(gè)非0量通過邏輯與(&&)鏈接,也是非0
D:"a<b"為非0; "c"是非0,則"!c"是非"非0",即"0"。
"非0"與"0"通過邏輯與(&&)鏈接,則為"0"。
"0"與"1"(非0)通過邏輯或(||)鏈接,則為“非0”,
之后由于"!"使得"非0"變?yōu)榉?非0",即"0"
?
22 、表達(dá)式(int)((double)7/2)-7%2 的值是 ( ) 。
A 、1 B 、1.0
C 、2 D 、2.0
答案:C
解析:(double)7/2=3.5
(int)((double)7/2)-7%2=(int)3.5-1
=3-1
=2
?
23 、若 d 是 double 型變量,表達(dá)式”d=1,d=5,d++”的值是( )。
A 、1.0 B 、2.0
C 、5.0 D 、6.0
答案:C
解析:逗號(hào)表達(dá)式從左到右執(zhí)行,取最后一個(gè)表達(dá)式的值,
d++是先用后自增,在表達(dá)式結(jié)束前不起作用,所以d仍為5
?
24 、以下程序的運(yùn)行結(jié)果是( )
void main()
{
int k=4,a=3,b=2,c= 1;
printf(“\n%d\n”,k<a?k:c<b?c:a);
}
A 、4 B 、3
C 、2 D 、 1
答案:D
解析:"k<a"錯(cuò)誤,所以計(jì)算"c<b?c:a"。
"c<b"正確,所以計(jì)算"c",由于c=1,所以結(jié)果為1
?
25 、表達(dá)式 !(m>0&&n>0) 等價(jià)于( )
A 、!(m>0)||!(n>0) B 、!m>0||!n>0
C 、!m>0&&!n>0 D 、!(m>0)&&!(n>0)
答案:A
解析:!(m>0&&n>0)等價(jià)于!(m>0)||!(n>0)
?
26 、語句 while(!E) ;中的表達(dá)式!E 等價(jià)于( )
A 、E= =0 B 、E!= 1
C 、E!=0 D 、E= = 1
答案:A
解析:c語言中除0以外的為非0
E!=0,所以!E=0
?
27 、關(guān)于 switch 語句,下列說法中不正確的是 ( ) 。
A 、case 語句必須以 break 結(jié)束 B 、default 分支可以沒有
C 、switch 后面的表達(dá)式可以是整型或字符型 D 、case 后面的常量值必須唯一
答案:A
?
28 、若要求在 if 后一對(duì)圓括號(hào)中表示 a 不等于 0 的關(guān)系,則能正確表示這一關(guān)系的表達(dá)式為( )
A 、 a<>0 B 、 !a
C 、 a=0 D 、 a
答案:D
解析:a本來就是非0,不需要其他修飾
?
29 、以下程序的輸出結(jié)果是( )
#include<stdio.h>
void main()
{
int x= 10,y= 10;
printf("%d %d\n",x--,--y);
}
A 、 10 10 B 、 9 9
C 、 9 10 D 、 10 9
答案:D
解析: "x--"是先用后自減,在表達(dá)式結(jié)束前不起作用,所以x仍為10
"--y"是先自減后用,當(dāng)場(chǎng)就起作用,所以y為10-1=9
?
30 、設(shè)有如下定義: int x= 10,y=3,z; 則語句printf("%d\n",z=(x%y,x/y)); 的輸出結(jié)果是( )
A 、 1 B 、 0
C 、 4 D 、 3
答案:D
解析:z=(x%y,x/y)等價(jià)于z=(1,3)
逗號(hào)運(yùn)算符從左往右,所以z=3
?
31 、為表示關(guān)系 x ≥y≥z,應(yīng)使用 C 語言表達(dá)式( )
A 、 (x>=y)&&(y>=z) B 、 (x>=y)AND(y>=z)
C 、 (x>=y>=z) D 、 (x>=y) & (y>=z)
答案:A
解析:"x ≥y≥z"的意思是"x ≥y"并且"y≥z",c語言沒有"x>=y>=z"這種寫法
?
32 、C 語言中非空的基本數(shù)據(jù)類型包括( )
A 、 整型,實(shí)型,邏輯型 B 、 整型,實(shí)型,字符型
C 、 整型,字符型,邏輯型 D 、 整型,實(shí)型,邏輯型,字符型
答案:B
?
33 、若 x 和 y 都是 int 型變量,x= 100,y=200,且有下面的程序片段:
printf("%d",(x,y)); 上面程序片段的輸出結(jié)果是( )
A 、200 B 、100
C 、 100 200 D 、 輸出格式符不夠,輸出不確定的值
答案:A
解析:逗號(hào)運(yùn)算符,從左向右,%d先是代表x,之后x又被y頂替
?
34 、閱讀下面的程序
#include<stdio.h>
void main()
{
char ch;
scanf("%3c",&ch);
printf("%c",ch);
}
如果從鍵盤上輸入
abc<回車>
則程序的運(yùn)行結(jié)果是( )
A、 a B、 b
C、 c D、 程序語法出錯(cuò)
答案:A
解析:"char ch"輸入的是字符,輸入三個(gè)字符,輸出一個(gè)字符,"abc"輸出就是"a"
?
35 、閱讀下面的程序
#include<stdio.h>
void main()
{
int i,j;
i=010;
j=9;
printf("%d,%d",i-j,i+j);
}
則程序的運(yùn)行結(jié)果是( )
A 、 1, 19 B 、 - 1, 19
C 、 1, 17 D 、 - 1, 17
答案:D
解析:"i=010"是一個(gè)八進(jìn)制的數(shù),所以i=1*8^1+0=8
所以i-j=8-9=-1;i+j=8+9=17
?
36 、閱讀下面的程序
#include<stdio.h>
void main()
{
int i,j,m,n;
i=8;j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
程序的運(yùn)行結(jié)果是( )
A 、 8, 10,8, 10 B 、 9, 11,8, 10
C 、 9, 11,9, 10 D 、 9, 10,9, 11
答案:C
解析:先定義"i=8;j=10;",之后"m=++i;",由于自增(++)在前,先加后用,所以m=8+1=9,同時(shí)i=8+1=9
然后"n=j++;",由于自增(++)在后,先用后加,所以n=10,同時(shí)j=10+1=11
?
37 、若已定義 int a,則表達(dá)式 a= 10,a+ 10,a++的值是( )
A 、 20 B 、10
C 、 21 D 、11
答案:B
解析:逗號(hào)運(yùn)算符從左向右看,首先"a= 10",定義a 的值
然后"a+ 10"雖然值為10+10=20,但是a值本身不變
最后"a++"由于自增(++)在后,先用后加,"a++"的值仍然是10,這行代碼結(jié)束,a的值才為11
?
38 、閱讀下面的程序
#include<stdio.h>
void main()
{
int i,j;
scanf("%3d%2d",&i,&j);
printf("i=%d,j=%d\n",i,j);
}
如果從鍵盤上輸入 1234567<回車>,則程序的運(yùn)行結(jié)果是( )
A 、 i=123,j=4567 B 、 i=1234,j=567
C 、 i=1,j=2 D 、 i=123,j=45
答案:D
解析:i取3位,j取2位,輸入1234567,則i=123,j=45
?
39 、下面程序的輸出結(jié)果是( )
#include<stdio.h>
void main()
{
int a=-1, b=4, k;
k=(++a<=0)&&(b--<=0);
printf("%d,%d,%d\n",k,a,b);
}
A 、 1, 1,2 B 、 1,0,3
C 、 0, 1,2 D 、 0,0,3
答案:D
解析:"++a<=0",a先加后用,是對(duì)的;"b--<=0",b先用后減,是錯(cuò)的,以邏輯與(&&)鏈接,所以"k=0"
同時(shí),代碼k=(++a<=0)&&(b--<=0);結(jié)束前“a=0,b=4”,結(jié)束后“a=0,b=3”
所以k=0,a=0,b=3
?
40 、C 語言中規(guī)定函數(shù)的返回值的類型是由( )
A 、return 語句中的表達(dá)式類型所決定的
B 、調(diào)用該函數(shù)時(shí)的主調(diào)用函數(shù)類型所決定的
C 、調(diào)用該函數(shù)時(shí)系統(tǒng)臨時(shí)決定的
D 、在定義該函數(shù)時(shí)函數(shù)首部所指定的函數(shù)返回類型所決定的
答案:D
?
41 、對(duì)于 C 語言的函數(shù),下列敘述中正確的是( )
A 、函數(shù)的定義不能嵌套,但函數(shù)調(diào)用可以嵌套
B 、函數(shù)的定義和調(diào)用都不能嵌套
C 、函數(shù)的定義可以嵌套,但函數(shù)調(diào)用不能嵌套
D 、函數(shù)的定義和調(diào)用都可以嵌套
答案:A
?
42 、若函數(shù)調(diào)用時(shí)的實(shí)參為變量,以下關(guān)于函數(shù)形參和實(shí)參的敘述中正確的是( )
A 、函數(shù)的實(shí)參和其對(duì)應(yīng)的形參共占用同一存儲(chǔ)單元
B 、形參只是形式上的存在,不占用具體存儲(chǔ)單元
C 、函數(shù)的形參和實(shí)參分別占用不同的存儲(chǔ)單元
D 、同名的實(shí)參和形參占用同一存儲(chǔ)單元
答案:C
?
43 、下面關(guān)于靜態(tài)局部變量的描述,不正確的是( )
A 、靜態(tài)局部變量只被初始化一次
B 、靜態(tài)局部變量作用域?yàn)檎麄€(gè)程序
C 、靜態(tài)局部變量生命期為整個(gè)程序
D 、靜態(tài)局部變量作用域?yàn)楫?dāng)前函數(shù)或語句塊
答案:B
?
44 、若主函數(shù)有變量定義:int x= 1; double y=2.3;
且有合法的函數(shù)調(diào)用語句 f (y, x); 則下列關(guān)于函數(shù) f 的原型聲明中一定錯(cuò)誤的是( )
A 、void f(double, int);
B 、int f(int, int);
C 、int f(double, double);
D 、void f(double, int, int);
答案:D
解析:通過強(qiáng)制類型轉(zhuǎn)換,A、B、C都是可行的,
D:多定義一個(gè)數(shù),是錯(cuò)的
?
45 、關(guān)于作用域的描述,下列哪一種說法是正確的( )
A 、形式參數(shù)的作用域一定是它所在的整個(gè)函數(shù)
B 、全局變量的作用域一定是整個(gè)程序
C 、局部變量的作用域一定是整個(gè)函數(shù)
D 、靜態(tài)局部變量的作用域不僅限于本函數(shù)
答案:A
?
46 、以下一維數(shù)組定義語句中,錯(cuò)誤的是( )
A 、int a[]={1,2,3,4} ;
B 、char a[5];
C 、char str[6]= "test";
D 、int n=5,a[n];
答案:D
解析:D想表達(dá)的應(yīng)該的定義一個(gè)五位的一維數(shù)組,正確寫法為int a[5];
?
47 、若有說明:int a[ 10];則對(duì) a 數(shù)組元素的正確引用是( )
A 、a[ 10]
B 、a[3.5]
C 、a(5)
D 、a[10- 10]
答案:D
解析:定義的是一個(gè)十位的一維數(shù)組,但是引用時(shí)要注意,第一位是a[0],第二位才是a[1]
A:引用時(shí)a[10]指向的是第11位,越位了,錯(cuò)誤
B:第4.5位是啥,沒有這個(gè)東西,錯(cuò)誤
C:數(shù)組是中括號(hào),不是小括號(hào),錯(cuò)誤
D:a[10-10],即a[0],正確
?
48 、以下不能對(duì)二維數(shù)組 a 進(jìn)行正確初始化的語句是( )
A 、int a[2][3]={0};
B 、int a[][3]={{1,2}, {0}};
C 、int a[2][3]={{1,2}, {3,4}, {5,6}};
D 、int a[][3]={1,2,3,4,5,6};
答案:C
解析:二位數(shù)組第一個(gè)中括號(hào)表示列數(shù),第二個(gè)表示行數(shù)
A:全部定義為"0"
B:可以只對(duì)部分元素賦值,未賦值的元素自動(dòng)取"0"值。例如:
int a[3][3] = {{1}, {2}, {3}};
賦值后各元素的值為:
1 0 0
2 0 0
3 0 0
C:定義是兩行三列,賦值時(shí)卻是三行兩列
D:如果對(duì)全部元素賦值,那么第一維的長(zhǎng)度可以不給出。
例如:
int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
可以寫為:
int a[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
?
49 、以下對(duì)二維數(shù)組 a 定義正確的是( )
A 、int a[3][];
B 、float a(3,4);
C 、double a[ 1][4];
D 、float a(3)(4);
答案:
解析:A:這個(gè)語句試圖定義一個(gè)擁有3行而列數(shù)不固定的二維數(shù)組,
但編譯器要求多維數(shù)組的除最高維度外的每個(gè)維度必須為已知量,因此這句話不能通過編譯。
行可以省略,但是列不能省略。
int a[][3]合法,但int a[3][]不合法
B:中括號(hào),不是小括號(hào),而且第一維和第二維放在同一個(gè)括號(hào)里
D:中括號(hào),不是小括號(hào)
?
50 、如下程序執(zhí)行后輸出為( )
#include<stdio.h>
int main( )
{
static int a[3][3];
int i, j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=a[j][i]+i*j;
printf("%d, %d", a[1][2], a[2][1]);
return 0;
}
A 、2,2 B 、2,4
C 、4,2 D 、不確定, 不確定
答案:B
解析:數(shù)組里如果沒有數(shù)當(dāng)作"0"
這組代碼的結(jié)果是:
0 0 0
0 1 4
0 2 4
?
51 、以下程序給數(shù)組所有元素輸入數(shù)據(jù),填入( )能完成該功能。
#include<stdio.h>
int main ( )
{
int array [5], i=0;
while (i<5)
scanf("%d", __________ ) ;
return 0;
}
A 、&array[i++] B 、&array[i+1]
C 、array+i D 、&array[++i]
答案:A
解析:i的初值為0,一維數(shù)組array[s]的第一位是array[0],所以i要先用后增
?
52 、若有函數(shù)原型:double f(int, double); ,
主函數(shù)中有變量定義:int x= 1; double m= 11.6,n;下列主函數(shù)中對(duì)f函數(shù)的調(diào)用錯(cuò)誤的是 ( )
A 、n=f(x, m+2); B 、printf(“%lf”,f(x+2, 23.4));
C 、f(x,m); D 、m=f(x);
答案:D
解析:D:少一個(gè)數(shù),正確寫法同A
?
53 、表達(dá)式____ 的值不是 1。
A 、4<0?0:1 B 、5>=1
C 、!EOF D 、!NULL
答案:C
解析:A:4<0,是錯(cuò)的,所以值為后者,為1
B:5>=1,是對(duì)的,所以值為1
C:EOF指文件結(jié)束,邏輯不通
D:NULL是一個(gè)未知值,同時(shí)NULL 不等于0,也不是’'(空字符串),所以!NULL的值為1
?
54 、有如下函數(shù)調(diào)用語句 func(rec1,rec2+rec3,(rec4, rec5));
該函數(shù)調(diào)用語句中,含有的實(shí)參個(gè)數(shù)是 ( ) 。
A 、3 B 、4
C 、5 D 、有語法錯(cuò)誤
答案:A
解析:"(rec4, rec5)"是逗號(hào)運(yùn)算符,取最后的為值
三個(gè)實(shí)參分別為:rec1
rec2+rec3
(rec4, rec5)
?
55 、以下有關(guān)函數(shù)的形參和實(shí)參的說法中正確的是( )
A 、實(shí)參和與其對(duì)應(yīng)的形參各占用一個(gè)字節(jié)存儲(chǔ)單元
B 、只有當(dāng)實(shí)參和與其對(duì)應(yīng)的形參同名時(shí)才占用一個(gè)存儲(chǔ)單元
C 、形參是虛擬的,不占用存儲(chǔ)單元
D 、實(shí)參和與其對(duì)應(yīng)的形參各占用獨(dú)立的存儲(chǔ)單元
答案:D
解析:程序運(yùn)行狀態(tài)下,調(diào)用到形參時(shí),會(huì)給形參獨(dú)立的儲(chǔ)存單位。若未運(yùn)行,形參則不會(huì)占用存儲(chǔ)單元。
?
56 、能正確表示“當(dāng) x 取值在[5,99]和[130 ,180]范圍內(nèi)為真,否則為假”的表達(dá)式是( )
A 、(x>=5)&&(x<=99)&&(x>=130)&&(x<=180)
B 、(x>=5)&&(x<=99)||(x>=130)&&(x<=180)
C 、(x>=5)||(x<=99)||(x>=130)||(x<=180)
D 、(x>=5)&&(x<=99)||(x>=130)||(x<=180)
答案:B
解析:"當(dāng) x 取值在[5,99]和[130 ,180]范圍內(nèi)"
意思是:x的值"大于等于5,小于等于99"或"大于等于130,小于等于180"
所以B選項(xiàng)是對(duì)的
?
57 、以下錯(cuò)誤的定義語句是( )。
A 、int x[][3]={{0}, { 1}, { 1,2,3}};
B 、 int x[4][3]={{1,2,3}, { 1,2,3}, { 1,2,3}, { 1,2,3}};
C 、int x[][3]={1,2,3,4};
D 、int x[4][]= {{1,2,3}, { 1,2,3}, { 1,2,3}, { 1,2,3}};
答案:D
解析:D:編譯器要求多維數(shù)組的除最高維度外的每個(gè)維度必須為已知量,因此這句話不能通過編譯。
行可以省略,但是列不能省略
如果對(duì)全部元素賦值,那么第一維的長(zhǎng)度可以不給出
?
58 、設(shè)有語句 int a[2][3] ,下面哪一種不能表示元素 a[i][j]( )
A 、*(a[i]+j) B 、*(*(a+i)+j)
C 、*(a+i*3+j) D 、*(*a+i*3+j)
答案:C
解析:正確表達(dá)方式為A、B、D,可以參考這些選項(xiàng)來理解二維數(shù)組不同的表達(dá)方式
可以把這幾種表達(dá)記一下
?
59 、假設(shè)已定義 char a[10], *p; 下面的賦值語句中,正確的是 ( ) 。
A 、p=a; B 、a="abcdef";
C 、*p="abcdef"; D 、p=*a
答案:A
解析:a表示數(shù)組的首地址
p是一個(gè)指針變量,可以將數(shù)組的首地址賦值給p, 所以p=a;是正確的
?
60 、下面判斷正確的是________。
A 、char *a="programming";等價(jià)于 char *a;*a="programming";
B 、char str[10]={"programming"};等價(jià)于 char str[10]; str[]={"programming"};
C 、char *s="programming";等價(jià)于 char *s; s="programming";
D 、char *s="programming";等價(jià)于 char s[10];*s="programming";
答案:B
解析:這我也不知道咋講,考的是一維數(shù)組的賦值,算是一個(gè)c語言寫法的問題
?
61 、判斷字符串 str1 是否大于字符串 str2 ,應(yīng)當(dāng)使用( )
A 、if(str1>str2) B 、if(str1>=str2)
C 、if(strcpy(str2,str1)>0) D 、if(stcmp(str1,str2)>0)
答案:D
解析:B:strcpy(字符數(shù)組1,字符串2)
strcpy是“字符串復(fù)制函數(shù)”。
作用是:將字符串2復(fù)制到字符數(shù)組1中去。
D:strcmp() 會(huì)根據(jù) ASCII 編碼依次比較 str1 和 str2 的每一個(gè)字符,
直到出現(xiàn)不到的字符,或者到達(dá)字符串末尾(遇見\0)。
返回值:
如果返回值 < 0,則表示 str1 小于 str2。
如果返回值 > 0,則表示 str2 小于 str1。
如果返回值 = 0,則表示 str1 等于 str2。
?
62 、設(shè) p1和 p2 是指向同一個(gè)字符串的指針變量,c 為字符變量,則以下不能正確執(zhí)行賦值語句的是( )
A 、c=*p1+*p2 B 、p2=c-5
C 、p1=p2 D 、c=*p1*(*p2)
答案:B
解析:A:求指針p1和p2指向的地址單元中存放的數(shù)據(jù)相加的值
B:c是字符變量 p2是指針變量,指針變量只能付地址,改為p2=&c成立
C:p1=p2是給一個(gè)變量賦值,使得p1原來的值被覆蓋
D:求指針p1和p2指向的地址單元中存放的數(shù)據(jù)相乘的值
?
63 、設(shè)變量定義為 int x, *p=&x, 則&*p 相當(dāng)于( )
A. &x B. *p
C. x D. *&x
答案:A
解析:*p=&x 是內(nèi)存(位置:地址p)的內(nèi)容= x的內(nèi)存地址
可以嘗試這樣理解:因?yàn)?p = &x
*p = *&x
&*p = &*&x
一個(gè)*和一個(gè)&抵消了,因此&*&x = &x
?
64 、若有語句int *point,i=4; 和point=&i,下面均代表地址的是 ()
A. i, point,*&i B.&*i,&i,*point
C. *&point,*point,&i D. &i ,&*point,point
答案:D
?
65 、已知 a 是 int 型變量,則( )是對(duì)指針變量的正確定義和初始化。
A.int *p=a B. int *p=*a
C. int *p=&a D. int p=&a
答案:D
?
66 、執(zhí)行下面的程序段后,變量 ab 的值是( )
int *var,ab=100;
var=&ab; *var+=10; var+=10;
A. 110 B. 100
C. 0 D. 120
答案:A
解析:"var=&ab"的意思是var=ab的地址
" *var"的意思是取ab的地址所指向的值," *var+=10"等價(jià)于ab+=10
"var+=10"由于var=ab的地址,所以此代碼無意義
所以ab=(*var+=10)
=*var+10;
=ab+10
=100+10
=110
?
67 、設(shè)有定義和賦值:int a[10]={0,1,2,3,4,5,6,7,8,9}, *p; p=a+1;
則能表示數(shù)組a中值為5的元素的表示式為( )
A. a[4] B. *(p+4)
C. a+5 D. *p[5]
答案:B
解析:可以看一下T58的3個(gè)正確選項(xiàng),把行直接刪了就是一維數(shù)組
a中值為5的元素在第6位
A:改為a[5]
B:以為p=a+1,所以 *(p+4)等價(jià)于 *(a+5),正確
C、D:意義不明的代碼
?
68 、int a[5][4], 對(duì)于第 i 行j 列元素值引用正確的是( )
A. *(*(a+i)+j) B. (a+i)[j]
C. *(a+i+j) D. *(a+i)+j
答案:A
解析:見T58,B選項(xiàng)
?
69 、int a[5][4], 對(duì)于第 i 行j 列元素值引用正確的是( )
A. *(*(a+i)+j) B. (a+i)[j]
C. *(a+i+j) D. *(a+i)+j
答案:A
解析:見T58,B選項(xiàng),和68題是一樣的,我沒有打錯(cuò)啊
?
70 、若有定義 int (*p)[4], 則標(biāo)識(shí)符 p 表示( )
A. 是一個(gè)指向整型變量的指針 B. 是一個(gè)指針數(shù)組名
C. 是一個(gè)行指針,指向一個(gè)含有 4 個(gè)整型元素的一維數(shù)組 D. 定義不合法
答案:C
解析:代碼含義問題,請(qǐng)自行搜索
?
71 、下列程序段的輸出結(jié)果為( )
void fun(int *x, int *y)
{
printf("%d %d", *x, *y);
*x=3;
*y=4;
}
void main( )
{
int x=1, y=2;
fun(&y,&x);
printf("%d %d",x,y);
}
A. 2 1 1 2 B. 1 2 1 2
C. 1 2 3 4 D. 2 1 4 3
答案:D
解析:fun(&y, &x)把y的地址傳遞給x,把x的地址傳遞給y,
即運(yùn)行到printf("%d %d",*x,*y);時(shí)x=2,y=1;
*x=3;*y=4;給x,y賦值時(shí),由于fun(&y, &x)交換了傳遞位置,
把y的地址傳遞給x,把x的地址傳遞給y,所以運(yùn)行到x=3;*y=4時(shí),
主函數(shù)中的x=4,y=3
?
72 、若有定義和語句:char s[ 10]; s="abcd"; printf("%s\n",s); ,則結(jié)果是( )
A. 輸出 abcd B. 輸出 a
C. 輸出 abcd(有空格) D. 編譯不通過
答案:D
解析:這里的s是一個(gè)數(shù)組包含10個(gè)char的首地址,它只可以在初始化的時(shí)候用
char s[10]="abcd";
char s[]="abcd";
char *s="abcd";
這三種寫法都是對(duì)的,但是都是初始化的時(shí)候使用
?
73 、當(dāng)用戶輸入的字符串中含有空格時(shí),應(yīng)使用 ( )函數(shù)讀入字符串。
A. scanf B. gets
C. getchar D. getc
答案:B
?
74 、將兩個(gè)字符串 s1 和 s2 連接起來,正確的函數(shù)是 ( )
A. strcpy(s1,s2) B. strcat(s1,s2)
C. strcmp(s1,s2) D. strlen(s1,s2)
答案:B
解析:A:將s2復(fù)制到s1
B:連接s1與s2
C:比較s1與s2大?。ò碅SCII碼值大小比較),直到出現(xiàn)不同的字符或遇到"\0"為止
s1=s2,返回0
s1>s2,返回一個(gè)正整數(shù)
s1<s2,返回一個(gè)負(fù)整數(shù)
D:計(jì)算字符串長(zhǎng)度
格式:strlen(字符數(shù)組);
?
75 、12. 設(shè)有如下程序段:char s[20]="beijing",*p; p=s; ,則以下敘述正確的是 ( )
A. 可以用*p 表示 s[0]
B. s 數(shù)組中元素的個(gè)數(shù)和 p 所指字符串長(zhǎng)度相等
C. s 和 p 都是指針變量
D. 數(shù)組 s 中的內(nèi)容和指針變量 p 中的內(nèi)容相等
答案:A
?
76 、有以下函數(shù)
#include<stdio.h>
int main( )
{
char a[20],b[20],c[20];
scanf("%s%s",a,b);
gets(c);
printf("%s%s%s\n",a,b,c);
return 0;
}
程序運(yùn)行時(shí)輸入 this is a cat!<回車> ,則輸出結(jié)果是 ( )
A. thisisacat!; B. this is a
C. thisis a cat! D. thisisa cat!
答案:C
解析:scanf按%s將數(shù)據(jù)賦值分別給a、b,但是scanf碰到空格就認(rèn)為字符串結(jié)束,
于是字符串?dāng)?shù)組a被賦值"this",b被賦值"is",剩下“ a cat!”
這個(gè)部分是用gets函數(shù)來接收的,而gets函數(shù)碰到空格不會(huì)認(rèn)為字符串結(jié)束
會(huì)全部賦值給c,于是c的內(nèi)容是“ a cat!”
然后printf輸出,就組成了"thisis a cat!"
?
77 、以下不能正確對(duì)字符串初始化的語句是 ( )
A. char str[]={"good!"}; B. char *str="good";
C.char str[5]="good!"; D. char str[6]={'g','o','o','d',' !','\0'};
答案:C
解析:str只給了5個(gè)字符的空間,但"good!"需要6個(gè)字符(有一個(gè)是結(jié)束符)
A、B會(huì)自動(dòng)計(jì)算字符串所需的空間
D是以字符數(shù)組來看待str,而非字符串方式
?
78 、以下敘述正確的是( )
A. C 語言允許 main 函數(shù)帶參數(shù),且參數(shù)的個(gè)數(shù)和形參名均可由用戶任意指定
B. C 語言允許 main 函數(shù)帶參數(shù),形參名只能是 argc 和 argv
C. 當(dāng) main 函數(shù)帶有形參時(shí),傳給形參的值一般從命令行得到
D. 若有說明:int main(int argc, char *argv), 則形參 argc 的值必須大于 1
答案:C
?
79 、對(duì)于一個(gè)聯(lián)合類型的變量,系統(tǒng)分配的存儲(chǔ)空間是( )
A 、第一個(gè)成員所需的存儲(chǔ)空間 B 、最后一個(gè)成員所需的存儲(chǔ)空間
C 、 占用空間最大的成員所需的存儲(chǔ)空間 D 、所有成員存儲(chǔ)空間的總和
答案:C
?
80 、以下有關(guān)宏替換的敘述不正確的是( )
A 、宏替換不占用運(yùn)行時(shí)間 B 、宏名無類型
C 、宏替換只是字符替換 D 、宏名不能用小寫字母表示
答案:D
?
81 、函數(shù) f 定義如下,執(zhí)行語句“sum=f(5)+f(3);”后,sum 的值應(yīng)為( )
int f(int m)
{
static int i=0; int s=0;
for(;i<=m;i++)
s+=i; return s;
}
A 、 21 B 、 16
C 、 15 D 、 8
答案:C
解析:先計(jì)算f(5),題干的for循環(huán)意思是從0到m的數(shù)的和,先得出f(5)=15
然后計(jì)算f(3)時(shí),由于i在計(jì)算f(5)時(shí)不斷自增到了6,
所以for循環(huán)中的i<=m這一條件未達(dá)到,
不會(huì)開始循環(huán),所以f(3)=0
所以sum=f(5)+f(3)
=15+0
=15
?
82 、聲明語句為“int a[3][4];”,下列表達(dá)式中與數(shù)組元素a[2][1]等價(jià)的是( )
A 、*(a[2]+1) B 、a[9]
C 、*(a[ 1]+2) D 、*(*(a+2))+1
答案:A
解析:見T58
?
83 、宏定義#define G 9.8 中的宏名 G 表示 ( )
A 、一個(gè)單精度實(shí)數(shù) B 、一個(gè)雙精度實(shí)數(shù)
C 、一個(gè)字符串 D 、不確定類型的數(shù)
答案:C
?
84 、在定義一個(gè)結(jié)構(gòu)體變量時(shí),系統(tǒng)分配給它的內(nèi)存是( )
A 、結(jié)構(gòu)體中第一個(gè)成員所需內(nèi)存量
B 、結(jié)構(gòu)體中最后一個(gè)成員所需內(nèi)存量
C 、成員中占內(nèi)存量最大者所需內(nèi)存量
D 、各成員所需內(nèi)存量的總和
答案:C
?
85 、根據(jù)下面的定義,能打印出字母"M"的語句是( )
struct person
{
char name[9] ;int age;
};
struct person class[10]=
{
{"John" ,17},{"Paul" ,19} ,{"Mary" ,18} ,{"Adam" ,16 }
};
A 、printf("%c\n" ,class[3] .name );
B 、printf("%c\n" ,class[3] .name[l]);
C 、Printf("%c\n" ,class[2] .name[l]);
D 、printf("%c\n" ,class[2] .name[0]);
答案:D
解析:調(diào)用數(shù)組時(shí),
class[0]對(duì)應(yīng){"John" ,17} class[2]對(duì)應(yīng){"Mary" ,18}
class[1]對(duì)應(yīng){"Paul" ,19} class[3]對(duì)應(yīng){"Adam" ,16 }
帶有"M"的只有class[2]對(duì)應(yīng)的{"Mary" ,18}
由于題干函數(shù)在一維數(shù)組class中嵌套了name數(shù)組,
所以“M”在class[2]中的name[0]處
?
86 、設(shè)有以下結(jié)構(gòu)體定義:
struct emproyer
{
char name[8] ;int age;char sex;
}staff;
則下面的敘述不正確的是( )
A 、struct 是結(jié)構(gòu)體類型的關(guān)鍵字
B 、struct emproyer 是用戶定義的結(jié)構(gòu)體類型
C 、staff 是用戶定義的結(jié)構(gòu)體類型名
D 、nameage 和 sex 都是結(jié)構(gòu)體成員名
答案:C
?
87 、下面程序的輸出結(jié)果是( )
#include<stdio.h>
#define P 2
#define POWER(x) P*x*x
main()
{
int x= 1 ,y=2;
printf("%d ,%d" ,POWER(x+y),POWER(y+x));
}
A 、18 ,18 B 、6 ,7
C 、6 ,6 D 、7 ,7
答案:B
解析:由于宏定義 #define POWER(x) P*x*x,
所以POWER(x+y)=P*x+y*x+y
=2*1+2*1+2
=2+2+2
=6
POWER(y+x)=P*y+x*y+x
=2*2+1*2+1
=4+2+1
=7
不要自作聰明地將x+y或y+x加括號(hào)
?
88 、若有以下定義和語句:
struct student
{
int num ;int age;
};
struct student stu[3]=
{
{l001 ,20} ,{ 1002 ,19} ,{ 1003 ,2l}
};
main()
{
struct student *p;p=stu;
...
}
則下列引用中不正確的是( )
A 、 (p++)→num B 、 p++
C 、 (*p) .num D 、 p=&stu.age
答案:D
?
89 、下面程序的輸出結(jié)果是( )
#include<stdio.h>
#define P 2
#define POWER(x) P*(x)*(x)
main()
{
int x=l ,y=2;
printf("%d ,%d" ,POWER(x+y),POWER(y+x));
}
A 、18 ,18 B 、6 ,7
C 、6 ,6 D 、7 ,7
答案:B
解析:見T87,完全一樣的題目
?
90 、下面程序的輸出結(jié)果是( )
#include<stdio .h>
#define SUB(X ,Y) (X)*Y
main()
{
int a=3 ,b=4;
printf("%d\n" ,SUB(a+b ,b++));
}
A 、12 B 、15
C 、16 D 、28
答案:D
解析:由于宏定義#define SUB(X ,Y) (X)*Y
所以SUB(a+b ,b++)=(a+b)*b++
=7*4
=28
本題在a+b處加括號(hào)是由于(X)加了括號(hào),
同時(shí)請(qǐng)對(duì)比T87,以加深此代碼理解
?
91 、下面程序的輸出結(jié)果是( )
#include<stdio .h>
#define FUN(x ,y) x*y
main()
{
int a= 1 ,b=2;
printf("%d" ,F(xiàn)UN(a+b ,a-b));
}
A 、 -3 B 、1
C 、 -1 D 、0
答案:B
解析:由于宏定義 #define FUN(x ,y) x*y
所以FUN(a+b ,a-b)=a+b*a-b
=1+2*1-2
=1
?
92 、下面程序的輸出結(jié)果是( )
#define MIN(x ,y) (x)<(y)?(x):(y)
main()
{
int a= 1 ,b=2 ,c;
c= 10*MIN(a ,b);
printf("%d" ,c);
}
A 、1 B 、10 C 、 2 D 、20
答案:B
解析:由于宏定義 #define MIN(x ,y) (x)<(y)?(x):(y)
所以c=10*MIN(a ,b)=10*(a)<(b)?(a):(b)
= 10*(1)<(2)?(1):(2)
=10*1
=10
?
93 、下面程序的輸出結(jié)果是( )
struct st
{
int x; int *y;
};
int dt[4]={10 ,20 ,30 ,40};
struct st *p;
aa[4]={50 ,&dt[0],60 ,&dt[1],70 ,&dt[2],80 ,&dt[3]};
main()
{
p=aa;
printf("%d\n" ,++p →x);
printf("%d\n",(++p) →x);
printf("%d\n" ,++(*p→y));
}
A 、10 B 、50 C 、51 D 、60
20 60 60 70
20 21 2l 31
答案:C
解析:struct st *p定義結(jié)構(gòu)體指針,
p=aa使得指針p指向結(jié)構(gòu)體數(shù)組的首地址aa[0]
++p->x:由于->比++優(yōu)先級(jí)高,所以輸出結(jié)構(gòu)體成員x的值再自增
所以輸出的值為aa[0]+1=50+1
=51
(++p) →x:由于( )優(yōu)先級(jí)比->高,所以指針p先下移一個(gè)位置,
此時(shí),aa[1]->x=60
++(*p→y):對(duì)aa[1]->y所指向的內(nèi)容加1后輸出,
即地址&dt[1]的內(nèi)容20加1后輸出21
?
94 、以下程序的運(yùn)行結(jié)果為( )
#include<stdio .h>
main()
{
struct date
{
int year ,month ,day;
}
today;
printf("%d\n" ,sizeof(struct date));
}
A 、6 B 、8
C 、10 D 、12
答案:D
解析:sizeof(struct date)是求字節(jié)數(shù)的運(yùn)算符
三個(gè)整形,每個(gè)4字節(jié),共3*4=12個(gè)字節(jié)數(shù)
填空題(43題)
1 、十進(jìn)制數(shù) 91 轉(zhuǎn)換成二進(jìn)制是_________,轉(zhuǎn)換成八進(jìn)制數(shù)是_________,轉(zhuǎn)換成十六進(jìn)制是_________。
答案:1011011; 133; 5B
解析:對(duì)十進(jìn)制數(shù)除以進(jìn)制數(shù),保留余數(shù)后,繼續(xù)對(duì)商除以進(jìn)制數(shù),
直到商為0,余數(shù)從右向左依次記錄
2、C 語言開發(fā)的 4 個(gè)步驟是_________ 、_________ 、_________ 、_________。
答案:編輯; 編譯; 鏈接; 運(yùn)行
3 、一般情況下,在 C 語言中定義但未初始化的變量的值為_________。
答案:不確定的隨機(jī)數(shù)
4 、用 scanf 輸入 1 個(gè) double 型變量時(shí),需要使用格式轉(zhuǎn)換說明符_________,并且要使用取址運(yùn)算符_________取得該變量的地址。
答案:%lf; &
5 、一個(gè) C 語言程序由若干個(gè)函數(shù)組成,其中必須有一個(gè)_________函數(shù)。
答案:main
6 、定義函數(shù)時(shí),若缺省函數(shù)類型標(biāo)識(shí)符,函數(shù)返回值類型為 _________。
答案:int
7 、求 1 至 100 的和,寫作 for(s=0,i=1; _________ ;++i) s+=i;printf("%s\n",a);
答案:i<=100
解析:求1~100的和,由于使用的是for循環(huán),題干空處給出的是條件,
由于i自增,為了讓函數(shù)可以循環(huán)100次,所以條件必須為i<=100
s+=i等價(jià)于s=s+i
8 、int i=234,j=567; 函數(shù) printf("%d%d\n",i,j) 的輸出結(jié)果是_________。
答案:234567
解析:printf函數(shù)中的兩個(gè)整形之間沒有空格,所以輸出結(jié)果是連貫的
9 、表達(dá)式: 10!=9 的值是_________。
答案:1
解析:表達(dá)式的意思是10不等于9,顯然這是正確的,所以值為1
10 、能正確表述判斷閏年的C 語言表達(dá)式為____________________________________
答案:year%4==0&&year%100!=0||year%400==0
解析:公歷的置閏規(guī)則:
普通閏年:公歷年份是4的倍數(shù)(year%4==0),且不是100的倍數(shù)的(year%100!=0)
世紀(jì)閏年:公歷年份是整百數(shù)的,必須是400的倍數(shù)(year%400==0)
普通閏年的兩個(gè)條件是必須同時(shí)達(dá)到的,所以用邏輯與(&&)
世紀(jì)閏年和普通閏年之間是”或“的關(guān)系,所以用邏輯或(||)
11、設(shè) float x,y; 使 y 為 x 的小數(shù)部分的表達(dá)式是_________。
答案:y=x-(int)x
解析:由于強(qiáng)制類型轉(zhuǎn)換,(int)x為float x的整數(shù)部分
用單精度的x減去整數(shù)部分(int)x自然就是小數(shù)部分了
12 、設(shè) int i,a; 則執(zhí)行語句:i=(a=23,a5),a+6; 后,變量 i 的值是_________。
答案:30
解析:a=2*3=6,由于逗號(hào)運(yùn)算符,取最后的表達(dá)式做值,所以i= a*5= 6*5= 30
a+6雖然值為36,但是沒有載體,不會(huì)表達(dá)出來
逗號(hào)運(yùn)算符雖然取最后的表達(dá)式作結(jié)果,但并不意味著前面的不需要計(jì)算
13 、設(shè) int a= 12,則執(zhí)行完語句 a+=a-=a*a 后,a 的值是_________。
答案:-264
解析:a+=a-=a*a實(shí)際上是a+=(a-=(a*a)),所以本題需要從后往前看
a*a= 12*12= 144,
a-=a*a等價(jià)于a-=144,即a= a-144= 12-144= -132
a+=a-=a*a等價(jià)于a+= -132,而此時(shí)a已經(jīng)等于-132了,所以a= -132+-132= -264
14 、有以下函數(shù)定義:void fun(int n, double x){……} ,若使用到的變量定義為:int n= 10; double
x= 1.0,y=5.4; ,則對(duì)函數(shù) fun 的正確調(diào)用語向是_________。
答案:fun(n,x)
解析:變量的定義類型都是符合題干中函數(shù)的定義的,無需改變
15 、 在調(diào)用函數(shù)時(shí),如果實(shí)參是簡(jiǎn)單變量,它與對(duì)應(yīng)形參之間的數(shù)據(jù)傳遞方式是_________ (傳值或傳地址這兩種之間選填一個(gè)) 。
答案:傳值
解析:傳地址在指針用的較多
16 、在 C語言中,數(shù)組名代表_________。
答案:數(shù)組首個(gè)元素的地址
17、己知 short int 類型變量在內(nèi)存中占用兩個(gè)字節(jié),
??有如下定義:short int array [10]={0,2,4};, 則數(shù)組 array 在內(nèi)存中所占字節(jié)數(shù)是 _________。
答案:20
解析: short int 類型變量在內(nèi)存中占用兩個(gè)字節(jié),
array [10]定義了10個(gè) short int 類型變量,所以在內(nèi)存中所占字節(jié)數(shù)是20
18 、若定義 int m[10]={9,4,12,8,2,10,7,5,1,3}; ,則 m[m[4]+m[8]] 的值是 _________。
答案:8
解析:m[4]+m[8]= 2+1= 3
m[m[4]+m[8]]= m[3]=8
19 、設(shè)有如下函數(shù)定義:
int fun (int k)
{
if (k<1) return 0;
else if (k==1) return 1;
else return fun (k- 1) + 1:
}
??若執(zhí)行調(diào)用語句:n=fun(3); ,則函數(shù) fun 總共被調(diào)用的次數(shù)是_________。
答案:3
解析:首先 n=fun(3),進(jìn)行了一次調(diào)用
3被當(dāng)做參數(shù)傳進(jìn)去后,程序會(huì)執(zhí)行這句 else return fun(k-1)+1;
這就調(diào)用了第二次,而參數(shù)是3-1也就是2
2被當(dāng)做參數(shù)傳進(jìn)去后,程序會(huì)執(zhí)行這句 else return fun(k-1)+1;
這就調(diào)用了第三次,而參數(shù)是2-1也就是1
1被當(dāng)做參數(shù)傳進(jìn)去后,程序會(huì)執(zhí)行這句 else if(k==1) return 1;
不再遞歸調(diào)用
20 、為保證整型變量 n 其在未賦值的情況下初值為 0 ,應(yīng)選擇的存儲(chǔ)類別是_________ 。
答案:static
21 、若有定義 int b[5][7];, 根據(jù)數(shù)組存儲(chǔ)順序,b[0][0] 為第1個(gè)元素,則第10個(gè)元素是___________
答案:b[1][2]
解析:定義的是5行7列的二維數(shù)組,所以第10個(gè)元素在第2行第3列
所以第10個(gè)元素是b[1][2]
22 、定義 int *pa[5],(*p)[5] ; 則表達(dá)式 sizeof(pa)的值是________ ,sizeof§的值是 ________。
答案:20;4或8
解析:*pa[5]:是一個(gè)數(shù)組,這個(gè)數(shù)組的內(nèi)容(每一個(gè)元素)都是 int * 類型
int類型占4個(gè)字節(jié)數(shù),所以 sizeof(pa)的值是20
(*p)[5]:p指向一個(gè)數(shù)組,指向一塊內(nèi)存區(qū)域
因?yàn)橐粋€(gè)指針在32位的計(jì)算機(jī)上,占4個(gè)字節(jié)
一個(gè)指針在64位的計(jì)算機(jī)上,占8個(gè)字節(jié)
所以sizeof(p)的值是4或8
23 、設(shè) int a=3,b=5,c=7; ,則表達(dá)式 a<c&&c>b!=0||c==b+a 的值為________。
答案:1
解析:a<c值為1,c>b值為0,所以a<c&&c>b值為0,表達(dá)式等價(jià)為0!=0||c==b+a
0!=0錯(cuò)誤,值為0;c==b+a是給c賦值,等價(jià)于c=7
原表達(dá)式等價(jià)于0||7,值為1
24 、若已定義 int a,則表達(dá)式 a= 10,a+10,a++的值是 _______________。
答案:10
解析:a+10沒有載體,又因?yàn)閍++先用后增,所以a++的值為10
25 、對(duì)于以下宏定義:#define MIN(a,b) a<b?b:a+ 1,執(zhí)行語句 z= 10*MIN(2,5);后,z 的值為________。
答案:30
解析:由于宏定義#define MIN(a,b) a<b?b:a+1,
所以MIN(2,5)=(2<5?5,2+1)
=2+1
=3
所以z= 10*3= 30
26 、對(duì)于下面宏定義:
#define M(x) x*x
#define N(x, y) M(x)+M(y)
執(zhí)行語句 z=N(2,2+4);后 z 的值為___________。
答案:18
解析:由于宏定義#define M(x) x*x和#define N(x, y) M(x)+M(y),
所以z= N(2,2+4)= M(2)+M(2+4)
=2*2+2+4*2+4
=4+2+8+4=18
27 、ANSI C 標(biāo)準(zhǔn)中定義的用于釋放動(dòng)態(tài)空間的函數(shù)名是________ ,使用該函數(shù)要包含的頭文件 是________。
答案:free;malloc.h
28 、定義語句為 char a[]=“Boot”,b[]=“Foot”; ,語句 printf("%d",strcmp(a+ 1,b+1));輸出______。
答案:0
解析:strcmp()函數(shù)首先將s1字符串的第一個(gè)字符值減去s2第一個(gè)字符,
若差值為零則繼續(xù)比較下去;若差值不為零,則返回差值
由于題干中"a+1""b+1"分別代表的是a[]和b[]的第二個(gè)字符,都是"o",
所以ACSII碼差值為0,繼續(xù)向后比較,都是一樣的所以差值為0,輸出就是0
簡(jiǎn)單來說就是跳過了第一個(gè)字符再進(jìn)行比較
29 、設(shè)有數(shù)組定義:char array[]=“China”;則數(shù)組 array 所占的存儲(chǔ)空間為____________個(gè)字節(jié)。
答案:6
解析:原數(shù)組相當(dāng)于 char arrays[] = {'C', 'h', 'i', 'n', 'a', '\0'};
所以是6個(gè)字符
30 、有結(jié)構(gòu)體定義如下:
struct person
{ int ID;
??char name[20];
??struct {int year, month, day;}birthday;
}Tom;
將 Tom 中的 day 賦值為 26 的語句為____________。
答案:Tom.birthday.day=26
解析:將"Tom"中的"birthday"中的"day"賦值為26
31 、int x, *p; p=&x; 已知 x 的地址為 0x0028FF1C ,則 p+ 1=____________。
答案:0x0028FF20
解析:p= &x= 0x0028FF1C
因?yàn)閤為整型,占4個(gè)字節(jié),
所以p+ 1= 0x0028FF1C+4
=0x0028FF20
32 、int m=5, *p=&m ;對(duì)變量 m 的間接訪問為____________。
答案:*p
解析:*p=&m,*p表示此指針指向的內(nèi)存地址中存放的內(nèi)容
沒有直接p=m,而是先指向m的地址,再解析地址中的值
33 、 數(shù)組名實(shí)質(zhì)上是一個(gè)____________。
答案:常量指針
34 、 int a[3][2];已知&a[0][0]等于 0x0028FF1C ,則 a+ 1=____________ ,a[0]+1=____________。
答案:0x0028FF2C;0x0028FF20
解析:一個(gè)整型占4個(gè)字節(jié),數(shù)組有a[3][2]有6個(gè)整型
a+1中"1"的大小指的是整個(gè)數(shù)組的所占大小,
例如數(shù)組a[4],&a +1實(shí)際上是 a[5],跳過一個(gè)數(shù)組
所以a+1= 0x0028FF1C+sizeod(int[3][2])
= 0x0028FF1C+3*2*4
=0x0028FF2C
a[0]+1中的"1"的大小指的是一個(gè)元素所占大小,
例如數(shù)組a[4],&a[0] +1實(shí)際上是 a[1],
a[0]+1實(shí)際上表示指針a[0][1]
所以a[0]+1=0x0028FF1C+4
=0x0028FF20
35 、 申請(qǐng)動(dòng)態(tài)內(nèi)存空間的函數(shù)包括____________和____________。
答案:malloc;free
36 、若有 定 義 int a[3][3]={{1,2,3}, {4,5,6}}; int *p,(*q)[3]=a; p=&a[0][0];
則 * ( * (q+ 1)+2) 等于 ________ ,
( * p) * ( * (p+2)) * ( * (p+4))等于_______ ,(*++q)[1]的值為_______。
答案:6;15;6
解析:*(*(q+ 1)+2):指第2行第3列的數(shù),值為6
(*p)*(*(p+2))*(*(p+4)):因?yàn)閜=&a[0][0],所以*p指第1行第1列的數(shù)
*(p+2)指第1行第3列的數(shù);*(p+4)指第2行第2列的數(shù)
所以值為1*3*5=15
(*++q)[1]:等價(jià)于(*q+1)[1],指第2行第2列的數(shù),為5
37、有以下語句 char x[]=“12345”; char y[]={‘1’,‘2’,‘3’,‘4’,‘5’}; 則數(shù)組 x 的長(zhǎng)度為____________,數(shù)組 y 的長(zhǎng)度為____________。
答案:6;5
解析:char x[]="12345"等價(jià)于char x[]={'1','2','3','4','5','\0'}
38 、若有語句:char s[10]=“1234567\0\0”; 則 sizeof(s)=____________ ,strlen(s)=____________。
答案:10;7
解析:字符數(shù)組s的大小只和c[10]中的10有關(guān),定義了大小為10個(gè)char,
char大小為一個(gè)字節(jié),所以c的大小是10個(gè)字節(jié),所以sizeof(s)=10
strlen遇到'\0'就停止,所以strlen(s)=7
39 、預(yù)處理命令必須以____________開頭。
答案:#
40 、struct st{ int a; double d;}*p;則變量 p 在內(nèi)存中所占字節(jié)數(shù)為____________。
答案:8
解析:在內(nèi)存中所占字節(jié)數(shù)為最大的字節(jié)數(shù)
最大的變量?jī)?nèi)存的大小為double的8字節(jié)
41、struct st{int age;int num;}stul,*p;p=&stul;則對(duì) stu1.num 訪問的其他兩種形式為____________、____________.
答案:p->num;(*p).num
解析:p->num:定義的結(jié)構(gòu)體類型->定義的結(jié)構(gòu)變量
(*p).num:因?yàn)閜=&stul,所以*p=stul
42、struct {int x;char *y}t[]={1,”ab” ,2,”cd” },*p=t;則執(zhí)行 sizeof( p)的結(jié)果為____________;若執(zhí)行++p->y 的結(jié)果為____________ ;若執(zhí)行 (++p) ->y 的結(jié)果為____________。
答案:8;b;
解析:t[]={1,”ab” ,2,”cd” }
={'1','a','b','\0','2','c','d','\0'}
sizeof( p):由于*p=t,所以sizeof(p)=8
t有兩個(gè)元素,都為結(jié)構(gòu)體。第一個(gè)是1和ab,第二個(gè)是2和cd
++p->y:由于char *y將y定義為字符,取當(dāng)前p指向的對(duì)象的成員y,
即*(p->y) = a,隨后++(p->y)表示指針向后跳一個(gè),指向b
(++p)->y:++p導(dǎo)致p指向第二個(gè)結(jié)構(gòu)體,
(++p)->y取當(dāng)前p指向的對(duì)象的成員y,即*((++p)->y) = c
讀程序題(30題)
1、下面程序的輸出結(jié)果是?
#include<stdio.h>
int main( )
{
int i=010,j=10,k=0x10;
printf("%d,%d,%d\n",i,j,k);
return 0;
}
答案:8,10,16
解析:i為八進(jìn)制,所以i=1*8^1=8
j為十進(jìn)制,所以j=1*10^1=10
k為十六進(jìn)制,所以k=1*16^1=16
?
2、寫出下面程序的運(yùn)行結(jié)果
#include<stdio.h>
int main( )
{
char a,b,c,d;
a=getchar();
b=getchar();
scanf("%c%c",&c,&d);
putchar(a);
putchar(b);
printf("%c%c",c,d);
return 0;
}
如果從鍵盤輸入 (從下面一行的第一列開始)
1<回車>
234<回車>
則程序的輸出結(jié)果是?
答案:
1
2
解析:getchar()是一次讀一個(gè)字符
putchar()只能輸出一個(gè)字符
?
3、寫出下面程序的運(yùn)行結(jié)果
#include<stdio.h>
int main( )
{
int a;
float b,c;
scanf("%3d%3f%4f",&a,&b,&c);
printf("a=%4d,b=%f,c=%g\n",a,b,c);
return 0;
}
如果從鍵盤輸入 (從下面一行的第一列開始)
1234567.89<回車>
則程序的輸出結(jié)果是?
答案:a=123,b=456.000000,c=7.89
解析:scanf使a、b為3位,c為4為
因?yàn)閍為int型,所以a=123
因?yàn)閎為float型,所以小數(shù)點(diǎn)后有6位數(shù),所以b=456.000000
雖然c也為float型,但因?yàn)閜rintf中c=%g,
將不影響數(shù)字大小0省略了所以c=7.89
?
4、下面程序的輸出結(jié)果是?
#include<stdio.h>
int main( )
{
char ch=’A’+ 10;
printf("C=%c,C=%d,c=%c,c=%d\n",ch,ch,ch+32,ch+32);
return 0;
}
答案:C=K,C=75,C=k,C=107
解析:本題考查ASCII碼,對(duì)照ASCII碼找出數(shù)字對(duì)應(yīng)的字符即可
注意%c輸出字符,%d輸出數(shù)字
?
5、下面程序的輸出結(jié)果是?
#include<stdio.h>
int main()
{
int x=5,y=4,z=3;
if(x==y) z=x; x=y; y=z;
printf("%d,%d,%d\n",x,y,z);
}
答案:x=4,y=3,z=3
解析:因?yàn)閤!=y,所以"z=x"這段無效,只看"x=y; y=z;"
所以x=y=4,y=z=3,z不變
?
6、下面程序的輸出結(jié)果是
#include<stdio .h>
int main()
{
int a,b;
for(a=1,b=1;a<=100;a++)
{
if(b>=20) break;
if(b%3= =1)
{
b+=3;continue;
}
b=-5;
}
printf(“%d\n”,a);
}
答案:8
解析:每次循環(huán)b增加3,a增加1,且當(dāng)b>20(此時(shí)b=22)時(shí)跳出循環(huán),結(jié)束程序。
所以b從1增加到22,有(22-1)/3=7次循環(huán),所以a=1+7=8
b=-5是干擾部分
?
7、下面程序的運(yùn)行結(jié)果是?
#include <stdio.h>
int main( )
{
int i, j;
for(i=1;i<=4;i++)
{
for(j=1;j<=i;j++)
printf(“*”);
printf(“\n”);
}
return 0;
}
答案:
*
**
***
****
解析:for(i=1;i<=4;i++)推進(jìn)層數(shù),for(j=1;j<=i;j++)推進(jìn)每層的"*"數(shù)
?
8、下面程序的輸出結(jié)果是
#include<stdio .h>
int main()
{
int x=l ,y=0 ,a=0 ,b=0;
switch(x)
{
case l:
switch(y)
{
case 0: a++; break;
case 1 :b++;break;
}
case 2:
a++;b++; break;
}
printf("a=%d, b=%d\n" ,a ,b);
}
答案:a=2,b=1
解析:x=1,走switch(y),因?yàn)閥=0,所以a的值+1。
由于switch(x)的case l:結(jié)束沒有break,所以繼續(xù)case 2,a、b都+1。
所以a=2,b=1
?
9、有下列程序段,程序的輸出結(jié)果是
char ch;
int s=0;
for(ch=’A’;ch<’Z’;++ch)
if(ch%2= =0)s++;
printf(“%d”,s);
答案:12
解析:A~Y中有多少字母的ASCII碼可以被2整除
?
10、下面程序的運(yùn)行結(jié)果是?
#include<stdio.h>
void s(int a, int *b)
{
int t;
t=a; a=*b;*b=t;
}
int main()
{
int x=7,y= 10;
s(x,&y);
printf(“%d,%d\n”,x,y);
return 0;
}
答案:7,7
解析:a=*b忽略就行,影響a的地址,不影響a的值
?
11、下面程序的運(yùn)行結(jié)果是?
#include <stdio.h>
int Min(int x, int y)
{
return x<y?x:y;
}
int main( )
{
int x= 13,y=5,z=22;
printf("%d\n", Min(x,Min(y,z)));
return 0;
}
答案:5
解析:定義函數(shù)Min(int x, int y)的作用就是return一個(gè)小的數(shù),
x<y則return x,否則return y
Min(y,z)結(jié)果為y,
Min(x,Min(y,z)等價(jià)于Min(x,y),結(jié)果為y,y=5
?
12、下面程序的運(yùn)行結(jié)果是?
#include<stdio.h>
int fun(int i)
{
return i*i;
}
int main( )
{
int i=0;
i=fun(i);
for(; i<3;i++)
{
static int i=1;
i+=fun(i);
printf("%d, ", i);
}
printf("%d\n",i);
return 0;
}
答案:2,6,42,3
解析:由于static使函數(shù)就被定義成為靜態(tài)函數(shù)
通俗點(diǎn),就是使得for(; i<3;i++)語句塊中的"i”獨(dú)立出來,并且值會(huì)被保留
第一次for循環(huán):i=1+ 1*1= 2
第二次for循環(huán):i= 2+2*2= 6
第三次for循環(huán):i=6+6*6= 42
至此,由于i=3,不符合for循環(huán)的運(yùn)行條件,循環(huán)結(jié)束
而for函數(shù)"( )"內(nèi)的"i"與語句塊中的"i"不是一個(gè)東西,
所以最后的printf("%d\n",i)所輸出的是循環(huán)的次數(shù):3
?
13、下面程序的運(yùn)行結(jié)果是?
#include <stdio.h>
double F(int x)
{
return(3. 14*x*x);
}
int main()
{
int a[3]={1,2,3};
printf("%5.2f\n",F(a[ 1]));
return 0;
}
答案:12.56
解析:%5.2f表示五位有效數(shù)字且小數(shù)點(diǎn)后有兩位數(shù)字的浮點(diǎn)型
其中小數(shù)點(diǎn)算一位數(shù)長(zhǎng),如果實(shí)際位數(shù)小于m,則要在前補(bǔ)齊空格
a[1]=2,所以F(a[1])= F(2)= 12.56
數(shù)長(zhǎng)和小數(shù)點(diǎn)后位數(shù)都完全符合%5.2,所以原樣輸出
?
14、下面程序的運(yùn)行結(jié)果是?
#include <stdio.h>
#define N 4
void fun(int a[][N],int b[])
{
int i;
for(i=0;i<N;i++)
b[i]=a[i][i]-a[i][N-1-i];
}
int main()
{
int x[N][N]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12},
{13,14,15,16}},y[N],i;
fun(x,y);
for(i=0;i<N;i++)
printf("%d,",y[i]);
printf("\n");
return 0;
}
答案:-3,-1,1,3
解析:y[0]= a[0][0]-a[0][4-1-0]= 1-4= -3
y[1]= a[1][1]-a[1][4-1-1]= 6-7= -1
y[2]= a[2][2]-a[2][4-1-2]= 11-10= 1
y[3]= a[3][3]-a[3][4-1-3]= 16-13= 3
?
15、下面程序的運(yùn)行結(jié)果是?
#include <stdio.h>
int f(int a, int b)
{
static int m,i=2;
i+=m+1;
m=i+a+b;
return m;
}
int main()
{
int p,i;
for(i=1;i<=2;i++)
{
p = f(4, 1);
printf("%d\t",p);
}
return 0;
}
答案:8(空7格)17
解析:for(i=1;i<=2;i++):運(yùn)行兩次
static定義靜態(tài)局部變量,即使聲明時(shí)未賦初值,
編譯器也會(huì)把它初始化為0
所以static int m,i=2;等價(jià)于static int m=0,i=2;
第一次循環(huán):i= i+m+1= 2+0+1= 3
m= i+a+b= 3+4+1= 8
第二次循環(huán):i= i+m+1= 3+8+1 =12
m= i+a+b= 12+4+1 =17
空7格的原因:(了解一下就行,不重要)
"\t"是水平制表符,作用是將當(dāng)前位置移動(dòng)到下一個(gè)tab位置
假定某個(gè)字符串在制表符\t的前面有n個(gè)字符,
那么\t將跳過8-n%8個(gè)空格,(將1帶入n,為7格)
即:將光標(biāo)移到最接近8的倍數(shù)的位置,
使得后面的輸入從此開始。
?
16、下面程序的運(yùn)行結(jié)果是?
#include <string.h>
void func(char s[])
{
int i,j;
char c;
for(i=0,j=strlen(s)-1; i<j; i++,j--)
{
c=s[i]; s[i]=s[j]; s[j]=c;
}
}
int main()
{
char str[]="hello";
func(str);
puts(str);
}
答案:olleh
解析:j= strlen(s)-1= 5-1= 4,根據(jù)函數(shù)中的for循環(huán),運(yùn)行2次
第一次循環(huán):c= s[i]= s[0]= h
s[i]= s[j]=> s[0]= s[4]= o
s[j]= c=> s[5]= h
數(shù)組變?yōu)閛ellh
第二次循環(huán):c= s[i]= s[1]= e
s[i]= s[j]=> s[1]= s[3]= l
s[j]= c=> s[3]= e
數(shù)組變?yōu)閛lleh
?
17、下面程序的輸出結(jié)果是?
#include <stdio.h>
int main()
{
int i, x[3][3] = {1,2,3,4,5,6,7,8,9};
for (i=0; i<3; i++)
printf("%3d", x[i][i]);
printf("\n");
return 0;
}
答案:(空2格)1(空2格)5(空2格)9
解析:for (i=0; i<3; i++):運(yùn)行3次
第一次循環(huán):x[0][0]= 1
第二次循環(huán):x[1][1]= 5
第三次循環(huán):x[2][2]= 9
空2格的原因見T13
?
18、下面程序的運(yùn)行結(jié)果是?
#include <stdio.h>
int m= 13;
int fun2(int x, int y)
{
int m=3;
return(x*y-m);
}
int main()
{
int a=7, b=5;
printf("%d\n",fun2(a,b)/m);
return 0;
}
答案:2
解析:函數(shù)fun2(a,b)返回的x*y-m= 7*5-13= 22
由于"%d",fun2(a,b)/m= 22/13= 2
?
19、下面程序的運(yùn)行結(jié)果是? (ASCII碼,‘0’=32;‘9’=41)
#include <stdio.h>
int main()
{
char ch[7]="65ab21";
int i, s=0;
for(i=0; ch[i]>='0' && ch[i]<='9';i+=2)
s= 10*s+ch[i]-'0';
printf("%d\n",s);
}
答案:6
解析:for(i=0; ch[i]>='0' && ch[i]<='9';i+=2):循環(huán)1次,
一次后i=2,ch[i]= 97,不符合循環(huán)條件
第一次循環(huán):s=10*s+ch[i]-'0'
=10*0+54-48
=6
這題很離譜,題干里給的ASCII碼是錯(cuò)誤的,
實(shí)際上‘0’=48;‘9’=57,不做評(píng)價(jià)
?
20、下面程序的運(yùn)行結(jié)果是?
#include<stdio.h>
f(char s[ ])
{
int i,j;
i=0;j=0;
while(s[j]!='\0')
j++;
return (j-i);
}
int main()
{
printf("%d\n",f("ABCDEF"));
return 0;
}
答案:6
解析:char s[ ]="ABCDEF",實(shí)際上有7個(gè)字符,第七位為"\0"
所以while(s[j]!='\0') 要循環(huán)6次,直到s[j]='\0'
j-i= 6-0= 6
?
21、下面程序的運(yùn)行結(jié)果是?
#include <stdio.h>
int p(int x, int y, int* z);
int main()
{
int x, y, z;
x = 5; y = 7; z = 4;
p(7,x + y + z, &x);
printf("%d ,%d ,%d", x, y, z);
return 0;
}
int p(int x, int y, int * z)
{
return *z = y - x - *z;
}
答案:4,7,4
解析:int * z對(duì)應(yīng)&x,值為x=5
所以return *z= y - x - *z=> *z
= (x + y + z)-7-x
=16-7-5
=4
所以x=4
?
22、 下面程序的運(yùn)行結(jié)果是?
#include<stdio.h>
int main( )
{
int array[]={6,7,8,9,10},*ptr;
ptr=array; *(ptr+2) +=2;
printf("%d, %d\n", *ptr, *(ptr+2));
return 0;
}
答案:6,10
解析:*ptr= ptr[0]= 6
*(ptr+2)= +2=> *(ptr+2)= *(ptr+2)+2
=ptr[2]+2= 8+2
=10
?
23、下面程序的運(yùn)行結(jié)果是?
#include<stdio.h>
void fun(int *a, int *b)
{
int *c; c=a; a=b; b=c;
}
int main( )
{
int x=3,y=5, *p=&x,*q=&y;
fun(p,q);
printf("%d, %d\n", *p, *q);
fun(&x,&y);
printf("%d, %d\n", *p, *q);
return 0;
}
答案:
3,5
3,5
解析:*p=&x:x的地址付給p,p里存的是一個(gè)數(shù)值x
所以*p=3,*q=5
fun(p,q)為無效代碼,格式不符,跑不出東西
p=&x:p的內(nèi)存地址指向x所在的內(nèi)存地址
fun(&x,&y)也一樣,沒用
?
24、下面程序的運(yùn)行結(jié)果是?
#include<stdio.h>
int main( )
{
int array[]={1,2,3,4,5},y=0,i,*p;
p=&array[4];
for(i=0; i<=3; i++)
{
y=y+*p; p--;
}
printf("%d\n", y);
return 0;
}
答案:14
解析: for(i=0; i<=3; i++):運(yùn)行4次
第一次循環(huán):y= 0+array[4]= 0+5= 5
第二次循環(huán):y= 5+array[4]-1= 5+4= 9
第三次循環(huán):y= 9+array[4]-1-1= 9+3= 12
第四次循環(huán):y= 12+array[4]-1-1-1= 12+2= 14
?
25、如果輸入 ABC<回車> ,請(qǐng)寫出運(yùn)行結(jié)果
#include<stdio.h>
#include<string.h>
int main()
{
char ss[10]="1,2,3,4,5";
gets(ss);
strcat(ss,"6789");
printf("%s\n",ss);
}
答案:ABC6789
解析:gets(ss)記錄輸入的ABC
strcat(ss,"6789")連接"ABC"與"6789",結(jié)果放在"ss"中
?
26、下面程序的運(yùn)行結(jié)果是?
#include<stdio.h>
int main()
{
char s[]="12a021b230";
int i,v0,v1,v2,v3,vt;
v0=v1=v2=v3=vt=0;
for(i=0;s[i];i++)
{
switch(s[i]-'0')
{
case 0: v0++;
case 1: v1++;
case 2: v2++;
case 3: v0++; break;
default: vt++;
}
}
printf("%d,%d,%d,%d,%d\n",v0,v1,v2,v3,vt);
return 0;
}
答案:10,4,7,0,2
解析: for(i=0;s[i];i++):從頭走到尾,直到一維數(shù)組結(jié)束,共運(yùn)行10次
第一次循環(huán):v0=1; v1=1; v2=1; v3=0; vt=0
第二次循環(huán):v0=2; v1=1; v2=2; v3=0; vt=0
第三次循環(huán):v0=2; v1=1; v2=2; v3=0; vt=1
第四次循環(huán):v0=4; v1=2; v2=3; v3=0; vt=1
第五次循環(huán):v0=5; v1=2; v2=4; v3=0; vt=1
第六次循環(huán):v0=6; v1=3; v2=5; v3=0; vt=1
第七次循環(huán):v0=6; v1=3; v2=5; v3=0; vt=2
第八次循環(huán):v0=7; v1=3; v2=6; v3=0; vt=2
第九次循環(huán):v0=8; v1=3; v2=6; v3=0; vt=2
第十次循環(huán):v0=10; v1=4; v2=7; v3=0; vt=2
?
27、下面程序的運(yùn)行結(jié)果是?
#include<stdio.h>
#define P 2
#define POWER(x) P*x*x
main()
{
int x= 1 ,y=2;
printf("%d,%d" ,POWER(x+y),POWER(y+x));
}
答案:6,7
解析:POWER(x+y)= 2*1+2*1+2= 2+2+2=6
POWER(y+x)= 2*2+1*2*1= 4+2+1= 7
?
28、下面程序的運(yùn)行結(jié)果是?
#include<stdio.h>
#define SUB(X,Y) (X)*Y
main()
{
int a=3,b=4;
printf("%d\n", SUB(a+b,b++));
}
答案:28
解析:SUB(a+b,b++)= (3+4)*4++= 7*4= 28
?
29、下面程序的運(yùn)行結(jié)果是?
#include <stdio.h>
struct abc {int a,b,c;};
int main()
{
struct abc s[2]={1,2,3,4,5,6};
int t;
t=s[0].a+s[1].b;
printf(“%d\n”,t);
return 0;
}
答案:6
解析:在main函數(shù)中定義了一個(gè)struct abc類型的數(shù)組
struct abc {int a,b,c;}所以3個(gè)數(shù)一組,
struct abc s[2]={1,2,3,4,5,6};可理解為{{a,b,c}{a,b,c}},列數(shù)為2的一維數(shù)組,一列3個(gè)數(shù)
即:同時(shí)分別利用{1,2,3}及(4,5,6}對(duì)數(shù)組中兩個(gè)元素進(jìn)行初始化
在該結(jié)構(gòu)體,依次對(duì)其中的a、b、c三個(gè)變量進(jìn)行初始化
故s[0].a=1,s[1].b=5,所以本題輸出為6
?
30、下面程序的運(yùn)行結(jié)果是?
#include <stdio.h>
struct cmp{int x,y}cn[]={1,3,2,7};
int main()
{
printf(“%d\n”,cn[0].y*cn[1].x); return 0;
}
答案:6
解析:思路和上一題一樣,struct cmp{int x,y}所以2個(gè)數(shù)一組
cn[0].y=3,cn[1].x=2
所以cn[0].y*cn[1].x= 3*2= 6
程序填空(17題)
答案僅供參考,部分答案不是唯一的
1、按照輸出結(jié)果,完成下面程序
#include <stdio.h>
int main()
{
int year, month,day;
printf("請(qǐng)用標(biāo)準(zhǔn)格式輸入一個(gè)日期 (YYYY-MM-DD) :") ;
scanf("_____(1)_____",_____(2)_____);
printf("_____(3)_____\n",_____(4)_____);
return 0;
}
運(yùn)行結(jié)果:
請(qǐng)用標(biāo)準(zhǔn)日期格式輸入一個(gè)日期 (YYYY-MM-DD) :
若用戶從鍵盤輸入:2022- 12- 12<回車>
則輸出結(jié)果為:
2022 年 12 月 12 日
答案:
(1):%d-%d-%d
(2):&year,&month,&day
(3):"%d年%d月%d日"
(4):year,month,day
解析:
(1)year, month,day;都是int型,所以用%d
(2)"&"使得"%d"取得對(duì)應(yīng)位置
(3)輸出結(jié)果帶"年 月 日",int型只傳遞數(shù)值
(4)按順序?qū)?yīng)前面的位置
?
2、完成下面程序,計(jì)算圓的面積,結(jié)果保留兩位小數(shù):
#include <stdio.h>
int main()
{
double pi=3. 14159; /*定義只讀常量 pi*/
double r;
scanf("_____(1)_____", &r);
printf(" area=_____(2)_____",_____(3)_____);
return 0;
}
答案:
(1):%lf
(2):%.2lf
(3):pi*r*r
解析:
(1)"r"是double型,所以用"%lf"
(2)結(jié)果保留兩位小數(shù),所以用"%.2lf"
(3)原面積公式對(duì)應(yīng)"%.2lf"的格式
?
3、完成下面程序,利用 for 循環(huán)語句計(jì)算求和問題:
S1000 = 1 - 1/2 + 1/3 - 1/4 +...+ 1/999 - 1/1000
#include <stdio.h>
int main()
{
float S=_____(1)_____;
int i,sign=- 1;
for(i=2;_____(2)_____;i++)
{
S=S+_____(3)_____;
sign=-sign;
}
printf("%.5f\n",S);
return 0;
}
答案:
(1):1
(2):i<=1000
(3):1/i*sign
解析:
(1)for從2開始,所以S的初始量應(yīng)當(dāng)為1
(2)結(jié)尾是1/1000,所以for要循環(huán)到i>1000才能停下,所以i<=1000是for循環(huán)的條件
(3)"1/i*sign"使得2~1000變?yōu)?/2~1/1000
?
4、完成下面的程序,求 1 !+3 !+5 !+……+n !的和。
#include <stdio.h>
void main()
{
long int f,s;
int i,j,n;
_____(1)_____;
scanf("%d",&n);
for(i=1;i<=n;_____(2)_____)
{
f=1;
for(j=1; _____(3)_____;j++)
_____(4)_____;
s=s+f;
}
printf("n=%d,s=%ld\n",n,s);
}
答案:
(1):s=0
(2):i+=2
(3):j<=i
(4):f*=s
解析:
(1)for循環(huán)從1開始,所以初始量為0,"s=s+f"確定s為總和
(2)求 1 !+3 !+5 !+……+n !的和,所以每次i需要+2
(3)每次乘到n時(shí)停止,n是根據(jù)外層for循環(huán)定的
(4)這部分負(fù)責(zé)將單個(gè)的n!算出
?
5、完成下面的程序,求兩個(gè)非負(fù)整數(shù)的最大公約數(shù)和最小公倍數(shù)。
#include<stdio.h>
void main()
{
int m,n,r,p,gcd,lcm;
scanf("%d%d",&m,&n);
if(m<n)
{
p=m,m=n;n=p;
}
p=m*n;
r=m%n;
while(r != 0 )
{
m=n;n=r;_____(1)_____;
}
gcd=_____(2)_____;
lcm=p/gcd;
printf("gcd=%d,lcm=%d\n",_____(3)_____);
}
答案:
(1):r=m%n
(2):n
(3):gcd,lcm
解析:
(1)變量 r 來存儲(chǔ) m 對(duì) n 取模(即余數(shù))。
通過循環(huán)計(jì)算 m 對(duì) n 取模的結(jié)果,直到余數(shù)等于0,此時(shí) n 就是最大公約數(shù)
(2)此時(shí) n 就是最大公約數(shù),所以gcd=n
(3)使用 printf() 函數(shù)打印最大公約數(shù)和最小公倍數(shù)的值
?
6、編寫遞歸函數(shù)實(shí)現(xiàn)求兩個(gè)整數(shù)的最大公約數(shù),主函數(shù)讀入待求的兩個(gè)整數(shù)并調(diào)用公約數(shù)函求解,輸出結(jié)果。
#include<stdio.h>
int gcd ( int m, int n)
{
int r;
r=m%n;
if_____(1)_____,
return n;
return_____(2)_____;
}
int main( )
{
int m, n;
scanf("%d%d", &m, &n);
printf ( "Gcd of m and n is: %d\n",_____(3)_____);
return 0;
}
答案:
(1):(r==0)
(2):gcd(m,r)
(3):gcd(m,n)
解析:
(1)計(jì)算 m 對(duì) n 取余數(shù)的結(jié)果 r。然后使用條件判斷語句判斷 r 是否等于0,
如果等于0,則表示 n 是最大公約數(shù),直接返回 n。
(2)如果 r 不等于0,則調(diào)用遞歸函數(shù) gcd(),將 n 作為新的 m,將 r 作為新的 n,
繼續(xù)計(jì)算新的余數(shù),直到最終余數(shù)等于0,返回最大公約數(shù)。
(3)調(diào)用遞歸函數(shù) gcd(),傳入 m 和 n 作為參數(shù),獲取最大公約數(shù)的結(jié)果。
最后使用 printf() 函數(shù)打印最大公約數(shù)的值
?
7、完成下面程序,給一維數(shù)組輸人數(shù)據(jù)后,找出下標(biāo)為偶數(shù)的元素的最小值并輸出。
#include <stdio.h>
int main ( )
{
int a[ 10], min;
int i;
for (i=0; i<10;i++)
_____(1)_____
min=a[0]:
for (i=2;i<10;_____(2)_____)
if(_____(3)_____)
min=a[i];
printf ("%d", min);
return 0;
}
答案:
(1):scanf(“%d”,&a[i])
(2):i+=2
(3):min>a[i]
解析:
(1)使用 for 循環(huán)遍歷數(shù)組,通過 scanf() 函數(shù)從鍵盤輸入數(shù)組元素的值,
并存儲(chǔ)在相應(yīng)的數(shù)組位置上
(2)使用 for 循環(huán)遍歷數(shù)組,從下標(biāo)為2的元素開始,
每次移動(dòng)兩個(gè)位置,即找出下標(biāo)為偶數(shù)的元素
(3)使用條件判斷語句比較當(dāng)前元素 a[i] 與 min 的值,
如果 a[i] 小于 min,則將 a[i] 賦值給 min
?
8、以下程序求得二維數(shù)組 a 的每行最大值,并存儲(chǔ)在數(shù)組b 中,請(qǐng)將程序補(bǔ)充完整。
#include <stdio.h>
void fun (int ar[ ][4], int bar[], int m, int n)
{
int i, j;
for(i=0;i<m;i++)
{
_____(1)_____;
for(j=1;j<n;j++)
if(ar[i][j]>bar[i])
bar[i]=ar[i][j];
}
}
int main ()
{
int a[3][4] = {{12,41,36,28}, { 19,33,15,27}, {3,27,19,1}}, b[3], i;
_____(2)_____;
for (i=0;i<3;i++)
printf ("%4d", b[i]);
printf("\n");
return 0;
}
答案:
(1):bar[i]=ar[i][0]
(2):fun(a,b,3,4)
解析:
(1)使用兩個(gè)嵌套的 for 循環(huán)遍歷數(shù)組ar,從每行的第一個(gè)元素開始,找出每行中的最大值,
并將最大值存儲(chǔ)在數(shù)組 bar 中相應(yīng)的位置上
(2)調(diào)用函數(shù) fun(a, b, 3, 4),將數(shù)組 a 和其行數(shù)、列數(shù)作為參數(shù)傳遞給函數(shù) fun()
?
9、完成下面程序,給一維數(shù)組輸入數(shù)據(jù),
調(diào)用函數(shù) fun 找出下標(biāo)為偶數(shù)的元素的最小值,在主函數(shù)中輸出該值。
#include<stdio.h>
int fun(int *arr,int n)
{ int i, min;
min=arr[0];
for(i=2;i<10;i+=2 )
if(_____(1)_____)
min=arr[i];
return min;
}
int main()
{
int i,a[ 10];
for(i=0;i<10;i++)
scanf("%d", _____(2)_____);
printf("最小值為:%d\n",_____(3)_____);
return 0;
}
答案:
(1):min=arr[i]
(2):&a[i]
(3):fun(a,10)
解析:
(1)
(2)
(3)
?
10、下列程序讀出文本文件 C:\dream.txt 中的內(nèi)容,
將所有小寫字母改為大寫字母并輸出,請(qǐng)將程序補(bǔ)充完整。
#include<stdio.h>
#include<stdlib.h>
int main()
{
_____(1)_____;
char ch;
fp=fopen("C:\\dream.txt","r");
if(fp==NULL)
{
printf("file error!\n");
exit(0);
}
while((ch= _____(2)_____)!=EOF)
{
if(ch>='a' && ch<='z')
{
_____(3)_____;
}
putchar(ch);
}
putchar('\n');
_____(4)_____;
}
答案:
(1):FILE *fp
(2):fgetc(fp)
(3):ch-=32
(4):fclose(fp)
解析:
(1)
(2)
(3)
?
11、完成程序,將數(shù)組 array 中的數(shù)據(jù)逆序存放
#include<stdio.h>
int main( )
{
int array[ 10], i,j,t;
for(i=0;i<=9;i++)
{
scanf("%d",_____(1)_____);
}
i=0;j=9;
while(i<9)
{
t=*(array+i);
_____(2)_____;
_____(3)_____;
i++;j--;
}
for(i=0;i<=9;i++)
{
printf("%3d",_____(4)_____);
}
return 0;
}
答案:
(1):&array[i]
(2):*(array+i)=*(array+j)
(3):*(array+j)=t
(4):array[i]
?
12、完成程序,將十進(jìn)制轉(zhuǎn)變?yōu)槎M(jìn)制,二進(jìn)制的每一位存放在數(shù)組中
#include<stdio.h>
int main( )
{
int b[16],x,k,r,i;
printf("輸入一個(gè)整型數(shù):");
scanf("%d",_____(1)_____);
k=- 1;
do
{
r=x%2; k++; *_____(2)_____=r; x=x/2'
} while _____(3)_____;
//對(duì)二進(jìn)制進(jìn)行輸出
for(_____(4)_____;_____(5)_____;i--)
{
printf("%ld", *_____(6)_____);
}
return 0;
}
答案:
(1):&x
(2):(b+k)
(3):(k<15)
(4):i=k
(5):i>=0
(6):*(b+i)
?
13、給出矩陣的主對(duì)角線之和并找出最大元素
#include<stdio.h>
int f(int a[3][3], int *max, int n)
{
int i,j,s=0;
*max=a[0][0];
for(i=0; i<n;i++)
{
s = s+ _____(1)_____;
for(j=0; _____(2)_____; j++)
{
if(_____(3)_____) *max=a[i][j];
}
}
return s;
}
int main( )
{
int a[3][3]={1,-2,9,4,-8,6,7,0,5}; int max,sum;
sum=f(_____(4)_____);
printf("sum=%d, max=%d\n", sum, max);
return 0;
}
答案:
(1):a[i][i]
(2):j<n
(3):*max<a[i][j]
(4):a,&max,3
?
14、用以下delnum 函數(shù)實(shí)現(xiàn)刪除字符串 s 中的數(shù)字字符
delnum(char *s)
{
int i,j;
for( i=0,j=0; s[i]!='\0'; i++)
{
if_____(1)_____
{
s[j]=s[i];
_____(2)_____;
}
}
_____(3)_____;
}
答案:
(1):s[i] >=‘0’ &&s[i] <= ‘9’
(2):j++
(3):s[j] = ‘\0’
?
15、完成以下程序,該程序統(tǒng)計(jì)一個(gè)字符串中單詞的個(gè)數(shù),單詞以空格分隔。
#include<stdio.h>
#include<string.h>
int main( )
{
int i,num=0,word=0;
char str[80];
_____(1)_____;
printf("%s",str);
for(i=0;i<_____(2)_____;i++)
{
if(str[i]==' ')
{
word=0;
}
else if
{
word=1; num++;
}
}
printf("%d\n",num);
return 0
}
答案:
(1):gets(str)
(2):i<strlen(str)
?
16、有五個(gè)學(xué)生,每個(gè)學(xué)生有 3 門課的成績(jī),從鍵盤輸入以上數(shù)據(jù) (包括學(xué)生號(hào),姓名,三 門課成績(jī)) ,
計(jì)算出平均成績(jī),設(shè)原有的數(shù)據(jù)和計(jì)算出的平均分?jǐn)?shù)存放在磁盤文件"stud"中。
請(qǐng)將程序補(bǔ)充完整。
#include<stdio.h>
struct student
{
char num[6];
char name[8];
int score[3];
float avr;
} stu[5];
main()
{
int i,j,sum;
FILE *fp;
for(i=0;i<5;i++)
{
printf("\n please input No. %d score:\n",i);
printf("stuNo:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
sum=0;
for(j=0;_____(1)_____;j++)
{
printf("score %d.",j+1);
scanf("%d",&stu[i].score[j]);
sum+=stu[i]. _____(2)_____;
}
stu[i].avr=sum/3.0;
}
fp=fopen("stud","w");
for(i=0;i<5; i++)
if(fwrite(&stu[i],sizeof(_____(3)_____), 1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
答案:
(1):j<=2
(2):.score[j]
(3):struct,student
?
17、 以下程序的功能是按學(xué)生姓名查詢其排名和平均成績(jī),查詢可連續(xù)進(jìn)行,
直到鍵入 0 時(shí)結(jié)束,請(qǐng)?jiān)诳瞻滋幪钊胝_內(nèi)容。
#include<stdio .h>
#include<string.h>
#_____(1)_____ NUM 4
struct student
{
int rank;char * name;float score;
};
_____(2)_____ stu[ ]={3 ,"Tom" , 98.3,
4 ,"Mary" ,78.2,
l ,"Jack" ,95. 1,
2 ,"Jim" , 90.6,};
main()
{
_____(3)_____ str[ 10];
int i;
do
{
printf("Enter a name:");
scanf("%s" ,_____(4)_____);
for(i=0;i<_____(5)_____;i++)
if(_____(6)_____)
{
printf("name:%8s\n" ,stu[i].name);
printf("rank:%3s\n" ,stu[i].rank);
printf("average:%5. 1f\n" ,stu[i].score);
_____(7)_____;
}
if(i>=NUM)
printf("Not found\n");
} while(_____(8)_____(str ,"0")!=0) ;
}
答案:
(1):define
(2):struct
(3):char str[10]
(4):str
(5):i<NUM
(6):strcmp(stu[i].name,str)==0
(7):break
(8):strcmp
編程題(6題)
22級(jí)考的是第3題
1 、編寫程序:
(1) 定義函數(shù) int fun(int a[], int m); 實(shí)現(xiàn)查找小于或者等于 m 的所有素?cái)?shù)并放在數(shù)組中,
??函數(shù)返回所求出的素?cái)?shù)的個(gè)數(shù)。
(2) 定義主函數(shù),主函數(shù)中首先定義一個(gè)數(shù)組 array;接著從鍵盤輸入任意一個(gè)整數(shù) m (<1000) ,
??然后調(diào)用函數(shù) fun 輸入數(shù)組和整數(shù) m ,并將查找出的素?cái)?shù)和素?cái)?shù)個(gè)數(shù)打印出來。
#include <stdio.h>
int prime(int num) //定義了一個(gè)函數(shù)isPrime來判斷一個(gè)數(shù)是否為素?cái)?shù)
{
if (num < 2)
{
return 0;
}
for (int i = 2; i*i <= num; i++)
{
if (num % i == 0)
{
return 0;
}
}
return 1;
}
int fun(int a[], int m) //定義了函數(shù)fun來查找小于或等于給定整數(shù)m的素?cái)?shù),
{ 并將結(jié)果存儲(chǔ)在給定的數(shù)組中
int count = 0;
for (int i = 2; i <= m; i++)
{
if (prime(i))
{
a[count] = i;
count++;
}
}
return count;
}
int main()
{
int array[1000]; //定義了一個(gè)數(shù)組array和一個(gè)變量m
int m;
printf("輸入一個(gè)整數(shù)m: ");
scanf("%d", &m); //然后從鍵盤輸入一個(gè)整數(shù)m
int count = fun(array, m); //調(diào)用函數(shù)fun來輸入數(shù)組和整數(shù)m
printf("小于或等于的質(zhì)數(shù) %d: ", m);
for (int i = 0; i < count; i++)
{
printf("%d ", array[i]); //將查找到的素?cái)?shù)打印出來。
}
printf("\n");
printf("質(zhì)數(shù)數(shù)量為: %d\n", count); //將查找到的素?cái)?shù)個(gè)數(shù)打印出來。
return 0;
}
2、編寫程序:
(1) 定義函數(shù) int BubbleSort(int a[],int n),用冒泡法將數(shù)組元素按照從大到小的順序 排序。 (4 分)。
(2) 定義輸入函數(shù) void Input(int a[],int n); 實(shí)現(xiàn)從鍵盤輸入數(shù)組 a 中的 n 個(gè)元素(3 分)。
(3) 定義輸入函數(shù) void Print(int a[],int n); 實(shí)現(xiàn)輸出數(shù)組 a 中的 n 個(gè)元素(3 分)。
(4) 定義主函數(shù),主函數(shù)中首先定義一個(gè)含 15 個(gè)元素的數(shù)組;
??接著調(diào)用 Input 函數(shù)輸入 10 個(gè)數(shù)組元素;
??在主函數(shù)中調(diào)用BubbleSort 函數(shù)對(duì)數(shù)組的元素進(jìn)行排序,
??并將排序的結(jié)果使 用 Print 函數(shù)打印輸出 (5 分) 。
#include <stdio.h>
void Input(int a[], int n) //定義了Input()函數(shù)用于輸入數(shù)組的元素
{
printf("請(qǐng)輸入 %d 個(gè)元素:\n", n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
}
void Print(int a[], int n) //定義了Print()函數(shù)用于輸出數(shù)組的元素
{
printf("數(shù)組的元素為:\n");
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
int BubbleSort(int a[], int n) //在BubbleSort()函數(shù)中使用冒泡排序算法
{ 對(duì)數(shù)組 a 進(jìn)行從大到小的排序
for (int i = 0; i < n-1; i++)
{
for (int j = 0; j < n-i-1; j++)
{
if (a[j] < a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
int main()
{
int a[15]; //定義了含有15個(gè)元素的數(shù)組a
int n = 10;
Input(a, n); //調(diào)用Input()函數(shù)輸入10個(gè)數(shù)組元素
BubbleSort(a, n); //使用 BubbleSort() 函數(shù)對(duì)數(shù)組進(jìn)行排序
Print(a, n); //使用 Print() 函數(shù)輸出排序后的數(shù)組元素
return 0;
}
3、編寫程序:
??在考生文件夾下,給定程序 pingyou.c 的功能是:學(xué)習(xí)優(yōu)良獎(jiǎng)的條件如下:
??所考 5 門課的總成績(jī)?cè)?450 分 (含) 以上;或者每門課都在 88 分 (含) 以上。
??輸入某學(xué)生 5 門課的考試成 績(jī),輸出是否夠?qū)W習(xí)優(yōu)良獎(jiǎng)的條件。
#include <stdio.h>
int main()
{
int scores[5]; //聲明一個(gè)大小為5的整型數(shù)組scores來存儲(chǔ)某學(xué)生的5門課的考試成績(jī)
int sum = 0; //變量total被初始化為0,用于存儲(chǔ)所有成績(jī)的總和
int excellent = 0; //excellent被初始化為0,用于標(biāo)記是否符合學(xué)習(xí)優(yōu)良獎(jiǎng)的條件
printf("請(qǐng)輸入某學(xué)生5門課的考試成績(jī)(每門成績(jī)一行):\n");
for (int i = 0; i < 5; i++)
{
scanf("%d", &scores[i]); //依次輸入5門課的考試成績(jī),并將成績(jī)存儲(chǔ)到數(shù)組scores中
sum += scores[i]; //計(jì)算總和sum
if (scores[i] < 88) //如果有任何一門課的成績(jī)低于88分,則excellent被置為0
{
excellent = 0;
}
}
if (sum >= 450) //程序判斷總成績(jī)是否大于等于450,
{ 如果是,則將isExcellent置為1,
excellent = 1; 表示滿足學(xué)習(xí)優(yōu)良獎(jiǎng)的條件。
}
if (excellent) //根據(jù)isExcellent的值,程序輸出對(duì)應(yīng)的提示信息,
{ 告知學(xué)生是否符合學(xué)習(xí)優(yōu)良獎(jiǎng)的條件
printf("學(xué)生符合學(xué)習(xí)優(yōu)良獎(jiǎng)的條件\n");
}
else
{
printf("學(xué)生不符合學(xué)習(xí)優(yōu)良獎(jiǎng)的條件\n");
}
return 0;
}
4、編寫程序:
??輸入一個(gè) 3 ×4 的二維整數(shù)矩陣,要求實(shí)現(xiàn)兩個(gè)功能:
??(1) 實(shí)現(xiàn)矩陣的轉(zhuǎn)置;
??(2) 遍歷矩 陣,輸出矩陣中最大的數(shù)及其下標(biāo)。
#include <stdio.h>
void transposeMatrix(int matrix[][4], int transpose[][3])
{ //定義了函數(shù)transposeMatrix來實(shí)現(xiàn)矩陣的轉(zhuǎn)置
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
transpose[i][j] = matrix[j][i];
}
}
}
void findMax(int matrix[][4], int *max, int *row, int *col)
{ //定義了函數(shù)indMax來查找矩陣中最大數(shù)及其下標(biāo)
*max = matrix[0][0];
*row = 0;
*col = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
if (matrix[i][j] > *max)
{
*max = matrix[i][j];
*row = i;
*col = j;
}
}
}
}
int main()
{
int matrix[3][4]; //定義了一個(gè)3x4的整數(shù)矩陣matrix
int transpose[4][3]; //定義了一個(gè)4x3的整數(shù)矩陣transpose
int max, maxRow, maxCol;
printf("Enter the elements of the matrix (3x4):\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
scanf("%d", &matrix[i][j]); //鍵盤輸入矩陣的元素
}
}
transposeMatrix(matrix, transpose); //調(diào)用transposeMatrix函數(shù)來進(jìn)行矩陣的轉(zhuǎn)置
findMax(matrix, &max, &maxRow, &maxCol); //調(diào)用findMax函數(shù)來查找矩陣中最大的數(shù)及其下標(biāo)
printf("Matrix transpose:\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", transpose[i][j]);
}
printf("\n"); //將轉(zhuǎn)置后的矩陣打印出來。
}
printf("矩陣中的最大元素: %d\n", max); //將最大數(shù)打印出來。
printf("最大元素位于第%d行%d列 %d\n", maxRow, maxCol); //將最大數(shù)的下標(biāo)打印出來。
return 0;
}
5 、編寫一個(gè)結(jié)構(gòu)體類型的程序,定義一個(gè)結(jié)構(gòu)體變量 struct student ,
??其包含學(xué)號(hào),姓名, 三門課的成績(jī),成績(jī)用數(shù)組保存,
??要求輸入 10 個(gè)結(jié)構(gòu)體變量學(xué)生的學(xué)號(hào)、姓名、3 門課程 的成績(jī),求出總分最高的學(xué)生并輸出。文章來源:http://www.zghlxwxcb.cn/news/detail-767480.html
#include<stdio.h>
#define NUM_STUDENTS 10
#define NUM_COURSES 3
struct student //定義了一個(gè)結(jié)構(gòu)體類型struct student,
{
int student_id; //學(xué)號(hào)student_id
char name[100]; //姓名name
int scores[NUM_COURSES]; //成績(jī)scores數(shù)組
};
int main()
{
struct student students[NUM_STUDENTS]; //在main函數(shù)中創(chuàng)建NUM_STUDENTS個(gè)
int i, j; struct student類型的數(shù)組students用于存儲(chǔ)學(xué)生信息
// 輸入學(xué)生信息和成績(jī)
for(i = 0; i < NUM_STUDENTS; i++)
{
printf("學(xué)生%d的學(xué)號(hào):", i+1); //第一重循環(huán)中,依次輸入每個(gè)學(xué)生的學(xué)號(hào)和姓名
scanf("%d", &(students[i].student_id));
printf("學(xué)生%d的姓名:", i+1);
scanf("%s", students[i].name);
printf("學(xué)生%d的成績(jī):\n", i+1); //第二重循環(huán)中,依次輸入每個(gè)學(xué)生的三門課程的成績(jī)。
for(j = 0; j < NUM_COURSES; j++)
{
printf("第%d門課成績(jī):", j+1);
scanf("%d", &(students[i].scores[j]));
}
}
// 計(jì)算總分最高的學(xué)生
int max_total_score = 0;
int max_total_score_index = 0;
for(i = 0; i < NUM_STUDENTS; i++) //第三個(gè)循環(huán)中,計(jì)算每個(gè)學(xué)生的總分,
{
int total_score = 0;
for(j = 0; j < NUM_COURSES; j++)
{
total_score += students[i].scores[j];
}
if(total_score > max_total_score)
{
max_total_score = total_score; //并記錄總分最高的學(xué)生的索引max_total_score_index
max_total_score_index = i;
}
}
// 利用max_total_score_index輸出總分最高的學(xué)生信息
printf("\n總分最高的學(xué)生信息:\n");
printf("學(xué)號(hào):%d\n", students[max_total_score_index].student_id); //輸出學(xué)號(hào)
printf("姓名:%s\n", students[max_total_score_index].name); //輸出姓名
printf("總分:%d\n", max_total_score); //輸出總分
return 0;
}
6 、斐波那契數(shù)列 (Fibonacci sequence) ,又稱“黃金分割”數(shù)列,
??比如這樣一個(gè)數(shù)列:1 ,1, 2 ,3 ,5 ,8 ,13 ,21 ,34 ,55 ,89… …
??數(shù)列從第 3 項(xiàng)開始,每一項(xiàng)都等于前兩項(xiàng)之和。試用 遞歸函數(shù)來實(shí)現(xiàn)斐波那契數(shù)列的求解。文章來源地址http://www.zghlxwxcb.cn/news/detail-767480.html
#include <stdio.h>
// 遞歸函數(shù)求解斐波那契數(shù)列
int fibonacci(int n)
{
if (n <= 1)
{
return n; //當(dāng)參數(shù) n 小于等于1時(shí),函數(shù)返回 n
}
return fibonacci(n-1) + fibonacci(n-2);
} //否則,函數(shù)返回前兩項(xiàng) fibonacci(n-1)和fibonacci(n-2) 的和
int main()
{
int n;
printf("請(qǐng)輸入要求解的斐波那契數(shù)列的項(xiàng)數(shù):");
scanf("%d", &n); //輸入要求解的斐波那契數(shù)列的項(xiàng)數(shù)
printf("斐波那契數(shù)列前 %d 項(xiàng)為:\n", n);
for (int i = 0; i < n; i++) //通過循環(huán)利用fibonacci()函數(shù)
{ 來打印出相應(yīng)的數(shù)列項(xiàng)
printf("%d ", fibonacci(i));
}
return 0;
}
到了這里,關(guān)于南京郵電大學(xué)通達(dá)學(xué)院 高級(jí)語言程序設(shè)計(jì)(C語言) 題庫(kù)選擇、填空、讀程序題答案及解析、程序填空答案、編程題答案及代碼作用的概括性說明的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!