(28)有如下程序
main()
{ int x=3;
do
{ printf("%d",x--);}
while(!x);
}
該程序的執(zhí)行結(jié)果是________。
A)321 B)3 C)不輸出任何內(nèi)容 D)陷入死循環(huán)
答案:B
評(píng)析:本題x賦初值為3,當(dāng)執(zhí)行printf("%d",x--);時(shí),由于X--的作用是先運(yùn)算x,再將x的值減l,所以,printf輸出的x值為3,等輸出后,x的值減1變?yōu)?,繼續(xù)執(zhí)行,判斷條件!x為假,循環(huán)只被執(zhí)行一次。
(29)設(shè)有聲明語(yǔ)句:char a='\72';則變量a__________
A)包含1個(gè)字符 B)包含2個(gè)字符
C)包含3個(gè)字符 D)聲明不合法
答案:A
評(píng)析:轉(zhuǎn)義字符常量'\xx'可以把'\'后面的數(shù)字轉(zhuǎn)換為對(duì)應(yīng)的ASCII字符。
(30)有以下程序段:
main()
{
int a=5,*b,**c
c==&b;b=&a;
}
程序在執(zhí)行了c=&b;b=&a;語(yǔ)句后,表達(dá)式ttc的值是__________。
A)變量a的地址 B)變量b中的地址
C)變量a中的值 D)變量b的地址
答案:C
評(píng)析:指針變量是用來(lái)存放地址的。&:取地址運(yùn)算符。+:指針運(yùn)算符。**c為指針變量*c所指向的存儲(chǔ)單元,*c為指針指針變量c所指向的存儲(chǔ)單元,而c=&b表示c為變量b的地址,b=&a表示b為變量a的地址。表達(dá)式一c的值就是變量a中的值。
(31)有如下函數(shù)調(diào)用語(yǔ)句
func(recl,rec2+rec3,(rec4,rec5));
該函數(shù)調(diào)用語(yǔ)句中,含有的實(shí)參個(gè)數(shù)是________。
A)3 B)4 C)5 D)有語(yǔ)法錯(cuò)誤
答案:A
評(píng)析:(rec4,rec5)是逗號(hào)表達(dá)式,它的值是rec5的值。所以該函數(shù)調(diào)用語(yǔ)句含有的實(shí)參個(gè)數(shù)是3。
(32)有如下程序
main()
{
char s[115]={.tabc","de","fgh"};
printf("%e",s[2][6]);
}
其輸出為_(kāi)_________。
A)不確定 B)編譯錯(cuò)誤 C)g D)輸出null字符
答案:A
評(píng)析:由于s[2116]表示字符串已超出了數(shù)組s的表示范圍,在c中不會(huì)對(duì)數(shù)組越界進(jìn)行檢查,當(dāng)數(shù)組越界時(shí),會(huì)得到一個(gè)不確定的值。
(33)有如下程序
int rune(ira a,int b)
{ remm(a+b);}
main()
{ int x=2,y=5,z=8,r;
r=func(func(x,y),z);
primf("%d\n",r);
}
該程序的輸出結(jié)果是________。
A)12 B)13 C)14 D)15
答案:D
評(píng)析:調(diào)用函數(shù)func(x,y),返回x+y,即7;再調(diào)用函數(shù)func(7,z),返回7+z,即15。
(34)有如下程序段
int *p,a=10,b=l;
p=&a; a=*p+b;
執(zhí)行該程序段后,a的值為_(kāi)________。
A)12 B)11 C)10 D)編譯出錯(cuò)
答案:B
評(píng)析:執(zhí)行p=&a;后,p指向整數(shù)a,*p即p的目標(biāo)變量,也就是a;所以a=*p+b等價(jià)于a=a+b,可知a的值最終為11。
(35)有以下程序:
int*f(int*x,int*y)
{ if(*x<*y)return x;
else returny;
}
main()
{
int a=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=f(p,q);
printf("%d,%d,%d\n",*p,*q,*r);
}
程序運(yùn)行后輸出結(jié)果是_________。
A)7,8,8 B)7,8,7 C)8,7,7 D)8,7,8
答案:B
評(píng)析:f函數(shù)的功能是返回地址為x,y的兩個(gè)數(shù)中值較的數(shù)的地址,本題輸出結(jié)果是7,8,7。
(36)有如下程序
long fib(im n)
{ if(n>2) return(fib(n-1)+fib(n-2));
else return(2);
)
main()
{ printf(%ld\n",fib(3));}
該程序的輸出結(jié)果是_________。
A)2 B)4 C)6 D)8
答案:B
評(píng)析:函數(shù)舶內(nèi)部有兩個(gè)遞歸調(diào)用,當(dāng)n=3時(shí),fib(n-1)返回2,fib(n-2)也返回2,所以fib(n-I)+fib(n-21的值為4。
(37)下面程序的輸出結(jié)果是_________。
main()
{
char str[10],c='a';
inti=0:
for(;i<5;i++)
str[I]=c++;
printf("%s",str);
}
A)abcde B)a C)不確定 D)bcdef
答案:C
評(píng)析:字符串少一個(gè)結(jié)束標(biāo)志,所以輸出的結(jié)果不確定。
(38)在c語(yǔ)言中,函數(shù)中變量的隱含存儲(chǔ)類(lèi)別是__________。
A)auto B)static C)extern D)無(wú)存儲(chǔ)類(lèi)別
答案:A
評(píng)析:函數(shù)中變量的存儲(chǔ)類(lèi)別包括auto,static,extern,其中auto為隱含存儲(chǔ)類(lèi)別,static為靜態(tài)存儲(chǔ)類(lèi)別,register是寄存器存儲(chǔ)類(lèi)別。A
評(píng)析:函數(shù)中變量的存儲(chǔ)類(lèi)別包括auto,static,extern,其中auto為隱含存儲(chǔ)類(lèi)別,static為靜態(tài)存儲(chǔ)類(lèi)別,register是寄存器存儲(chǔ)類(lèi)別。
(39)有如下程序
#define n 2
#define m N+I
#define NUM 2*m+l
main()
{ int i;
for(i=1;i<=NUM;i++)printtf("%d\n",i);
}
該程序中的for循環(huán)執(zhí)行的次數(shù)是_________。
A)5 B)6 C)7 D)8
答案:B
評(píng)析:在c語(yǔ)言中,宏定義在編譯時(shí)將被直接替換,所以NUM最后會(huì)被替換成2*N+l+l,即2*2+1+1,值為6。因此,for循環(huán)執(zhí)行的次數(shù)為6。
(40)假設(shè)在turboc2.0采用small模式編譯如下程序
main()
{
char a[4]:{'a','b'};
char%="abc.t:
printf("%d,%d",sizeof(a),sizeof(b));
}
其輸出結(jié)果為_(kāi)________。
A)4,2 B)4,4 C)4,3 D)2,2
答案:A
評(píng)析:用small模式編譯,指針變量占2個(gè)字節(jié)。sizeof(array):數(shù)組名array代表數(shù)組本身,sizeof函數(shù)測(cè)出的是整個(gè)數(shù)組的大小。a數(shù)組的大小為4,b指針變量的大小為2。
(41)有以下函數(shù)
char *fun(char *p)
{ retum p; }
該函數(shù)的返回值是_________。
A)無(wú)確切的值 B)形參p中存放的地址值
C)一個(gè)臨時(shí)存儲(chǔ)單元的地址 D)形參p自身的地址值
答案:B
評(píng)析:p本身就是一個(gè)字符型指針變量,返回p也就是返回變量p中存放的地址值。
(42)有如下程序段:
#include<stdio.h>
#define Max(a,b)a>b?a:b
main()
{
int a=5,b=6,c=4,d;
d=c+Max(a,b);
printf("%d",d);
}
其輸出結(jié)果為_(kāi)_________。
A)10 B)5 C)6 D)編譯錯(cuò)誤
答案:B
評(píng)析:在c語(yǔ)言中,宏定義是直接替換的,所以在c+a>b?a:b這個(gè)條件表達(dá)式中,c+a>b為真,所以用a的值作為整個(gè)表達(dá)式的值,而a的值為5,所以整個(gè)表達(dá)式的值為5。
(43)有如下程序段
int a=14,b=l 5,x;
char c='A':
x=(a&&b) &&(c<'B');
執(zhí)行該程序段后,x的值為_(kāi)_______。
A)true B)false C)0 D)l
答案:D
評(píng)析:a&&b的值為true,c<'B'的值也為true,所以(a&&b)&&(c<'B')的值為true。但x是int型變量,所以(披&b)&&(c<'B')的值最后要從bool型轉(zhuǎn)換為int型賦給x。這樣x的值應(yīng)為l。
(44)下述關(guān)于C語(yǔ)言文件的操作的結(jié)論中,正確的是________。
A)對(duì)文件操作必須先關(guān)閉文件
B)對(duì)文件操作必須先打開(kāi)文件
C)對(duì)文件操作順序無(wú)要求
D)對(duì)文件操作前必須先測(cè)文件是否存在,然后再打開(kāi)文件。
答案:B
評(píng)析:在c中對(duì)文件操作必須先打開(kāi)文件,待文件操作完畢后要關(guān)閉文件。對(duì)文件以讀的方式進(jìn)行打開(kāi)操作時(shí),同時(shí)會(huì)執(zhí)行文件的檢查文件是否存在,不存在將會(huì)返回空的文件指針,如果對(duì)文件以寫(xiě)的方式打開(kāi)時(shí),文件不存在,將會(huì)自動(dòng)創(chuàng)建文件,.因此在C中打開(kāi)文件前不必對(duì)其檢查文件是否存在,故答案為B。
(45)下列關(guān)鍵字中,不屬于C語(yǔ)言變量存儲(chǔ)類(lèi)別的是________。
A)register B)auto C)extem D)public
答案:D
評(píng)析:變量的存儲(chǔ)類(lèi)別具體包含四種:自動(dòng)的(auto),靜態(tài)的(statiC),寄存器的(register),外部的(extern)。
(46)有如下說(shuō)明
im a[10]={l,2,3,4,5,6,7,8,9,10},*p=a;
則數(shù)值為9的表達(dá)式是________。
A)木p+9 B)半(p+8) C)牛p+=9 D)p+8
答案:B
評(píng)析:p是指針,p+8是地址值,D是錯(cuò)的;*p是p的目標(biāo)變量,即a[0],值為1,所以+p+9的值是lO,而*p+=9值是重新給a[O]賦了值(1+9);所以A和C也是錯(cuò)的。p+8是地址值,指向a[8],那么*(p+8)。的值就是a[81的值,即9。
(47)若有以下定義:int t[3][2];能正確表示t數(shù)組元素地址的表達(dá)式是________。
A)&t[3][2] B]t[3] C]t[1] D]*t[2]
答案:C
評(píng)析:A和B兩個(gè)表達(dá)式都已越界了;*t[2]是目標(biāo)變量,即一個(gè)整數(shù),而不是地址值。
(48)下面程序運(yùn)行后的輸出結(jié)果是________。
struct abc
{
int a,b,c;
}
main()
{
struct abc s[2]={{1,2,3},{4,5,6}};
int t=-s[0].a(chǎn)+s[1].b;
printf("%d\n",t);
}
A)5 B)6 C)7 D)8
答案:B
評(píng)析:在main函數(shù)中定義了一個(gè)struct abc類(lèi)型的數(shù)組,同時(shí)分別利用{1,2,3}及{4,5,6}對(duì)數(shù)組中兩個(gè)元素進(jìn)行初始化。在該結(jié)構(gòu)體,依次對(duì)其中的a,b,c三個(gè)變量進(jìn)行初始化。故s[O].a(chǎn)=l,s[1].b=5,所以本題輸出為6。
(49)有如下程序
main()
{
int a[31131。{{1,2},{3,4},{5,6}},i,j,s=0;
for(i=l;i<3;i++)
for(j=0;j<=i;j++)
s+=a[I][j];
printf("%d\n",s);
}
該程序的輸出結(jié)果是________。
A)18 B)19 C)20 D)2l
答案:A
評(píng)析:題中的外循環(huán)只執(zhí)行了2次:
第1次:a[1][0]=3,a[1][1]=4,所以s=7;
第2次:a[2][O]=5,a[2][1]=6,a[2][2]=0,所以s=7+5+6+0=18。
(50)若己建立如下圖所示的單向鏈表結(jié)構(gòu):
在該鏈表結(jié)構(gòu)中,指針p、s分別指向圖中所示結(jié)點(diǎn),則不能將s所指的結(jié)點(diǎn)插入到鏈表末尾仍構(gòu)成單向鏈表的語(yǔ)句組是__________。
A)p=p->next;s->next:p;p->next=s;
B)p=p->next;s->next:p->next;p->next=s;
C)s->next:NULL;p=p->next;p->next:s;
D)p=(*p).next;(*s).next=(*p).next;(*p).next=s;
答案:A
評(píng)析:在答案A中:p=p->next;s->next=p;p->next=s;s的確已插到了鏈表的末尾,但它的next卻并沒(méi)有為NULL,而是指向了它的直接前趨p,這樣它就不是一個(gè)單向鏈表(單向鏈表最后一個(gè)結(jié)點(diǎn)的next指針一定是一個(gè)NULL)。
二、填空題(每空2分,共40分)
請(qǐng)將每一個(gè)空的正確答案寫(xiě)在答題卡的【1】至【20】序號(hào)的橫線上,答在試卷上不得分。
(1)在運(yùn)算過(guò)程中,能夠使空表與非空表的運(yùn)算統(tǒng)一的結(jié)構(gòu)是 【1】 。
答案:【1】循環(huán)鏈表
評(píng)析:在鏈表的運(yùn)算過(guò)程中,采用鏈接方式即循環(huán)鏈表的結(jié)構(gòu)把空表與非空表的運(yùn)算統(tǒng)一起來(lái)。循環(huán)鏈表具有兩個(gè)特點(diǎn):
、僭谘h(huán)鏈表中增加了一個(gè)表頭結(jié)點(diǎn),其數(shù)據(jù)域?yàn)槿我饣蚋鶕?jù)需要來(lái)設(shè)置,指針域指向線性表的第一個(gè)元素的結(jié)點(diǎn)。循環(huán)鏈表的頭指針指向表頭結(jié)點(diǎn)。
、谘h(huán)鏈表中最后一個(gè)結(jié)點(diǎn)的指針不是空,而是指向表頭結(jié)點(diǎn)。
(2)軟件工程研究的內(nèi)容主要包括: 【2】 技術(shù)和軟件工程管理。
答案:【2】軟件開(kāi)發(fā)
評(píng)析:基于軟件工程的目標(biāo),軟件工程的理論和技術(shù)性研究的內(nèi)容主要包括:軟件開(kāi)發(fā)技術(shù)和軟件工程管理。
軟件開(kāi)發(fā)技術(shù)包括:軟件開(kāi)發(fā)方法學(xué)、開(kāi)發(fā)過(guò)程、開(kāi)發(fā)工具和軟件工程環(huán)境,其主體內(nèi)容是軟件開(kāi)發(fā)方法學(xué)。
軟件工程管理包括:軟件管理學(xué)、軟件工程經(jīng)濟(jì)學(xué)、軟件心理學(xué)等內(nèi)容。
(3)與結(jié)構(gòu)化需求分析方法相對(duì)應(yīng)的是 【3】 方法。
答案:【3】結(jié)構(gòu)化設(shè)計(jì)
評(píng)析:與結(jié)構(gòu)化需求分析方法相對(duì)應(yīng)的是結(jié)構(gòu)化設(shè)計(jì)方法。結(jié)構(gòu)化設(shè)計(jì)就是采用最佳的可能方法設(shè)計(jì)系統(tǒng)的各個(gè)組成部分以及各個(gè)成分之間的內(nèi)部聯(lián)系的技術(shù)。也就是說(shuō),結(jié)構(gòu)化設(shè)計(jì)是這樣一個(gè)過(guò)程,它決定用哪些方法把哪些部分聯(lián)系起來(lái),才能解決好某個(gè)具體且有清楚定義的問(wèn)題。
(4)關(guān)系模型的完整性規(guī)則是對(duì)關(guān)系的某種約束條件,包括實(shí)體完整性、 【4】 和自定義完整性。
答案:【4】參照完整性
評(píng)析:關(guān)系模型允許定義三類(lèi)數(shù)據(jù)約束,它們是實(shí)體完整性、參照完整性以及用戶定義的完整性約束,其中前兩種完整性約束由關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)自動(dòng)支持。
實(shí)體完整性約束要求關(guān)系的主鍵中屬性值不能為空,這是數(shù)據(jù)庫(kù)完整性的最基本要求,因?yàn)橹麈I是惟一決定元組的,如為空則其惟一性就成為不可能的了。
參照完整性約束是關(guān)系之間相關(guān)聯(lián)的基本約束,它不允許關(guān)系引用不存在的元組:即在關(guān)系中的外鍵要么是所關(guān)聯(lián)關(guān)系中實(shí)際存在的元組,要么是空值。
自定義完整性是針對(duì)具體數(shù)據(jù)環(huán)境與應(yīng)用環(huán)境由用戶具體設(shè)置的約束,它反映了具體應(yīng)用中數(shù)據(jù)的語(yǔ)義要求。
(5)數(shù)據(jù)模型按不同的應(yīng)用層次分為三種類(lèi)型,它們是 【5】 數(shù)據(jù)模型、邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型。
答案:【5】概念
評(píng)析:數(shù)據(jù)模型按不同的應(yīng)用層次分為三種類(lèi)型,它們是概念數(shù)據(jù)模型、邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型。
概念數(shù)據(jù)模型簡(jiǎn)稱(chēng)概念模型,是一種面向客觀世界、面向用戶的模型;它與具體的數(shù)據(jù)庫(kù)管理系統(tǒng)無(wú)關(guān)。
(6)表示""整數(shù)x的絕對(duì)值大于5""時(shí)值為""真""的C語(yǔ)言表達(dá)式是 【6】 。
答案:【6】x>5‖x<-5或k<-5‖x>5
評(píng)析:要使整數(shù)x的絕對(duì)值大于5,則x大于5或x小于-5,用c語(yǔ)言表示即為:x>5‖x<-5或者x<-5‖x>5。
故本題答案為:x>5‖x<-5或者x<-5‖x>5。
(7)以下程序的輸出結(jié)果是 【7】 。
main()
{ unsigned short a=65536;int b;
printf("%d\n",b=a);
}
答案:【7】0
評(píng)析:對(duì)于一個(gè)unsigned short來(lái)說(shuō),它能取的最大值是65535。這里給a賦值65536,已經(jīng)超出了它的取值范圍,這樣它的高位將被截掉,只把低位賦給它(全零)。所以a的值實(shí)際為0。
(8)若有定義:ira a=lO,b=9,c=8;,接著順序執(zhí)行下列語(yǔ)句,變量b中的值是 【8】 。
c=(a-=(b-5));
c=(a%11)+(b=3);
答案:【8】3
評(píng)析:這里:b-5=4,a.=4之后a的值為6,并把它賦給c。此時(shí)b的值并未被改變。在第2個(gè)表達(dá)式中,也只有賦值表達(dá)式b=3改變了b的值。所以?xún)尚姓Z(yǔ)句執(zhí)行完畢,b的值應(yīng)該為3。
(9)以下程序運(yùn)行后的輸出結(jié)果是 【9】 。
main()
{
int p=30;
primf("%d\n",(p/3>O?p/10:p%3));
}
答案:【9】3
評(píng)析:條件表達(dá)式的一般形式為:表達(dá)式17表達(dá)式2:表達(dá)式3條件運(yùn)算符的執(zhí)行順序:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值;若表達(dá)式l的值為0(假)-,則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。30/3=10>0,所以執(zhí)行p/lO,結(jié)果為3。
(10)函數(shù)pi的功能是根據(jù)以下近似公式求n值:
(∏*∏)/6=1+1/(2*2)+1/(3*3)+…+1(n*n)
現(xiàn)在請(qǐng)你在下面的函數(shù)中填空,完成求n的功能。
#include"math.H"
{ double s=0.0;long i;
for(i=1;i<=n;i++)s=s+ 【10】 ;
retum(sqrt(6*s));
}
答案:【10】1.O/(i*i1或(double)l/(i*i)
評(píng)析:表達(dá)式1+1/(2*2)+l/(3*3)+…+1(n*n)可寫(xiě)為:1/(1*1)+1/(2*2)+1/(3*3)+…+1(n*n)
n
即:∑l÷(i×i)
i-l
對(duì)應(yīng)的c語(yǔ)言的表達(dá)式:s=s+1.O/(i*i)。注:必須要寫(xiě)成1.0的形式,否則1/(i*i)返回值為其值截尾取整,即恒為O。
(11)函數(shù)pi的功能是根據(jù)以下公式近似求得的:
pi*pi/6=1+1/(2*2)+1/(3*3)+…+1/(n*n)
請(qǐng)?jiān)谙旅娴暮瘮?shù)中填空,完成求pi的功能。
#include<math.h>
double pi(10ng n1
{ double s=O.O,long i;
for(i=1;i<=n;I++)s=s+ 【11】 ;
return(sqrt(6*s));
}
答案:【11】1.0/i/i或1.O/(i*i)
評(píng)析:由題面中提供的計(jì)算pi的公式可知:在第i項(xiàng)其值為1/(i*i),考慮到運(yùn)算結(jié)果為浮點(diǎn)數(shù),故必須要將l轉(zhuǎn)化為浮點(diǎn)數(shù)或采用1.O/(i*i)的形式。故本題應(yīng)填1.O/(i*i)或其等效形式。
(12)若輸入字符串:abcde/,則以下while循環(huán)體將執(zhí)行 【12】 次。
while((ch=getchar())=='e')printf("*");
答案:【12】0
評(píng)析:函數(shù)getchar()是從鍵盤(pán)得到用戶輸入的一個(gè)字符。用戶輸入的第1個(gè)字符是a,不管后面輸入的是什么ch的值都是'a',因此條件(ch=getchar())=='e'為假,這個(gè)循環(huán)不會(huì)被執(zhí)行。
(13)以下函數(shù)用來(lái)求出兩整數(shù)之和,并通過(guò)形參將結(jié)果傳回,請(qǐng)?zhí)羁铡?BR> voidfunc(intx,inty, 【13】 z]
{ *z-x+y;},
答案:【13】int*
評(píng)析:從題中代碼可知:z應(yīng)該是一個(gè)整型指針,因此應(yīng)填:int*
(14)若有以下定義,則不移動(dòng)指針p,且通過(guò)指針p引用值為98的數(shù)組元素的表達(dá)式是 【14】 。
int w[10]={23,54,10,33,47,98,72,80,61},*p=w;
答案:【14】p[5]或*(p+5)
評(píng)析:98是數(shù)組w的第5個(gè)元素(最開(kāi)始的為第O個(gè)),而通過(guò)*p=w已經(jīng)將p指向了數(shù)組w,要想不移動(dòng)指針p而引用98,可以有以下兩種寫(xiě)法:p[5]、*(p+5)。
(15)設(shè)在主函數(shù)中有以下定義和函數(shù)調(diào)用語(yǔ)句,且fun函數(shù)為void類(lèi)型;請(qǐng)寫(xiě)出fun函 數(shù)的首部 【15】 。要求形參名為b。
main()
{ double s[10][22];
int n:
……
fun(s);
……
}
答案:【15】void fun(double b[1011221]
評(píng)析:本題答案:void fun(double b[10][22])
(16)有以下程序:
int f(int n)
{ if(n==1)return 1;
else return f(n-1)+1;}
main()
{ int i j=0;
for(i=1;i<3;i++)j+=f(i);
printf("%d\n"'j);
}
程序運(yùn)行后的輸出結(jié)果是 【16】 。
答案:【16】3
評(píng)析:i=l時(shí),f(1)=1 J=j+f(1)=0+1=1;i=2時(shí),f(2)=f(1)+l=1+1=2 j=j+f(2)=l+3=3;此時(shí)循環(huán)結(jié)束,程序運(yùn)行后的輸出結(jié)果是3。
(17)以下程序的輸出結(jié)果是 【17】 。
void fun()
{ static int a:0;
a+=2;printf("%d",a);
}
main()
{ int cc;
for(CC=1;cc<4;cc++)fun();
printf("\n");
}
答案:【17】246
評(píng)析:循環(huán)for(cc=l;cc<4;cc++)被執(zhí)行了3次。在函數(shù)fun中,由于a是static型變量,所以函數(shù)第1次調(diào)用后,a=2;第2次調(diào)用后,a=4;第3次調(diào)用后,a=6。
(18)實(shí)現(xiàn)程序可將磁盤(pán)中的一個(gè)文件復(fù)制到另一個(gè)文件中,兩個(gè)文件的文件名在可執(zhí)行命令的命令行中(相當(dāng)于copy命令),假定文件在當(dāng)前目錄下。請(qǐng)補(bǔ)全程序。
#include<stdio.h>
void main(int argc,char。argv[])
{ FILE *f1,*f2;
if(argc< 【18】 )
{ printf("parameter error!\n");exit(0);}
fl=fopen(argv[1],"r");
f2=fopen(argv[2],"w");
while( 【19】 )fputc(fgetc(f1),f2);
fclose(f1);
fclose(f2);
}
答案:【18】3
【19】!feof(f1)
評(píng)析:在c語(yǔ)言中,宏定義是直接替換的,所以在對(duì)表達(dá)式MAX(a+b,c+d)*10進(jìn)行或替換后,表達(dá)式變?yōu)椋?a+b)>(c+d)?(a+b):(c+d)*10
在這個(gè)條件表達(dá)式中,(a+b)>(c+d)為真,所以用(a+b)的值作為整個(gè)表達(dá)式的值(否則用(c+d)*10的值作為整個(gè)表達(dá)式的值),而(a+b)的值為7。所以整個(gè)表達(dá)式的值為7。
(19)以下程序的輸出結(jié)果是 【20】 。
#define MAX(x,y)(x)>(y)?(x):(y)
main()
f int a=5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)*10;
printf("%d\n",t);
}