全部知识点

第6861题
int x=2;
z=x++-1;

则x的值为_____。

第6862题

已知:

int i=8,j=10,m,n;
m=++i;
n=j++;

问语句执行后m=_____,n=_____。

第6863题

输入整型变量a的值:

int a;
scanf("%d",_____);
第6864题

当a=3,b=2,c=1时,执行以下程序段后a=_____。

if(a>b)
    a=b;
if(b>c)
    b=c;
else c=b;
c=a;
第6865题

表示"x≥y≥z"的C表达式是_____。

第6866题

设x=5>1+2,x的值为_____。

第6867题

若输入字符串:abcde<回车>,则以下while循环体将执行_____次。

while((ch=getchar())=='e')
    printf("*");
第6868题

按内存排列顺序,数组char a[2]中的所有元素是a[0]和_____。

第6869题

若有定义:

char s[]="china";

则C编译系统为数组s开辟_____个字节的内存单元。

第6870题

函数调用语句func((e1,e2),(e3,e4,e5))中含有_____个实参。

第6871题

预处理命令行都必须以_____号开始。

第6872题

将数组a的首地址赋给指针变量p的语句是_____。

第6873题

设有以下共用体类型说明和变量定义,则变量c在内存所占字节数是_____。

union stud
{
    short int num;
    char name[10];
    float score[5];
    double ave;
}
c;
第6874题

功能:统计出若干个学生的平均成绩,最高分以及得最高分的人数。

例如:输入10名学生的成绩分别为92 87 68 56 92 84 67 75 92 66,则输出平均成绩为77.9,最高分为92,得最高分的人数为3人。

#include<stdio.h>
float max=0;
int j=0;
float fun(float array[],int n)
{
    int i;
    float sum=0,ave;
    _____1_____
    for(_____2_____)
    {
        if(_____3_____)
            _____4_____
        _____5_____
    }
    _____6_____
    for(_____7_____)
        if(_____8_____)
            _____9_____
    _____10_____
}
TestFunc()
{
    FILE *IN,*OUT;
    float iIN[10],iOUT;
    int iCOUNT;
    IN=fopen("in.dat","r");
    if(IN==NULL)
    {
        printf("Please Verify The Currernt Dir..It May Be Changed");
    }
    OUT=fopen("out.dat","w");
    if(OUT==NULL)
    {
        printf("Please Verify The Current Dir.. It May Be Changed");
    }
    for(iCOUNT=0;iCOUNT<10;iCOUNT++)
        fscanf(IN,"%f",&iIN[iCOUNT]);
    iOUT=fun(iIN,10);
    fprintf(OUT,"%f %f\n",iOUT,max);
    fclose(IN);
    fclose(OUT);
}
void main()
{
    float  a[10],ave;
    int i=0;
    for(i=0;i<10;i++)
        scanf("%f",&a[i]);
    ave=fun(a,10);
    printf("ave=%4.1f\n",ave);
    printf("max=%4.1f\n",max);
    printf("Total:%d\n",j);
    TestFunc();
}
第6875题

(13分)对于有向图,如果一个顶点的出度大于入度,则这个顶点称为K页点,有向图用邻接矩阵存储,数据结构定义如下:

typedef struct{
int numVertex, numEdge;//顶点数,边数
char VertexList[MAXV];//顶点表
int Edge[MAXV][MAXV];//邻接矩阵
}MGraph;

要求实现函数int printVertices(MGraph G),输出有向图中所有K页点,并返回K顶点的总数

(1)说明算法思想(占5-6分)

(2)用C/C++实现算法(占7-8分)


