9.2 填充题
7 J* G2 p6 P# |% E2 H: a 1.设有定义"# define F(N) 2*N",则表达式 F(2+)的值是_____。
! H6 s( e6 @0 v; y/ o# j0 h9 [ 【解】F(N)被定义成2*N,表达式F(2+3)被替换成2*2+3,其值是7。
1 R9 Y8 n, l! t8 b 2.设有下列程序:) x; V; g9 w' o2 d
# include
9 y P$ e% V5 |! r/ d& z main(int argc,int *argv[])0 B; R( D* b% R
{ while( --argc> 0) printf("%s",argv[argc]);
5 Z' [. R% Y8 c o printf("\n");/ d, E3 k, \2 v2 v' Z5 j! T
}4 o3 ?! m: I9 k# W' g* ?
假定上述程序编译连接成目标程序名为p.exe,如果输入如下的命令:( J; R2 P; J) {! z
P 123 AAA BBB ↓(其中的↓表示回车)
% b) H# T5 ]- \/ m" K 则输出结果是_____。9 d6 C* ] O! J' l1 c& s2 T$ f/ i& a
【解】程序启动时,参数argc的值是4,由于循环条件是一即组>0,是先减1后判大于0,循环共进行三次,顺序输出argv[3],argv[2]和argv[1],即输出BBBAAAl23。6 U O- ?% \0 q, N9 }
9.3 程序分析题: c# y/ D! C8 h* F
1.阅读下面程序,写出程序运行结果。
) c0 M4 W- C8 F # define PR(ar) printf("%d,", ar)$ c R, s8 {. [$ w" N
main()) l( {& R/ ]# R3 e- j1 r
{ int j,a[] ={1,3,5,7, 9,11,15}, * p= a+5;
( d# ?& B* Y. ]( E for(j=3; j; j--)# N9 O" U' @ Z7 m, p
switch(j) { case 1:
( r: V) {$ n2 z! a! P; P case 2: PR( * p++); break;" }; t% N! W/ _9 @% l5 B; k- [0 | w
case 3: PR(*(--p));
' A( c4 a* i- L, @8 v% s" R }
$ d; G/ @' r+ I3 l printf("\n");7 Z( Q2 v) _! o4 n
}# ^. t( g9 k/ a' }
【解】程序的宏定义PR以d格式输出参数的值和远号字符。程序给数组a 赋初值,并由指针p指向元素a[5]。程序让j从3减至1,共循环三次。当j是3时,让p减1,并输出p所指元素的值9;当 j是2和1时,输出p所指的数组元素的值,并让p增1,顺序输出9和11。所以
: R* G8 W" v! C 程序输出:
+ _7 v6 V4 I+ c1 a9 J4 I. J 9,9,11; f3 v n& x) x# |/ p4 D7 R
2.设下面的程序经编译连接后生成的目标程序名为: ABC.EXE,写出输入以下命令行后的输出:
z* `& _. D* y5 Z4 e% m ABC FILE1 FILE2 ↓(其中的↓表示回车); m& u; r! H. x) @6 u, ^
# include. ?4 i5 z; W# v2 Q9 D
main( int argc, char *argv[])
5 p8 Z' A' n$ C; S9 o" J { int i;" A1 x* Q4 e" b+ e
printf("%d \n",argc);
0 v% G: ]9 T" N, |) g3 a for(i=O;i printf("\n");" g) E# O d* v7 k2 g: L) N$ @6 I
} Y6 J8 c7 [0 I9 U
【解】程序首先输出参数argv的值3,然后循环三次,顺序输出ABC、FILE1和FILE2,并回车:
. `) r( Y/ H8 G6 L3 |6 { 3
, H( j7 G- q4 N/ J* N3 u/ L1 w& C ABC FILE1 FILE2
/ H1 L+ R3 t6 G6 I' u- }- L/ b2 J 3.读程序,写功能。. a/ ]# s/ k# L" I
# include
' O3 X, z1 Y8 S, z0 j' D) [ # include
1 m; M. |- b6 \! a2 A: |/ T main(int argc, char *argv[])% K v) d/ e- D9 ?' k$ t/ ^
{ FILE *fl,*f2;: x0 K: N* L/ ?, \9 o5 ]$ I6 X
char ch;
|4 ^' w, u! I7 l* d6 a; n if(argc< 3)' P) P, ^- Q; `5 _% k4 x! h/ {
{ printf("Parameters missing! \n");exit(0); }
2 G& n4 M. |9 q+ ~8 W( Y' ` if(((f1 =fopen(argv[1],"r"))== NULL) ||0 v7 q+ r* }% k: O9 o, G
((f2=fopen(argv[2],"w"))== NULL))0 L- H0 o; M" l* p
{ printf("Can not open file! \n"); exit(0); }
( `7 u' Z. s: u% D while(!feof(f1)) fputc(fgetc(f1),f2);/ S2 r/ G/ {+ E' B n
fclose(f1);5 V7 ]- S: j0 H& E
fclose(f2);' O* M. w( N/ ~; g
}
5 O9 t: e6 x) ^% W$ ]- M2 K 【解】程序在argc小于3时,报告出错信息结束。当argc大于2时,以程序启动时的第一和第二参数为文件名打开文件,井用循环将第一参数的文件内容复制到第二参数的文件。</p> |