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