06级C语言答案
吉林大学计算机学院2006级《高级语言程序设计》试题评分标准一.简答题(30分每题5分)1.顺序——1分,分支——2分,循环——2分2.S→A∣HT∣HLT——2分L→D∣LD——2分A→2∣4∣6∣8——余下1分B→3∣5∣7∣9D→A∣B∣0∣1H→A∣BT→A∣03.请分别写出下列条件的逻辑表达式①m是不小于n的奇数(m>=n)&&(m%2==1)——2分②ch只能表示所有的小写字母(ch<=’z’)&&(ch>=’a’)——2分③指针p不是空指针(p!=NULL)或(p!=0)——1分4.请判断如下语句是否正确①charstr[20]=”Iamateacher”;正确——1分②char*str=”Iamastudent”;正确——1分③charstr[20];错误——1分str=”Iamastudent”;④char*str;错误——1分scanf(“%s”,str);⑤charstr0[20],*str1=”Iamateacher”正确——1分5.已知char*aptr[3][2]={“abc”,”def”,”ghi”,”jkl”,”mno”,”pqr”},请给出如下表达式代表的意义:①aptr[1][0]字符串“ghi”或字符g的地址——1分②***(aptr+2)字符m——1分③(**(aptr+1))[1]字符i——1分④*((*aptr)+1)字符串“def”或字符d的地址——1分⑤*(aptr[1][3]+2)字符r——1分6.如下图所示树,请分别写出对此树前序、中序、后序遍历所得表达式①前序÷-A+BC×-EFD——2分②中序A-B+C÷E-F×D——1分③后序ABC+-EF-D×÷——2分÷-×A+D-BCEF第4页共4页n一.(10分)编写函数,计算数列的前n项和。例如当n=5时S(5)=函数声明——2分逻辑结构——6分返回语句——2分floatS(intn){intk,sign=1;floatr=0;for(k=1;k<=n;k++){r+=sign/k;sign=-sign;}returnr;}二.(10分)编写函数,判断给定的整数矩阵是否关于主对角线对称函数声明——2分逻辑结构——6分返回语句——2分boolisSym(intn,inta[]){inti,j;for(i=0;i
s2时,返回1;当s1*str2)return1;elseif(*str1<*str2)return-1;}while(*(str1++)!=' '&&*(str2++)!=' ');if(*str1==' '&&*str2==' ')return0;elseif(*str1!=' ')return1;elsereturn-1;}第4页共4页n一.(15分)编写函数,计算如下多项式的第n项值函数声明——2分逻辑结构——10分返回语句——3分递归方法或迭代方法intH(intx,intn){if(n==0)return1;if(n==1)return2*x;return(2*x*H(x,n-1)-2*(n-1)*H(x,n-2));}intH(intx,intn){inth0,h1,h2;h0=1;h1=2*x;if(n==0)returnh0;if(n==1)returnh1;for(inti=2;i<=n;i++){h2=2*x*h1-2*(i-1)*h0;h0=h1;h1=h2;}returnh2;}二.(20分)把一个由数字和字母构成的字符串用单向链表存储,每个结点存储一个字符,请完成如下功能:1.请给出节点的数据类型的定义2.编写一个函数将链表中的所有数字串到前面,而字母串到后面,且数字与数字、字母与字母之间的相对顺序不变。例如:存储字符串”1Ba43”的链表结构如下,1Ba43·经过此操作变为143Ba·类型定义5分,函数声明3分,逻辑结构12分,1.structitem{charch;structitem*next;};2.typedefstructitem*pitem;pitemfilter(pitemhead){第4页共4页npitemp0,p,p1;//p0数字串首即哨兵变量,p数字串尾,pitemq0,q,q1;//q0字母串首,q数字串尾pitemtmp,r;//tmp中间变量,r保存结果p0=(pitem)malloc(sizeof(structitem));//哨兵变量p0->next=head;//从整串首开始,使得p第一组连续数字的尾,p1是第一个字母的位置p=p0;p1=head;while((p1->ch<='9')&&(p1->ch>='0')){p=p->next;p1=p1->next;}//整串查找,使得q是第一组连续字母的尾,q1是其后面的元素q0=p1;q=p;q1=p1;while((q1->ch<='z')&&(q1->ch>='a')||(q1->ch<='A')&&(q1->ch>='Z')){q=q->next;q1=q1->next;}tmp=q1;while(tmp!=NULL){//从tmp开始寻找后面的数字项,将其插入到p后面,直到tmp为空if((tmp->ch<='9')&&(tmp->ch>='0')){p->next=tmp;p=tmp;q->next=tmp->next;tmp=tmp->next;}else{//否则是字母项,字母串尾后移q=q->next;tmp=tmp->next;}}p->next=q0;//将数字串和字母串联起来r=p0->next;free(p0);//删除哨兵returnr;//返回结果}第4页共4页