(28)以下程序的輸出結(jié)果是_______。
fun(int x,inty,int z)
{z=x*x+y*y;}
main()
{
int a=3l:
fun(5,2,a);
printf("%d",a);
}
A)0 B)29 C)3l D)無定值
答案:C
評析:本題中,a的值并沒有改變,因為傳遞到函數(shù)中的是變量值。
(29)下列程序段的輸出結(jié)果是__________。
void fun(、int *x,int *y)
{primf("%d%d",*x,*y);*x=3;*y=4;}
main()
{
int x=l,y=2;
fun(&y,&x);
printf("%d%d",x,y);
}
A)2 1 4 3 B)1 2 l 2 C)l 2 3 4 D)2 1 l 2
答案:A
評析:本題中函數(shù)傳遞的是變量的地址,如果形參在函數(shù)中發(fā)生改變,相對應(yīng)的實參也就有了改變。
(30)對于下面的程序
#include<stdio.h>
#include<string.h>
char*scmp(char*s1,char*s2)
{
if(strcmp(sl,s2)<0)retum(s1);
else return(s2);
}
main()
{
int i;char string[20],str[3][20];
for(I=0;i<3;i++)gets(str[i]);
strcpy(string,scmp(str[0],str[1]));
strcpy(string,scmp(string,str[2]));
printf("%s\n",string);
}
若運行時依次輸入:abcd、abba和abc三個字符串,則輸出結(jié)果為________。
A)abcd B)abba C)abc D)abca
答案:B
評析:本題自定義函數(shù)semp()的作用是比較字符串s1和s2的大小,如果sl<s2,函數(shù)返回s1的值,否則返回s2的值。若運行時依次輸入abed、abba和abe三個字符串,執(zhí)行strcpy(string,scmp(str[O],str[1]));后,string的值為abba,再執(zhí)行strepy(string,scmp(string,str[2]));,由于scmp(string,str[2])返回string的值
abba,再拷貝到字符串數(shù)組string中,所以本題輸出abba。
(31)下列程序的輸出結(jié)果是__________。
main()
{
char a[10]={9,8,7,6,5,4,3,2,1,O},*p=a+5;
print"%d*--p);
}
A)非法 B)a[4]的地址 C)5 D)3
答案:C
評析:本題中char*p=a+5;即相當于p=&a[5],而--p,是先要減1,則printf語句要輸出的值就是a[4]。
(32)對下面的程序進行編譯與連接生成可執(zhí)行文件c.exe,并在DOS命令提示符下輸入:
c I said"I love China"!
程序代碼如下:
main(、int argc,char*argv[])
{
printf("%d",argC);
}
其輸出結(jié)果為________。
A)4 B)5 C)6 D)7
答案:B
評析:帶參數(shù)的main()函數(shù)常用形式為:main(int argc,ehar*argv[])
其中,參數(shù)的個數(shù)由C程序運行時自動計算出來。字符型指針數(shù)組argv的第一個元素存放命令名,其后各個元素依次存放命令行中各個參數(shù)的首地址;整型變量arge用來記錄命令行中的參數(shù)個數(shù),文件名也作為一個參數(shù),對于命令行中雙引號內(nèi)的字符串,即使有空格分開,也只算是一個參數(shù),同時雙引號本身不算參數(shù)的內(nèi)容,因此本題argc的值等于5
(33)下列程序的運行結(jié)果是________。
void fun(int *a,int *b)
{
int *k:
k=a;a-b;b=k;
}
main()
{
int a=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf["%d%d.f,a,b);
}
A)6 3 B)3 6 C)編譯出錯 D)0 0
答案:B
評析:本題中主函數(shù)里的x、y,fun函數(shù)里的a、b、k,這些都是指針,fun函數(shù)中只是將a、b這兩個指針交換了位置,而并沒有改變主函數(shù)中變量a、b的值。
(34)若有定義:int*p[3];,則以下敘述中正確的是________。
A)定義了一個基類型為int的指針變量p,該變量有三個指針
B)定義了一個指針數(shù)組p,該數(shù)組含有三個元素,每個元素都是基類型為int的指針
C)定義了一個名為+p的整型數(shù)組,該數(shù)組含有三個int類型元素
D)定義了一個可指向一維數(shù)組的指針變量p,所指一維數(shù)組應(yīng)具有三個int類型元素
答案:B
評析:由于運算符[]優(yōu)先級比*高,int*p[3];相當于int *(p[3]);表示數(shù)組p的三個元素都是指針變量,且每個元素都是基類型為int的指針。
(35)有以下程序:
void swapl(int *a,int *b)
{int *c=a;
a=b,b=c;
}
void swap2(int *a,int *b)
{
int c=*a:
*a=*b,*b=c;
}
main()
(int a=lO,b=15;
swapl(&a,&b);
printf("%d,%d,",a,b);
a=lO,b=15;
swap2(&a,&b);
printf("%d,%dt.,a,b);
}
其輸出結(jié)果為_________。
A)15,10,10,15 B)15,10,15,10 C)10,15,10,15 D)10,15,15,10
答案:D
評析:C語言規(guī)定,實參變量對形參變量的數(shù)據(jù)傳遞是"值傳遞",只由實參傳給形參,而不能由形參傳回來給實參。在內(nèi)函數(shù)調(diào)用結(jié)束后,形參單元被釋放,實參單元仍保留并維持原值。本題中swapl()函數(shù)中,雖然改變了形參指針的值,但實參指針的值并沒有改變,所以執(zhí)行第一個printf后應(yīng)輸出10,15,;swap2()函數(shù)實現(xiàn)了交換兩個變量a和b的值,因此執(zhí)行第二個printf后輸出交換后的值15,10,所以本題答案為D。
(36)當調(diào)用函數(shù)時,實參是一個數(shù)組名,則向函數(shù)傳送的是__________。
A)數(shù)組的長度 B)數(shù)組的首地址
C)數(shù)組每一個元素的地址 D)數(shù)組每個元素中的值
答案:B
評析:當調(diào)用函數(shù)時,實參是一個數(shù)組名,則向函數(shù)傳送的是數(shù)組的首地址,函數(shù)中的形參可定義成以下三種形式:
、傩螀⒍x成數(shù)組;
②形參定義成可變長數(shù)組;
③形參定義為指針變量。
(37)下面的程序輸出結(jié)果是________。
#define r16
#ifr==16
void p(int a)
{
printf("%x",a);
}
#else
voidp(int a)
{
printf("%d",a);
}
#endif
main()
{
p(32);
}
A)32 B)20 C)編譯時錯誤 D)運行時錯誤
答案:B
評析:"#define r16"的作用是指定用標識符r來代替16,因此程序編譯時只編譯#if部分,故程序運行時,打印輸出十六進制的32,即20。
(38)設(shè)有以下聲明語句
struct ex
{ intx;floaty;char z;}example;
則下面的敘述中不正確的是_________。
A)struct是結(jié)構(gòu)體類型的關(guān)鍵字 B)example是結(jié)構(gòu)體類型名
C)x,y,z都是結(jié)構(gòu)體成員名 D)struct ex是結(jié)構(gòu)體類型
答案:B
評析:example是結(jié)構(gòu)體變量名。
(39)以下只有在使用時才為該類型變量分配內(nèi)存的存儲類說明是_________。
A)auto和stmic B)auto和register
C)register和static D)extem和register
答案:B
評析:extem、register、static、auto分別是定義外部變量、寄存器變量、靜態(tài)變量、自動變量,其中,自動變量和寄存器變量屬于動態(tài)存儲,調(diào)用時臨時分配單元;而靜態(tài)變量和外部變量屬于靜態(tài)存儲,在整個程序運行時都存在。
(40)下面程序運行后的輸出結(jié)果是__________。
fut(int**s,int p[2][3])
{
**s=p[l][1];
}
main()
{
int a[2][3]={1,3,5,7,9,1l},*p;
p=(int*)malloc(sizeof(int));
fut(&p,a);
printf("%d\n",*p);
}
A)l B)7 C)9 D)ll
答案:C
評析:本題a[2][3]定義為一個具有兩行三列的元素的數(shù)組,malloc()函數(shù)的作用是開辟了一個長度為sizeof(int)的內(nèi)存區(qū),p為指向整型數(shù)據(jù)的指針變量,程序調(diào)用fur()函數(shù),將第一行第一列對應(yīng)的元素值賦給一s,由于數(shù)組中第一行第一列對應(yīng)的元素為9,所以本題輸出值9。
(41)以下程序的輸出結(jié)果是_________。
main()
{
inti,k,a[10],p[3];
k=5;
for(I=O;i<10;i++)a[i]=i;
for(i=0;i<3;i++)p[i]=a[I*(i+1)];
fbr(i=O;i<3;i++)k+=p[I]*2;
printf("%d\n",k);
}
A)20 B)2l C)22 D)23
答案:B
評析:按照程序的流程走一遍,可以得到,p[O]=0,p[1]=2,p[3]=6;執(zhí)行三次k+=p[i]*2,相當于k=5+0*2+2*2+6*2=21
(42)當執(zhí)行下面的程序時,其輸出結(jié)果為__________。
union st
{
int a:
charb:
}
main()
{
union st s:
char*p=(char*)&s;
s.a(chǎn)=Ox3132;
s.b=Ox33;
printf("%c",*p);
}
A)l B)2 C)3 D)不確定
答案:C
評析:共用體類型結(jié)構(gòu)的特點是使幾個不同的變量共占同一段內(nèi)存,但在每一瞬時只能存放其中一種,而不是同時存放幾種,共用體變量中起作用的成員是最后一次存放的成員,在存入一個新的成員后原有的成員就失去作用。因此本題起作用的是成員b的值,所以程序打印輸出3。
(43)當執(zhí)行下面的程序時,如果輸入ABc,則輸出結(jié)果是________。
#include"stdio.h"
#include"string.H"
main()
{ char ss[10]="12345";
gets(ss);strcat(ss,"6789");
printf("%s\n",ss);
}
A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789
答案:A
評析:strcat(str1,str2)合并字符串函數(shù)的作用是把str2所指字符串的內(nèi)容連接到strl字符串的后面,自動刪去strl原來串中的'\0'。為了進行這項操作,要求strl所指的字符串后面有足夠的空間來容納'str2所指字符串中的內(nèi)容。函數(shù)值為strl所指第一個字符的地址。
(44)main(im argo,char*argv[])
{
while(--argc>0)printf("%s",argv[argc]);
printf("\n");
}
假定以上程序經(jīng)編譯和連接后生成可執(zhí)行文件PROG.ExE,如果在此可執(zhí)行文件所
在目錄的Dos提示符下鍵入:PROG ABcDEFGHIJKL↙,則輸出結(jié)果為_________。
A)ABCDEFG B)IJHL
C)ABCDEFGHIJKL D)lJKLABCDEFGH
答案:C
評析:本題主函數(shù)帶有兩個參數(shù),一個int型變量argc,另一個是char型的一維一級指針數(shù)組argv。當主函數(shù)被執(zhí)行時,系統(tǒng)自動將根據(jù)命令行的情況,分別給主函數(shù)的兩個參數(shù)賦值。Arge中存放命令行中命令字和參數(shù)的總和的個數(shù),argv用來存放命令行中命令字和所有參數(shù)的字符串的,并規(guī)定argv[0]存放命令字字符串,argv[1]用來存放第一個參數(shù)的字符串,argv[2]用來存放第2個參數(shù)的字符串,依次類推。
題中argc的值是2,執(zhí)行完--argc后為1,輸出argv[1],此數(shù)組存在第一個參數(shù)的字符串ABCDEFGHIJKL。
(45)設(shè)char型變量x中的值為10100lll,則表達式(2+x)"(~3)的值為_________。
A)10101001 B)10101000 C)lll11101 D)0101010l
答案:D
評析:異或運算符(n)的運算規(guī)則是:參加運算的兩個相應(yīng)位同號,則結(jié)果為0(假):異號則為-1(真)。
取反運算符(~)的運算規(guī)則是:對一個二進制數(shù)按位取反,即將0變?yōu)閘,l變?yōu)镺。本題(~3)是對3(二進制形式為00000011)按位取反即11111100。
表達式(2+x)n(~3)的值就等價于(00000010+10100111)^11111100,結(jié)果為01010101。
(46)以下程序的輸出結(jié)果是________。
long fun(int n)
{ long s;
if(n==1‖n==2)s=2;
else s=n-fun(n-1);
return S:
}
main()
{primf("%ld\n",fun(3));}
A)l B)2 C)3 D)4
答案:A
評析:這是一個遞歸函數(shù)。遞歸的結(jié)束條件是,n=l或者n=2。按照程序順序,即可得出本題結(jié)果為l。
(47)以下程序試圖把從終端輸入的字符輸出到名為abe.txt的文件中,直到從終端讀入字 符串撐號時結(jié)束輸入和輸出操作,但程序有錯
#include<stdio.h>
main()
{
FILE*fout:
char ch:
fout=fopen('abc.txt','w');
ch=fgetc(stdin);
while(chI_'))')
{
fputc(ch,fout);
ch=fgetc(stdin);
}
fclose(fout);
}
出錯的原因是_________。
A)函數(shù)fopen調(diào)用形式錯誤 B)輸入文件沒有關(guān)閉
C)函數(shù)龜etc調(diào)用形式錯誤 D)文件指針stdin沒有定義
答案:A
評析:本題考查的是文件的打開函數(shù)fopen(),其調(diào)用方式通常為:FLIE*fp;fp=fopen(文件名,使用文件方式);,如:fp=fopen("abc.txt","w");表示要打開名字為abc.txt的文件,使用文件方式寫入。fopen函數(shù)帶回指向abc.txt文件的指針并賦給fp,即審指向文件abc.txt。
(48)以下程序的輸出結(jié)果是_______。
#define SQR(X) X*X
main()
{ int a=16,k=2,m=l;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
A)16 B)2 C)9 D)l
答案:B
評析:c語言在預(yù)編譯時遇到帶實參的宏名,則按命令行中指定的字符串從左到右進行置換。在做這題時,也不妨將運用置換法。得到:a/=k+m*k+m/k+m*k+m=16/7=2。注:a為整型,所以在做除法時,自動取整。
(49)假定建立了以下鏈表結(jié)構(gòu),指針p、q分別指向如圖所示的結(jié)點,則以下可以將q所指結(jié)點從鏈表中刪除并釋放該結(jié)點的語句組是________。
↓p ↓q
8
4
3
head→ →…→ → →……
datanext
A)free(q);p->next=q->next;
B)(*p).next=(*q).next;free(q);
C)q=(*q).next;(*p).next=q;free(q);
D)q=q->next;p->next=q;p=p->next;free(p);
答案:B
評析:選項A的錯誤在于,先已經(jīng)把q結(jié)點給釋放,無法再進行余下語句了:選項c和D的錯誤在于因為有了q=(*q).next做了賦值,則free(q)釋放了原來q后面的一個結(jié)點。
(50)以下程序的輸出結(jié)果是__________。
main()
{ int x=05;char z='a';
printf("%d\n",(x&1)&&(z<'z'));)
A)0 B)1 C)2 D)3
答案:B
評析:"&"是位運算符表示按位與運算,"&&"是邏輯運算符當其兩邊的表達式都為真時返回真值。關(guān)系表達式()&1)&&(z<'z'),(x&1)為真,(Z<'Z')也為真,兩者相與,自然也為真,以整型輸出,則輸出1。
二、填空題(每空2分,共40分)
請將每一個空的正確答案寫在答題卡的【1】至【20】序號的橫線上,答在試卷上不得分。
(1)棧的基本運算有三種:入棧、退棧和 【1】 。
答案:【1】讀棧頂元素
評析:棧的基本運算有三種:入棧、退棧和讀棧項元素。
入棧運算是指在棧項位置插入一個新元素。這個運算有兩個基本操作:首先將棧頂指針進一(即top加1),然后將新元素插入到棧頂指針指向的位置。
退棧運算是指取出棧頂元素并賦給一個指定的變量。這個運算有兩個基本操作:首先將棧頂元素(棧項指針指向的元素)賦給一個指定的變量,然后將棧項指針退一(即top減1)。
讀棧頂元素是指將棧頂元素賦給一個指定的變量。這個運算不刪除棧頂元素,只是將它的值賦給一個變量。
(2)在面向?qū)ο蠓椒ㄖ,信息隱蔽是通過對象的 【2】 性來實現(xiàn)的。
答案:【2】封裝
評析:軟件工程的基本原則包括抽象、信息隱蔽、模塊化、局部化、確定性、一致性、完備性和可驗證性。
信息隱蔽是指采用封裝技術(shù),將程序模塊的實現(xiàn)細節(jié)隱藏起來,使模塊接口盡量簡單。
(3)數(shù)據(jù)流的類型有 【3】 和事務(wù)型。
答案:【3】變換型
評析:典型的數(shù)據(jù)流類型有兩種:變換型和事務(wù)型。
變換型:是指信息沿輸入通路進入系統(tǒng),同時由外部形式變換為內(nèi)部形式,進入系統(tǒng)的信息通過變換中心,經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟件系統(tǒng)。
事務(wù)型:在很多軟件應(yīng)用中,存在某種作業(yè)數(shù)據(jù)流,它可以引發(fā)一個或多個處理,這些處理能夠完成該作業(yè)要求的功能,這種數(shù)據(jù)流就叫做事務(wù)。
(4)數(shù)據(jù)庫系統(tǒng)中實現(xiàn)各種數(shù)據(jù)管理功能的核心軟件稱為 【4】 。
答案:【4】數(shù)據(jù)庫管理系統(tǒng)或DBMS
評析:數(shù)據(jù)庫管理系統(tǒng)是數(shù)據(jù)庫的機構(gòu),它是一種系統(tǒng)軟件,負責數(shù)據(jù)庫中的數(shù)據(jù)組織、數(shù)據(jù)操縱、數(shù)據(jù)維護、控制及保護和數(shù)據(jù)服務(wù)等。數(shù)據(jù)庫管理系統(tǒng)是數(shù)據(jù)庫系統(tǒng)的核心。
(5)關(guān)系模型的數(shù)據(jù)操縱即是建立在關(guān)系上的數(shù)據(jù)操縱,一般有 【5】 、增加、刪除 和修改四種操作。
答案:【5】查詢
評析:關(guān)系模型的數(shù)據(jù)操縱即是建立在關(guān)系上的數(shù)據(jù)操縱,一般有查詢、增加、刪除和修改四種操作。
數(shù)據(jù)查詢:用戶可以查詢關(guān)系數(shù)據(jù)庫中的數(shù)據(jù),它包括一個關(guān)系內(nèi)的查詢以及多個關(guān)系間的查詢。
數(shù)據(jù)刪除的基本單位是一個關(guān)系內(nèi)的元組,它的功能是將指定關(guān)系內(nèi)的指定元組刪除。
數(shù)據(jù)插入僅對一個關(guān)系而言,在指定關(guān)系中插入一個或多個元組。
數(shù)據(jù)修改是在一個關(guān)系中修改指定的元組和屬性。
(6)下列程序的輸出結(jié)果是 【6】 。
main()
{
int a=l,b=2;
a=a+b;b=a-b;a=a-b;
printf("%d,%d\n",a,b);
}
答案:【6】2,1
評析:本題中,執(zhí)行a=a+b時,a=l,b=2,a=l+2=3;b=a-b時,a=3,b=2,b=3-2=1;a=a-b時,a=3,b=l,a=3.1=2;因此,本題的輸出是2,1.
(7)下列程序的輸出結(jié)果是16.00,請?zhí)羁;?BR> main()
{
int a=9,b=2:
float x= 【7】 ,y=1.1,z;
z=a/2+b*x/y+l/2;
printf("%5.2tin",z);
}
答案:【7】6.6
評析:本題,已知結(jié)果z=16.00,即16.0=a/2+b*x/y+l/2,分別把a、b代入,得到16.0=9/2+2"x/1.1+1/2。
因為a=9,a是整型,所以9/2的值在沒有進行類型轉(zhuǎn)換時,等于4,1/2同理,等于0。代入求一元一次方程,很容易就可以得出x=6.6。
(8)用以下語句調(diào)用庫函數(shù)malloc,使字符指針st指向具有11個字節(jié)的動態(tài)存儲空間, 請?zhí)羁铡?BR> st=(chhr*) 【8】;
答案:181 malloc(11)
評析:malloc函數(shù)的格式是:void*(或char*)malloc(size),size表示應(yīng)分配的存儲區(qū)。此題要分配11字節(jié)的單元,把11代入即可。
(9)下列程序段的輸出結(jié)果是 【9】 。
main()
{char b[]="Hello,you";
b[5]=0;
printf("%s\n",b);
}
答案:【9】Hello
評析:字符串中,數(shù)值0或符號'\O'表示字符串的結(jié)束。本題中,b[5]被賦了0值,表明字符串b的第六個字符就是結(jié)束標志。因此,只輸出前五個字符,即Hello。
(10)下列程序段的輸出結(jié)果是 【10】 。
int n='c':
switch(n++)
{default:printf("error");break;
case。a':
case'A。:
caseIb':
tase'B':printf("good");break;
case'c':case'C':printf("pass");
case'd':case'D':printf("warn");
}
答案:【10】passwarn
評析:n++是在執(zhí)行完其所在的語句后再加l,因此,在執(zhí)行case的時候,n的值依然為'c',執(zhí)行case'c'后面的語句,先打印出"pass";在執(zhí)行完case'c'后,未遇到break跳出switch,便接著執(zhí)行下面的語句,又打印出warn。所以此題輸出結(jié)果是:passwarn。
(11)以下程序通過函數(shù)指針p調(diào)用函數(shù)mn,請在填空欄內(nèi),寫出定義變量p的語句。
void fun(int'x,int*y)
{ …… }
main()
{ int a=lO,b=20;
【11】。
p=fun; p(&a,&b);
……
}
答案:【11】void(*p)();
評析:要定義p為指向函數(shù)的指針變量,需寫成:void(*p)();注意+p兩側(cè)的括弧不可以省略,表示p先與*結(jié)合,是指針變量,再與后面的()結(jié)合,表示此指針變量指向函數(shù),這個函數(shù)無返回值(同fun函數(shù))。
(12)以下程序的輸出結(jié)果 【12】 。
main()
{
int p[7]={ll,13,14,15,16,17,18};
int i=0,J=0;
while(1<7&&p[i]%2==1)j+=p[i++];
printf("%d\n"J);
}
答案:【12】24
評析:本題程序定義了一維數(shù)組p,有七個數(shù)組元素,整型變量i,.j初值分別為0,當while的條件表達式(i<7&&p[i]%2==1)的值為真時,執(zhí)行語句j+=p[i++];,如:當i=0時,i<7為真,p[I]%2=11%2=1,表達式(p[i]%2:=1)的值為真,所以整個表達式(i<7&&p[i]%2==1)的值為真,執(zhí)行j=j+p[i++]=0+11=11,i=l;依次類推可以得出答案24。
(13)下列程序的輸出結(jié)果是 【13】 。
void fun(int *n)
{
while((*n)--);
printf("%d",++(*n));
}
main()
{ int a=100;
fun(&a);
}
答案:【13】0
評析:在函數(shù)fun()中,while((*n)--)是先引用+n的值,再做(*n)--運算,所以循環(huán)結(jié)束時*n的值為O,再做(+n)--運算后,*n的值為-1;執(zhí)行++(*n)后,*n的值是O。
(14)以下程序的輸出結(jié)果是 【14】 。
main()
{
int arr[]={30,25,20,15,10,5},*p=arr;
p++;
printf("%d\n",*(p+3));
)
答案:【14】10
評析:整型指針最初被賦的值是數(shù)組art的頭指針,即指向數(shù)組的第一個元素30,p++后,指針指向數(shù)組的下一個元素,即*p=arr[1]=25,在執(zhí)行*(p+3)時,則相當于a[1+3],即10。因此,輸出應(yīng)為10。
(15)以下程序運行后的輸出結(jié)果是 【15】 。
main()
{
char a[]="Language",b[]="Programe";
char *p1,*p2;
int k:
pl=a,p2=b;
for(k=0;k<=7;k++)
if(*(pl+k)==*(p2+k))printf("%c",*(pl+k));
}
答案:【15】gae
評析:本題定義了兩個字符串數(shù)組a[],b[],字符型指針變量p1和p2,且分別指向字符串數(shù)組a和b,執(zhí)行for循環(huán),當if(*(pl+k)==*(p2+k))條件為真,執(zhí)行輸出*(pl+k)對應(yīng)的字符。即當k=0時,*(pl+k)對應(yīng)的字符串數(shù)組a.中的字符L,*(p2+k)對應(yīng)的字符串數(shù)組b中的字符P,因此if(*(pl+k)==*(p2+k))條件為假,不執(zhí)行printf語句,依次類推,將字符串數(shù)組a和b中對應(yīng)位置上的字符一一比較,如果對應(yīng)位置上的字符相同,則輸出該字符。
(16)下面程序把從終端讀入的文本(用@作為文本結(jié)束標志)輸出到一個名為bi.dat的新文 件中,請?zhí)羁铡?BR> #include "stdio.H"
FILE *fp;
main()
{ char ch;
if((fp=fopen( 【16】 ))==NULL)exit(0);
while((ch=getchar())!='@')fputc(ch,fp);
fclose(fp);
}
答案:【l6】"bi.Dat", "w"或"bi.dat","w+"或"bi.dat","r+"
評析:本題的考點是fopen()函數(shù),此函數(shù)的格式是fopen(文件名,使用文件方式),題目的要求是將從鍵盤讀入的文本寫到文件中,因此選擇的打開方式應(yīng)該是"w"(只寫)。或者是讀寫"r+"或"w+"。
(17)以下程序是從終端讀入數(shù)據(jù)到數(shù)組中,統(tǒng)計其中正數(shù)的個數(shù),并計算它們的和。請?zhí)羁铡?BR> main()
{
int i,a[20],sum,count;
sum=count= 【17】 ;
for(i=0;i<20;i++)scanf("%d", 【18】 );
for(i=0;i<20;i++)
{
if(a[I]>0)
{ count++;
sum+= 【19】 ;
}
}
printf("sum=%d,count=%d\n",sum,count);
}
答案:【17】0
【18】&a[i]
【19】a[i]
評析:本題要求從終端讀入數(shù)據(jù)到數(shù)組中,統(tǒng)計其中正數(shù)的個數(shù),并計算它們的和。程序中首先要對存放正數(shù)個數(shù)的變量count及存放和值的變量sum初始化為0,所以第一空應(yīng)填:0。接著要求從終端讀入數(shù)據(jù)到數(shù)組中,可以通過scanf函數(shù)實現(xiàn),因此第二空應(yīng)填:&a[i]。最后通過sum+=a[i];語句累加正數(shù)a[i]的值到sum中,因此第三空應(yīng)填:a[i]。
(18)若變量n中的值為24,則pint函數(shù)共輸出 【20】 行。
void prnt(int n,int aa[])
{ int i;
for(I=1;i<=n;i++)
{ printf("%6d",aa[I]);
if(!(i%5,J)printf("\n");
}
printf("\n");
}
答案:【20】5
評析:本題的關(guān)鍵在于if(!(i%5))printf("\n");這句,即如果i可被5整除時,則換行。i值為24,可以被5整除4次,并余4,因此,prnt函數(shù)共輸出5行,最后一行有4個