資源簡介 《C語言程序設(shè)計(jì)》練習(xí)題一、單項(xiàng)選擇題單項(xiàng)選擇題要求從給出的四個備選答案中,選出一個最符合題意的答案。本類習(xí)題主要檢查對C語言基本概念的掌握情況。在完成習(xí)題的過程中,不但要選出正確的答案,而且要清楚不正確的選項(xiàng)錯在何處,以加深對概念的理解。對于掌握不準(zhǔn)的問題,應(yīng)該通過上機(jī)實(shí)驗(yàn)來檢驗(yàn)。1.下列四組字符串中都可以用作C語言程序標(biāo)識符的一組是____。 A) print B) i\am C) Pxq D) str_l _3d one_half My->book Cpp oodb start$it line# pow aBc 3pai His.age while2.C語言程序從main()函數(shù)開始執(zhí)行,所以這個函數(shù)要寫在____。A) 程序文件的開始 B) 程序文件的最后C) 它所調(diào)用的函數(shù)的前面 D) 程序文件的任何位置3.下列關(guān)于C語言的敘述錯誤的是____。A) 大寫字母和小寫字母的意義相同B) 不同類型的變量可以在一個表達(dá)式中C) 在賦值表達(dá)式中等號(=)左邊的變量和右邊的值可以是不同類型D) 同一個運(yùn)算符號在不同的場合可以有不同的含義4.在C語言中,錯誤的int類型的常數(shù)是____。A) 32768 B) 0 C) 037 D) 0xAF5.已知 long i=65539;執(zhí)行語句printf("%d",i);屏幕顯示____。A) 65539 B) -3 C) 3 D) 程序不能執(zhí)行6.在C語言中,整數(shù)-8在內(nèi)存中的存儲形式是____。A) 1111 1111 1111 1000 B) 1000 0000 0000 1000C) 0000 0000 0000 1000 D) 1111 1111 1111 01117.C語言中字符型(char)數(shù)據(jù)在內(nèi)存中的存儲形式是____。A) 原碼 B) 補(bǔ)碼 C) 反碼 D) ASCII碼8.將字符g賦給字符變量c,正確的表達(dá)式是____。A) c=\147 B) c="\147" C) c='\147' D) c='0147'9.已知:char a;int b;float c;double d;執(zhí)行語句"c=a+b+c+d;"后,變量c的數(shù)據(jù)類型是____。A) int B) char C) float D) double10.溫度華氏和攝氏的關(guān)系是: C=-(F-32)。已知:float C,F;由華氏求攝氏的正確的賦值表達(dá)式是____。A) C=5/9(F-32) B) C=5*(F-32)/9C) C=5/9*(F-32) D) 三個表達(dá)式都正確11.逗號表達(dá)式"(a=3*5,a*4),a+15"的值是____。A) 15 B) 60 C) 30 D) 不確定12.如果int a=1,b=2,c=3,d=4;則條件表達(dá)式"aA) 1 B) 2 C) 3 D) 413.已知int i=10;表達(dá)式"20-0<=i<=9"的值是____。A) 0 B) 1 C) 19 D) 2014.使用語句scanf("x=%f,y=%f",&x,&y);輸入變量x、y的值(□代表空格),正確的輸入是____。A) 1.25,2.4 B) 1.25□2.4 C) x=1.25,y=2.4 D) x=1.25□y=2.415.已知int x=(1,2,3,4);變量x的值是____。A) 1 B) 2 C) 3 D) 416.已知int i=1,j=0;執(zhí)行下面語句后j的值是____。while(i)switch(i){ case 1: i+=1;j++;break;case 2: i+=2;j++;break;case 3: i+=3;j++;break;default: i--;j++;break;}A) 1 B) 2 C) 3 D) 死循環(huán)17.求取滿足式 12+22+32+ …… +n2 ≤1000的n,正確的語句是____。A) for(i=1,s=0;(s=s+i*i)<=1000;n=i++) ;B) for(i=1,s=0;(s=s+i*i)<=1000;n=++i) ;C) for(i=1,s=0;(s=s+i*++i)<=1000;n=i) ;D) for(i=1,s=0;(s=s+i*i++)<=1000;n=i) ;18.下面的for語句____。for(x=0,y=10;(y>0)&&(x<4);x++,y-- ) ;A) 是無限循環(huán) B) 循環(huán)次數(shù)不定 C) 循環(huán)執(zhí)行4次 D) 循環(huán)執(zhí)行3次19.已知 char a[][20]={"Beijing","shanghai","tianjin","chongqing"};語句printf("%c",a[30]);的輸出是____。A) <空格> B) n C) 不定 D) 數(shù)組定義有誤20.對二維數(shù)組的正確說明是____。A) int a[][]={1,2,3,4,5,6}; B) int a[2][]={1,2,3,4,5,6};C) int a[][3]={1,2,3,4,5,6}; D) int a[2,3]={1,2,3,4,5,6};21.對字符數(shù)組str賦初值,str不能作為字符串使用的一個是____。A) char str[]="shanghai";B) char str[]={"shanghai"};C) char str[9]={'s','h','a','n','g','h','a','i'};D) char str[8]={ 's','h','a','n','g','h','a','i'};22.如果一個變量在整個程序運(yùn)行期間都存在,但是僅在說明它的函數(shù)內(nèi)是可見的,這個變量的存儲類型應(yīng)該被說明為____。A) 靜態(tài)變量 B) 動態(tài)變量 C) 外部變量 D) 內(nèi)部變量23.在一個C源程序文件中,若要定義一個只允許在該源文件中所有函數(shù)使用的變量,則該變量需要使用的存儲類別是____。A) extern B) register C) auto D) static24.定義一個函數(shù)實(shí)現(xiàn)交換x和y的值,并將結(jié)果正確返回。能夠?qū)崿F(xiàn)此功能的是____。A) swapa(int x,int y) B) swapb(int *x,int *y){ int temp; { int temp;temp=x;x=y;y=temp; temp=x;x=y;y=temp;} }C) swapc(int *x,int *y) D) swapd(int *x,int *y){ int temp; { int *temp;temp=*x;*x=*y;*y=temp; temp=x;x=y;y=temp;} }25.在下列結(jié)論中,只有一個是錯誤的,它是____。A) C語言允許函數(shù)的遞歸調(diào)用B) C語言中的continue語句,可以通過改變程序的結(jié)構(gòu)而省略C) 有些遞歸程序是不能用非遞歸算法實(shí)現(xiàn)的D) C語言中不允許在函數(shù)中再定義函數(shù)26.說明語句"int (*p)( );"的含義是____。A) p是一個指向一維數(shù)組的指針變量B) p是指針變量,指向一個整型數(shù)據(jù)C) p是一個指向函數(shù)的指針,該函數(shù)的返回值是一個整型D) 以上都不對27.設(shè)有說明int (*p)[4];其中的標(biāo)識符p是____。A) 4個指向整型變量的指針變量B) 指向4個整型變量的函數(shù)指針C) 一個指向具有4個整型元素的一維數(shù)組的指針D) 具有4個指向整型變量的指針元素的一維指針數(shù)組28.已知:char s[10], *p=s,則在下列語句中,錯誤的語句是____。A) p=s+5; B) s=p+s; C) s[2]=p[4]; D) *p=s[0];29.已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int (*ptr)[3]=a,*p=a[0];則以下能夠正確表示數(shù)組元素a[1][2]的表達(dá)式是____。A) *(*(a+1)+2) B) *(*(p+5)) C) (*ptr+1)+2 D) *((ptr+1)[2])30.已知:int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a;則值為3的表達(dá)式是____。A) p+=2,*(p++) B) p+=2,*++p C) p+=2,*p++ D) p+=2,++*p32.函數(shù)的功能是交換變量x和y中的值,且通過正確調(diào)用返回交換的結(jié)果。能正確執(zhí)行此功能的函數(shù)是____。A) funa (int *x, int *y) B) funb (int x, int y){ int *p; { int t;p=x;*x=*y;*y=*p; t=x;x=y;y=t;} }C) func (int *x, int *y) D) func (int *x, int *y){ *x=*y;*y=*x; { *x=*x+*y;*y=*x-*y;*x=*x-*y;} }33.有定義如下:struct sk{ int a;float b;}data ,*p;如果 p=&data;則對于結(jié)構(gòu)變量data的成員a的正確引用是____。A)(*).data.a B) (*p).a C) p->data.a D) p.data.a34.已知:struct st{ int n;struct st *next;};static struct st a[3]={1,&a[1],3,&a[2],5,&a[0]},*p;如果下述語句的顯示是2,則對p的賦值是____。printf("%d",++(p->next->n));A) p=&a[0]; B) p=&a[1]; C) p=&a[2]; D) p=&a[3];35.fscanf函數(shù)的正確調(diào)用形式是____。A) fscanf (文件指針, 格式字符串, 輸出列表);B) fscanf (格式字符串, 輸出列表, 文件指針);C) fscanf (格式字符串, 文件指針, 輸出列表);D) fscanf (文件指針, 格式字符串, 輸入列表);36.使用fgetc函數(shù),則打開文件的方式必須是____。A) 只寫 B) 追加 C) 讀或讀/寫 D) 參考答案B和C都正確37.已知宏定義#define N 3#define Y(n) ((N+1)*n)執(zhí)行語句z=2*(N+Y(5+1));后,變量z的值是____。A) 42 B) 48 C) 52 D) 出錯38.已知宏定義 #define SQ(x) x*x,執(zhí)行語句printf("%d",10/SQ(3));后的輸出結(jié)果是____。A) 1 B) 3 C) 9 D) 10二、 閱讀程序題閱讀程序?qū)τ诔鯇W(xué)者來說很重要,一方面可以鞏固所學(xué)的語法知識,另一方面通過閱讀別人寫好的程序來打開自己的思路,就所謂見多識廣。通過閱讀理解程序,從給出的四個備選參考答案中,選擇程序的正確輸出。如果選擇有誤,就要認(rèn)真分析原因,是概念方面的錯誤還是對程序邏輯理解不對,從而加深對語法規(guī)則的理解,提高程序設(shè)計(jì)能力。程序設(shè)計(jì)語言是開發(fā)程序的一個工具,學(xué)習(xí)語言的目的是為了編寫程序來解決實(shí)際問題,所以特別提倡通過實(shí)際上機(jī)來檢驗(yàn)備選答案,增強(qiáng)動手能力。1.下面程序的輸出結(jié)果是____。#include main( ){ int x=10;{ int x=20;printf ("%d,", x);}printf("%d\n", x);}A) 10,20 B) 20,10 C) 10,10 D) 20,202.以下程序的輸出結(jié)果是____。main( ){ int x=10, y=10; printf("%d %d\n", x――, ――y);}A) 10 10 B) 9 9 C) 9 10 D) 10 93.下面程序可能的輸出結(jié)果是____。main(){ int a,b;scanf("%2d%3d",&a,&b);printf("a=%d b=%d\n",a,b);}A) a=12 b=34 B) a=123 b=45 C) a=12 b=345 D) 語句右錯誤4.以下程序段的輸出結(jié)果是____。int a=10,b=50,c=30;if(a>b)a=b;b=c;c=a;printf("a=%d b=%d c=%d\n",a,b,c);A) a=10 b=50 c=10 B) a=10 b=30 c=10C) a=50 b=30 c=10 D) a=50 b=30 c=505.以下程序的輸出結(jié)果是____。main(){ int a=0,b=1,c=0,d=20;if(a) d=d-10;else if(!b)if(!c) d=15;else d=25;printf("d=%d\n",d);}A) d=10 B) d=15 C) d=20 D) d=256.下面程序的輸出結(jié)果為____。main(){ int a=1,b=0;switch(a){ case 1: switch (b){ case 0: printf("**0**"); break;case 1: printf("**1**"); break;}case 2: printf("**2**"); break;}}A) **0** B) **0****2** C) **0****1****2** D) 有語法錯誤7.以下程序的輸出結(jié)果是____。main(){ char *s="12134211";int v1=0,v2=0,v3=0,v4=0,k;for(k=0;s[k];k++)switch(s[k]){ case '1': v1++;case '3': v3++;case '2': v2++;default: v4++;}printf("v1=%d, v2=%d, v3=%d, v4=%d\n",v1,v2,v3,v4);}A) v1=4,v2=2,v3=1,v4=1 B) v1=4,v2=9,v3=3,v4=1C) v1=5,v2=8,v3=6,v4=1 D) v1=4,v2=7,v3=5,v4=88.下面程序的輸出是____。main(){ int num=0;while(num<=2){ num++;printf("%d\n",num);}}A) 1 B) 1 C) 1 D) 12 2 23 349.從鍵盤上輸入"446755"時,下面程序的輸出是____。#include main(){ int c;while((c=getchar())!='\n')switch(c -'2'){ case 0:case 1: putchar(c+4);case 2: putchar(c+4);break;case 3: putchar(c+3);default: putchar(c+2);break;}printf("\n");}A) 888988 B) 668966 C) 88898787 D) 6689878710.下面程序的輸出結(jié)果是____。main(){ int i,j,x=0;for(i=0;i<2;i++){ x++;for(j=0;j<-3;j++){ if(j%2)continue;x++;}x++;}printf("x=%d\n",x);}A) x=4 B) x=8 C) x=6 D) x=1211.下面程序的輸出結(jié)果是____。#include main( ){ int n[3][3], i, j;for(i=0;i<3;i++ )for(j=0;j<3;j++ )n[i][j]=i+j;for(i=0;i<2;i++ )for(j=0;j<2;j++ )n[i+1][j+1]+=n[i][j];printf("%d\n", n[i][j]);}A) 14 B) 0 C) 6 D) 不確定12.下面程序的輸出結(jié)果是____。#include main( ){ int a[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4};int i,j,n;n=9;i=n/5;j=n-i*5-1;printf("a[%d][%d]=%d\n", i,j,a[i][j]);}A) 6 B) -3 C) 2 D) 不確定13.下面程序的輸出結(jié)果是____。#include main( ){ char s1[50]={"some string *"},s2[]={"test"};printf("%s\n", strcat(s1,s2));}A) some string * B) testC) some stritest D) some string *test14.下面程序的輸出結(jié)果是____。#include f(char *s){ char *p=s;while(*p!='\0')p++;return(p-s);}main(){ printf("%d\n",f("ABCDEF"));}A) 3 B) 6 C) 8 D) 015.下面程序的輸出結(jié)果是____。#include #include main( ){ char str[100] ="How do you do";strcpy( str + strlen(str)/2, "es she");printf("%s\n", str);}A) How do you do B) es sheC) How are you D) How does she16.下面程序的輸出結(jié)果是____。#include 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);}A) 11 B) 20 C) 21 D) 3117.下面程序的輸出結(jié)果是____。main(){ int a[]={1,2,3,4,5,6};int *p;p=a;printf("%d ",*p);printf("%d ",*(++p));printf("%d ",*++p);printf("%d ",*(p--));p+=3;printf("%d %d ",*p,*(a+3));}A) 1 2 3 3 5 4 B) 1 2 3 4 5 6 C) 1 2 2 3 4 5 D) 1 2 3 4 4 518.下面程序的輸出結(jié)果是____。#include main ( ){ int a[]={1, 2, 3, 4, 5} ;int x, y, *p;p=&a[0];x=*(p+2);y=*(p+4);printf("%d,%d,%d\n", *p, x, y);}A) 1,3,5 B) 1,2,3 C) 1,2,4 D) 1,4,519.下面程序的輸出結(jié)果是____。#include "string.h"fun(char *w,int n){ char t,*s1,*s2;s1=w;s2=w+n-1;while(s1{ t=*s1++;*s1=*s2--;*s2=t;}}main(){ static char *p="1234567";fun(p,strlen(p));printf("%s",p);}A) 7654321 B) 1717171 C) 7171717 D) 171171720.下面程序的輸出結(jié)果是____。#include char *p = "abcdefghijklmnopq" ;main( ){ int i=0;while( *p++!='e' );printf("%c\n", *p);}A) c B) d C) e D) f21.下面程序的輸出結(jié)果是____。#include "stdio.h"struct str1{ char c[5];char *s;};main( ){ struct str1 s1[2]={ {"ABCD""EFGH"},{"IJK","LMN"} };struct str2{ struct str1 sr;int d;}s2={"OPQ","RST",32767};struct str1 *p[2];p[0]=&s1[0];p[1]=&s1[1];printf("%s",++p[1]->s); /* ① */printf("%c",s2.sr.c[2]); /* ② */}① A) LMN B) MN C) N D) IJK② A) O B) P C) Q D) R22.以下程序的輸出結(jié)果是____。struct st{ int x,*y;}*p;int s[]={10,20,30,40};struct st a[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};main(){ p=a;printf("%d\n",++(*(++p)->y));}A) 10 B) 11 C) 20 D) 21三、程序填空題在程序填空題中,已經(jīng)給出了程序的主干,讀者首先要理解程序的思路,再選擇正確的內(nèi)容填入空白處,使程序完成既定的功能。這類習(xí)題的設(shè)計(jì)就是要引導(dǎo)讀者逐步掌握編程的方法。本節(jié)習(xí)題的難度適中,可能有些典型的程序在課堂上已經(jīng)有所接觸,讀者一定要獨(dú)立完成它,這樣就可以逐步提高自己的編程能力。1.下面程序的功能是不用第三個變量,實(shí)現(xiàn)兩個數(shù)的對調(diào)操作。#include main(){ int a,b;scanf("%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);a= ① ;b= ② ;a= ③ ;printf("a=%d,b=%d\n",a,b);}2.下面的程序的功能是求一維數(shù)組中的最小元素。findmin(int *s,int t,int *k){ int p;for(p=0,*k=p;pif(s[p]① ;}main(){ int a[10],i,*k=&i;for(i=0;i<10;i++)scanf("%d",&a[i]);findmin(a,10,k);printf("%d,%d\n",*k,a[*k]);}3.下面程序的功能是計(jì)算1-3+5-7+ …… -99+101的值。main(){ int i,t=1,s=0;for(i=1;i<=101;i+=2){ ① ;s=s+t;② ;}printf("%d\n",s);}4.下面程序的功能是將形參x的值轉(zhuǎn)換為二進(jìn)制數(shù),所得的二進(jìn)制數(shù)放在一個一維數(shù)組中返回,二進(jìn)制數(shù)的最低位放在下標(biāo)為0的元素中。fun(int x,int b[]){ int k=0,r;do{ r=x% ① ;b[k++]=r;x/= ② ;}while(x);}5.下面程序的功能是輸出1到100之間每位數(shù)的乘積大于每位數(shù)的和的數(shù)。例如數(shù)字26,數(shù)位上數(shù)字的乘積12大于數(shù)字之和8。main(){ int n,k=1,s=0,m;for(n=1;n<=100;n++){ k=1;s=0;① ;while( ② ){ k*=m%10;s+=m%10;③ ;}if(k>s)printf("%d",n);}}6.下面程序的功能是輸出100以內(nèi)的個位數(shù)為6、且能被3整除的所有數(shù)。main(){ int i,j;for(i=0; ① ;i++){ j=i*10+6;if( ② ) countinue;printf("%d",j);}}7.下面程序的功能是用輾轉(zhuǎn)相除法求兩個正整數(shù)m和n的最大公約數(shù)。hcf(int m,int n){ int r;if(m{ r=m;① ;n=r;}r=m%n;while( ② ){ m=n;n=r;r=m%n;}③ ;}8.下面程序的功能是刪除字符串s中的空格。#include main(){ char *s="Beijing ligong daxue";int i,j;for(i=j=0;s[i]!='\0';i++)if(s[i]!= ' ') ① ;else ② ;s[j]= '\0';printf("%s",s);}9.下面程序的功能是顯示具有n個元素的數(shù)組s中的最大元素。#define N 20main(){ int i,a[N];for(i=0;iscanf("%d",&a[i]);printf("%d\n", ① );}fmax(int s[],int n){ int k,p;for(p=0,k=p;pif(s[p]>s[k]) ② ;return(k);}10.下面的函數(shù)是一個求階乘的遞歸調(diào)用函數(shù)。facto(int n){ if( n == 1 ) ① ;else return( ② );}11.用遞歸實(shí)現(xiàn)將輸入小于32768的整數(shù)按逆序輸出。如輸入12345,則輸出54321。#include"stdio.h"main(){ int n;printf("Input n : ");scanf("%d", ① );r(n);printf("\n");}r( int m ){ printf("%d", ② );m = ③ ;if( ④ )⑤ ;}12.下面函數(shù)的功能是將一個整數(shù)存放到一個數(shù)組中。存放時按逆序存放。例如:483存放成"384"。#include void convert(char *a, int n){ int i;if((i=n/10) !=0 )convert( ① , i );*a = ② ;}char str[10]= " ";main(){ int number;scanf("%d", &number);convert( str, number );puts(str);}四、編寫程序題1.編寫一個簡單計(jì)算器程序,輸入格式為:data1 op data2。其中data1和data2是參加運(yùn)算的兩個數(shù),op為運(yùn)算符,它的取值只能是+、-、*、/。2.輸入一個正整數(shù),要求以相反的順序輸出該數(shù)。例如輸入12345,輸出位54321。3.編寫程序,以字符形式輸入一個十六進(jìn)制數(shù),將其變換為一個十進(jìn)制整數(shù)后輸出。4.編寫程序,輸入一個十進(jìn)制整數(shù),將其變換為二進(jìn)制后儲存在一個字符數(shù)組中。5.編寫程序,輸出1000以內(nèi)的所有完數(shù)及其因子。所謂完數(shù)是指一個整數(shù)的值等于它的因子之和,例如6的因子是1、2、3,而6=1+2+3,故6是一個完數(shù)。6.編寫一個函數(shù)實(shí)現(xiàn)將字符串str1和字符串str2合并,合并后的字符串按其ASCII碼值從小到大進(jìn)行排序,相同的字符在新字符串中只出現(xiàn)一次。7.編寫程序,從鍵盤輸入一行字符串,將其中的小寫字母全部轉(zhuǎn)換成大寫字母,然后輸出到一個磁盤文件"test"中保存。 展開更多...... 收起↑ 資源預(yù)覽 縮略圖、資源來源于二一教育資源庫