首页

软考 - 初级_程序员

类型:
选择方向:
选择考试:
题型:
为你找到 191 个题目。

() 试题三(共15分)
  阅读以下说明和C语言函数,将应填入 (n) 处的宇句写在答题纸的对应栏内。
【说明】
  函数bool Del_elem(STACK *s,char para_ch)的功能是:删除栈*s中与para_ch之值相等且最接近栈项的元素(字符),若栈中不存在该元素,则函数返回FALSE,否则返回TRUE。其中,STACK是栈的类型名。
  函数Del_elem实现上述功能的方法是:利用栈的基本操作,先将栈*s中所有比para_ch之值更接近栈顶的元素暂时存放在临时工作栈s_bak中,使得与para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与para_ch之值相等的元素,最后再将s_bak中的元素依次存回栈*S。
  在函数Del_elem中必须使用栈的基本操作进行栈上的运算,实现栈的基本操作的函数原型说明如下:
  void InitStack(STACK *S):初始化栈。
  void Push(STACK *S,char e):将一个字符压栈,栈中元素数目增1。
  void Pop(STACK *S):栈顶元素出栈,栈中元素数目减1。
  char Top(STACK S):返回非空栈的栈顶元素值,栈中元素数目不变。
  bool IsEmpty(STACK s):若S是空栈,则返回TRUE;否则返回FALSE。
 
  bool类型定义如下:
  typedef enum {FALSE = 0,TRUE = 1} bool;

【C语言函数】
  bool Del_elem(STACK *s,char para_ch)
  {
    STACK s_bak;    /*定义临时工作栈s_bak*/
    char  ch;
    bool tag = FALSE;
    (1) ;     /*中初始化临时工作栈s_bak*/
 
  /*中将栈*s中所有比para_ch更接近栈顶的元素暂时存放在临时工作栈s_bak中*/
    while(!IsEmpty(*S)) {
    ch = (2) ;    /*取栈顶元素*/
    Pop(s);
    if (ch == para_ch) {
    tag = TRUE;
    break;
    }
    (3)      ;
  }
 
  /*将暂存于临时工作栈s_bak中的元素存回栈*S */
    while (   (4)   ) {
    ch = Top(s_bak);
    (5)  ;
    Push(s, ch);
  }
 
    return tag;
 
  }

() (共15分)
  阅读以下说明和C语言函数,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
  函数change(int num)的功能是对四位以内(含四位)的十进制正整数num进行如下的变换:将num的每一位数字重复一次,并返回变换结果。例如,若nun = 5234,则函数的返回值为55223344,其变换过程可描述为:
  (4*10+4)* 1 +(3*10+3)*100 + (2*10+2)*10000 + (5*10+5)*1000000 = 55223344
 

【C语言函数】
  long change(int num)
   {
    int d, m = num;
    long result,mul;
    if(num <= 0 ||  (1) ) /*卡若num不大于0或num的位数大于4,则返回-1*/
    return -1;
    mul = 1;
        (2) ;
   while (m > 0) {
    d = m % lO;
    m = (3) ;
   result = result + ( (4) ) * mul;
    mul = (5)  ;
   }
  return result;
   }

() (共15分)
  阅读以下说明和流程图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
  信息处理过程中经常需要将图片或汉字点阵做旋转处理。一个矩阵以顺时针方向旋转90°后可以形成另一个矩阵,如下图所示:


  流程图1-1描述了对n*n矩阵的某种处理。流程图1-2是将矩阵A顺时针旋转90°形成矩阵B的具体算法。

 

【问题1】(3分)请写出以下3*3单位矩阵沿顺时针方向旋转90°后所形成的矩阵。

 

【问题2】(3分)如果以下3*3矩阵沿顺时针方向旋转90°后所形成的矩阵就是原来的
矩阵: 其中,位于*处的元素需要考生填写,请完整地写出该矩阵。
【问题3】(9分)在上述流程图1-1和1-2的算法中,
(1)矩阵A第i行第j列的元素A(i,j)被复制到矩阵B中的哪个位置?
(2)A(i,j)后来又被复制到矩阵C中的哪个位置?
(3)填补流程图1-2中的空缺。

() (共15分)
    阅读以下说明和Java程序代码,将应填入(n)处的字句写在答题纸的对
【说明】
    在下面的Java程序代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDecorator与FootDecorator分别完成打印票据的台头和脚注的功能。
    己知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。
    这是票据的台头!
    这是票据正文!
    这是票据的脚注!
