武汉大学珞珈学院《高级语言程序设计》试卷答案胖人衣服(A
20072008学年度第2学期  2007
[闭卷,试卷共  页,答题时间120分钟]
学号                       姓名                        
专业 计算机科学与技术      班号     20070506    计算机  (说明:请考生将答案写在武汉大学珞珈学院考试答题纸纸上并标明题号,否则不得分。)
一、选择题(每小题2 分,共20 。)
1正确的标识符是____A__   
A. _a123
B. 3z
C. “next”
D. ‘A’
2表达式2.5+7%2-5/2*2的结果为____C__   
A. 3.5
B. 1.5
C. -0.5
D. -1.5
3下面的四个选项中,正确的整型常量是____B__   
A. x234F
B. 068
C. 0672
D. 07aL
4设有如下宏定义  #define  weight  10
                  #define  price    (1+weight)
执行赋值语句  v=price*20;/*vint型变量*/,v的值为____D_   
A. 41
B. 200
C. 201
D. 220
5设有变量定义:int m=5,n=3;则执行表达式((m+=2)>=7)||((n-=3)<10)lol符文页
  后,m,n的值分别为_____ D      _
A. 50
B. 53
窦智孔个人资料
C. 70
D. 73
6    B    不属于三种基本程序结构。
A. 顺序
B. 转移
C. 选择
D. 循环
7long a[50],*p;执行p=a+2; *(p+4)等价于___C_____
生活需要阳光
A. a[2]
B. a[4]
C. a[6]
D. 无法确定
8表达式0x7586&0xff00结果为____D__   
A. 0x86
B. 0x7586
C. 7500
D. 0x7500
9、采用只读模式打开二进制文件””,下面正确的打开模式是    A_ 
A. “rb”
B. “rb+”
C. “r”
D. “r+”
10、已知各变量的类型说明如下:
        int i=8, k, a, b;
        unsigned long w=5;
        double x=1.42, y=5.2;
        则以下符合C语言语法的表达式是      B     
A. a=a*3=2;
B. a+=a-=(b=4)*(a=3);
C. x%(-3);
D. y=float(i);
二、程序阅读题(每题 5 分,共 25 分)
1、分析以下程序执行流程,写出程序执行结果。
#include <stdio.h>
    int main()
    {    int x=5;
        while(x++<10)
        {    do{
                printf("%6d",x++);
            }while(x<11);
            x--;
        }
      return 0;
    }
答案: 6    7    8    9    10
2分析以下程序执行流程,写出程序执行结果。
#include <stdio.h>
    int main()
    {    void f1(int);
        int x;
        for(x=2;x<6;x++)
              f1(x);
        return 0;
    }
    void f1(int z)
    {  int x=5;
        static int y=10;
        x++;
        printf("%d+%d+%d=%d\n",x,y,z,x+y+z);
        y+=10;
    }
答案:6+10+2=18
      6+20+3=29
      6+30+4=40
      6+40+5=51
3、分析以下程序的执行流程,指出程序的功能。
#include <stdio.h>
int main()
{  int a[5]={1,5,2,4,3},i,j,t;
for(j=1;j<=4;j++)
for(i=0;i<=4-j;i++)
if(a[i]<a[i+1])
{t=a[i]; a[i]=a[i+1]; a[i+1]=t;}
for(i=0;i<5;i++)    printf("%d",a[i]);
return 0;
}
答案:数组a按照从大到小的顺序排序。
4、分析以下程序的执行流程,指出程序的功能。
#include <stdio.h>
int prime(int number)
{    int flag=1,n;
        for(n=2;n<number/2&&flag==1;n++)
立春吃什么传统食物            if(number%n==0)
                flag=0;
            return(flag);
}
int main()
{    int number;
        printf("请输入一个正整数:\n");
        scanf("%d",&number);
        if(prime(number))
            printf("\n %d ",number);
        return 0;
}
答案:判断一个整数是否是素数。
5、以下程序计算-32768-3,执行以下程序,得到如下所示的运行结果,请分析程序执行流程,解释结果为什么不是-32771?并指出该如何修改。
#include <stdio.h>
int main()
{        short int a,b;
        a=-32768;
        b=a-3;
        printf("a=%d,b=%d\n",a,b);
}
运行结果:
a=-32768,b=32765
答案: short int数据范围为[-32768,32767],数据溢出。
      short intlong int%d%ld
三、程序填空题(请在空白处填写正确内容,以完成程序;每空1分,共 10 分)
1100~200之间(包括100200)不能被7整除的数输出。
#incude <stdio.h>
int main()
{  int  1 ;
for(n=100;  (2)  ;  (3) 
{    if(    (4)    大唐荣耀结局==0)
        (5)  ;
      printf(“%4d”,n);
}
return 0;
}
答案:(1)  n
      (2)  n<=200
      (3)  n++或者++n或者n+=1或者n=n+1
      (4)  n%7
      (5)  continue
2、下面程序输入字符串s1的内容,并把字符串s1的内容复制到字符串s2中(不能使用strcpy函数)。
#include <stdio.h>
int main()
{    char  s1[50]  6;
        (7)    i=0;
scanf(“%s’,  (8)  );
while(  (9)    )
  {      (10)    ;
    i++;
  }
  s2[i]=0;
  printf(“%s\t%s\n”,s1,s2);
  return 0;
}
        答案:    (6)  s2[50]
                (7)  int或者short int或者char或者long int
                (8)  s1
                (9)  s1[i]!=’\0’或者s1[i]!=0或者s1[i]
                (10) s2[i]=s1[i]
四、函数实现题(每题 15 分,共 30 分,说明: 本题写出函数即可,不必写出main函数
1设计一个函数count(s, t); 其中s为字符串,t为单个字符。如果t为大小写字母,则函数count统计字符串st对应的字母(大小写字母均统计在内)出现的次数。例如,count(“aAdgfASa”,’a’)函数调用的返回值为4。如果t为其他字符,则直接统计该字符出现的次数。
答案:
int count(char *s,char t)
{    int k=0;
    while(*s)
    {    if(t>=’a’&&t<=’z’)
        {    if(*s==t||*s=t-32)
                k++;
        }
        else
if(t>=’A’&&t<=’Z’)
            {    if(*s==t||*s=t+32)
                    k++;
            }
            else
                if(*s==t)
                    k++;
        s++;
    }
    return k;
}
分析程序执行流程基本正确,流程图和程序执行流程基本一致为评分标准。
2、 设计一个函数reverse(a,n);其中a为数组,na的元素个数。该函数将数组a按逆序重新存储。例如,原数列为68101214,则调用reverse(a,5);后数组a按逆序重新排列,则为14121086
答案:
void reverse(int *a,int n)