[

第6876题

(10分)在进行外部排序时,可使用置换-选择排序生成初始归并段。内存工作区可存储n个记录,某文件含 n 个记录。

(1)若n=19,m=4。文件记录关键字为:51,94,37,92,14,63,15,99.48,56,23,60,31,17,43,8,90,166,100。使用置换-选择排序,可生成几个初始归并段?每个归并段各是什么?

(2)对于任意 m(n>>m>0),使用置换-选择排序生成第一个初始归并段的最大可能长度、最小可能长度分别是?


[

第6877题

(14分)某机器字长为32位的计算机M,采用请求调页存储管理。虚拟地址32位,页面大小4KB。Cache采用4路组相联映射,内存块大小为32B,Cache数据区大小为8KB。二维数组int a[24][64]按行优先存储,数组的起始虚拟地址为0042 2000H。数组a的数据初始时未调入内存,按如下方式访问数组a:

for (int i=0;i<24; i++)
for (int j=0;j<64; j++)
a[i][j]=10;

(1)数组a分为几个页面存储?访问数组a 缺页几次?页故障地址各是什么?

(2)不考虑对变量i,j的访问,访问数组 a 的过程是否具有时间局部性?为什么?

(3)在计算机M的32位地址中,块内地址是哪几位? Cache组号是哪几位?数组元素a[1][0]的虚拟地址是什么?对应的Cache组号是什么?

(4)数组a总共占多少块?访问a的Cache 命中率是多少?若采用如下方式访问数组a,则命中率又是多少?

for (int j=0;j<64;j++)
for (int i=0; i<24; i++)
a[i][j]=10;

[

第6878题

(9分)43题的C语言代码,对应的机器级代码如下,请回答问题。

for(int i=0;i<24;i++)
1   00401070     C7...     mov[ebp-8],0
2   00401079     EB 09   jmp 00401084h
3   0040107B     8B 55 F8   mov eax,[ebp-8]
...  ...                    ...              ...
7   00401088     7D32    jpe 004010bch
for(int j=0;j<64;j++)
8   0040108A     C7 45...      mov[ebp-4],0
...   ...                   ...               ...
a[i][j]=10;
...   ...                   ...               ...
19  004010AE     C7 84 82 00 20 42 00 0A 00 00 00 mov[ecx+edx*4+00422000h],0Ah
20  ...                   ...

(1)第20条指令的虚拟地址是什么?

(2)第2条指令jmp的操作码是 EBH,它的转移目标地址是00401084h。第7条指令jge的操作码是7DH,它的转移目标地址是 004010bch。这两条指令分别采用什么寻址方式?请给出jmp 指今的转移目标地址计算过程

(3)第19条指令,实现了adll-10该指今的源操作数采用什么寻址方式?已知edx 存放的值,ecx存放的是什么?该系统采用大端还是小端存储?

(4)第一次取第19条指令时,是否发生缺页?为什么?


[

第6879题

(7分)采用swap 指今实现进程互斥。lock为TRUE时,不可进入临界区; lock 为FALSE 时,可以进入临界区。某学生写的代码如下:

bool lock = FAlSE;//共享变量
......
// 进入区
bool key = TRUE;
if (key == TRUE)
     swap (key,lock);
// 临界区
......
// 退出区
lock=TRUE;
......
newSwap (boola, bool *b){
       bool temp =*a;
       *a=*b;
       *b=temp;
}

(1)请修改代码,正确实现互斥(不增加语句条数)

(2)是否可以用函数newSwap(&a&b)代替swap 指令?为什么?


[

第6880题

(8分)进程P通过系统调用请求从键盘读入一个字符。题目乱序给出6个处理步骤:1.将进程P插入就绪队列,2.将进程插入阻塞队列,3.将字符从键盘控制器读入系统缓冲区,4.启动中断处理程序,5.系统调用返回,6.用户通过键盘输入字符。

(1)1.的前、后分别是哪个步骤? 6.的后面是什么步聚?

(2)哪个步骤一定会使CPU从P进程切换到其他进程?哪个步骤之后调度器可以调度进程p?(3)哪个步骤是由键键盘驱动程序完成的?

(4)中断处理时,进程P是什么状态? CPU处于内核态还是用户态?


[参考管案]

(1)1的前面是3(1分)

1的后面是5(1分)

6的后面是4(1分)

(2)2使得CPU从进程P切换为其他进程 (1分)

1之后调度器可以调廉进程P (1分)

(3)3由键盘驱动程序完成(1分)

(4)中断处理时,进程P处于阻塞态(1分)

CPU处于内核态(1分)

[解析]6个步骤的处理序是: 2 6 4 3 1 5