软考程序员软考程序员考试必知程序分析题(一)软考程序员考试要求考生能熟练掌握C程序设计语言以及C++、Java中的一种程序设计语言。希赛网为大家整理了一些程序分析题目,供大家参考学习。程序分析题根据以下代码,写出输出结果。1.main(){charstr[]=1234567;inti;for(j=0;i<7;i十=3)printf(%s\n,str+i);}2.structa{charname[10];intage;}aa[3]={{abc,20},{def,21},{ghi,22}};main(){structa*paa=aa;printf(%c%c%c,(*(paa+1)).name[0](*paa++).name[1](*(paa+1)).name[2]);}3.main()软考程序员{intx1,x2,x3,x4;x1=x2=x3=x4=1;switch(x1){case1:switch(x2){case0:x3++;break;case1:x4--;}case2:x3++,x4--;}printf(%d%d,x3,x4);}4.conv(b)intb;{if(b>=2)conv(b/2);printf(%d,b%2);return;}main(){intd;scanf(%d,&d);conv(d);}说明:本程序执行时从键盘上输入:22后跟回车键。软考程序员.voidf(p1,p2)int*p1,*p2;{inti,j;*p2=0;for(i=0;i<3;i++)for(j=i;j<3;j++)*p2+=*(pl+i*3+j);return;}main(){inta[3][3]={{1,2},{3,4},{5,6}};ints;f(a,&s);printf(%d,s);}参考答案与解析1、【参考答案】123456745677【解析】分析份循环语句可知,控制变量i的值只能依次等于0、3、6。再分析输出语句中的输出格式,这是字符串格式,要求输出表达式是存放字符串的首地软考程序员址。而输出表达式是“str+i”。我们针对i不同值来-一分析:i=0,str+0就是str,其中存放的字符串是“1234567”,所以第1行上的输出就是:1234567。当i=3时,str+3,代表了数组元素str[3]的地址,从这儿开始的字符率串是“4567”,所以第2行输出的是:4567。同样道理,i=6时,str+6是元素str[6]的地址,从该地址存放的字符率是7,所以第3行输出的是:7。2、【参考答案】gbf【解析】本程序并不复杂,关键在于如何使用指向结构型数组的指针变量来引用该数组元素,以及如何引用结构型成员是数组的数组元素。首先看结构型a及对应数组aa的定义和赋予的初值。结构型a共有两个成员,一个是字符型数组name,另一个是整型age。结构型数组aa有3个元素,所赋予的初值如下:aa[0].name=abcaa[0].age=20aa[1].name=defaa[1].age=21aa[2].name=ghiaa[2].age=22主函数中的第1个语句是定义结构型指针变量paa,并且使它指向结构型数组aa的首地址。注意,此后的*paa就是aa[0],*(paa+i)就是aa[i]。现在可以分析输出语句了。输出格式是3个字符格式,按照printf()函数的规定,表达式表中表达式计软考程序员算顺序是自右向左进行的,下面依次讨论这3个字符格式对应的输出表达式。第3个输出表达式是“(*(paa十1)).name[2],其中的“*(paa+1)”代表“aa[1]”,所以该表达式就是“aa[1].name[2]”,对应的字符是'f'。第2个输出表达式是(*paa++).name[1]”,其中“*ppa++”的“*”和“++”是同级运算符,结合性是自右向左的,所以“++”先计算,由于是后缀,所以要先计算“*paa”,它代表“aa[0]”,所以该表达式就是“aa[0].name[1]”,对应的字符是'b'。注意,最后要对paa进行“++”运算,使其指向aa[1]。第1个输出表达式是“(*(paa+1)).name[0]”,注意现在的paa以及指向aa[1]了,所以其中的“*(paa+1)”代表“aa[2]”,所以该表达式就是“aa[2].name[0]”,对应的字符是'g'。现在可以得出结论:程序的输出是3个字符:gbf3、【参考答案】2-1。【解析】本题的关键是嵌套的多分支语句switch。注意在执行switch语句前,变量x1、x2、x3、x4已经赋值,他们的值均为1。执行外层switch语句时,用于控制分支选择的变量x1的值为1,所以要执行的是“case1”的分支。该分支又是一个switch语句,用于控制分支选择的变量x2的值为1,所以需要执行的是“case1”的分支。该分支执行的语句是“x4--”,使得x4的值变为软考程序员。接着退出该分支,即退出内层的switch语句。由于外层的switch语句的“case1”分支中没有“break”语句,所以将继续执行其后的“case2”分支,即执行“x3++,x4--;”,结果x3等于2,x4等于-1。再退出外层switch语句,执行输出语句,此时,变量x3的值为2;变量x4的值为-1。所以输出结果是2-1。4、【参考答案】10110。【解析】主函数中输入整数22存入变量d中,然后调用函数。conv()。此时将把实参d中的22传递给形参b。然后再执行函数体,函数体中前面一条语句是单分支语句,当b=2时再用“b/2”调用自己,显然这是一个递归调用的函数。下面我们来详细分析递归调用的过程:第1次调用函数(b=22),满足条件,引起第2次调用自己(b/2=11)第2次调用函数(b=11),满足条件,引起第3次调用自己(b/2=5)第3次调用函数(b=5),满足条件,引起第4次调用自己(b/2=2)第4次调用函数(b=2),满足条件,引起第2次调用自己(b/2=1)第5次调用函数(b=1),不满足条件,执行输出语句,输出结果为b%2=1%2=1执行第5次调用的返回,执行第今次调用时的输软考程序员出语句,输出结果为b%2=2%2=0执行第4次调用的返回,执行第3次调用时的输出语句,输出结果为b%2=5%2=1执行第3次调用的返回,执行第2次调用时的输出语句,输出结果为b%2=11%2=1执行第2次调用的返回,执行第1次调用时的输出语句,输出结果为b%2=22%2=0执行第1次调用的返回,将返回主函数,结束程序的运行。所以程序运行的输出结果是:10110。5、【参考答案】7。【解析】本程序是由一个无返回值的函数f()和主函数组成的。先看主函数,定义了一个3行3列的二维数组a,并且给a赋了初值,初值如下:a[0][0]=1a[0][1]=2a[0][2]=0a[1][0]=3a[1][1]=4a[1][2]=0a[2][0]=5a[2][1]=6a[2][2]=0接着调用无返回值的函数f(),然后输出变量s中的值,显然这个s中的值是在函数f()中获得的。接下来分析函数f()。该函数有两个形参,第1个形参是指针变量p1,对应的实际参数是数组a的首地址,即调用该函数后,指针变量p1是指向二维数组a的首地址。第2个形参也是指针变量p2,对应的实参是变量s的地址,即函数调用后指针变量p2是指向变量s的。软考程序员再来分析函数体。前面定义了两个变量i和j,从后面的循环语句中看出是二重循环的控制变量。接着,通过“*p2=0”,给变量s赋值0。二重for循环的循环体是“*p2+=*(p1+i*3+j)”,其中的“*p2”是代表变量s的,“*(p1+i*3+j)”是代表数组元素a[i][j],这个赋值语句是把a[i][j]加到变量s中(即求数组元素的和)。现在只要分析清楚二重循环是对哪些数组元素进行求和的就可以得出变量s的值了。下面是对二重循环的执行记录:i=0j=0对应a[0][0],其值为1j=1对应a[0][1],其值为2j=2对应a[0][2],其值为0i=1j=1对应a[1][1],其值为4j=2对应a[1][2],其值为0i=2j=2对应a[2][2],其值为0所以,s=a[0][0]+a[0][l]+a[0][2]+a[1][1]+a[2][2]+a[2][2]=1+2+0+4+0+0=7。为了帮助广大考生顺利的通过考试,希赛教育开设了程序员网络直播课堂,网络直播课堂在晚上或者是周末上课,利用工作之外的时间,不耽误上班族工作或者是学生族上课。直播课堂提供录播视频,上课没听懂的内容课后可以反复听来理解。与网络直播课堂配套的还有电子版程序员辅导教材(可做笔记、在线提问)、程序员视频教程、程序员历年考试真题在线测试(测试完有答案及解软考程序员析,平台会记录错题),此外还提供在线答疑,学习过程中有疑问,随时可以在希赛平台提问,有专业老师及时解答。此外,希赛教育于腾讯课堂开设有程序员公开课,有兴趣者皆可免费参加。