2015二級c語言真題
⑴ 四川省計算機二級c語言考試 真題
一、是非判斷題(每小題1分,共10分) 1.數據元素是數據的基本單位,數據項是數據的最小單位。 ( 1 ) 2.棧是特殊的線性表,須用一組地址連續的存儲單元來存儲其元素。 ( 2 ) 3.引入虛擬存儲技術後,邏輯內存總容量是由地址匯流排的位數確定的。 ( 3 ) 4.編譯程序是一種常用的應用軟體。 ( 4 ) 5.順序文件和鏈接文件的長度都可以動態變化。 ( 5 ) 6.在文件系統中彩目錄管理文件。 ( 6 ) 7.允許多用戶在其終端上同時交互地使用計算機的操作系統稱為實時系統。 ( 7 ) 8.程序、數據、和程序控制塊是構成一個進程的三要素。 ( 8 ) 9.黑盒測試時,既要考慮程序的內部邏輯結構又要考慮其外部特性。 ( 9 ) 10.軟體的總體設計和詳細設計都要用PAD圖形工具。 ( 10 )二、單項選擇題(每小題1分,共5分) 1.允許用戶把若干作業提交計算機系統集中處理的操作系統稱為( 11 )。11(A)分時操作系統 (B)實時操作系統 (C)網路操作系統 (D)批處理操作系統 2.分配到必要資源並獲得了處理機時的進程的狀態稱為( 12 )。12(A)就緒狀態 (B)執行狀態 (C)等待狀態 (D)阻塞狀態 3.利用通道技術可以在( 13 )之間直接交換數據。13(A)內存與CPU (B)CPU與外設 (C)內存與外設 (D)內存、CPU和外設三者 4.以下的准則中哪個不是軟體設計的准則( 14 )。14(A)編程語言選擇准則 (B)信息屏蔽准則 (C)結構化和模塊化准則 (D)抽象准則 5.有一數列:97 65 76 13 29 49 58 經過一趟排序後得到:65 97 13 76 29 49 58 請問使用的是何種排序方法( 15 )。15(A)簡單插入排序 (B)冒泡排序 (C)2路歸並排序 (D)快速排序 C與C++語言程序設(共85分)一、單項選擇題(每小題1分,共10分) 1.定義如下枚舉類型:enum Day{Monday,Tuesday,Wednesday,Thursday,Friday=2};則下列語句正確的是 ( 16 )。16 (A) 表達式Wednesday==Friday的值是true(B) enum Day day; day=3;(C) enum Day day; day=Tuesday-3;(D) enum Day day; day=Monday+10; 2.下列程序片段的輸出結果是( 17 )。int m=4;do { printf("%d,",m-=3); }while(!(--m));17(A)1 (B)1,-3, (C)3,0 (D)死循環 3.執行下列程序片段時的輸出結果是( 18 )。int x,y;x=3;y=5;printf("%d",x%=(y/=2) );18(A)3 (B)2 (C)1 (D)0 4.對於下述程序,判斷正確的是( 19 )。# include <stdio.h>void f(int *p){ *p=10; }int *p;void main(){ f(p); printf("%d",(*p)++ );}19 (A) 輸出的值是隨機值 (B) 運行時出錯 (C) 輸出值為10 (D) 輸出值為11 5.下列程序運行的結果是( 20 )。# define FU(y) 2.8+y# define PR(a) printf("%d",(int)(a))# define PRINT(a) PR(a);# include <stdio.h>void main(){ int x=2; PRINT( FU(5) * x );}20(A)12 (B)14 (C)13 (D)15 6.下列程序運行的結果是( 21 )。# include <stdio.h>void main(){ int a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+4; printf("%d",*++p); printf("%d",++*p);}21 (A)4,3 (B)4,6 (C)5,5 (D)4,5 7.關於對類要領的描述中,錯誤的是( 22 )。22 (A) 類就是C語言中的結構類型(B) 類是創建對象的樣板 (C) 類是具有共同行為的若干對象的統一描述體(D) 類是抽象數據類型的實現 8.已知int a=9,b=4; 將a-b的值輸出顯示到屏幕上,下列各種實現方法中,正確的是( 23 )。23 (A) cout<<a<<'-'<<b<<endl (B) cout<<"a-b"<<endl (C) cout<<a-b<<endl (D) cout<<"%d\n",a-b 9.下列循環語句會進入死循環的是( 24 )。24 (A) i=0;do {i++; }while(i==100); (B) for(i=0;i<100;i+=3.14); (C) for(i=0;;i+=2); (D) k=1;do {k--; }while(k); 10.下面程序運行的結果是( 25 )。# include <stdio.h>int fun(char *str){ int n=0; while(*str>='0' && *str<='9') { n=n*10+*str-'1'; str++; } return n;}void main(){ printf("%d\n",fun("567.89")); }25 (A)89 (B)567.89 (C)567 (D)456 四川省計算機等級考試二級C語言筆試題(第二十次)二
2009-03-29 15:11:39 二、讀程序回答問題(每個選擇3分,共45分)。 1.有下列程序:# include <iostream.h>void main(){ int a,b,c,x; a=b=c=0; for(int i=0;i<10;i++) { cin>>x; switch(x%3) { case 0: a+=x; break; case 1: b+=x; break; case 2: c+=x; break; } } cout<<a<<','<<b<<','<<c<<endl;}程序運行時依次輸入x的值為:1 2 3 4 5 6 7 8 9 10①程序運行的結果是( 26 )。26 (A) 3,12,21 (B) 18,22,15 (C) 3,4,3 (D) 9,10,8②switch(x%3)與( 27 )相同。27 (A) switch(!(x%3)!=0) (B) switch(x%3==0) (C) switch(x%3!=0) (D) 他們都不相同 2.有下列程序:# include <stdio.h>void main(){
⑵ 求c語言試題及答案!急啊!
c語言考試題(一)
一、 單項選擇題(每題2分,共20分)
1、以下選項中屬於C語言的數據類型是( )
A.復數型 B.邏輯型 C.集合型 D.雙精度型
2、一個C程序的執行是從( )
A.main()函數開始,直到main()函數結束 B.第一個函數開始,直到最後一個函數結束
C.第一個語句開始,直到最後一個語句結束 D.main()函數開始,直到最後一個函數結束
3、設有語句int a=3;則執行語句a+=a-=a*a;後,變數a的值是( )
A.3 B.0C.-12D.9
4、若有 char c[5]={'c','d','\0','e','\0'};則執行語句printf("%s",c);結果是( )。
A.cd\0e B.'c''d' C.cd D.cd e
5、已知:int a[2][3]={1,2,3,4,5,6}, (*p)[3]=a;則下列表達式不是4的是 ( )。
A.*(*p+3) B.*p+3 C.*(*(p+0)+3) D.a[0][3]
6、以下有宏替換不正確的敘述( ).
A.宏替換不佔用運行時間 B.宏名無類型
C.宏替換只是字元串替換 D.宏名必須用大寫字母表示
7、執行char str[10]=」Ch\nina」; strlen(str)的值是( )
A.5 B.6 C.7 D.9
8、下面程序的輸出結果是:( )
#define POWER(x) (x*x)
main()
{int i=4; printf("%d",POWER(i-2)); }
A. -9 B. -7 C. 5 D. -6
9、在定義int a[3][4][2];後,第10個元素是( )
A.a[2][1][2] B.a[1][0][1] C.a[2][0][1] D.a[2][2][1]
10、下面程序的輸出結果是:( )
typedef struct
{long x[2];<br>short y[4];<br>char z[8];<br>}MYTYPE;
MYTYPE a;
main()
{ printf("%d\n",sizeof(a));}
A. 2 B. 8 C. 14 D. 24
二、 填空題(每空1分,共11分)
1、字元串"A"在內存中佔用的位元組數為 。
2、C語言中的標識符只能由字母、下劃線和 組成。
3、若有定義語句「 int a=25,b=14,c=19;",以下語句的執行結果是
if(a++<=25&&b--<=2&&c++) printf("***a=%d,b=%d,c=%d\n",a,b,c);
else printf("###a=%d,b=%d,c=%d\n",a,b,c);
4、有如下定義a[]="B\172\\\'a%%";則執行語句printf("%d",strlen(a));的結果為 。
5、若有定義:int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i; for(i=0;i<4;i++) p[i]=&a[i*3];則*(*(p+1)+2)的值為 ,*p[2]的值為 。若數組的首地址為2000,則p[1]指向的地址為 。
6、設a=2,b=3,x=3.5,y=2.5,則表達式(float)(a+b)/2+(int)x%(int)y 的結果是 。
7、設x、y都是int型變數,初值都為1,則執行表達式:--x&&y++後,y的值為 。
8、語句for(i=1;i==10;i++)continue;循環的次數是 。
9、以下程序輸出 。
main()
{enum em {em1=3,em2=1,em3};
char *aa[]={"AA","BB","CC","DD"}; printf("%s%s%s\n",aa[em1],aa[em2],aa[em3]);
}
三、 寫程序結果(每題5分,共35分)
1、#include
main()
{int x,y,z;<br>x=1,y=2,z=3; x+=y+=z;<br>printf("1:%d\n",z+=x>y?x++:y++);<br>x=0x02ff;y=0xff00;<br>printf("2:%d\n",(x&y)>>4|0x005f);<br>x=y=z=-1; ++x||++y&&++z;<br>printf("3:%d,%d,%d\n",x,y,z);<br>}
2、#define f(x) x*x
main()
{int a=6,b=2,c;<br>c=f(a+b)/f(b);<br>printf(「%d\n」,c);<br>}
3、fun(int k)
{ printf("%d",k);
if(k>0)
fun(k-1);
}
main( )
{ int w=5; fun(w); printf("\n"); }
4、#include
main()
{int x=1,y=0;<br>switch(x)<br>{ case 1:<br>switch(y)<br>{ case 0:printf(「first\n」);break;<br>case 1:printf(「second\n」);break;<br>}
case 2:printf(「third\n」);
}
}
5、#include
main()
{ int k=4;
func(k); func(k);
}
func(int a)
{ static int m=0;
m+=a;
printf("%d",m);
}
6、struct st
{ int x;
int *y;
}*p;
int s[]={30,20};
struct st a[]={1,&s[0],2,&s[1]};
main()
{ p=a; printf("%d,",p->x);
printf("%d\n",++(*(++p)->y));
}
7、假定在當前盤目錄下有2個文本文件,其名稱和內容如下:
文件名: a1.txt a2.txt
內容: ABCDEF# abcdef#
#include "stdio.h"
main()
{FILE *fp;<br>void fc();<br>if((fp=fopen("a1.txt","r"))==NULL)<br>{printf("Can not open file!\n"); exit(1);}
else{fc(fp);fclose(fp);}
if((fp=fopen("a2.txt","r"))==NULL)
{printf("Can not open file!\n"); exit(1);}
else{fc(fp);fclose(fp);}
}
void fc(fp1)
FILE *fp1;
{char c;<br>while((c=fgetc(fp1))!='#')putchar(c);<br>}
四、 程序填空(每空2分,共14分)
1、下面程序求矩陣a的主對角線元素之和,請填空。
main()
{ int a[3][3]={2,4,6,8,10,12,14,16,18};
int sum=0,i,j;
for(i=0;i<3; ① )
for(j=0; ② ;j++)
if(i= =j) sum=sum+ ③ ;
printf("sum=%d\n",sum);
}
2、下列函數coy把字元數組S2中的全部字元復制到字元數組S1中, 復制時』\0』也要復制過去,』\0』後面的字元不用。
coy(char s1[],char s2[])
{ int i;
for(i=0;s2[i]!= ① ;i++)
s1[i]=s2[i];
② ;
}
3、下面程序的功能是將字元串a中的下標為奇數的元素由小到大排序,其他元素不變,請填空。
main()
{ char a[]="students",t; int i,j;
for(i=1;i<7;i+=2)
for(j=i+2;j<8; ① )
if( ② )
{t=a[i];a[i]=a[j];a[j]=t;}
puts(a);
}
c語言考試題(二)
一. 填空題(每題2分,共20分)
1. C語言基本數據類型有:_______________________________;
構造類型有:_____________________________________。 P.13
2. C語言源程序注注釋符號是:________________________________,
為表明層次結構,C語言源程序通常採用_____________________格式編寫。P.4
3. 源程序TEST.C經編譯產生的目標文件是:________________________;
經連接處理後,產生的可執行文件是:__________________________。
4. strlen(「1234 \ 0xy)的值為:_____________________________;
sizeof(float)的值為:____________________________
5. 二維數組a[10] [50]最後一行的首地址為:_________________________;
最後一個元素的首地址為:____________________________________。
6. C標准庫函數中,數學函數的原型在:________________頭文件中,自定義頭文件D :\ MYC \ MY . H應如何包含到源程序文件中:_________________________。P.130
7. 已知函數定義為:int stat(inta,float *p)
{……………}
則此函數的兩個參數類型分別是_______________ 、 _____________________。
8. 設int x,y,z=4;
x=y=++z;
x=(y>z)?x+2;x++;則x的值是:_________;
設int a=0,b=0,c=0;c=++a | | b++; ,則a、b、c值分別是:_____________。
9. 與if (x=0) 等價的寫法是if ( ! x );
判斷兩個(float)變數x,z是否相等一般:if ( fabc(x-z)<1e-6 )。
10.已知賦值語句zhang.year=1985;可判斷zhang是_______________類型的變數;
定義文件指針的C語句是:_________________________________。
二. 單項選擇題 (每題1分,共10分)
1. 組成C程序的基本單位是____________________________。
A.函數 B.標識符 C.表達式 D.語句
2. 設int類型的數據長度為2位元組,則該類型數據的取值范圍是__________________。
A.0至65536 B.0至65535
C.-32767至32768 D.-32768至32767
3. 在C語言中,邏輯值「真」是用_____________________表示的。
A.預定義為真值的宏 B.非零數
C.正數 D.非零整數
4. C語言對於嵌套if語句規定else總是與_____________________匹配。
A.與最外層的if B.與之前最近的if
C.與之前最近的不帶else的if D.與最近的{ }之前的if
5. 數組定義char a[10]={`a`,`b`,`c`}:包括了幾個元素____________________。
A.3 B.9 C.4 D.10
6. 數組名作為實參傳給被調用的函數時,形參獲得的是_____________________。
A.該數組第一個元素的值 B.該數組所有元素的值
C.該數組第一個元素的首地址 D.該數組所有元素的首地址
7. 為表示關系x ≥ y ≥z,正確的C語言表達式為_________________________。
A.(x>=>y>=z) B.(x>=y)AND(y>=z)
C.(x>=y)&&(y>=z) D.(x>y)&(y>=z)
8. 根據定義int a[ ]={1,2,3},i,*p=a; 從語法分析_________________是不正確的。
A. a[p-a] B.*(&a) C.p D.*(*(a+i))
9. 若有語句scanf(「%d%d」,&a,&b);要使變數a,b分別得到12和34;正確的輸入形式為____________________________。
A.12 34 B.12,34 C.1234 D.12:34
10.union uex {int i;float f;char c;}ex;則sizeof(ex)的值是____________________。
A.4 B.5 C.6 D.7
三. 分析程序,寫出運行結果。(每題4分,共20分)
1. 源程序如下,運行時假定鍵盤輸入字元串為``2004``
#include
void main(void)
{
int n=0;
char c;
while( (c=getchar( )) ! =`\n` ) /*字元型數字*/
{
if (c>=`0`&&c<=`9` )
n = n*10 + c- `0` ; /*數字*/
}
printf(「value=%d|n」 ,n);
}
結果為: value=2004 。
2. 源程序如下:
#include
void main(void)
{
int num[9]={399,398,397,396,395,299,290,311,301};
int score[9]={81,85,59,77,90,66,89,93,73};
int iMax,iPos,i;
iPos=0;
iMax=score[iPos];
for(i=1;i<9;i++)
if(score>iMax)
{
iPos=i;
iMax=score[iPox];
}
printf(「num=%d,score=%d」,num[iPos];score[iPos]);
結果為: num=311, score=93 。
3. 源程序如下,運行時假定鍵盤輸入數據為:1 2 3 4 5 6 7 8 9 10
#include
void main(void)
{
int i,a[10];
int *p;
p=a;
for(i=0;i<10;i++)
scanf(「%d「,p++);
for(p=a;p< SPAN>;p++)
if (*p%2)printf(「%3d」,*p);
}
結果為: 1 3 5 7 9 。
4. 源程序如下,兩次運行,分別輸入數據13和21
#include
#include
void main(void)
{
int n,s;
scant (「%d」,&n);
s=panan( n);
if(s==1)printf(「yes\n」);
else printf(「no\n);
}
int panan(int n)
{
int k,j;
k=(int)sqrt((double)n);
for(j=2;j<=k,j++)
{
if(n%j==0) break;
}
if(j>k) retum(1);
else retum(0);
}
結果為 yes
no
5.源程序如下,運行時假定鍵盤輸入字元為:AxByCz
#include
#include
void main(void)
{
char str[80];
int i;
gets(str);
for(i=0;str!=`\0`;i++)
if(str>=`a`&&str<=`z`) str-=32;
else if (str>=`A`&&str<=`Z`) str+=32;
puts(str);
}
結果為: aXbYcZ 。
四. 下列程序中每個劃線處有一個錯誤,改正劃線 中的錯誤,使其實現題目要求。(每體4分,共20分)
1. 求 s=1+2+3+、、、、、、、+100
include 改正為_________________________。
void sum (void) 改正為_________________________。
{
int s,i;
for (s=0,i=1;i<=100;i++)
{
s=s+ i ++; 改正為__________________________。
}
printf (「s=%f」,s) 改正為__________________________。
}
2. 源程序實現求x
#include
double pow(float . int) 改正為_________________________。
void main(void)
{
int i, n;
float x;
scanf (「%f,%d」,&x,&n);
for (i=1; i<9;i++)
printf(「%d,%e\n」, i, pow(i,x);
} 改正為______________________。
double v v pow(float x, int n)
{
int i;
double p=0; 改正為______________________。
for (i=1; i< i++)>改正為_______________________。
p*=x;
retum(p);
}
3. 源程序實現排升序。
#include
void main(void)
{
int i, j, iMin, a[10]={4,3,5,1,10,12,2,6,7,9}, iTemp;
for (i=0; i<9; i++)
{
iMin=0; 改正為_______________________。
for (j=i+1; j<10;j++)
if(a[iMin]< iMin="j;">改正為_______________________。
if (iMin==i) 改正為_________________________。
{ iTemp=a;
a[iMin]=a; 改正為_________________________。
a[iMin]=iTemp;
}
}
for(i=0; i<10; i++)
printf(「%4d」, a):
}
4. 源程序為求平均值。
#include
void main(void)
{
int i, sum; 改正為____________________。
float avg;
int sc[10], *p=sc;
for (i=0, i<10; i++) 改正為____________________。
{
scanf(「%d」, p++);
sum+= *p; 改正為____________________。
}
avg = sum/ 10; 改正為___________________。
printf(「avg=%f」, avg);
}
5. 源程序求 eX=1+x+x2/2!+……+xn/n!前n+1項之和
#include
void main(void>
{
float exp , x , t;
int i, n;
scanf(「%f, %d」,&x, &n);
t=0; 改正為___________________。
exp=1.0;
for(i=1 ; i<=n; i++)
{
if(t<1e-6) loop; 改正為__________________。
t+=x/i; 改正為___________________。
exp*=t; 改正為___________________。
}
printf(「\n%15.6f」, exp);
}
五. 編程題 (每題6分,共30分)
1. 根據以下程序框架,編寫子函數,實現交換兩個整型變數x和y的值。
#include
void swap (int *, int *);
void main (void)
{
int x, y;
scanf(「%d, %d」, &x, &y);
swap( &x, &y);
printf(「%d, %d」, x, y);
}
void swap( )
{
}
2. 設某班人數36人,參加C語言考試,用一維數組score[36]存放考試成績,已給出一部分程序,完善以下程序,使其實現統計並輸出不及格人數及百分比。
#include
void main (void)
{ int i;
float scoer[36], precent;
int count=0;
for (i=0; i<36; i++)
{
scanf(「%f」, &score);
}
3. 完善以下程序使其實現由鍵盤任意輸入一串字元,統計其中大寫字母個數iA、小寫字母個數ia、其他字元個數iother。
#include
#include
void main (void)
{
char str [80];
int i, iA=0, ia=0, iother=0;
}
4. 完善以下程序使其實現求方陣主和輔對角線元素之和及其轉置矩陣,設方陣用二維數組a表示,轉置矩陣用t表示,sl和s2表示主和輔對角線元素之和。
#include
void main(void)
{
int a[3] [3]={1,3,5,7,9,11,13,15,11};
int i, j, s1, s2;
int t[3] [3];
printf(「%d, %d,\n」,s1, s2);
for(i=0; i<3; i++)
for(j=0; j<3; j++)
printf(「%3d」, t [j]);
}
5. 已知字元數組str[80],編寫返回指針的子函數,實現在其中查找字元ch首次出現的位置。
#include
#include
#include
char *lstrchar(char*, char);
void main(void)
{
char c, *p, str[80];
gets (str);
scanf(「%c」, &c);
p=lstrchar(str,c);
if(p==NULL) printf(「char %c not found\n」c);
else printf(「The position is %d」, p-str);
char 「lstrchar( )
{ }
歷年全國計算機二級考試c語言真題及答案
http://jsj.lsxy.com/UploadFiles/20064222324839.rar
⑶ 計算機二級考試C語言選擇題(2)
{ char x=0xFFFF;printf("%d\n",x--);}
A.-32767
B.FFFE
C.1
D.32768
22.下面的函數調用語句中func函數的實參個數是( )。
func((f2v1,v2),(v3,v4,v5),(v6,max(v7,v8)))
A.3
B.4
C.5
D.8
23.語句“printf("akbre"\’hi\’y\\\bou\n")”;的輸出結果是( )。
A.akbre\’hi\’y ’\\\bou
B.a\bre\’hi\\y\bou
C.re ’hi’you
D.abre’hi’y\bou
24.下面程序輸出的是( )。
main()
{ int t=l;fun(fun(t));}
fun(int h)
{ static int a[3]={1.2.3};
int k;
for(k=0;k<3;k++)a[k]+=a[k]-h;
for(k=0;k<3;k++)printf("%d",a[k]);
printf("\n");
return(a[h]);}
A.1,2,3,
1,5,9,
B.1,3,5,
1,3,j,
C.1,3,5,
0,4,8,
D.1,3。5,
-1,3,7,
25.以下敘述中正確的是( )。
A.預處理命令行必須位於C源程序的起始位置
B.在C語言中,預處理命令行都以“#”開頭
c.每個C程序必須在開頭包含預處理命令行:#include
D.C語言的預處理不能實現宏定義和條件編譯的功能
26.為了避免在嵌套的條件語句if else中產生二義性,C語言規定,else子句總是與( )配對。
A.縮排位置相同if
B.其前面最近的if
C.其後面最近的if
D.同一行上的if
27.設有下列程序段:
char str[]="HelloWorld":
char* plr;
ptr=str:
執行上面的程序段後,*(ptr+10)的'值為( )。
A.’\0 ’
B.’0’
C.不確定的值
D.’0’的地址
28.有以下程序:
void swap(char*x,char*y)
{ char t;
t=*x;*x=*y;*y=t;
}
main()
{ char*s1="abe",*s2="123":
swap(s1,s2);
printf("%s,%s\n",s1,s2);
}
程序執行後的輸出結果是( )。
A.123,abe
B.abc.123
C.1bc,a23
D.321,cba
29.下列程序的運行結果是( )。
#include
main()
{ static char a[]="Languagef",b[]="programe":
char*p1,*p2;int k;
p1=a;p2=b;
for(k=0;k<=8;k++)
if(*(p1+k)==*(p2+k))
printf("%c",*(p1+k)):
}
A.gae
B.ang
C.program
D.有語法錯
30.下列程序的運行結果為( )。
#define MAX(x,y)(x)>(y)?(x):(y)
main()
{ int a=2,b=3,C=1,d=3,t:
printf("%d\n",(MAX(a+h,c+d))*100):
}
A.500
B.5
C.4
D.400
31.設int x=7,則~x的值是()。
A.-8
B.7
C.-1
D.1
32.有以下程序:
void fun(char*a,char*b)
{a=b; (*a)++; }
main()
{char c1=’A ’,c2=’a’,*p1,*p2;
p1=&c1;p2=*c2;fun(p1,p2);
printf("%C%c\n",c1,c2);
}
程序運行後的輸出結果是()。
A.Ab
B.aa
C.Aa
D.Bb
33.有以下程序:
int fun(int n)
{if(n==l)return l;
else return(n+fun(n一1)):
}
main()
{int x;
scanf("%d",&x);x=fun(x);printf("%d\n",
x):
}
執行程序時,給變數X輸入10,程序的輸出結果是()。
A.55
B.54
C.65
D.45
34.有以下程序:
void f(int x,int y)
{int t;
if(x}
main()
{int a=4,b=3,c=5;
f(a,b);f(a,c);f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
執行後輸出結果是()。
A.3,4,5
B.5,3,4
C.5,4,3
D.4,3,5
35.以下程序的輸出結果是()。
main()
{char*s="12134211";
int v[4]=(0,0,0,0),k,i;
for(k=0;s[k];k++)
{switch(s[k])
{case’1’:i=0;
case’2’:i=1;
case’3’:i=2;
⑷ C語言程序設計2015A卷-
一、判斷題(每小題1分,共15分)
1.標准C中,只有數值型數據才能進行4則混合運算。
2.標准C中,_a是合法的自定義標識符。
3.有定義:float f;表達式f+=(int)3.6%2」不符合C語言語法。
4.標准C中,邏輯運算的結果只有是1表示滿足條件,而結果是0表示不滿足條件。
6.以下運算符排列順序滿足按照優先順序從高到低的排列:『&&』、『!』、『==』、『-』。
7.語句for(;;);是非法的。
8.在C語言程序中可以由多個源文件構成,每個源文件都可以有自己的main()函數。
9.while和do-while的主要區別是後者至少無條件執行一次。
10.數組名代表數組的首地址是常量,所以將實參數組名表示地址傳給形參數組名是錯誤的。
11.當函數沒有返回值類型時,表示函數類型為void。
12.C語言中,指針變數作函數參數時,它們不是採取單向值傳遞的方式。
13.一個函數中只允許有一條return語句。
14.在C語言中,如果沒有說明變數的存儲類型是auto類型的。
15.由於指針中所存放的地址都是整數,所以整型指針和浮點型指針可以相互賦值。
二、填空題(每空1分,共15分)
1. 若a=4;b=5,c=6;則表達式c==(b=-a); 中亂皮c的值是 (1) 。
2. 計算表達式的值:
4&&-4的值: (2) ;
設int a=3,b=4,c=5,則表達式a||b+c&&b==c的值: (3) ;
設x=2.5, a=7, y=4.7,則表達式x+a%3*(int)(x+y)%2/4的值: (4) ;
設a=12,則表達式a*=a/5的值: (5) ;
3. 若int x = 4,y = 6,z = 0;有循環while(x = y) {z ++;y--;}
則循環語句執行完後,z值為 (6) 。
4. 變數的指針就是指該變數的 (7) 。
5. 若有定義int (*p)[4],則標識符p是 (8) ;若有定義int *p[4],橋穗則標識符p是 (9) ;
6. 已有定義:char *p[ ]={「France」,「Chinese」,「Russia」,「America」};則語句printf(「%s」,p[2]);printf(「%c」,*(p[1]+2));printf(「%c」,*(*(p+1)+1));
的輸出結果分別為: (10) 、 (11) 、 (12) 。
7. 已有定義: int x=65; 若格式化輸出結果為「A, 65」,則對應的格式化輸出語句為printf(「 (13) , (14) 」, x, x)。
8. 已定義:int a[][2]={1, 2, 3, 4, 2, 6, 7, 2};則a[3][0]= (15) 。
三、簡答題(每題4分,共12分)
1、簡述選擇語句if和else語句對與switch語句的區別。
2、簡述在循環語句中,break和continue的區別。
3、若int a[5],*p=a;簡述*p++和(*p)++的區別。
四、下列各程序中每個程序各有2個錯誤,指出錯誤語句,寫出對應正確語句(每小題4分,共16分)
五、程序填空題:下列程序中缺少若干條語句,在對應的下劃線上填上合適的語句,每一個下劃線只填一條語句(每小題6分,共24分)
六、閱讀下列程序,寫出運行結果(第一小題4分,第二小題6分,共10分)
七、編程題(8分)
編譯程序,其功能是比較字元串的大小( 不允許敏陪卜 用系統提供的字元串比較函數strcmp)。要求是:
(1) 通過主函數調用一個函數strcompare來實現。
(2) 要求函數strcompare實現兩個字元的比較:如第一個字元小於第二個字元則返回一個負值;如兩個字元相等則返回0值;如第一個字元大於第二個字元則返回一個正值。
(3) 並輸出兩個字元串中相同部分的子串。
《C語言程序設計基礎》試卷參考答案
一、判斷題(每小題1分,共15分)
1~5 ; 6~10 ; 11~15
二、填空題(每空1分,共15分)
(1) 6 (2) 1 (3) 1 (4) 2.5 (5) 24 (6) 6
(7)地址 (8) 行指針,指向有四個元素的一維數組
(9)指針數組名,該數組有四個元素,每個元素都是指針
(10)Russia (11)i (12)h (13) %c (14) %d (15)7
三、簡答題(每題4分,共12分)
1、if總是判斷其後面的表達式的值是否為非零值,如是非零值則執行其後面的語句或由{}括起來的復合語句,否則執行else後面的語句。而switch語句則根據其後面表達式的可數值來判斷,執行switch語句體內與其中的一個case:常量值相等語句後面的語句。執行break語句後,跳出switch語句體。
2、break是終止整個循環過程;continue是終止本次循環。
3、*p++首先取a[0]的值,然後p指向a[1];(*p)++使得a[0]的值自增1,但p保持不變。
四、下列各程序中每個程序各有2個錯誤,指出錯誤語句,寫出對應正確語句(每小題4 分,共16分)
1、 (1)缺#include ; (2)scanf(「%f」,a); 改為 scanf(「%f」,&a);
2、 (1)缺sum=0; (2)for(i=1; i<=3; i++) 改為for(i=0;i<3;i++)
3、 (1)p1=p2 改為 *p1=*p2 (2)swap(&a, *p) 改為swap(&a, p)
4、 (1)在if(m<0)語句後添加else if(m==0) a=1; (2) 添加 return(a);
五、程序填空題:下列程序中缺少若干條語句,在對應的下劃線上填上合適的語句,每一個下劃線只填一條語句(每小題6分,共24分)
1、 (1)x=0; (2)if(n==x) (3)s++;或s=s+1;
2、 (4)&num[i] (5)max< num[i]? (6)num[i]!=0
3、 (7)n-i-1 (8)a[j]>a[j+1] (9)a[j+1]=temp
4、 (10)count=0; (11)n%10 (12)n>0或n!=0或n
六、閱讀下列程序,寫出運行結果(第一小題4分,第二小題6分,共10分)
1、 #*#*#*
2、 main i=1 j=2 k=2
sub i=1 j=2 k=1 x=2
sub i=1 j=2 k=1 x=3
七、編程題(8分)
#include
main()
{
int i,j, flag=0;
char str1[90],str2[90];
gets(str1);
gets(str2);
i=0;
do{
flag=strcompare(str1[i],str2[i]);
i++;
}while(str1[i]!=』』 && str2[i]!=』』 &&flag=0);
if(flag<0)printf(「%s小於%s 」,str1,str2);
else if(flag==0) printf(「%s 等於%s 」,str1,str2);
else printf(「%s大於%s 」,str1,str2);
printf(「兩個字元串中相同的字串為:」);
j=0;
i--; 後3句可用str1[i]=』』; printf(「%s」,str1);代替//用str2也可以。
while(j<i){printf(「%c」,str1[i]);j++;} span=""> </i){printf(「%c」,str1[i]);j++;}>
}
int strcompare(char c1,char c2)
{
int v;
v=c1-c2;
return v;
}