山麓 发表于 2005-6-3 16:47:24

ZT   二级C语言典型题解析

1 有以下程序 <br>
<br>void f(int a[], int i, int j) <br>
<br>{ int t; <br>
<br>if(i&lt;j) <br>
<br>{ t=a<i>; a<i>=a; a=t; <br>
<br>f(a,i+1,j-1); <br>
<br>} <br>
<br>} <br>
<br>main() <br>
<br>{ int i, aa={1,2,3,4,5}; <br>
<br>f(aa,0,4); <br>
<br>for(i=0; i&lt;5; i++) printf(&quot;%d,&quot;,aa<i>);printf(&quot;\n&quot;); <br>
<br>} <br>
<br>执行后输出结果是 <br>
<br>
A)5,4,3,2,1, B)5,2,3,4,1, C)1,2,3,4,5, D)1,5,4,3,2, <br><br>
答案:A <br>
解析:f(aa,0,4)调用是地址双向传递.i=0,j=4,交换aa=、aa的值使aa={5,4,3,2,1};接着递归调用f(a,i+1,j-1)即f(a,1,3),交换aa、aa=的值使aa={5,4,3,2,1};接着递归调用f(a,i+1,j-1)即f(a,2,2),由于i=j=2,退出函数调用,依次输出aa的数组元素为&quot;5,4,3,2,1,&quot; <br><br>
<br>
<br>
2 有以下程序 <br>
<br>struct STU <br>
<br>{ char name; <br>
<br>&amp;nb<br>
<br>
sp; int num; <br>
<br>int Score; <br>
<br>}; <br>
<br>main() <br>
<br>{ struct STU s={{&quot;YangSan&quot;, 20041, 703},{&quot;LiSiGuo&quot;, 20042, 580}, <br>
<br>{&quot;WangYin&quot;, 20043, 680},{&quot;SunDan&quot;, 20044, 550}, <br>
<br>{&quot;Penghua&quot;, 20045, 537}}, *p, *t; <br>
<br>int i,j; <br>
<br>for(i=0; i&lt;5; i++) p<i>=&amp;s<i>; <br>
<br>for(i=0; i&lt;4; i++) <br>
<br>for(j=i+1; j&lt;5; j++) <br>
<br>if(p<i>-&gt;Score &gt; p-&gt;Score) <br>
<br>{ t=p<i>; p<i>=p; p=t;} <br>
<br>printf(&quot;%d %d\n&quot;, s.Score, p-&gt;Score); <br>
<br>}&amp;<br>
<br>
nbsp; <br>
<br>执行后输出结果是 <br>
<br>
A)550 550 B)680 680 C)580 550 D)580 680 <br><br>
答案:C <br>
解析:本题算法类似于&quot;冒泡排序&quot;,它是依次将p、p、p、p、p分别指向s中成员Score从低到高排列的数组单元,即537、550、580、680、703,而s数组的值不变,因此,s.Score=580,p-&gt;Score=550. <br>
<br>
3 有以下程序(提示:程序中fseek(fp, -2L*sizeof(int), SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节) <br>
<br>#include &lt;stdio.h&gt; <br>
<br>main() <br>
<br>{ FILE *fp; int i, a={1,2,3,4},b; <br>
<br>fp=fopen(&quot;data.dat&quot;, &quot;wb&quot;); <br>
<br>for(i=0;i&lt;4;i++) fwrite(&amp;a<i>,sizeof(int),1, fp); <br>
<br>fclose(fp); <br>
<br>fp=fopen(&quot;data.dat&quot;, &quot;rb&quot;); <br>
<br>fseek(fp, -2L*sizeof(int), SEEK_END); <br>
<br>fread(&amp;b, sizeof(int), 1, fp); /* 从文件中读取sizeof(int)字节的数据到变量b中*/ <br>
<br>fclose(fp); <br>
<br>printf(&quot;%d\n&quot;, b); <br>
<br>} <br>
<br>执行后输出结果是 A)2 B)1 C)4 D)3 <br><br>
答案:D <br>
解析:本程序先是建立一个二进制文件data.dat,并从数组a中取出四个整型变量数据块写入该文件,从该文件中位置指针处开始取一个整型变量数据块给变量b即b=3. <br>
<br>
<br>
<br><br>
<br>
</i></i></i></i></i></i></i></i></i>

潜川 发表于 2005-6-7 15:05:34

re:解析都是对的,但是程序写的有问题,如果第...

解析都是对的,但是程序写的有问题,如果第一个运行的话会core掉的,一个是数组,一个是固定值不可以赋值的。类型不匹配。要做修改的!<br>
估计是从树上或者其他文章上复制过来的吧。你可以在机器上执行一下试试看!
页: [1]
查看完整版本: ZT   二级C语言典型题解析