1.1 综合测试

1.1.1 快速排序

  • PASCAL-S源程序 ```pascal program quicksort(input,output); var n,i:integer; a:array[0..100000] of integer;

procedure kp(l,r:integer); var i,j,mid:integer; begin if l>=r then exit; i:=l;j:=r;mid:=a[(l+r) div 2]; repeat begin while a[i]mid do j:=j-1; if i<=j then begin a[0]:=a[i];a[i]:=a[j];a[j]:=a[0]; i:=i+1;j:=j-1; end end until i>j; kp(l,j); kp(i,r) end;

begin read(n); for i:=1 to n do read(a[i]); kp(1,n); for i:=1 to n do write(a[i],’ ‘); end.

  1. - 预期结果
  2. 没有词法、语法、语义错误,正确生成快速排序的C程序,可以用C编译器正确编译,并正确运行。<br /> C程序运行时,先读入一个数字n表示待排序的数字个数,再输入n个数字。最后输出从小到大排序的结果。<br />
  3. - 输出的C程序
  4. ```cpp
  5. //Head files
  6. #include<stdio.h>
  7. #include<stdbool.h>
  8. //Overall constant definiton
  9. //Overall variable definition
  10. int n;
  11. int i;
  12. int a[100001];
  13. //Subprogram declaration
  14. void quicksort();
  15. void kp(int l, int r);
  16. //Main function
  17. int main()
  18. {
  19. quicksort();
  20. return 0;
  21. }
  22. //Subprogram definition
  23. void quicksort()
  24. {
  25. scanf("%d", &n);
  26. for(i = 1; i <= n; i++)
  27. scanf("%d", &a[i]);
  28. kp(1, n);
  29. for(i = 1; i <= n; i++)
  30. printf("%d%c", a[i], ' ');
  31. }
  32. void kp(int l, int r)
  33. {
  34. int i;
  35. int j;
  36. int mid;
  37. if(l >= r)
  38. return;
  39. i = l;
  40. j = r;
  41. mid = a[(l + r) / 2];
  42. do
  43. {
  44. while(a[i] < mid)
  45. i = i + 1;
  46. while(a[j] > mid)
  47. j = j - 1;
  48. if(i <= j)
  49. {
  50. a[0] = a[i];
  51. a[i] = a[j];
  52. a[j] = a[0];
  53. i = i + 1;
  54. j = j - 1;
  55. }
  56. }
  57. while(!(i > j));
  58. kp(l, j);
  59. kp(i, r);
  60. }


  • 控制台输出及运行结果

image.png

  • 结果分析

编译程序各部分均为发现错误,且成功生成C代码,通过编译生成可执行程序。快速排序运行结果正确,所有数字按照从小到大的顺序进行了输出。

1.1.2 最大公因数

  • PASCAL-S源程序

    program example(input,output);
    var n,i,x,y:integer;
    function gcd(a,b:integer):integer;
    begin
      if b=0 then gcd:=a
      else gcd:=gcd(b,a mod b);
    end;
    begin
     read(n);
     for i:= 1 to n do
     begin
         read(x,y);
         writeln(gcd(x,y))
     end;
    end.
    


  • 预期结果

没有词法、语法、语义错误,正确生成求最大公因数的C程序,可以用C编译器正确编译,并正确运行。
C程序运行时,先读入一个数字n表示待求最大公因数的数字对数,再输入n对数字,每对数字有一个输出,表示这对数字的最大公因数。

  • 输出的C程序 ```cpp //Head files

    include

    include

//Overall constant definiton

//Overall variable definition int n; int i; int x; int y;

//Subprogram declaration void example(); int gcd(int a, int b);

//Main function int main() { example(); return 0; }

//Subprogram definition void example() { scanf(“%d”, &n); for(i = 1; i <= n; i++) { scanf(“%d%d”, &x, &y); printf(“%d\n”, gcd(x, y)); } }

int gcd(int a, int b) { if(b == 0) return (a); else return (gcd(b, a % b)); } ```

  • 控制台输出及运行结果

image.png

  • 结果分析

编译程序各部分均为发现错误,且成功生成C代码,通过编译生成可执行程序。求最大公因数运行结果正确。