华南农业大学期末考试试卷( A卷)
          2012学年第1学期               考试科目: 高级语言程序设计 
          考试类型:(闭卷)          考试时间:  90 分钟
 
考生须知:
  1. 必须在答卷上正确填写班级、学号、姓名等内容。
  2. 答案写在答卷上,写在试卷等其它地方不得分。
  3. 试卷上出现的int类型变量均为4字节存贮。
  4. 上机考试部分,考试时间与地点另行安排。
 
一、单项选择题(共10题,每题1分)
 
1. 下面对C语言运算符的优先级叙述正确的是(  )。
A!(非) > 算术运算符 > 关系运算符 > &&(与) > ||(或) > 赋值运算符
B!(非) > 关系运算符 >算术运算符 > &&(与) > ||(或) > 赋值运算符
C算术运算符 >!(非) >关系运算符 > &&(与) > ||(或) > 赋值运算符
D算术运算符 > 关系运算符 > !(非) > &&(与) > ||(或) > 赋值运算符
 
2. float x=3.5, y=4.3 ;int a=8, 表达式y+a%3*(int)((x+y)/4+0.05)/3 的值为
  A.4.3;                      B.5.3;       C.6.3;           D.7.3;
 
3. 若有代数式(x,y,b,c是浮点数),则正确的C语言表达式是()
A2/3*x^2*y/b*c                            B2/3.0*x^2*y/b/c
C2*x*x*y/3*b*c                                   Dx*x/b/c*2/3*y
 
4. 在a=2,b=1,c=0;则执行c=b||a--;语句后,a和c的结果是()
A01       B21        C10       D20
 
5.下面程序段的输出结果是     
       int main( )
      {   int a[ ]={1,2,3},s,b,*p;
             s=1;
             p=a;
             for(b=0;b<3;b++)
                    s*=*(p+b); 
             printf(“s=%d\n”,s);
       }
       A.s=1       B.s=2     C.s=3     D.s=6
 
 
 
6.设整型变量a为5,使b不为2的表达式是 ()
    A. b=a/2    B. b=6-(--a)    C. b=a%2     D.b=a>3?2:1
 
7. 执行以下程序后,y的值是(  )
       int main ()
  
{ int y = 10;
  
   do { y - -;} while(- - y);
  
   printf("%d\n",y - -);
  
}
    A. -1        B. 1         C. 8         D. 0
 
8.有如下程序 
              #include <stdio.h>
    int main()
    {  int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
         for(i=1;i<3;i++)
            for(j=0;j<=i;j++) s+=a[i][j];
         printf(“%d”,s);
    }
该程序的输出结果是
A.18        B.19        C.20        D.21
 
