问题 单项选择题

程序中已构成如下图所示的不带头结点的单向链表结构,指针变量s、p、q均已正确定义,并用于指向链表结点,指针变量S总是作为头指针指向链表的第一个结点。

若有以下程序段 q=S; S=S->next;P=S;while(P->next)P=P->next;P->next=q; q->next=NULL; 该程序段实现的功能是【 】。

A.首结点成为尾结点

B.尾结点成为首结点

C.删除首结点

D.删除尾结点

答案

参考答案:B

解析:该程序段首先让q指向链表的首结点,s指向链表的第二结点b,p此时指向a结点。然后在循环中让p指向链表的最后一个结点c,并让结点c指向a结点,最终实现链表的尾结点成为首结点。

多项选择题

已知数据文件m14.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数JsVal(),其功能是:把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的百位数字),如果新组成两个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数,同时两个新十位数字均不为零,则将满足此条件的4位数按从大到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数cnt,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUTl4.DAT文件中。
程序中已定义数组:a[200],b[200],已定义变量:cnt。
请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。
试题程序:
#include〈stdio.h>
#define MAX 200
int a[MAX], b[MAX],cnt=0;

void jsVal()



void readDat()

int i;
FILE *fp;
fp = fopen("IN14.DAT", "r");
for(i = 0; i 〈MAX; i++)
fscanf(fp, "%d", &a[i]);
fclose (fp);
main ( )

int i;
readDat ();
jsVal ();
printf("满足条件的数=%d\n", cnt);
for(i = 0; i 〈cnt; i++)
printf("%d", b[i]);
printf("\n");
writeDat ();
writeDat ()

FILE *fp;
int i;
fp = fopen("OUT14.DAT", "w");
fprintf(fp, "%d\n", cnt);
for(i = 0; i 〈cnt; i++)
fprintf(fp, "%d\n", b[i]);
fclose (fp);

判断题