---------------------------------------------
    这是票据的台头!
    这是票据的脚注!
 
 

【Java程序代码】
public class SalesTicket{
    public void printTicket(){
    System. out. println(“这是票据正文!” );
    }

public class Decorator extends SalesTicket{
    SalesTicket ticket;
    publi。Decorator(SalesTicket t){
  ticket = t;
    }
    public void printTicket(){
  if(ticket != null)
    ticket.printTicket();
    }

public class HeadDecorator extends Decorator{
    public HeadDecorator(SalesTicket t){
     (1)   ;
    }
    public void printTicket(){
    System. out. println(“这是票据的台头!”);
    super.printTicket();
    }

Public class FootDecorator extends Decorator{
    public FootDecorator(SalesTicket t){
   (2)   ;
  }
    public void printTicket(){
  super.printTicket();
    System. out. println(“这是票据的脚注!”);
    }

public class Main{
    public static void main (String[ ] args){
    T = new HeadDecorator(   (3)   );
    T.   (4)   ;
    System. out.println(”-------------------------------”);
    T = new FootDecorator(   (5)  );
    T.printTicket();
    }


    阅读以下应用说明以及用Visual Basic编写的程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
【应用说明】
某应用程序用于监测某种设备的工作温度(20~200度),其运行窗口中,包括一个温度计(矩形形状shpMeter)以及其中指示当前设备温度的水银柱(矩形形状shpT),文字标签标记了温度刻度;另有一个图片框picCurve,用于动态描述检测到的温度曲线(用户见到的曲线与水银柱等高变化);命令按钮“开始检测”(cmdStart)用于启动温度检测,命令按钮“暂停检测”(cmdStop)用于暂停检测。
    矩形形状shpT(水银柱)属性visible初始设置为不可见,属性Filltype设置为solid(实心),FillColor设置为红色;图片框picCurve的属性AutoRedraw设置为True;再创建一个定时器TimT,属性Enabled初始设置为False(不起作用),属性Interval(定时间隔)设置为500毫秒。
    为模拟设备温度的检测,程序中利用了(0,1)之间均匀分布的伪随机数获得[20,200]之间的随机温度T。为了便于在图片框picCurve中绘制曲线,程序中对该图片框建立了坐标系统,左上角为原点(0, 0),水平向右方向为X轴,垂直向下方向为Y轴,右下角坐标为(50, 180)。为了便于观察记录的温度值,图片框中从上到下创建了5条水平线Ls(i),i=0,1, …4,并在程序中按等间隔排列进行位置设置。程序中每隔半秒算出曲线点(x, y),其中x=0, 1, 2,…,再用直线段连接各相邻曲线点形成温度曲线。


 

【Visual Basic程序代码】
Dim  (1)  As Integer    ‘声明全局变量
Private Sub CmdStart Click()
  TimT. Enabled = True
  ShpT. Visible = True
End Sub
Private Sub CmdStop__Click()
    TimT. Enabled=False
End Sub
Private Sub Form_Load()
    Dim i,H As Integer
    PicCurve.Scale (0,0)一(50,180) ‘设置图片框坐标系:左上角一右下角
    H = 30    ‘H等于图片框高度的六分之一
    For i = 0 To 4 ‘设置5条水平线Ls(i)的位置
  Ls(i).Xl=0    ‘Ls(i)起点横坐标
  Ls(i).Y1=H* (2)  ‘Ls(i)起点纵坐标
  Ls(i).X2=50  ‘Ls(i)终点横坐标
  Ls(i).Y2=Ls(i).Y1    ‘Ls(i)终点纵坐标
  Ls(i).BorderColor=&HC0C0C0  ‘设置水平线颜色
    Next i
    x=0  ‘设置曲线坐标初值
End Sub
Private Sub timT Timer()
  Dim T, H As Integer    ‘T为即时温度,H为图片框中温度点显示高度
    T=Int(Rnd*181)+20   ‘模拟随机产生设备温度(20-200度)
按当前温度显示水银柱
  H=ShpMeter.Height*  (3)    ‘算出水银柱的高度
  ShpT. Top=  (4)   - H   ‘设置水银柱顶部位置
  ShpT. Height=H    ‘设置水银柱的高度
绘制温度曲线
  y=   (5)      ‘算出曲线上当前点的纵坐标
    If x=51 Then  ‘当超出图片框时
  PicCurve. Cls   ‘清除图片框内以前画的曲线
  x = 0    ‘设置重画曲线的初值
    ElseIf x > 0 Then    ‘除左边点外
  PicCurve. Line(x-1, Lasty)-(x, y),vbRed 由前1点到当前点画红色线段
    End If
    x = x + 1    ‘准备下一点坐标
  Lasty = y    ‘保存当前坐标供下次使用
End Sub

() (共15分)
    阅读以下说明和C++程序代码,将应填入一丛皿一处的字句写在答题纸的对应栏内。
【说明】
    在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDecorator与FootDecorator分别完成打印票据的台头和脚注的功能。己知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。
    这是票据的台头!
    这是票据正文!
这是票据的脚注!
---------------------
    这是票据的台头!
    这是票据的脚注!
 

【C++程序代码】
#include
using namespace std;
 
class SalesTicket{
public:
       (1)    printTicket(){cout <<”这是票据正文!” << endl;}
};
class Decorator : public SalesTicket{
    SalesTicket *ticket;
public:
    Decorator(SalesTicket *t){ticket = t;}
    void printTicket ( ){
    if(ticket! = NULL)
    ticket->printTicket ( ) ;
    }
};
class HeadDecorator : public Decorator{
public:
    HeadDecorator(SalesTicket *t) :  (2)  {}
    void printTicket(){
    cout << “这是票据的台头!” << endl;
    Decorator :: printTicket();
    }
};
class FootDecorator:public Decorator{
  public:
  FootDecorator(SalesTicket *t) :    (3)   {}
  void printTicket(){
    Decorator::printTicket():
    cout << “这是票据的脚注!” << endl;
    }
};
void main (void){
    SalesTicket t;
    FootDecorator f(&t):
    HeadDecorator h(   (4)   ):
    h. printTicket():
    cout << “------------------------------” << endl;
    FootDecorator a(NULL);
    HeadDecorator b(   (5)   );
    b .printTicket();

() (共15分)
    阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
    某班级有N名学生,他们可根据自己的情况选修名称和数量不尽相同的课程。设N等于6,学生信息、所选课程及成绩用链表结构存储,如图5-1所示。

    程序中相应的类型定义如下:
    #define  N  6
    struct node{
    char cname [5];  /*课程名*/
    int grade;  /*成绩*/
    struct node *next;  /*指针,指示某学生选修的下一门课程及成绩*/
    };
    struct student{
    char xh[5];  /*学号*/
    char name[20];  /*姓名*/
    struct node *link;  /*指针,指示出选修的课程及成绩链表*/
    }stud-info[N];
    stud_info[] 为一个全局数组。
   函数func(char kc[],int *num)的功能是统计选修了课程名为kc的学生的人数,并返回该课程的平均成绩(若无人选修该课程,则平均成绩为0),参数num带回选修课程kc的学生人数。
 

【C函数】
double func (char kc[] , int *num)

  int i , count = 0, sum = 0; /*count用于记录选修课程名为kc的学生的人数*/
    double avg = 0.0;
    struct node *p;
    for(i = 0 ; i<N ; i++){
  p = (1) ;  /* 取第i个学生所修课程链表的头指针 */
  while (p){
    if((2)){
    sum = (3);
  count++;
    break;;
    }/* if*/
    p = p->next;
  }/*while*/
  }
  (4)   ;
  if((5))
avg =(double)sum / count;   /*计算平均成绩*/
  return avg;
}/*func*/

() 〔共15分)
    阅读以下应用说明以及用Visual Basic编写的程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
【应用4.1
    设应用程序的运行窗口内有一个文字标签(Label)以及一个框架,其中有三个复选框(chkl,chk2,chk3 ),各个复选框单击事件过程的程序代码如下:
  Private Sub chkl Click()
    Label.fontBold = chkl.Value
  End Sub
  Private Sub chk2 Click()
    Label.fontItalic = chk2.Value
  End Sub
  Private Sub chk3 Click()
    Label.fontUnderLine = chk3.Value
  End Sub
    三个复选框chkl、chk2、chk3的功能分别是:(l )
【应用4.2
    设应用程序的运行窗口内有两个文本框Txt 1和Txt2,其初始内容为空。在Txt 1文本框中输入一个数值,当光标离开此文本框(例如进入文本框Txt2 )时,执行的程序代码如下:
  Private Sub Txtl_LostFocus()
  dim x as double
  x = Val(Txtl.Text)
  If x<0 Or x>100 Then
    Txtl.Text = “ ”
    MsgBox$(“请重新输入!”)
    Txtl.SetFocus
  Else
    Txt2.Text = Txtl.Text
  End If
    End Sub
    该程序代码的功能是:若在文本框Txt1中输入的数值小于0或大于100,当光标离开此文本框时,(2) ;否则,将其值复制到文本框Txt2中。
【应用4.3
在下面的应用中,当窗口内发生Click事件时,窗口内将显示如图4-1所示的杨辉三角形(每一行都是三项式展开的系数)。请完善程序代码。
 

Private Sub Form Click()
    Dim i , j , c  As Integer , StrTemp As String
    Dim a(9) As Integer
    a(0) = 0 : a(1) = 1 : StrTemp = Str(a(1)) + Space(3)
    CurrentX = (ScaleWidth一TextWidth(StrTemp))/2
    Print StrTemp
    For j = 2 To 9
  a(j)= 1
  For c =  j-1 To 2 Step - 1
   a(c) = (3)
  Next
    (4)  = “”
  For c = 1 To j
    StrTemp = StrTemp & Str((5))& Space (5 - Len (Str (a (c))))
  Next
  CurrentX =(ScaleWidth一TextWidth(StrTemp))/ 2
  Print StrTemp
    Next
End Sub

() 〔共15分)
    阅读以下应用说明以及用Visual Basic编写的程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
【应用4.1
    设应用程序的运行窗口内有一个文字标签(Label)以及一个框架,其中有三个复选框(chkl,chk2,chk3 ),各个复选框单击事件过程的程序代码如下:
  Private Sub chkl Click()
    Label.fontBold = chkl.Value
  End Sub
  Private Sub chk2 Click()
    Label.fontItalic = chk2.Value
  End Sub
  Private Sub chk3 Click()
    Label.fontUnderLine = chk3.Value
  End Sub
    三个复选框chkl、chk2、chk3的功能分别是:(l )
【应用4.2
    设应用程序的运行窗口内有两个文本框Txt 1和Txt2,其初始内容为空。在Txt 1文本框中输入一个数值,当光标离开此文本框(例如进入文本框Txt2 )时,执行的程序代码如下:
  Private Sub Txtl_LostFocus()
  dim x as double
  x = Val(Txtl.Text)
  If x<0 Or x>100 Then
    Txtl.Text = “ ”
    MsgBox$(“请重新输入!”)
    Txtl.SetFocus
  Else
    Txt2.Text = Txtl.Text
  End If
    End Sub
    该程序代码的功能是:若在文本框Txt1中输入的数值小于0或大于100,当光标离开此文本框时,(2) ;否则,将其值复制到文本框Txt2中。
【应用4.3
在下面的应用中,当窗口内发生Click事件时,窗口内将显示如图4-1所示的杨辉三角形(每一行都是三项式展开的系数)。请完善程序代码。
 

Private Sub Form Click()
    Dim i , j , c  As Integer , StrTemp As String
    Dim a(9) As Integer
    a(0) = 0 : a(1) = 1 : StrTemp = Str(a(1)) + Space(3)
    CurrentX = (ScaleWidth一TextWidth(StrTemp))/2
    Print StrTemp
    For j = 2 To 9
  a(j)= 1
  For c =  j-1 To 2 Step - 1
   a(c) = (3)
  Next
    (4)  = “”
  For c = 1 To j
    StrTemp = StrTemp & Str((5))& Space (5 - Len (Str (a (c))))
  Next
  CurrentX =(ScaleWidth一TextWidth(StrTemp))/ 2
  Print StrTemp
    Next
End Sub

()(共15分)    
阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
    若一个矩阵中的非零元素数目很少且分布没有规律,则称之为稀疏矩阵对丁tm行n列的稀疏矩阵M,进行转置运算后得到n行m列的矩阵MT,如图3-1所示


