(21)以下程序的輸出結(jié)果是________。
main()
{ int a=-l,b=l,k;
if((++a<0)&&!(b--<=0))
printf("%d %d\n",a,b);
else
printf("%d %d\n”,b,a);
}
A)-l l B)0 1
C)1 0 D)0 0
(21)C
知識點(diǎn):if條件的判斷
評析:邏輯運(yùn)算符的優(yōu)先次序如下:!(非)→&&(與)→||(或),但本題需特別注意的是短路的概念:對于&&運(yùn)算符,其兩邊表達(dá)式的值只要有一邊為假,則整個(gè)與運(yùn)算表達(dá)式的值即為假,系統(tǒng)在執(zhí)行時(shí),先運(yùn)算&&左邊的表達(dá)式,若為假,則系統(tǒng)不會(huì)再判斷&&運(yùn)算符右邊的表達(dá)式了,直接運(yùn)用短路原理得整個(gè)與運(yùn)算表達(dá)式的值為0。由于++a是先運(yùn)算后使用,b--是先使用后運(yùn)算。所以本題在執(zhí)行++a后,a值為0,不滿足條件,所以a為l,根據(jù)短路原理,b仍為0,接下去執(zhí)行else語句,輸出l 0。
(22)以下選項(xiàng)中,能定義s為合法的結(jié)構(gòu)體變量的是________。
A) typedef struct abc
{ double a;
char b[10];
}s;
B ) struct
{ double a;
char b[10];
}s;
C) struct ABC
{ double a;
char b[10];
}
ABC s;
D ) typedef ABC
{ double a;
char b[10];
}
ABC s:
(22)B
知識點(diǎn):結(jié)構(gòu)體變量的定義
評析:定義一個(gè)結(jié)構(gòu)體類型的變量,可采用三種方法:
①先定義結(jié)構(gòu)體類型,再定義變量名;
②在定義類型的同時(shí)定義變量;
③直接定義結(jié)構(gòu)類型變量,即不出現(xiàn)結(jié)構(gòu)體名。
選項(xiàng)B符合第三種定義方法。
(23)請讀程序:
#include<stdio.h>
#include<string.h>
main()
{
char*sl="AbCdEf",*s2="aB";
s1++;s2++;
printf("%d\n",strcmp(s1,s2));
}
上面程序的輸出結(jié)果是_______。
A)正數(shù) B)負(fù)數(shù) C)零 D)不確定的值
(23)A
知識點(diǎn):字符串比較函數(shù)strcmp()的應(yīng)用
評析:strcmp(X1,X2)是串比較函數(shù),當(dāng)X1>X2時(shí)返回值為正數(shù),當(dāng)X1<X2時(shí)返回值為負(fù)數(shù),當(dāng)XI=X2時(shí)返回值為零。
本題中“sl”、“s2”分別表示這兩個(gè)串中第一個(gè)字符的地址,s1++和s2++是將指針指向串的第二個(gè)字符,則*sl為“bCdEf',,*s2為“B”。而在字符串比較中。大小的確定是由各個(gè)字符串相應(yīng)位置字符的ASCII碼值的大小決定的。“B”的ASCII碼值為66,”b”的ASCII碼值為98,所以sl>s2,返回值為正數(shù)。
(24)請讀程序:
#include<stdio.h>
func(int a,int b){
int c:
c=a+b:
return C:
}
main(){
int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
上面程序的輸出結(jié)果是________。
A)11 B)20 C)2l D)31
(24)C
知識點(diǎn):自增、自減運(yùn)算
評析:函數(shù)func()的作用是返回兩個(gè)形參的和,第一個(gè)形參是x、y分別自減和自增后的和,其中(x--,y++,x+y)是一個(gè)逗號表達(dá)式,它的值應(yīng)該等于x+y,所以整個(gè)表達(dá)式(x--,y++,x+y)的值為13,而第二個(gè)形參的值為8(根據(jù)語法規(guī)則,應(yīng)當(dāng)先使用,后自增),所以fune()的返回值為13+8=21。
(25)請讀程序:
#include<stdio.h>
main()
{
int a,b;
for(a=1,b=l;a<=100;a++){
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b_=5:
}
printf("%d\n",a);
}
上面程序的輸出結(jié)果是________。
A)7 B)8 C)9 D)10
(25)B
知識點(diǎn):break語句和continue語句
評析:break語句的作用是用于跳出循環(huán)體,繼續(xù)執(zhí)行循環(huán)體下面的語句;而continue語句的作用是用于跳出本次循環(huán),即跳過循環(huán)體中尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定!埃ァ笔乔笥噙\(yùn)算符,執(zhí)行第一次循環(huán)時(shí),條件(b%3==1)為真,b=4,繼續(xù)下一次循環(huán),如此反復(fù),當(dāng)b=22時(shí),條件(b>=20)為假,跳出循環(huán),此時(shí)共循環(huán)8次,即a=8。
(26)請讀程序片段(字符串內(nèi)沒有空格字符):
printf("%d\n",strlen("ATS\n0l2\l\\"));
上面程序片段的輸出結(jié)果是_______。
A)l1 B)10 C)9 D)8
(26)C
知識點(diǎn):字符串的長度
評析:這個(gè)語句的目的是輸出“ATS\n012\1\\”這個(gè)串的長度,在串中“\\”代表一個(gè)“\”,為了和printf()函數(shù)中的轉(zhuǎn)義字符區(qū)分開來,在語法上使用了兩個(gè)反斜杠代替了一個(gè)反斜杠,所以它僅僅為一個(gè)字符,而”\l”代表數(shù)字l,也占一個(gè)字符,“\n”是回車換行符,也占一個(gè)字符,加上A、T、s、0、1、2,一共是9個(gè)字符。
(27)請選出可用作C語言用戶標(biāo)識符的一組標(biāo)識符_______。
A)Void B)a3_b3 C)For D)2a
define _123 _abc DO
WORD IF case sizeof
(27)B
知識點(diǎn):C語言的標(biāo)識符
評析:c語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種符號組成,而且第一個(gè)字符必須是字母或下劃線。
選項(xiàng)A中的void和define都和c語言的關(guān)鍵字重名,不合法;
選項(xiàng)C中的case和c語言的關(guān)鍵字重名,不合法;
選項(xiàng)D中的2a是數(shù)字打頭而且sizeof和c語言的關(guān)鍵字重名,不合法。
(28)請選出以下程序的輸出結(jié)果_______。
#include<stdio_h>
sub(int*s,int y)
{ static int t=3;
y=s[t];t--;
}
main()
{ int a[]={1,2,3,4},i,x=0;
for(i=0;i<4;i++){
sub(a,x);printf("%d",x);}
printf("\n");
}
A)1234 B)432l C)0000 D)4444
(28)C
知識點(diǎn):函數(shù)的形參和實(shí)參的關(guān)系
評析:x作為函數(shù)sub()的實(shí)參時(shí),函數(shù)對x值的改變沒有返回主函數(shù),并不能使得x的值變化,所以在打印時(shí),x的值是始終不變的,即為O。
(29)若有以下說明和語句,請選出哪個(gè)是對c數(shù)組元素的正確引用_______。
int c[4][5],(*cp)[5];
cp=c;
A)cp+l B)*(cp+3) C)*(cp+1)+3 D)*(*cp+2)
(29)D
知識點(diǎn):數(shù)組元素的引用
評析:cp=c這個(gè)語句是將數(shù)組第0行的地址賦給了cp。cp+l使指針指向二維數(shù)組c的第一行;*(cp+3)是數(shù)組c的第三行的第0列的地址值;+(cp+1)+3是數(shù)組c的第一行第三列的地址值。
(30)設(shè)有以下語句
char a=3,b=6,c;
c=a^b<<2:
則c的二進(jìn)制值是_______。
A)00011011 B)00010100 C)000ll 100 D)00011000
(30)A
知識點(diǎn):位運(yùn)算
評析: “<<”是c語言中規(guī)定的左移運(yùn)算符,例如,a=a<<2,這個(gè)語句即是將a的二進(jìn)制數(shù)左移兩位,左移一位相當(dāng)于該數(shù)乘以2,左移兩位相當(dāng)于該數(shù)乘以2的2次方;,^是異或運(yùn)算符,所以,c的二進(jìn)制值應(yīng)為0001101l。
(31)設(shè)有
static char str[]="Beijing";
則執(zhí)行
printf("%d\n",strlen(strcpy(str, "China")));
后的輸出結(jié)果為_______。
A)5 B)7 C)12 D)14
(31)A
知識點(diǎn):字符串的長度
評析:在執(zhí)行printf()函數(shù)前,數(shù)組str的長度是7,但是當(dāng)使用strcpy()函數(shù)將新的值賦給str后,strlen()函數(shù)返回的應(yīng)當(dāng)是現(xiàn)在的str字符串的字符個(gè)數(shù),即是5。
(32)以下程序的輸出結(jié)果是_______。
#include<stdio.h>
main()
{ int i;
for(i=1;i<5;i++){
if(i%2)printf("*");
else continue;
printf("#");
}
print"$\n");
}
A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$
(32)C
知識點(diǎn):if語句的判斷
評析:當(dāng)i不可以整除2時(shí)打印”*”,然后打印“#”,不能整除2則執(zhí)行continue,跳過printf(“#”);語句,結(jié)束本次循環(huán),返回到循環(huán)的起始點(diǎn)。當(dāng)循環(huán)結(jié)束后,打印“$”。
(33)有以下程序
#include<stdio.h>
main()
{ int c;
while((c=getchar())!=‘\n’){
switch(C-‘2’){
case O:case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c十2);break;}
}
}
從第一列開始輸入以下數(shù)據(jù),↙代表一個(gè)回車符。
2473↙
程序的輸出結(jié)果是_______。
A)668977 B)668966 C)66778777 D)6688766
(33)A
知識點(diǎn):switch()語句
評析:getchar()函數(shù)是從鍵盤接受一個(gè)字符輸入;當(dāng)用戶鍵入的字符不是回車符時(shí),會(huì)進(jìn)入一個(gè)多分支選擇語句,根據(jù)表達(dá)式c-‘2’的值進(jìn)行分支選擇:putchar()是在屏幕上打印一個(gè)字符,最后的結(jié)果應(yīng)當(dāng)為668977。
(34)以下程序的輸出結(jié)果是________。
main()
{ int w=5;fun(w);printf("\n");}
fun(int k)
{ if(k>O) fun(k_1);
printf("%d",k);
}
A)5 4 3 2 l B)0 1 2 3 4 5
C)1 2 3 4 5 D)5 4 3 2 1 0
(34)B
知識點(diǎn):函數(shù)的遞歸調(diào)用
評析:函數(shù)的遞歸調(diào)用就是在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身。fun函數(shù)共被調(diào)用6次,即fun(5)、fun(4)、fun(3)、fun(2)、fun(1)、fun(O)。其中fun(5)是main函數(shù)調(diào)用的,其余是在fun函數(shù)中調(diào)用的。
(35)若fp是指向某文件的指針,且已讀到此文件的末尾,則函數(shù)feof(f1))的返回值是_________ 。
A)EOF B)0 C)非零值 D)NULL
(35)C
知識點(diǎn):文件結(jié)束符的返回值
評析:函數(shù)feof是用來判斷文件是否已讀到末尾,如果己讀到末尾則返回非零值,否則返回O。
(36)算法的時(shí)間復(fù)雜度是指_______。
A)執(zhí)行算法程序所需要的時(shí)間
B)算法程序的長度
C)算法執(zhí)行過程中所需要的基本運(yùn)算次數(shù)
D)算法程序中的指令條數(shù)
(36)C
知識點(diǎn):算法復(fù)雜度的概念和意義(時(shí)問復(fù)雜度與空間復(fù)雜度)
評析:所謂算法的時(shí)間復(fù)雜度,是指執(zhí)行算法所需要的計(jì)算工作量。為了能夠比較客觀地反映出一個(gè)算法的效率,在度量一個(gè)算法的工作量時(shí),不僅應(yīng)該與所使用的計(jì)算機(jī)、程序設(shè)計(jì)語言以及程序編制者無關(guān),而且還應(yīng)該與算法實(shí)現(xiàn)過程中的許多細(xì)節(jié)無關(guān)。為此,可以用算法在執(zhí)行過程中所需基本運(yùn)算的執(zhí)行次數(shù)來度量算法的工作量。
(37)下列敘述中正確的是_______。
A)線性表是線性結(jié)構(gòu) B)棧與隊(duì)列是非線性結(jié)構(gòu)
C)線性鏈表是非線性結(jié)構(gòu) D)二叉樹是線性結(jié)構(gòu)
(37)A
知識點(diǎn):線性結(jié)構(gòu)與非線性結(jié)構(gòu)的概念
評析:根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間相關(guān)聯(lián)關(guān)系的復(fù)雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分為兩大類型:線性結(jié)構(gòu)與非線性結(jié)構(gòu)。如果一個(gè)非空的數(shù)據(jù)結(jié)構(gòu)滿足下列兩個(gè)條件: (1)有且只有一個(gè)根結(jié)點(diǎn); (2)每一個(gè)結(jié)點(diǎn)最多有一個(gè)前件,也最多有一個(gè)后件。則稱該數(shù)據(jù)結(jié)構(gòu)為線性結(jié)構(gòu),又稱線性表。所以線性表、棧與隊(duì)列、線性鏈表都是線性結(jié)構(gòu),而二叉樹是非線性結(jié)構(gòu)。
(38)下面關(guān)于完全二叉樹的敘述中,錯(cuò)誤的是_______。
A)除了最后一層外,每一層上的結(jié)點(diǎn)數(shù)均達(dá)到最大值
B)可能缺少若干個(gè)左右葉子結(jié)點(diǎn)
C)完全二叉樹一般不是滿二叉樹
D)具有結(jié)點(diǎn)的完全二叉樹的深度為[log2n]+l
(38)B
知識點(diǎn):二叉樹的定義及其存儲(chǔ)結(jié)構(gòu)
評析:這里考察完全二又樹與滿二叉樹的定義及二叉樹的性質(zhì)。滿二叉樹指除最后一層外每一層上所有結(jié)點(diǎn)都有兩個(gè)子結(jié)點(diǎn)的二叉樹。完全二叉樹指除最后一層外,每一層上的結(jié)點(diǎn)數(shù)均達(dá)到最大值,在最后一層上只缺少右邊的若干子結(jié)點(diǎn)(葉子結(jié)點(diǎn))的二叉樹。因此選項(xiàng)A是正確的,而選項(xiàng)B是錯(cuò)誤的。由定義可知,滿二叉樹肯定是完全二又樹,而完全二又樹一般不是滿二叉樹,因此選項(xiàng)c是正確的敘述。選項(xiàng)D即二又樹性質(zhì)(5),也是正確的。
(39)結(jié)構(gòu)化程序設(shè)計(jì)主要強(qiáng)調(diào)的是_______。
A)程序的規(guī)模 B)程序的易讀性
C)程序的執(zhí)行效率 D)程序的可移植性
(39)B
知識點(diǎn):結(jié)構(gòu)化程序設(shè)計(jì)
評析:結(jié)構(gòu)化程序設(shè)計(jì)主要強(qiáng)調(diào)的足結(jié)構(gòu)化程序清晰易讀,可理解性好,程序員能夠進(jìn)行逐步求精、程序證明和測試.以保證程序的正確性。
(40)在軟件生命周期中,能準(zhǔn)確地確定軟件系統(tǒng)必須做什么和必須具備哪些功能的階段是_______。
A)概要設(shè)計(jì) B)詳細(xì)設(shè)計(jì) C)可行性分析 D)需求分析
(40)D
知識點(diǎn):軟件工程基本概念,軟件生命周期概念,軟件工具與軟件開發(fā)環(huán)境
評析:通常,將軟件產(chǎn)品從提出、實(shí)現(xiàn)、使用維護(hù)到停止使用退役的過程稱為軟件生命周期。也就是說,軟件產(chǎn)品從考慮其概念開始,到該軟件產(chǎn)品不能使用為止的整個(gè)時(shí)期都屬于軟件生命周期。軟件生命周期的主要活動(dòng)階段為:
① 可行性研究和計(jì)劃制定。確定待開發(fā)軟件系統(tǒng)的開發(fā)目標(biāo)和總的要求,給出它的功能、性能、可靠性以及接口等方面的可行方案,制定完成開發(fā)任務(wù)的實(shí)施計(jì)劃。
②需求分析。對待開發(fā)軟件提出的需求進(jìn)行分析并給出詳細(xì)定義,即準(zhǔn)確地確定軟件系統(tǒng)的功能。編寫軟件規(guī)格說明書及初步的用戶手冊,提交評審。
③軟件設(shè)計(jì)。系統(tǒng)設(shè)計(jì)人員和程序設(shè)計(jì)人員應(yīng)該在反復(fù)理解軟件需求的基礎(chǔ)上,給出軟件的結(jié)構(gòu)、模塊的劃分、功能的分配以及處理流程。
④軟件實(shí)現(xiàn)。把軟件設(shè)計(jì)轉(zhuǎn)換成計(jì)算機(jī)可以接受的程序代碼。即完成源程序的編碼,編寫用戶手冊、操作手冊等面向用戶的文檔,編寫單元測試計(jì)劃。
⑤軟件測試。在設(shè)計(jì)測試用例的基礎(chǔ)上,檢驗(yàn)軟件的各個(gè)組成部分。編寫測試分析報(bào)告。
⑥運(yùn)行和維護(hù)。將已交付的軟件投入運(yùn)行,并存運(yùn)行使用中不斷地維護(hù),根據(jù)新提出的需求進(jìn)行必要而且可能的擴(kuò)充和刪改。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |