软件工程硕士专业学位入学考试模拟题答案[C语言程序设计30分]一.填空题(每空2分,共12分)第1页共5页1.读程序,写出运行结果。voidmain(){intm=12,n=34;printf("%d%d",m++,++n);printf("%d%d\n",n++,++m);}运行结果:123535142.读程序,写出运行结果。voidmain(){inta=2,b=-1,c=2;if(a>b)if(b>0)c=0;elsec++;printf("%d\n",c);}运行结果:33.读程序,写出运行结果。voidmain(){intp[7]={11,13,14,15,16,17,18};inti=0,k=0;while(i<7&&p[i]%2){k=k+p[i];i++;}printf("%d\n",k);}运行结果:245.读程序,写出运行结果。#defineMIN(x,y)(x)<(y)?(x):(y)voidmain(){inta=5,b=2,c=3,d=3,t;t=MIN(a+b,c+d)*7;printf("%d\n",t);}运行结果:426.读程序,写出运行结果。voidmain(){char*p1,*p2;charstr[50]="ABCDEFG";p1="abcd";p2="efgh";strcpy(str+1,p2+1);strcpy(str+3,p1+3);printf("%s",str);}运行结果:Afgd4.读程序,写出运行结果。voidmain(){charstr[]="xyz",*ps=str;while(*ps)ps++;for(ps--;ps-str>=0;ps--)printf("%s",ps);}运行结果:zyzxyz二.程序设计(共18分)1.(8分)编程打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。voidmain(){inti,j,k,n;for(n=100;n<1000;n++){i=n/100;j=n/10%10;k=n%10;if(i*100+j*10+k==i*i*i+j*j*j+k*k*k){printf("%d\n",n);}}}2.(10分)文件操作是C语言中的重要操作之一,试编写程序,将C盘根目录下的文件file1.c的内容输出到屏幕上并复制到C盘根目录下文件file2.c中。#includevoidmain(){FILE*fp1=fopen("c:\\file1.c","r");FILE*fp2=fopen("c:\\file2.c","w");while(!feof(fp1))putchar(getc(fp1));fseek(fp1,0,SEEK_SET);while(!feof(fp1))putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);}第2页共5页[算法30分]三.(10)链表是计算机中常用的一种数据结构,它可以方便的对离散数据进行组织。请用C语言编写链表查找算法。设链表结点定义如下:typedefstruct_listnode{intValue;_listnode*pNext;}ListNode;请编写函数,把值为特定值的结点都删除。函数定义如下:intDeleteNode(ListNode*pHead,intVal)函数的输入参数为链表的头结点和要删除的值。返回值为删除的元素个数。intDeleteNode(ListNode*&pHead,intVal){inti=0;while(pHead&&pHead->pNext){if(pHead->pNext->Value==Val){i++;ListNode*pThis=pHead->pNext;pHead->pNext=pThis->pNext;//free(pThis);}pHead=pHead->pNext;}returni;}四.(10)字符串操作是计算机程序设计中经常需要面对的问题。请使用C语言编写算法,有两个字符串由不同的字母组成,一长一短,长的为A短的为B。设计一个算法,如果所有在B中出现的字符都在A中出现,则返回true,否则返回false。例子:如下字符串:字符串A:abddfdioegdddffsfagj字符串B:dofsjadg字符串B中每个字符都在A中出现,返回TRUE。如下字符串:字符串A:aaaabbbbbbdddddd字符串B:acc字符串B中有字符没在A中出现,返回FALSE。设函数原型为BOOLStrContain(char*a,char*b)boolStrContain(char*a,char*b){第3页共5页while(*b){char*p=a;while(*p){if(*b==*p)break;p++;}if(*p==0)returnfalse;b++;}returntrue;}五.(10)递归是算法中最常用的思想之一。利用递归往往可以把复杂问题简单化。请编写递归算法,把单链表逆序输出。单链表的定义与第三题一致。函数原型为:voidReverseLink(ListNode*pHead);其中pHead为指向链表第一个元素的指针。voidReverseLink(ListNode*pHead){if(pHead){ReverseLink(pHead->pNext);printf(“%d\n”,pHead->Value);}}[离散数学40分]六.(8分)用真值表判断下列公式是恒真?恒假?┐P→(P→Q)答案:PQP→Q┐P┐P→(P→Q)TTTFTTFFFTFTTTTFFTTT所以恒真七.(8分)证明下面的逻辑等价式:答案:八.(8分)将下面命题符号化:小王或小李中的一人是班长。第4页共5页答案:设:F(x)为x犯错误,M(x)为x是人。原语句化为┐(ヨx(M(x)Λ┐F(x)))九.(8分)设R1,R2都是整数集上的关系,且xR1yx+y=10xR2y|x-y|=1判断R1与R2是否自反、反自反、对称、反对称、传递。自反反自反对称反对称传递R1R2自反反自反对称反对称传递R1nonoyesnonoR2noyesyesnono十.(8分)画出集合{1,2,3,4,5,6,7,8,9}关于整除关系的哈斯图,并指出它的极小元,最小元,极大元,最大元。答案:极小元、最小元是1,极大元是5,6,7,8,9,没有最大元素第5页共5页