    图3-1稀疏矩阵M及其转置矩阵MT
 
    为了压缩稀疏矩阵的存储空间,用三元组(即元素所在的行号、列号和元索宜、表示稀疏矩阵中的一个非零元素,再用一维数组逐行存储稀疏矩阵中的所有非零三素也称为三元组顺序表)。例如,图3-1所示的矩阵M相应的三元组顺序表如表3-1所示.其转置矩阵MT的三元组顺序表如表3-2所示。


    函数TransposeMatrix(Matrix M)的功能是对用三元组顺序表表示的稀疏矩阵M进行转置运算。
    对M实施转置运算时,为了将M中的每个非零元素直接存入其转置矩阵MT三元组顺序表的相应位置,需先计算M中每一列非零元素的数目(即MT中每一行非零几素的数目),并记录在向量num中;然后根据以下关系,计算出矩阵M中每列的第一个非零元素在转置矩阵MT三元组顺序表中的位置:
    cpot[0] = 0
    cpot[j] = cpot[ j-1]+num[j-1]〕 /* j为列号 */
    类型ElemType, Triple和Matrix定义如下:
    typedef int ElemType;
    typedef struct{ /* 三元组类型 */
    int r,c; /* 矩阵元素的行号、列号 */
    ElemType e; /* 矩阵元素的值 */
    }Triple;
    typedef struct{ /* 矩阵的元组三元组顺序表存储结构 */
    int rows,cols,elements; /* 矩阵的行数、列数和非零元素数目 */
    Triple data[MAXSIZE]:
    }Matrix;
 
 

【C函数】
int TransposeMatrix(Matrix M)

