國家二級C語言機試(C語言程序設計)模擬試卷2(共323題)_第1頁
國家二級C語言機試(C語言程序設計)模擬試卷2(共323題)_第2頁
國家二級C語言機試(C語言程序設計)模擬試卷2(共323題)_第3頁
國家二級C語言機試(C語言程序設計)模擬試卷2(共323題)_第4頁
國家二級C語言機試(C語言程序設計)模擬試卷2(共323題)_第5頁
已閱讀5頁,還剩90頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

國家二級C語言機試(C語言程序設計)模擬試卷2(共9套)(共323題)國家二級C語言機試(C語言程序設計)模擬試卷第1套一、選擇題(本題共32題,每題1.0分,共32分。)1、以下能正確定義且賦初值的語句是A、intn1=n2=10;B、charc=32;C、floatf=f+1.1;D、doublex=12.3E2.5;標準答案:B知識點解析:本題主要考查變量的定義和賦值,C語言中變量的定義形式為:類型說明符變量名=初始值:選項A中,n1和n2只能單獨賦初值;選項B正確,定義了一個字符變量c,初值為32:選項C錯誤,初值設置自身不能參與運算;選項D中字母E后面的指數必須是整數。2、設有定義:intn1=0,n2,*p=n2,*q=n1;,以下賦值語句中與n2=n1;語句等價的是A、*p=*q;B、p=q;C、*p=n1;D、p=*q;標準答案:A知識點解析:本題考查指針的使用。指針p和q分別指向變量n2和n1,n2=n1可以用指針來代替,即*p代替n2,*q代替n1。3、以下函數的功能是:通過鍵盤輸入數據,為數組中的所有元素賦值。#include#defineN10voidfun(intx[N]){inti=0;while(i<N)scanf("%d",___);}在程序中下劃線處應填入的是A、x+iB、x[i+1]C、x+(i++)D、x[++i]標準答案:C知識點解析:本題考查數組和scanf函數的使用。程序通過while循環來給數組元素賦值,賦值語句通過調用scanf函數來實現。scanf函數從鍵盤接收數據,第二個參數是數據保存的地址,因此選項B和選項D不是地址,錯誤。選項A和選項C是地址,但是選項A的i值不會發生變化,循環體內每次都是給同一個元素賦值,不滿足要求,選項C正確。4、fun函數的功能是:通過鍵盤輸入給x所指的整型數組所有元素賦值。在下劃線處應填寫的是#include#defineN5Voidfun(intx[N]){intm;for(m=N-1;m>=0;m--)scanf("%d",___);}A、x+mB、x[m+1]C、x+(m++)D、x[++m]標準答案:A知識點解析:本題考查數組和scanf函數的使用。程序通過for循環來給數組元素賦值,賦值語句通過調用scanf函數來實現。scanf函數從鍵盤接收數據,函數的第二個參數是數據保存的地址,因此選項B和選項D不是地址,錯誤。選項A和選項C是地址,但是選項C的m值會++自增,然后for循環里面又m-自減,會導致死循環,不滿足要求,選項A正確。5、以下選項中,合法的是A、charname[10];name="char";B、charstrl[5]="pass",str2[6];str2=str1;C、charstr3[]={’d’,’e’,’b’,’u’,’g’,’\0’};D、charstr4;str4="helloworld";標準答案:C知識點解析:本題考查字符數組。選項A定義了一個字符數組name,接下來直接給name賦值字符串是錯誤的;選項B定義了兩個字符串數組str1和str2,str1和str2表示兩個字符串的首地址,直接把str1賦值給str2錯誤:選項C是正確的;選項D定義了一個字符變量str4,給字符變量賦值字符串是錯誤的。6、以下敘述中正確的是A、賦值語句是一種執行語句,必須放在函數的可執行部分B、scanf和printf是C語言提供的輸入和輸出語句C、由printf輸出的數據都隱含左對齊D、由printf輸出的數據的實際精度是由格式控制中的域寬和小數的域寬來完全決定的標準答案:A知識點解析:C語言本身沒有提供輸入輸出語句,但是可以通過調用標準庫函數中提供的輸入和輸出函數來實現輸入和輸出,選項B錯誤;采用printf輸出數據,輸出數據都默認為右對齊,若要左對齊,可以在格式控制中的“%”和寬度之間加一個“-”號來實現,選項C錯誤;pfintf的輸出精度由變量的類型決定,與域寬無關,選項D錯誤。7、有以下程序main(){inta=3:a+=a-=a*a;printf("%d\n",a);}程序的輸出結果是A、9B、3C、-12D、0標準答案:C知識點解析:對于表達式a+=a-=a*a相當于a=a-(a*A,然后計算a=a+a,a的初值為3,則表達式的值為-12。8、設有定義語句intx[6]={2,4,6,8,5,7),*p=x,i;要求依次輸出x數組6個元素中的值不能完成此操作的語句是A、for(i=0;i<6;i++)printf("%2d",*(p++));B、for(i=0;i<6;i++)printf("%2d",*(p+i));C、for(i=0;i<6;i++)printf("%2d",*p++);D、for(i=0;i<6;i++)printf("%2d",(*p)++);標準答案:D知識點解析:指針p指向數組x,因此可以使用p來輸出數組x的值。選項A中,*(p++)表示先取出p指向的元素的值,然后p++指向下一個元素,滿足要求;選項B中*(p+i)每次i的值發生變化,(p+i)指向x數組的x[i]元素,因此*(p+i)是取出數組x的x[i]元素的值,滿足要求;選項C和選項A相比,少了括號,由于*運算符的優先級比++要求,因此,因此*p++表示先取出p指向的元素的值,然后p再++指向下一個元素,滿足要求;選項D中(*p)++表示先取出p指向的元素的值,然后該值++,p沒有增加,每次循環都*p取出的x[0]的值,不滿足要求。9、有以下程序段intk=0,a=1,b=2,c=3;k=a<b?b:a;k=k>c?c;k;執行程序段后,k的值是A、3B、2C、1D、0標準答案:B知識點解析:本題主要考查條件表達式。k=a<b?b:a中a<b為真,因此k的值為b,即k=2。k=k>c?c:k中k>c為假,k的值為2。10、執行以下程序段后,W的值為intw=’A’,x=14,y=15;w=((x‖y)&(w<’a’));A、-1B、NULLC、1D、0標準答案:C知識點解析:本題考查表達式和邏輯運算。x和y分別為14和15,因此(x‖y)的值是真。w的值為’A’,其ASCII值為65,’a’的ASCII值為97,因此(w<’a’)的值為真。表達式w=((x‖y)&(w<’a’))的前后兩個值均為真,整個表達式的值為真(1)。11、若有定義語句:chars[10]="1234567\0\0";,則strlen(s)的值是A、7B、8C、9D、10標準答案:A知識點解析:本題考查字符串數組和字符串函數。數組s有7個數字,然后跟著結束符“\0”,因此數組s的長度為7。12、程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,y);的輸出結果是A、123.141593B、123.141593C、12,3.141593D、123.142標準答案:A知識點解析:本題考查格式化輸出函數printf,,在printf函數調用里面首先輸入整型變量x的值12,然后按照%8.6f格式輸出double類型變量y的值,%8.6f表示輸出8位,小數點后輸出6位。13、有如下程序段:intx=12;doubley=3.141593;printf("%d%8.6f",x,y);其輸出結果是A、123.141593B、12,3.141593C、123.1415930D、123.142標準答案:D知識點解析:本題考查printf語句。printf()函數是格式化輸出函數,一般用于向標準輸出設備按規定格式輸出信息。在編寫程序時經常會用到此函數。printf()函數的調用格式為:print:f("<格式化字符串>”,<參量表>)。其中,“格式化字符串”包括兩部分內容:一部分是正常字符,這些字符將按原樣輸出;另一部分是格式化規定字符,以“%”開始,后跟一個或幾個規定字符,用來確定輸出內容格式。格式化字符串的格式是:%[標志][輸出最小寬度][精度[長度]格式字符①標志:標志字符為-、+、空格等,其意義如下所示:●-:結果左對齊,右邊填空格;●+:輸出符號(正號或負號);●空格:輸出值為正時冠以空格,為負時冠以負號。②輸出最小寬度:用十進制整數來表示輸出的最少位數(包括小數點在內至少要輸出這么多位)。●若實際位數多于定義的寬度,則按實際位數輸出;●若實際位數少于定義的寬度,則右對齊,左邊留空:●有負號,左對齊,右邊留空;●表示寬度的數字以0開始,則右對齊,左邊留空。③精度:精度格式符以“.”開頭,后跟十進制整數。它的意義是:如果輸出數字,則表示小數的位數,若實際位數大于所定義的精度數,則四舍五入,若不足則補0;如果輸出的是字符,則表示輸出字符的個數,若實際位數大于所定義的精度數,則截去超過的部分;④長度:長度格式符為h和l兩種,h表示按短整型量輸出,l表示按長整型量輸出。14、若有以下程序#includemain(){intb=10,a=-11;a%=b%=4;printf("%d%d\n",a,b);}則程序的輸出結果是A、12B、-1-2C、-12D、1-2標準答案:C知識點解析:對于表達式a%=b%=4為復合的賦值運算,結合性自右至左,相當于先計算b=b%4,a=a%b;結果的符號和第一個操作數的符號相同,因此b為2,a的結果為-1.15、有以下程序main(){inta=2,c=5;printf("a=%%d,b=%%d\n",a,c);}程序的輸出結果是A、a=%2,b=%5B、a=%d,b=%dC、a=2,b=5D、a=%%d,b=%%d標準答案:B知識點解析:輸出“%”,可以在格式控制中用“%%”表示,將輸出一個“%”,而沒有%表示格式符的開始,%%d不能表示格式符,因此僅輸出:a=%d.b=%d。16、有以下程序main(){chara,b,c,d;scanf("%c%c",&a,&b);c=getchar();d=getchar();printf("%c%c%c%c\n",a,b,c,d);}當執行程序時,按下列方式輸入數據(從第1列開始,代表回車,注意:回車也是一個字符)1234則輸出結果是A、12B、1234C、123D、1234標準答案:C知識點解析:scanf和getchar函數分別從鍵盤上讀入一個字符,因此輸入12空格34,則變量a中存放的為1,b中存放2,c中存放空格,d中存放3。17、有以下程序段intn,t=1,s=0;scanf("%d",&n);do{s=s++;t=t-2;}while(t!=n);為使此程序段不陷入死循環,從鍵盤輸入的數據應該是A、任意正奇數B、任意負偶數C、任意正偶數D、任意負奇數標準答案:D知識點解析:本題考查基本輸入和循環。程序代碼的功能是通過scanf給變量n賦值,在dowhile循環中,s變量自增,t變量每次減2,t的初值為1,循環執行執行一次后t的值變成-1,然后是-3、-5…,直到t的值和n的值相同循環結束。從t的值的變化可知,t是一個變化的負奇數,因此輸入的n如果是負奇數,則循環能退出,否則是死循環。18、若變量已正確定義為int型,要通過語句scanf("%d,%d,%d"&a,&b,&c);給a賦值1、給b賦值2、給c賦值3,以下輸入形式中錯誤的是(注:口代表一個空格符)A、口口口1,2,3B、1,口口口2,口口口3C、1,2,3D、1口2口3標準答案:D知識點解析:本題主要考查scanf函數的輸入格式問題。scanf函數的一般形式為:scanf(格式控制字符串,地址1,地址2,…);格式控制字符串是由雙撇號括起來的字符串,它主要由兩種類型的字符組成:①格式說明符由“%”和格式字符組成,如%c,%d,%s,%f等。其作用是將輸入的數據轉換為指定的格式,賦給scanf的二個參量(是地址1)所指定的內存單元(可能一次使用多個)中。格式說明以“%”字符為標志。②普通字符,是需要用戶在輸入時原樣輸入的字符。在本題中格式控制字符串為“%d,%d,%d”,表示按十進制輸入三個數據。要求在輸入數據時,兩個數據間一定以一個逗號“,”作為間隔符。19、設變量均已正確定義,若要通過scanf(”%d%c%d%c”,&a1,&c1,&a2,&c2);語句為變量a1和a2賦數值10和20,為變量c1和c2賦字符X和Y。以下所示的輸入形式中正確的是(注:口代表空格字符)A、10口X20口YB、10口X20口YC、10X20YD、10口X口20口Y標準答案:C知識點解析:在使用scanf函數進行輸入數據時,輸入的數據之間必須用空格、回車符、制表符(Tab鍵)等間隔符隔開,但是空格為合法的字符型數據的輸入。而按照格式符"%d%c%d%c"說明,數值型數據和字符數據輸入之間不要加入空格間隔,而字符型數據和數值型數據的輸入卻可以加入任意的空格,回車和跳格。20、設有定義:inta;floatb;執行scanf("%2d%f",&a,&b);語句時,若從鍵盤輸入876543.0則a和b的值分別是A、876和543.0B、87和6.0C、87和543.0D、76和543.0標準答案:B知識點解析:在輸入函數scanf的輸入格式符%2d%f中,2d表示輸入的數據的寬度為’2,所以當從鍵盤輸入876543.0<CR>時,這時把輸入數字串的前兩位87賦給變量a,然后將緊接著將6按照格式控制符%f的形式賦給變量b,所以b的值為6.000000。21、若有定義:inta,b;通過語句scanf("%d;%d",&a,&b);能把整數3賦給變量a,5賦給變量b的輸入數據是A、3,5B、35C、3;5D、35標準答案:C知識點解析:在采用seanf這個函數輸入數據時,要嚴格遵守其輸入的規則定義。本題此函數定義的規則是,在兩個整數之間加分號輸入。22、若有定義inta;floatb;doublec;程序運行時輸入:345能把值3輸入給變量a、4輸入給變量b、5輸入給變量c的語句是A、scanf("%d%lf%lf",&a,&b,&c);B、scanf("%d%f%lf",&a,&b,&c);C、scanf("%d%f%f",&a,&b,&c);D、scanf("%lf%lf%lf",&a,&b,&c);標準答案:B知識點解析:scanf函數進行輸入的時候,默認的輸入間隔為空格、跳格和回車,變量a、b和c均為數值型數據,輸入時間隔為空格,因此scanf函數的第一個表示格式的參數之間不用加入分隔符,而要輸入double型數據,格式控制必須用%lf(或%le)。否則,數據不能正確輸入。23、設有定義:doublea,b,c;若要求通過輸入分別給a、b、c輸入1、2、3,輸入形式如下(注:此處口代表一個空格)口口1.0□□2.0□□3.0則能進行正確輸入的語句是A、scanf("%lf%lf%lf",a,b,c);B、scanf("%f%f%f",&a,&b,&c);C、scanf("%lf%lf%lf",&a,&b,&c);D、scanf("%5.1lf%5.1lf%5.1lf",&a,&b,&c);標準答案:C知識點解析:輸入格式scanf(格式控制,輸入項1,輸入項2….),其中在scanf函數的格式字符前可以加入一個正整數指定輸入數據所占的寬度,但不可以用實數指定小數位的寬度。輸入double型數據,格式控制必須用%lf(或%le)。否則,數據不能正確輸入。由于輸入是一個字符流,scanf函數從這個字符流中按照格式控制指定的格式解析出相應數據,送到指定地址的變量中。24、以下敘述中正確的是A、當用scanf從鍵盤輸入數據時,每行數據在沒按下回車鍵(Enter鍵)前,可以任意修改B、花括號對{}只能用來表示函數的開頭和結尾,不能用于其他目的C、空語句就是指程序中的空行D、復合語句在語法上包含多條語句,其中不能定義局部變量標準答案:A知識點解析:當使用scanf函數從鍵盤輸入數據時,每行數據在未按F回車鍵之前,可以任意修改。但按下回車鍵后,scanf函數即接受了這一行數據,不能再修改。選項A正確,對于選項B,{}還可以表明復合語句的開頭結尾,或者循環體的開頭結尾等,選項B錯誤,而空語句為;,不是空行,選項C錯誤,在復合語句中可以定義變量為局部變量,選項D錯誤。25、以下敘述中正確的是A、在scanf函數中的格式控制字符串是為了輸入數據用的,不會輸出到屏幕上B、在使用scanf函數輸入整數或實數時,輸入數據之間只能用空格來分隔C、在printf函數中,各個輸出項只能是變量D、使用printf函數無法輸出百分號%標準答案:A知識點解析:scanf函數中的格式控制字符串是為了輸入數據用的,無論其中有什么字符,也不會輸出到屏幕上,因此若想在屏幕上輸出提示信息,應該首先使用printf函數輸出,選項A正確;在使用scanf函數輸入整數或實數時,輸入數據之間可以用空格、跳格、回車來分隔,選項B錯誤;printf輸出項不但可以為變量,還可以表達式或者常量,選項C錯誤;如果要輸出“%”,可以在格式控制中用"%%”表示,將輸出一個“%”,選項D錯誤。26、以下敘述中正確的是A、在scanf函數的格式串中,必須有與輸入項一一對應的格式轉換說明符B、只能在printf函數中指定輸入數據的寬度,而不能在scanf函數中指定輸入數據占的寬度C、scanf函數中的字符串,是提示程序員的,輸入數據時不必管它D、復合語句也被稱為語句塊,它至少要包含兩條語句標準答案:A知識點解析:輸入函數的調用格式:scallf(格式控制,輸入項1,輸入項2,…)格式控制的主要作用是指定輸入時的數據轉換格式,格式串中,必須含有與輸入項一一對應的格式轉換說明符選項A正確,在scanf函數的格式字符前可以加入一個正整數指定輸入數據所占的寬度,但不可以用實數指定小數位的寬度,選項B錯誤,scanf函數中的格式控制字符串是為了輸入數據用的,無論其中有什么字符,也不會輸出到屏幕上,因此若想在屏幕上輸出提示信息,應該首先使用printf函數輸出,選項C錯誤,復合語句還可以是空語句呢,并沒有規定語句條數,選項D錯誤。27、有以下程序#includemain(){inta1,a2;charc1,c2;scanf("%d%c%d%c",&a1,&c1,&a2,&c2);printf("%d,%c,%d,%c",a1,c1,a2,c2);}若想通過鍵盤輸入,使得a1的值為12,a2的值為34,c1的值為字符a,c2的值為字符b,程序輸出結果是:12,a,34,b則正確的輸入格式是(以下口代表空格,代表回車)A、12口a口34口bB、12,a,34,bC、12a34bD、12口a34□b標準答案:C知識點解析:本題考查scanf語句。scanf()函數是格式化輸入函數,它從標準輸入設備(鍵盤)讀取輸入的信息。其調用格式為:scanf("<格式化字符串>",<地址表>)格式化字符串包括以下3類不同的字符;①格式化說明符:格式化說明符與前面用的printf()函數中的格式說明符基本相同。②空白字符:空白字符會使scanf()函數在讀操作中略去輸入中的一個或多個空白字符。③非空白字符:一個非空白字符會使scanf()函數在讀入時剔除掉與這個非空白字符相同的字符。由于在scanf函數中,幾個變量之間沒有任何間隔,所以輸入的時候,也同樣不應該有間隔。28、有以下程序#includemain(){charc1,c2,c3,c4,c5,c6;scanf("%c%c%c%c",&c1,&c2,&c3,&c4);c5=getchar();c6=getchar();putchar(c1);putchar(c2);printf("%c%c\n",c5,c6);}程序運行后,若從鍵盤輸入(從第1列開始)12345678則輸出結果是A、1256B、1278C、1245D、1267標準答案:C知識點解析:當用scanf函數從鍵盤輸入數據時,每行數據的未尾按下回車鍵(Enter鍵)之前,可以任意修改。但按下回車鍵putchar(c1)(Enter鍵)之后,scanf函數即接受了這一行數據,不能再回去修改。所以本題中,當輸入123時,變量c1、c2、c3的值分別為1、2、3,當輸入45678時,變量c5、c6的值4和5。所以用輸出函數putchar(c1)輸出1,putchar(c2)輸出2,print("%c%c\n",c5,c6)輸出45。29、若有定義語句:doublex,y,*px,*py;執行px=&x;py=&y;正確的輸入語句是A、scanf("%f%f"&x,&y);B、scanf("%f%f",x,y):C、scanf("%lf%le",px,py);D、scanf("%lf%lf",x,y);標準答案:C知識點解析:本題考查scanf語句。scanf()函數的一般格式為:scanf("格式字符串",輸入項首地址表),對于double類型數據,輸入時候要加上1修飾,否則會產生錯誤的輸入信息,同時輸入項必須是地址,可以使保存變量地址的指針變量。30、以下程序段完全正確的是A、intk,*p=&k;scanf("%d",p);B、int*p;scanf("%d",p);C、int*p;scanf("%d",&p);D、intk,*p;*p=&k;scanf("%d",p);標準答案:A知識點解析:選項B沒有對指針進行初始化,無效指針。選項C錯在沒有對指針進行初始化,無效指針,并且在scanf("%d",&p)中無需再進行取地址操作。選項D,語句*p=&k;的左端*p是指針所指內存空間的值,&k是地址,應為p=&k。31、若在定義語句:inta,b,c,*p=&c;接著執行以下選項中的語句,則能正確執行的語句是A、scanf("%d%d%d",a,b,c);B、scanf("%d",a,b,c);C、scanf("%d",p);D、scanf("%d",&p);標準答案:C知識點解析:程序語句inta,b,c,*p=&c;定義了三個整型變量a,b,c,和一個整型指針變量p,并且把變量c的地址賦給p。scanf函數的一般形式為“scanf(“格式控制字符串”,地址列表)”,其中的地址列表應當是存放輸入數據變量的地址。32、有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);當執行上述程序段,從鍵盤上輸入555667777abc后,y的值為A、55566.0B、7777.0C、566.0D、566777.0標準答案:C知識點解析:因為在輸入格式控制符中指定變量j的輸入格式控制符為“%2d”,即變量j所占的寬度為2,所以變量j只接收輸入數據的前兩位,從第三位開始直到空格之間的輸入整數都會被保存到變量y中,因為y為浮點型數據,所以輸出結果為選項C。國家二級C語言機試(C語言程序設計)模擬試卷第2套一、選擇題(本題共36題,每題1.0分,共36分。)1、有以下程序段charname[20];intnurn;scanf("name=%snurn=%d",name,&nurn);當執行上述程序段,并從鍵盤輸入:name=Lilinurn=1001后,name的值為A、name=LiliB、Lilinurn=C、name=Lilinurn=1001D、Lili標準答案:D知識點解析:在題目中以字符串的形式給字符數組賦值,所以字符數組n鋤e的值為Lili。2、s1和s2已正確定義并分別指向兩個字符串。若要求:當s1所指串大于s2所指串時,執行語句S;則以下選項中正確的是A、if(s1>s2)S;B、if(strcmp(s1,s2))S;C、if(strcmp(s2,s1)>0)S;D、if(strcp(s1,s2)>0)S:標準答案:D知識點解析:字符串標記使用strcmp函數,該函數有兩個參數分別是需要比較大小的兩個字符串s1和s2,如果s1大于s2則返回值大于0,如果s1小于s2則返回值小于0,否則s1和s2相同返回0。題目要求s1大于s2時執行語句S,因此strcmp(s1,s2)的返回值大于o時執行S。3、把以下四個表達式用作if語句的控制表達式時,有一個選項與其他三個選項含義不同,這個選項是A、k%2B、k%2==1C、(k%2)!=0D、!k%2=1標準答案:D知識點解析:本題考查if語句和if語句構成的選擇。選項A表示k除以2的余數,如果余數為1則if成立,否則不能成立,即if判斷k是否為奇數;選項B是判斷k除以2的余數是否等于1,函數和選項A相同:選項C表示k除以2的余數不為0,和選項A一致;選項D中,!運算符優先級高于%預算符,先計算!k,然后再取余數,并判斷余數是否等于1。4、以下是if語句的基本形式:if(表達式)語句其中“表達式”A、必須是邏輯表達式B、必須是關系表達式C、必須是邏輯表達或關系表達D、可以是任意合法的表達式標準答案:D知識點解析:本題考查if語句,C語言中if語句中的表達式可以是任意合法的表達式。5、有以下程序main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf("%d,%d,%d,%d\n",a,b,c,d);}程序輸出A、0,0,0,3B、1,1,2,0C、編譯有錯D、0,1,2,0標準答案:C知識點解析:if語句的格式為:if(表達式)語句1else語句2if和else是C語言的關鍵字。“語句1”稱為if子句,“語句2”稱為else子句,這些子句只允許為一條語句,若需要多條語句時,則應該使用復合語句。因此題目if(a=1)b=1:c=2:elsed=3;if分支有兩條語句,沒構成復合語句。6、有以下程序main(){intx=1,y=0;if(!x)y++;elseif(x==0)if(x)y+=2;elsey+=3;printf("%d\n",y);}程序運行后的輸出結果是A、2B、0C、1D、3標準答案:B知識點解析:x=1,if和elseif的條件都不滿足,故y值不改變輸出。7、若變量已正確定義,在if(W)printf("%d\n",k);中,以下不可替代W的是A、ch=getchar()B、a==b+cC、a<>b+cD、a++標準答案:C知識點解析:在if()語句的括號是一個合法的C語言表達式即可,如果表達式的值為0,則不執行if語句,否則執行if語句,而在選項C中,符號<>不是C語言的合法運算符,如果要表達a大于或小于b+c可用a!=b+c或(a>b+c)‖(a<b+c=來表達,而不能使用a<>b+c。所以它不是一個合法的C語言表達式。8、有以下程序段inta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;printf("a=%db=%dc=%d\n",a,b,c);程序的輸出結果是A、a=10b=50c=30B、a=10b=30c=10C、a=10b=50c=10D、a=50b=30c=50標準答案:C知識點解析:本題的程序段首先定義三個整型變量a,b,c,并且其初始值分別等于10,50,30,然后判斷a>b是否成立,如果條件成立,則把b的值賦給a,把c的值賦給b。由a和b的初始值可知,此條件表達式不成立,所以a和b的值保持不變。再執行下一條語句,把a的值賦給c,所以c的當前值等于10,最后由輸出語句輸出變量a,b,c的當前值,分別為10,50,10。9、設有定義:inta=1,b=2,c=3;以下語句中執行效果與其它三個不同的是A、if(a>b)c=a;a=b;b=c;B、if(a>b){c=a,a=b,b=c;}C、if(a>b)c=a,a=b,b=c;D、if(a>b){c=a;a=b;b=c;}標準答案:A知識點解析:在C語言中,用分號表示一條語句的結束,用{}把幾條語句放在一塊表示一個語句塊,其整體表示一個功能。因而在題目給出的四個選項中,選項B、C、D表示的功能相同,而選項A表示的是一條if語句,兩條賦值語句。10、if語句的基本形式是:if(表達式)語句,以下關于“表達式”值的敘述中正確的是A、必須是整數值B、必須是正數C、可以是任意合法的數值D、必須是邏輯值標準答案:C知識點解析:在if語句中,表達式可以是任意合法的數值。當其值為非零時,執行if語句,為0時執行else語句。11、有如下嵌套的if語句if(a<b)if(a<c)k=a;elsek=c;elseif(b<c)k=b;elsek=c;以下選項中與上述if語句等價的語句是A、k=(a<b)?((bc)?b:c;B、k=(a<c)?b:c;C、k=(a<c)?a:c;D、k=(a<b)?((a<c)?a:c):((b<c)?b:c);標準答案:D知識點解析:嵌套的ifelse語句的含義是,在變量a的值小于變量b的值,同時,變量a的值小于變量c的值時,把變量a的值賦給變量k。在變量a的值小于變量b的值,同時,變量a的值大于等于變量c的值時,把變量c的值賦給變量k。在變量a的值大于等于變量b的值,同時,變量b的值小于變量c的值時,把變量b的值賦給變量k。在變量a的值大于等于變量b的值,同時,變量b的值大于等于變量c的值時,把變量c的值賦給變量k。12、有以下計算公式若程序前面已經在命令行中包含math.h文件,不能夠正確計算上述公式的程序段是A、y=sqrt(x);if(x<0)y=sqrt(-x);B、if(x>=0)y=sqrt(x);elsey=sqrt(-x);C、if(x>=0)y=sqrt(x);if(x<0)y=sqrt(-x);D、y=sqrt(x>=0?x:-x);標準答案:A知識點解析:由題意可知計算公式的含義是:當x大于等于0時,y值等于x的算術平方根:當x小于0時,y值等于x的相反數的算術平方根。所以選項B用一個完整的ifelse語句表達了計算公式的含義;選項C用兩個if語句表達了計算公式的含義;選項D在求平方根函數的后面用x≥0?x:-x條件表達式來表達了計算公式的含義。選項A沒有用C語言語句正確的表達計算公式的含義。13、有以下程序#includemain(){intx;scanf("%d",&x);if(x<=3);elseif(x!=10)printf("%d\n",x);}程序運行時,輸入的值在哪個范圍才會有輸出結果A、不等于10的整數B、大于3或等于10的整數C、小于3的整數D、大于3且不等10的整數標準答案:D知識點解析:題目中,雖然else和第二個if不在同一行上,但等價于在同一行上,因此,程序的意思是當x大于3且不等于10時打印出來。14、有以下程序main(){inta=1,b=2,c=3,d=0;if(a==1&&b++==2)if(b!=2‖c--!=3)printf("%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);}程序運行后的輸出結果是A、1,3,2B、1,2,3C、1,3,3D、3,2,1標準答案:C知識點解析:a,b,c,d初始值分別為1,2,3,0。嵌套的if語句中,第一個if中,表達式a=1&&b++==2值為1,執行嵌套的if分支,此時b=3,b!=2成立,由于運算符是‖,不管后面一個表達式的值是不是1,其整個表達式的值總是1,c--!=3表達式不執行,最后打印出a,b,c的值是1,3,3。15、下列條件語句中,輸出結果與其他語句不同的是A、if(a==0)printf("%d\n",x);elseprintf("%d\n",y);B、if(a==0)printf("%d\n",y);elseprintf("%d\n",x);C、if(a!=0)printf("%d\n",x);elseprintf("%d\n",y);D、if(a)printf("%d\n",x);elseprintf("%d\n",y);標準答案:A知識點解析:選項B、C、D這三條語句都是在變量不等于0的情況下,輸出x;等于0的情況下輸出y,而選項A則正好相反。16、若有以下程序#includemain(){inta=1,b=2,c=3,d=4;if((a=2)‖(b=1))c=2;if((c==3)&&(d=-1))a=5;printf("%d,%d,%d,%d\n",a,b,c,d);}則程序的輸出結果是A、2,1,2,-1B、2,2,2,4C、5,1,2,-1D、1,2,3,4標準答案:B知識點解析:代碼中有兩條并列的if語句,第一條if語句執行,(a=2)‖(b=1)值為1,由于邏輯或表達式,根據其短路運算規則,a=2,b=2,即b值不變執行if分支c=2。并列的if語句中表達式(c==3)&&(d=-1)為邏輯與表達式,c==3不成立,不考慮d=-1表達式,d為5.邏輯表達式值為0,不執行相應if分支。17、若有以下程序#ineludemain(){inta=1,b=2,c=3,d=4,r=0;if(a!=1);elser=1;if(b==2)r+=2;else;if(c!=3)r+=3;else;if(d==4)r+=4;printf("%d\n",r);}則程序的輸出結果是A、10B、6C、7D、3標準答案:C知識點解析:程序代碼中有四條并列的if語句,第一條if表達式a!=1不成立,執行else分支,r=1;第二條if表達式b==2成立,執行r+=2,r=3;第三條if語句c!=3不成立,執行else分支,分支為空語句;第四條if分支d==4成立,執行該if分支語句,r+=4,r=7。18、若有以下程序#ineludemain(){inta=1,b=2,c=3,d=4;if((a=2)&&(b=1))c=2;if((c==3)‖(d=-1))a=5;pfintf("%d,%d,%d,%d\n",a,b,c,d);}則程序的輸出結果是A、2,1,2,一1B、2,2,2,4C、1,2,3,4D、5,1,2,-1標準答案:D知識點解析:代碼中有兩條并列的if語句,第一條if語句,邏輯與表達式(a=2)&&(b=1)中,a=2,則執行b=1,得到該邏輯與表達式值為1,執行分支語句c=2;第二條if語句(c==3)‖(d=-1),c==3不成立,執行d=-1,而后得出整個邏輯與表達式值為1,執行分支語句a=5。19、若有以下程序main(){inta=1,b=2,c=3,d=4,r=0;if(a!=1);elser=1;if(b==2)r+=2;if(c!=3);r+=3;if(d==4)r+=4;printf("%d\n",r);}則程序的輸出結果是A、7B、10C、6D、3標準答案:B知識點解析:程序代碼中有四條并列的if語句,第一條if表達式a!=1不成立,執行else分支,r==l;第二條if表達式b==2成立,執行r+=2,r=3:第三條if語句c!=3不成立,執行語句r+=3,r=6:第四條if分支d==4成立,執行該if分支語句,r+=4,r=10。20、以下敘述中正確的是A、if語句只能嵌套一層B、不能在else子句中再嵌套if語句C、if子句和else子句中可以是任意的合法的C語句D、改變if-else語句的縮進格式,會改變程序的執行流程標準答案:C知識點解析:含else子句的if語句的格式為if(表達式)語句1else語句2其中if和else是C語言的關鍵字。“語句1”稱為if子句,“語句2”稱為else子句,這些子句只允許為一條語句,若需要多條語句時,則應該使用復合語句,對于if和else語句的嵌套原則是比較自由的。21、以下選項中與if(a==1)a=b;elsea++;語句功能不同的switch語句是A、switch(a){case1:a=b;break;default:a++;}B、switch(a==1){case0:a=b:break;case1:a++;}C、switch(a){default:a++;break;Case1:a=b;}D、switch(a==1){case1:a=b;break;case0:a++;}標準答案:B知識點解析:本題主要考查if和switch結構。if(a==1)a=b;elsea++;代碼段的功能是如果a等于則把b的值賦值給a,否則a++。選項A使用switch對a進行判斷,如果是1則a=b,跳出switch,如果是其他值則a++;選項B對a==1的結果進行switch判斷,如果為0表示a不等于1則a=b,和題目要求不符合:選項C和選項A一樣;選項D和選項case條件相反,滿足題目要求。22、若以下選項中變量全部為整型變量,且己正確定義并賦值,則語法正確的switch語句是A、switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b;}B、switch(a*a+b*b){default:break;case3:y=a+b;break;case2:y=a-b:break;}C、switch(a+9){casec1:y=a-b;casec2:y=a+b;}D、switcha*b{case10:x=a+b;default:y=a-b;}標準答案:B知識點解析:本題考查switch的使用。選項A中的case0和case4沒有break語句;選項B正確;選項C中的case后面不是常量,錯誤;選項D中switch后面沒有括號。23、有以下程序main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("a=%d,b=%d\n",a,b);}程序的運行結果是A、a=2,b=2B、a=1,b=1C、a=1,b=0D、a=2,b=1標準答案:D知識點解析:本題考查的是用switch語句實現多分支選擇結構,首先進入第一個switch(x)判斷,進入case1中進行嵌套判斷,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接著執行case2,a自加為2,b自加為1,遇到break,結束循環,此時a=2,b=1。24、若有定義:floatx=1.5;inta=1,b=3,c=2;則正確的switch語句是A、switch(a+b){case1:printf("*\n");case2+1:printf("**\n");}B、switch((int)x);{case1:printf("*\n");case2:printf("**\n");}C、switch(x){case1.0:printf("*\n");case2.0:printf("**\n");}D、switch(a+b){case1:printf("*\n");casec:printf("**\n");}標準答案:A知識點解析:在C語言中,switch()后一對圓括號中的可以是整型表達式或字符表達式。case語句后面的常量表達式的類型必須與switch后圓括號中的表達式類型相同,各case語句標號的值應該互不相同,選項B中switch后括號表達式出錯,選項C中case后面的常量類型不正確,選項D中case后面出現了變量表達式,所以D不正確。25、下列敘述中正確的是A、在switch語句中必須使用defaultB、break語句必須與switch語句中的case配對使用C、在switch語句中,不一定使用break語句D、break語句只能用于switch語句標準答案:C知識點解析:break為C語言關鍵字,又稱間斷語句。break語句的功能是跳出正在執行的條件語句或循環語句。它可以出現在switch語句中,也可以出現在循環語句中。default是關鍵字,起標號的作用,代表所有case標號之外的那些標號。default標號可以出現在語句體中任何標號位置上。在switch語句體中也可以沒有default標號。26、有以下程序main(){intk=5,n=0;do{switch(k){case1:case3:n+=1;k--;break;default:n=0;k--;case2:case4:n+=2;k--;break;}printf("%d",n);}while(k>0&&n<5)}運行以后的輸出結果是A、0235B、235C、02356D、2356標準答案:B知識點解析:因為變量的初始值分別為k=5,n=0,所以程序第1次進入循環時,執行default語句,n=0,k=4,沒有break語句,因此執行case2分支語句,n為2,k為3,程序進行第2次循環,執行case3:n=3,k=2,輸出n值為3,程序進行第3次循環,執行case3這個分支,結果是n=5,k=1,打印出5;這時因為n=5不滿足n<5的循環條件,因此退出循環,程序運行結束。27、以下選項中與if(a==1)a=b;elsea++;語句功能不同的switch語句是A、switch(a==1){case0:a=b;break;case1:a++;}B、switch(a){case1:a=b;break;default:a++;}C、switch(a){default:a++;break;case1:a=b;}D、switch(a==1){case1:a=b;break;case0:a++;}標準答案:A知識點解析:ifelse語句的含義是,如果變量a的值等于1,則把變量b的值賦給變量a,否則,變量a的值加1。在本題的4個選項中,與其含義不同的是選項A,表示如果變量a的值等于1,則把變量a的值加1,否則,把變量b的值賦給變量a。28、有以下程序#includemain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;}printf("a=%d,b=%d\n",a,b);}程序運行后的輸出結果是A、a=1,b=1B、a=1,b=0C、a=2,b=1D、a=2,b=2標準答案:C知識點解析:本題考查的是用switch語句實現多分支選擇結構,首先進入第一個switch(x)判斷,進入case1中進行嵌套判斷,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接著執行case2,a自加為2,b自加為1,遇到break,結束循環,此時a=2,b=1。29、若以下選項中的變量a,b,y均已正確定義并賦值,則語法正確的switch語句是A、switch(a*a+b*b){default:break;case3:y=a+b;break;case2:y=a-b;break;}B、switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b;}C、switch(a+9){casea:y=a-b;caseb:y=a+b;}D、switcha*b{case10:y=a+b;default:y=a-b;}標準答案:A知識點解析:使用switch語句直接處理多個分支,其一般形式為:switch(表達式){case常量表達式1:語句1:break;case常量表達式2:語句2:break;case常量表達式n:語句n:break;default:語句n+1:break:}switch語句的執行流程是:首先計算switch后面圓括號中表達式的值,然后用此值依次與各個case的常量表達式比較,若圓括號中表達式的值與某個case后面的常量表達式的值相等,就執行此case后面的語句,執行后遇breal(語句就退出switch語句:若圓括號中表達式的值與所有case后面的常量表達式都不等,則執行default后面的語句n+l,然后退出switch語句。對于選項B,case語句和常量之間沒有空格,而選項C中的case后面為變量,選項D中switch后面沒給出圓括號。30、在嵌套使用if語句時,C語言規定else總是A、和之前與其具有相同縮進位置的if配對B、和之前與其最近的if配對C、和之前與其最近的且不帶else的if配對D、和之前的第一個if配對標準答案:C知識點解析:本題考查if語句,在C語言中,else總是和之前與其最近的且不帶else的if配對。31、以下程序段中,與語句:k=a>b?(b>c?1:0):0;功能相同的是A、if((a>b)‖(b>c))k=1;elsek=0;B、if(a<=b)k=0;elseif(b<=c)k=1;C、if((a>b)&&(b>c))k=1;elsek=0;D、if(a>b)k=1;elseif(b>c)k=1;elsek=0;標準答案:C知識點解析:題干中的表達式的功能是當a>b并且b>c時,變量k的值等于1,其余情況下,變量k的值都是等于0。32、關于“while(條件表達式)循環體”,以下敘述正確的是A、循環體的執行次數總是比條件表達式的執行次數多一次B、條件表達式的執行次數與循環體的執行次數一樣C、條件表達式的執行次數總是比循環體的執行次數多一次D、條件表達式的執行次數與循環體的執行次數無關標準答案:C知識點解析:while語句中表達式是循環條件,語句為循環體。while語句中當表達式計算的值為真(非0)時,執行循環體語句。因此條件表達式執行的次數總是比循環體多一次。33、有以下程序#includemain0{inty=10;while(y--);printf("y=%d\n",y);}程序執行后的輸出結果是A、y=0B、y=-1C、y=1D、while構成無限循環標準答案:B知識點解析:在while循環中每次變量y的值減1,直到其值等于0時退出循環,這時y的再減1變為-1。34、有以下程序main(){intk=5;while(--k)printf("%d",k-=3);printf("\n");}執行后的輸出結果是A、2B、4C、1D、死循環標準答案:C知識點解析:在程序語句中,k的初始值為5,進行第1次while循環后,k自減1為4,非0,執行循環體里的printf語句,輸出1,此時k的值變為1。程序執行第2次循環時,k自減1變為0,為假,退出while循環語句。所以程序的最后結果為1。35、有以下程序main0{inty=10;while(y--);printf("y=%d\n",y);}程序執行后的輸出結果是A、y=0B、y=1C、y=-1D、while構成無限循環標準答案:C知識點解析:while循環語句的循環體為空語句,所以每一次循環程序什么都不做。當循環自變量y=0時,退出循環結束,變量y執行自減運算,得-1,所以打印輸出變量y的值為-1。36、有以下程序#includevoidmain(){ints;scanf("%d",&s);while(s>0){switch(s){case1:printf("%d",s+5);case2:printf("%d",s+4);break;case3:printf("%d",s+3);default:printf("%d",s+1);break;}scanf(”%d.t,&s);}}運行時,若輸入123450,則輸出結果是A、66656B、6566456C、66666D、6.66666e+006標準答案:B知識點解析:這道試題主要考查了switch和break(語句,當變量s的值為1時,執行case1、case2兩條語句,輸出65;當變量s的值為2時,執行case2語句,輸出6;變量s的值為3時,執行case3、default兩條語句,輸出64;變量s的值為4時,執行deflault語句,輸入5;變量s的值為5時,執行default語句,輸出6;變量s的值為0時,程序運行結束。國家二級C語言機試(C語言程序設計)模擬試卷第3套一、選擇題(本題共37題,每題1.0分,共37分。)1、有以下程序#includemain(){inta=7;while(a--);printf("%d\n",a);}程序運行后的輸出結果是A、0B、1C、-1D、7標準答案:C知識點解析:在while語句中,先判斷while后面的表達式是否為0,如果為0,則退出循環,否則執行循環體。在本題中,當變量a的值經過幾次循環后,其值等于0時,退出while循環語句,變量a再執行自減運算,所以其值等于-1。2、在以下給出的表達式中,與while(E)中的(E)不等價的表達式是A、(E>0‖E<0)B、(!E==0)C、(E!=0)D、(E==0)標準答案:A知識點解析:在while(E)中,表達式E可以是C語言中任意合法的條件表達式,但不能為空,由它來控制循環體是否執行。在選項A中表達式E>OlIE<0是一個邏輯表達式。3、要求通過while循環不斷讀入字符,當讀入字母N時結束循環。若變量己正確定義,以下正確的程序段是A、while(ch=getchar()=’N’)printf("%c",ch);B、while(ch=getchar()==”N”)printf("%c",ch);C、while((ch=getchar())!=’N’)printf("%c",ch);D、while((ch=getchar())==’N’)printf("%c",ch);標準答案:C知識點解析:while循環的執行過程如下:①計算while后面圓括號中表達式的值,當值為非0時,執行步驟②;當值為0時,執行步驟④;②執行循環體一次;③轉去執行步驟①;④退出循環。在選項C中,表達式(ch=getchar())!=’N’表示輸入的字符不等于N,如果這個條件表達式成立,則執行循環體,打印輸出輸入的字符。如果這個條件表達式不成立,即輸入的字符等于N,則退出循環。4、若有以下程序main(){inta=-2,b=0;while(a++)++b;printf("%d,%d\n",a,b);}則程序的輸出結果是A、0,2B、1,2C、1,3D、2,3標準答案:B知識點解析:循環體執行兩次,第一次表達式a++值為-2,a的值為-1,執行循環體++b,b值為1,第二次表達式a++值為-1,a的值等于0,執行++b,b值為2,第三次判斷條件a++,表達式值為0,不執行循環體,但是條件判斷以后,a的值為1。5、由以下while構成的循環,循環體執行的次數是intk=0;while(k=1)k++;A、一次也不執行B、執行一次C、無限次D、有語法錯,不能執行標準答案:C知識點解析:循環條件表達式為賦值表達式k=1,因此循環執行無限次。6、有以下程序main0{inta=-2,b=0;while(a++&&++b);printf("%d,%d\n",a,b);}程序運行后輸出結果是A、0,3B、1,2C、1,3D、0,2標準答案:B知識點解析:循環體為空,共執行2次。第一次變量a初值為-2,b初值為0,表達式a++&&++b值為1,同時a的值為-1,b的值為1,第二次循環條件判斷以后,a的值為0,b的值2,執行循環體空,第三次判斷條件表達式值為0,不執行循環體,而a的值為1,但是表達式a++的值為0,因此不計算表達式++b的值,b的值仍為2。7、關于do循環體while(條件表達式);以下敘述中正確的是A、循環體的執行次數總是比條件表達式的執行次數多一次B、條件表達式的執行次數總是比循環體的執行次數多一次C、條件表達式的執行次數與循環體的執行次數無關D、條件表達式的執行次數與循環體的執行次數一樣標準答案:D知識點解析:do-while語句先執行語句,后判斷表達式的值。故do-while語句又稱“直到型”循環結構。由于是先執行后判斷,因此do-while語句的循環語句至少被執行一次,循環條件至少判斷一次。8、以下不構成無限循環的語句或語句組是A、n=0;do{++n;)while(n<=0);B、n=0;while(1){n++;}C、n=10;while(n);{n--;}D、for(n=0,i=1;;i++)n+=i;標準答案:A知識點解析:選項B中while(1)永遠為真所以進入死循環,選項C中,while(n=10)同理,選項D中for循環沒有循環限定條件也將進入無限循環,只有選項A中while(n<=0)循環判定成立,循環將不進入無限循環。9、有以下程序main(){inti=5;do{if(i%3=1)if(i%5==2){printf("**%d",i);break;}i++;}while(i!=0);printf("\n");}程序的運行結果是A、*3*5B、*5C、*7D、*2*6標準答案:C知識點解析:由于循環變量i的初值等于5,所以第一、二次進入do....while循環語句時,條件語句if(i%3==1),if(i%5==2){printf(“*%d”,i);break;}不執行,只執行i++語句。當i=7時,滿足條件語句if(i%3==1),if(i%5==2){printf("*%d",i);break;},所以輸出*7,結束循環。10、若變量已正確定義,有以下程序段i=0;doprintf("%d,",i);while(i++);printf("%d\n",i);其輸出結果是A、0,0B、1,1C、0,1D、程序進入無限循環標準答案:C知識點解析:d0…while循環的執行過程如下:①執行do后面的循環體中的語句。②計算while后一對圓括號中表達式的值。當值為非0時,轉去執行步驟①;當值為0時,執行步驟③。③退出do…while循環。對于本題變量i的初始值等于“0”,接著執行do后面的循環體中的語句,輸出變量i的值0。再判斷while后面括號中表達式i++的值,其值為0,所以循環結束。此時變量i的值經過自加已經變為1,所以再次輸出i的值“1”。11、若有以下程序main(){inta=-2,b=0;do{++b;}while(a++);printf("%d,%d\n",a,b);}則程序的輸出結果是A、0,2B、1,2C、1,3D、2,3標準答案:C知識點解析:由于a的初始值等于-2,所以while循環語言執行三次結束,第一次a=-2,b=1,然后判斷循環條件a++非零,執行第二次循環體a=-1,b=2,判斷循環條件非零,執行循環體a=0,b=3,判斷循環條件為0,此時變量a的值等于1。12、有以下程序main(){inta=3;do{printf("%d,",a-=2);}while(!(-a);printf("\n");}程序運行后的輸出結果是A、1,B、1,-2,C、3,0,D、1,0標準答案:B知識點解析:循環體執行兩次。首先輸出a=1,然后判斷表達式!(--A,a為0,循環條件表達式值為1,執行第二次循環體,輸出a=-2。判斷循環條件表達式值為0,循環退出。13、若i和k都是int類型變量,有以下for語句for(i=0,k=-1;k=1;k++)printf("*\n");下面關于語句執行情況的敘述中正確的是A、循環體執行兩次B、循環體執行一次C、循環體一次也不能執行D、構成無限循環標準答案:D知識點解析:本題考查for循環。本題的for循環初始條件為i=0,k=-1;循環結束條件為k=1永遠為真(k不為0),因此循環不能結束。14、若k是int類型變量,且有以下for語句1for(k=-1;k<0;k++)printf("*\n");下面關于語句執行情況的敘述中正確的是A、循環體執行兩次B、循環體執行一次C、循環體一次也不執行D、構成無限循環標準答案:B知識點解析:本題考查for循環的使用。在程序中,for循環的初始值k=-1,循環結束條件是k<0,每次循環k增加1,第一次進入循環的時候k為-1,k小于0,執行打印,然后k的值變成0,下次進入循環k不小于0,循環結束,因此循環只能執行一次。15、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d\n",n);break;case2:case4:printf("%d\n",n);continue;case0:exit(0);}printf("%d\n",n);}以下關于程序段執行情況的敘述,正確的是A、當產生的隨機數n為4時結束循環操作B、當產生的隨機數n為1和2時不做任何操作C、當產生的隨機數n為0時結束程序運行D、for循環語句固定執行8次標準答案:C知識點解析:rand()函數功能為產生一個隨機數,rand()%5,則產生0~4之間的任意隨機數,當產生的隨機數n為0時,執行“case0:exit(0)”這條語句,結束程序的運行。16、有以下程序#includemain(){inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的運行結果是A、963B、852C、741D、875421標準答案:B知識點解析:y的值的初值為9,所以在for循環中,當y的值為9、6或3時,if語句的條件成立,執行輸出語句,輸出表達式--y的值。因為自減符號在y的前面,所以首先y的自減1,然后再輸出y的值,故輸出結果為852。17、有以下程序#includemain(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i*j;}}pfinff("m=%d\n",m);}程序運行后的輸出結果是A、m=2B、m=4C、m=5D、m=6標準答案:D知識點解析:這道題考查了for。循環的嵌套應用。對于外層for循環來說,變量i從1增到2,循環執行2次。當變量i的值等于1時,對于內層for循環來說,變量j從3減到1,求得變量m的值等于6。當變量i的值等于2時,第一遍執行內層for循環,變量j的值等于3,那么i*j的值等于6,其值大于3,這時執行break語句,退出內層for循環的執行。所以程序輸出變量m的值為6。18、有以下程序#includevoidmain(){intc=0,k;for(k=1;k<3;k++)switch(k){default:c+=k;case2:c++;break;case4:c+=2;break;}pfintf("%d\n",c);}A、9B、7C、5D、3標準答案:D知識點解析:在這段程序中,整型變量c的初始值賦為0,在第一次執行for循環語句時,因為此時變量k的值等于1,所以在switch語句中首先執行default語句,給變量c的值加1,因為在default語句后面沒有break語句,所以就會接著執行case2這條語句,再給變量c的值加1,其值變為2,這時退出switch語句塊,進入第二次for循環,此時k的值等于2,就會執行switch語句塊中的case2這條語句,再給變量c的值加1,這時變量c的值就是3,此時退出switch語句塊,循環變量k的值加l,成為3,此時已不再滿足循環條件,執行程序中的最后一條語句,把變量c的值在屏幕上輸出。19、有以下程序#includemain(){inti,j;for(i=3;i>=1;i--){for(j=1;j<=2;j++)printf("%d",i+j);printf("\n");}}程序的運行結果是A、432543B、233445C、453423D、233423標準答案:C知識點解析:本題中的外層行變量i從3逐次遞減到1,共輸出3行。內層列變量j每次從1遞增到2,每行輸出2個數字。所以當i=3時,第一行輸出i+1=4i+2=5,即45;當i=2時,第一行輸出i+1=3和i+2=4,即34;當i=1時,第一行輸出i+1=2和i+2=3,即23。20、設變量己正確定義,則以下能正確計算f=n!的程序段是A、f=0;for(i=1;i<=n;i++)f*=i;B、f=1;for(i=1;i<n;i++)f*=i;C、f=1;for(i=n;i>1;i++)f*=i;D、f=1;for(i=n;i>=2;i--)f*=i;標準答案:D知識點解析:本題主要考查for循環的使用。題目要求計算階乘n!,通過for循環來實現,循環變量i可以從1到n(包括n)或者從n到1,在循環體內做累乘。選項A中,累乘變量的初值為0,最終計算結果也為0;選項B中循環次數為n-1次,累乘結果少乘了n;選項C是死循環;選項D正確。21、有以下程序main(){inti;for(i=1;i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}執行后的輸出結果是A、24B、5C、32D、40標準答案:C知識點解析:在for循環體中,首先判斷自變量i能否被5整除,然后再自加兩次,最后判斷i能否被8整除。當for循環執行到第30次時,i的值為30能被5整除,然后i經過兩次自加1運算,值變為32,能被8整除,故執行“printf("%d",i);”語句,即輸出32。22、有以下程序#includevoidmain(){charb,c;inti;b=’a’;c=’A’;for(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf("\n");}程序運行后的輸出結果是A、ABCDEFB、aBeDeFC、abcdefD、AbCdEf標準答案:D知識點解析:循環變量i從0依次遞增到5,依次輸出字母.A,b,C,d,E,f。23、有以下程序main(){inta=1,b=2;for(;a<8;a++){b+=a;a+=2;}printf("%d,%d\n",a,b);}程序運行后的輸出結果是A、8,11B、10,14C、7,11D、9,18標準答案:B知識點解析:在這段程序中變量a的初值等于1,變量b的初值等于2。第1次執行for循環語句后,變量a的值等于3,變量b的值等于3。第2次執行for循環后,變量a等于6,變量b的值等于7。第3次執行for循環后,變量a等于9,變量b的值等于14。第4次執行for循環后,變量a等于10,這時退出for循環,此時變量b的值等于14。因而程序輸出變量a,b的值分別為10,14。24、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d\n",n);break;case2:case4:printf("%d\n",n);continue;case0:exit(0);}printf("%d\n",n);}A、當產生的隨機數n為4時結束循環操作B、當產生的隨機數n為1和2時不做任何操作C、當產生的隨機數n為0時結束程序運行D、for循環語句固定執行8次標準答案:C知識點解析:rand()函數功能為產生一個隨機數,rand(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論