9. 有以下程序段
   int n,t= 0,s=0;
   scanf("%d",&n);
   do{ s=s+t; t=t-2; } while (t!=n);
  为使此程序段不陷入死循环,从键盘输入的数据以下最合适的选项是( 
   A.任意负奇数        B.任意偶数     C.任意整数      D.任意负偶数
 
10. 若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是( 
   A.i=1;p=1;do{p*=i; i++; } while(i<=5);
   B.for(i=1,p=1;i<=5;i++) p*=i;
   C.for(i=1;i<=5;i++) { p=1; p*=i;}
   D.i=1;p=1;while(i<=5) {p*=i; i++;}


 
二、看程序写结果(共6题,每题4分)
1. #include "stdio.h"
 
 
 
    #define M 4
    #define N 3
      int main()
      {   int a[M*N]={1, 2, 3, 4,
                      5, 6, 7, 8,
                      9,10,11,12};
           int b[N*M], i, j;
           for(i=0; i<M*N; i++)
               b[(i%M)*N+i/M]=a[i];
           for(i=0; i<M*N; i++)
                         printf("%4d", b[i]);
      }
请写出运行结果:
 
2. #include "stdio.h"
      main()
   {      int k=5,n=0;
            while(k>0)
           {      switch(k)
                  {     default : break;
                         case 1 :
                         case 2 : n+=k;
                         case 3 : n+=k;
                  }
                  k- -;
               printf("%d\n",n);
           }
   } 
请写出运行结果
 
3.   #include <stdio.h>
int main()
{ int i,j,k;
  for(i=1;i<4;i++)
    {
       for(j=1;j<4-i;j++)
          printf(" ");
       for(k=1;k<=2*i-1;k++)
            printf("%c",'A'+i-1);
       printf("\n");
  }
}
  请写出运行结果:
 
4. #include<stdio.h>
    main( )
  {
      char arr[]=”ABCDE”;
      char *ptr;
      for(ptr=arr;ptr<arr+5;ptr++) printf(“%s\n”,ptr);
  }
   请写出运行结果
 
5.    #include <stdio.h>
       int main(  )
       { int a[5][5],i, j ;         
    for( i=0;i<5;i++)         
    { a[i][0] =1; a[i][i] =1; }    
    for( i=2; i<5; i++  )      
       for(j=1; j<i ; j++ )       
           a[i][j] =a[i-1][j-1] + a[i-1][j];   
    for(i=0; i<5; i++)
     {
       for( j=0; j<=i; j++) 
            printf(“%5d”,a[i][j]);
       printf(“\n”);
     }
    }
  请写出运行结果:
 
6. 有下面结构体类型定义,
       struct  node
       {
              char  info;
              struct  node  *link;
       };
  假设已存在如下链表,
 
 

以head为实参调用如下函数,
void  func(struct  node *head)
{       struct  node *p = head, *p2=NULL;
        int i=0;
        while( p!= NULL)
{      putchar(p->info); p = p-> link; }
putchar('\n');
p = head;
        while( p!= NULL)
{      if (p-> link!= NULL) p->info=p-> link ->info; p = p-> link; }
p = head;
        while( p!= NULL)
{      putchar(p->info); p = p-> link; }
}
  请写出运行结果:
三、看程序填空题(共8空,每空2分)
 
1.下面程序判断某一年是否闰年,请填空。(提示:闰年为该年能被400整除,或能被4整除且不能被100整除)
#include  "stdio.h"
main()
{
       int  year,leap;
       scanf ("%d", &year);
       if (year%4==0)
              if ( year%100= =0)
                     if( year%400= =0) leap = 1;
                      else  leap = 0;
              else  ______【1      ;
       else
              leap = 0;
       if (leap)
              printf("%d is ", year);
       else
              printf("%d is not ", year);
       printf("a leap year.");
}
 
2. 下面函数实现将字符串中ASCII形式表示的整数转变为数值形式,请填空。
int trans(char *s)
{
       int ret=0;
       while(*s!= '\0 ')
{
              ______【2      ;
              s++;
       }
       return ret;
}
 
3. 下面程序是求数列:

前n项和的程序,结果保留四位小数。
#include "stdio.h"
main()
{
       int i, n, a=2, b=1;
       float c, sum=0;
       scanf("%d", &n);
       for(i=0; i<n; i++)
       {      ______【3      ;
              sum = sum + c;
              a=a+b;
              b=a-b;
       }
       printf("sum=%.4f", sum);
}
 
 
4. 下面程序实现求出数组元素中的最大值,请填空。
#include  "stdio.h"
int main()
{      int  c[10]={78,45,175,251,249,34,9,179,50,210};
       int  i,max;
       max=c[0];
       for(i=1; i<10;i++)
    {
                  4       
    }
       printf("max = %d\n", max);
}
 
5. 在当前目录中存在文件名为"data.txt"的文本文件,现要求你使用fopen函数命令打开该文件,读出里面的所有字符,只将其中的数字字符按先后顺序显示在屏幕上,请填空。
(如data.txt内容如下)
13 cats and 22 bikes
(在屏幕上输出结果如下)
1322
 
程序如下,请填空,
#include "stdio.h"
main()
{   FILE *fp;
    char ch;
    if((fp=fopen("data.txt","r"))= =NULL)
        return 0;
    while(      5      )
    {       if ('0'<=ch && ch<='9')
                  putchar(ch);
    }
    fclose(fp);
}
 
 
6.下面程序实现输出2到200之间(包括2、200)的所有素数,请填空(多行)。
#include<stdio.h>
#include<math.h>
 
int isPrime(int n)
{
              【6】       
}
 
int main()
{   int m;
    for(m=2;m<=200;m++)
        if(isPrime(m)) printf("%d\n",m);
}
 
7. 下面程序的功能是输出如下n*n(n<20,为正奇数)阶方阵。请填空。
       1  1  1  1  1
       1  2  2  2  1
       1  2  3  2  1
       1  2  2  2  1
       1  1  1  1  1
          (n=5
 
#include “stdio.h”
#include “math.h”
main()
{      int a[20][20], n, i, j, m;
             【7】      ;
       m=n/2;
       for(i=0; i<n; i++)
              for(j=0; j<n; j++)
              {      if(      【8】      )
                            a[i][j] = m+1-abs(i-m);
                     else
                            a[i][j] = m+1-abs(j-m);
              }
for(i=0; i<n; i++)
{      for(j=0; j<n; j++)
                     printf(“%d ”, a[i][j]);
              printf(“\n”);
       }
}
 
四、上机考试(共50分)