    int j , q , t;
    int *num, *cpot;
    Matrix MT; /* MT是M的转置矩阵 */
    num =(int*)malloc(M.cols*sizeof(int));
    cpot =(int*)malloc (M.cols*sizeof(int));
    if(!num || !cpot)
    return ERROR;
MT. rows = (1) ; /*设置转置矩阵MT行数、列数和非零元数目*/
    MT. cols =(2);
    MT.elements = M.elements;
    if (M. elements > 0){
for (q = 0 ; q < M. cols ; q++)
num[q] = 0;
for (t = 0 ; t < M. elements ; ++t )  /* 计算矩阵M中每一列非零元素数目 */
  num [M.data [t].c]++:
 
 /* 计算矩阵M中每列第一个非零元素在其转置矩阵三元组顺序表中的位置 */(3) ;
 for(j = 1 ; j<M. cols ; j++)
 cpot[j] = (4):
 
/* 以下代码完成转置矩阵MT三元组顺序表元素的设置 */
 for(t = 0 ; t<M.elements ; t++){
  j = (5)  /* 取矩阵M的一个非零元素的列号存入j */
 
  /*q为该非零元素在转置矩阵MT三元组顺序表中的位置(下标)*/
  q = cpot[j];
  MT. data[q].r = M. data[t].c;
  MT. data[q].c = M. data[t].r;
  MT. data[q].e = M. data[t].e;
  ++cpot[j];  /* 计算M中第j列的下一个非零元素的目的位置 */
  }/* for */
    }/* if */
free(num); free(cpot);
 
