上机操作题A卷,4题,共70
1题(18分 源程序文件 
上机要求:下列程序包含4个错误,请输入该程序的代码,出并更正程序错误,在修改行代码后增加“/***/”注释,将修改后的源程序保存 中。程序改错时不允许改变大的程序结构(如函数调用关系与循环结构等)。
程序功能:从键盘上输入一个整数,转换为16进制串并输出。
如输入:    90
则输出:    5A
再如输入:  1234
则输出:    4D2
函数说明:
函数dec2hex将整数n转换为16进制的字符串并存贮于str数组。
(1) 依次计算n16进制最低位(变量k),转换为16进制码(字符’0’’9’’A’’F’)存贮于str数组,完成一位后,n16以去掉最低位,然后循环求解更高位。
(2) 使用for循环逆序str数组,变量i0递增,变量jm-1递减,交换str[i]str[j]
主函数main输入一个整数,调用dec2hex函数转换为16进制串,然后输出该字符串。
带错误原程序:(函数dec2hex包含3个错误点,main包含1个错误点)
#include <>
void dec2hex(int n, char str[])
{
    int  m,i,j;   
    char t;
    m=0;
    do {
        k = n % 16;
        if(k>9)
            str[m]='0'+k;
        else
            str[m]='A'+k-10; 
        m++;
        n = n / 16;
    } while (n>0);
    str[m] = '\0';
~
    for (i=0,j=m-1;i<j;i++,j--)
    {
        str[i]=t;   
        str[i]=str[j];
        str[j]=t;
    }
}
main()
{
    char str[80];
>
    int n;
    scanf("%d",&n);
    str=dec2hex(n);
    puts(str);
}
第2题(17分,源程序文件 )printf输出格式右对齐
上机要求:按程序功能要求编写程序,并将程序代码保存 中。
程序功能:从键盘输入一个大于2的正整数n,求解并输出最接近n的素数(<n不包括n)。
如输入:
17                 
则输出
13
再输入:
45                 
则输出
43 
第3题(17分,源程序文件 
上机要求:按程序功能要求编写程序,并将程序代码保存 中。
程序功能:从键盘上输入5个整数(设每个整数取值15),按示例格式输出5行数字图形,每行的数字及数字个数与输入数相对应。
如输入:
    5  4  3  2  1
则输出(□表示空格,↙表示回车):
   
   
    □□
    □□□
    □□□□
示例说明:输出共5行,居中对齐形状。输入的第1个数为5,则输出的第1行有55,数字之间含有1个空格,第15之前有5-5=0个空格;输入的第2个数为4,则输出的第2行有44,数字之间含有1个空格,第14之前有5-4=1个空格;以此类推。
再如输入:
<
    2  3  2  1  2
则输出(□表示空格,↙表示回车):
    □□□
    □□
    □□□
    □□□□
    □□□
示例说明:输出共5行,居中对齐形状。输入的第1个数为2,则输出的第1行有22,数字之间含有1个空格,第12之前有5-2=3个空格;以此类推。
第4题(18分,源程序文件 )
从键盘输入一个字符串(不多于80个字符),分别在该字符串中的所有数字字符子串(即单个或多个连续的数字字符)前加入一个字符$,然后输出处理后的该字符串,如果该字符串中不包含有数字字符子串,则报告“There are no digits.”。例如,
输入:abcd4,Efghi*123p87KKK9034  6 xyz
输出:abcd$4,Efghi*$123p$87KKK$9034  $6 xyz
又如,
输入:abcd,Efghi*Pkkk  #%xyz
输出:There are no digits.
上机操作题A卷,4题,共70
参考答案
第1题()
修正程序
原代码
#include <>
void dec2hex(int n, char str[])
{
    int  m,i,j,k;    /***/
    char t;
    m=0;
;
    do {
        k=n%16;
        if(k<9)        /***/
            str[m]='0'+k;
        else
            str[m]='A'+k-10; 
        m++;
        n = n / 16;
    } while (n>0);
    str[m] = '\0';
~
    for (i=0,j=m-1;i<j;i++,j--)
    {
        t=str[i];    /***/
        str[i]=str[j];
        str[j]=t;
    }
}
main()
{
    char str[80];
    int n;
    scanf("%d",&n);
    dec2hex(n,str);    /***/
    puts(str);
    return 0;
}
int  m,i,j;
缺变量定义
k>9
str[i]=t;
赋值方向错误
{
str=dec2hex(n);
调用错误
第2题()
/* 1-A-2 */
#include <>
int main()
<
{ int i,j,n;
  scanf("%d",&n);
  for(i=n-1;i>1;i--)
    { for(j=2;j<i;j++)
          if(i%j==0)  break;
      if(i==j)  break;
    }
printf("%d\n",i);
return 0;
}
第3题()
#include ""
int main()
{
int i,j,a[5];
  for(i=0;i<5;i++)
      scanf("%d",a+i);
  for(i=0;i<5;i++)
      { for(j=0;j<5-a[i];j++)
          printf(" ");
        for(j=0;j<a[i];j++)
          printf("%d ",a[i]);
        printf("\n");
      }
      return 0;
}
第4题()
/* 1-A-4  (1) */
#include <>
#include ""
Int main()
{  char a[81]={0},b[81]={0};
  int i,j,d=0;
  gets(a);
  for(j=i=0;a[i];i++)
      {  if(a[i]<'0'||a[i]>'9')
            d=0;
        else if(d==0)
          { d=1;  b[j++]='$'; }
$
        b[j++]=a[i];
      }
  if(i==j)
      puts("There are no digits.");
  else
      puts(b);
}
/* 1-A-4  (2) */
#include ""
int main()
~
{  char a[81]={0},b[81]={0};
  int i,j;
  gets(a);
  for(j=i=0;a[i];i++)
      {  if(a[i]<'0'||a[i]>'9')
            { b[j++]=a[i]; continue; }
        for(b[j++]='$'; a[i]>='0'&&a[i]<='9';i++)
            b[j++]=a[i];
        i--;
    }
  if(i==j)
      puts("There are no digits.");
  else
      puts(b);
return 0;