1. 下列數組定義中錯誤的是(b )。
A)int x[ ][3]={0};
B)int x[2][3]={{l,2},{3,4},{5,6}};
C)int x[ ][3]={{l,2,3},{4,5,6}};
D)int x[2][3]={l,2,3,4,5,6};
2. 下列4 個程序中,完全正確的是(b )。
A)#include <stdio.h> B)#include <stdio.h>
main( ); main( )
{/*programming*/ {/* / programming / */
printf("programming! \n");} printf("programming!\n");}
C)#include <stdio.h> D)include <stdio.h>
main( ) main( )
{/* / programming*/ */ { /*programming */
printf("programming! \n");} printf("programming! \n");}
3. 若有定義:float x=1.5;int a=1,b=3,c=2;則正確的switch 語句是(c )。
A)switch(x) B)switch((int)x);
{ case 1.0: printf("*\ n"); { case 1: printf("*\n");
case 2.0: printf("**\ n"); case 2: printf("**\n");
} }
C)switch(a+b) D)switch(a+b)
{ case 1: printf("*\n"); { case 1: printf("* \n");
case 2+1: printf("** \n"); case c: printf("** \n");
} }
4. 若各選項中所用變量已正確定義,fun()函數中通過return 語句返回一個函數值,下列
選項中錯誤的程序是(a )。
A)main( ) B)float fun(int a,int b){……}
{…… x =fun(2,10); ……} main( )
float fun(int a,int b) {……} {…… x =fun(i,j); ……}
C)float fun(int,int); D)main( )
main( ) {float fun(int I,int j);
{…… x =fun(2,10); ……} ……x =fun(i,j); ……}
float fun(int a,int b) {……} float fun(int a,int b) {……}
5. 要求通過while 循環不斷讀入字符,當讀入字母N 時結束循環。若變量已正確定義,
下列正確的程序段是(a )。
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);
6. 已定義下列函數:
int fun(int *p)
{ return *p; }
fun 函數返回值是(b )。
A)不確定的值 B)一個整數
C)形參p 中存放的值 D)形參p 的地址值
7. 若有說明語句:double *p,a;則能通過scanf 語句正確給輸入項讀入數據的程序段是
(d )。
A)*p =&a; scanf("%1f",p); B)*p =&a; scanf("%f",p);
C)p =&a; scanf("%1f",*p); D)p =&a; scanf("%1f",p);
8. 有下列程序段
struct st
{ int x;int *y; } *pt;
int a[ ]={l,2},b[ ]={3,4};
struct st c[2] = {10,a,20,b};
pt=c;
下列選項中表達式的值為11 的是(c )。
A)*pt− >y B)pt− >x
C)+ +pt− >x D)(pt+ +)->x
9. 設有下列定義和語句
char str[20]="Program",*p;
p=str;
則下列敘述中正確的是(a )。
A)*p 與str[0]的值相等
B)str 與p 的類型完全相同
C)str 數組長度和p 所指向的字符串長度相等
D)數組str 中存放的內容和指針變量p 中存放的內容相同
補充:會重謝的 高手們
樓主您好!
您這份題目都是比較基礎,但是比較注重細節。
一下是個人對這份題目的解析。
第一題: B
這是一個很典型的數組越界問題,數組越界就是指沒有那沒多元素,卻使用或者訪問沒有的元素。
第二題:B
可以說這是一個完全沒有什麼切實意義的題目.選擇A main函數後面不應該有分號,加上分號變成了 main{} 這樣!表示mian函數裡無內容。
選項C:注釋的格式錯了! C語言多行注釋 格式/* something */
選項D:包含頭文件缺少了預處理標識符 “#”
第三題:C
選擇A中switch(x),其中x 必須是整形。而該選項中x為float,所以錯誤
選擇B中switch((int)x),雖然對x進行了強制類型轉換,但是在switch後錯誤的寫一個分號。
選擇D:在case 子句中,是不可以使用變量作為case 分支表示,其中子句 case c,c為一個int 變量
其中選擇C中case 2+1;由於是兩個常量編譯器可以進行常量運算優化,即編譯後直接運算成case 3,所以這個選擇是正確的;
第四題:A
因為在調用函數fun 強沒有定義或者聲明編譯器將會提示fun 未定義。
第五題:D
這個糾結的題目,不必多解釋。注意括號的匹配。
第六題:C
這本來就是一個無錯的函數,由於格式比較怪異,很容易誤解,形參*p,意思以後的p代表一個內存地址,也就是形參的地址,之後return *p,表示去除在p中地址的值,也就是形參的值。
第七題:D
首先要明確
p:表示地址
*p:表示地址裡面的值
a:變量
&a:變量a的地址
選擇A:*p是一個值 &a是一個地址 不能使用 “=” 號 賦值。
選擇B,C都是同類錯誤。
第八題:C
首先 pt 是一個指針
pt = c 等同 pt = &c[0];
運算符優先級關系 C選項等同 ++(pt->x);
第九題:A
在數組和指針的賦值中,要是不指定數組下標[0]的地址,也就是數組的首地址。也就是說
p=str 等同 p=&str[0]
LZ,其實書本上的這些東西,其實挺糾結的,很多東西在現實使用中都不會出現,比如那個++pt->x
在現實裡 我們會寫成++(pt->x)不過還是要理解的!加油哦····
只是有的時候不要特執著~去搗鼓(I++) + (I++) + (I++)這樣的題目就好!
希望樓主滿意!