  /* 此处输出矩阵元素,代码省略 */
 
    return OK;
}/*TransposeMatrix*/

()(共15分)
    阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
    某单位准备进行一次选举,对指定的n名(n<80)候选人进行投票。为了简化选举工作,事先印制了写有这n名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过3个,也不得少于1个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。例如,
n=8时所形成的文件如下:
  01011000
  10010100
  10011000
  11111111
  00000000
  00111000
  ……
    其中,每行表示一张选票的数据,每列代表一位候选者的得票情况。第i行第j列为1,表示第i张选票上投了第j名候选人1票。
    函数statistic()的功能是读入选票数据,并统计每位候选者的得票数,函数返回有效选票数。
 

【C函数】
int statistic (FILE *fp,int candidate[ ],int n)
{ /* 从文件中读入选票数据,n为候选人数量(n<80),从有效选票中统计每位候选者
的得票数并存入candidate[],函数返回有效选票数 */
 
    char str[80]  /* str保存读入的一张选票数据 */
    int I tag=0   /* tag用于判断每张选票是否有效 */
    int q=0  /* q用于计算有效选票数 */
    for(i=0:i<n; i++)
    candidate[i]=0;
 
    while( (1) ){
    fgets(str, 80, fp):/* 读入一张选票数据 */
    for(tag=0, i=0 ; ((2)) ;i++)
    if (str[i] = = ’1 ’) tag++;
    if((3)){/* 若是有效选票,则进行统计 */
     ( (4) );
    for(i=0;i<n;i++)
    if(str[i]= =‘1’)(5) ;
    }
    }
    return q;
} /* statistic */
 

上一页

第 3 页