2005年春二级C考试试卷

试题一、判断题(每小题1分,共10分)

说明:在以下提供的若干个陈述中,逐一判断其正确与否,选A表示正确,选B表示错误。

(1)       C语言中,常量和变量都有数据类型。

(2)       C语言的运算符只有单目运算符和双目运算符两种。

(3)       若变量己正确定义,表达式x+y=z符合C语言语法。

(4)       C编译器可以找出C源程序中所有的语法错误和逻辑错误。

(5)       表达式3*5/2和表达式3/2*等价。

(6)       表达式m=n++的求解顺序是先计算m=n,再计算n=n+1。

(7)       变量名fahr和Fahr代表两个不同的变量。

(8)       若表达式sizeof(unsigned)的值为2,则unsigned类型数据能表示的最大整数为  216-1。

(9)       break语句只能用于循环结构中。

(10)   while语句先判断循环条件,所以循环体有可能一次也不执行。

试题二、单选题(每小题2分,共20分)

(11)执行scanf(“%d%lf%d”,&money,&rate,&year), 输入(11)后,money=1000, year=3, rate=0.025.

A、1000  3  0.025                 B、1000  0.025  3

C、1000,3,0.025                   C、1000,0.025,3

12)判断变量ch是英文字母的表达式为(12)。

A、('a'<=ch<='z')||('A'<=ch<='z')

B、(ch>='a' && ch<='z')&&(ch>='A' && ch<='Z')

C、(ch>='a' && ch<='z')|| (ch>='A' && ch<='Z')

D、('A'<=ch<='z')&&('A'<=ch<='z')

 (13)while((13))等价于while(!x)。

A、x==1           B、x==0

C、x!=0           D、x!=1

(14)以下程序段输出字符串str, 其中循环条件str[i]!= 0  还可以写成(14)。

char str[80];

for(i=0;str[i]!='\0'  i++)

      putchar(str[i]);

A、str[i]!=NULL          B、i< 80

C、!(str[i]= '\0'        D、i<=80

(15)设变量定义为:int n,*p;char ch,*q,*g;,则语句(15)是不正确的。

A、p=&n;g=q=&ch;       B、p=&n;q=&ch;

C、p=&n;g=&ch          D、p=&n;q=&ch;g=p;

(16)设变量定义如下,则对其中的结构分量num正确的引用是(16)。

struct student{

     int   num;

     Char name[20];

     float scire;

}stud[10];

A、stud[1].num = 10;         B、student.stud.num = 10;

C、struct.stud.num = 10;     D、struct student.num = 10;

(17)对于以下递归函数f,调用函数f(2, 1 2  3)的输出结果是(17)。

void f(int n,char a,char b,char c)

   { if(n==1)

        printf("%c->%c#",a,b);

      else

        { f(n-1,a,c,b);

          printf("%c->%c#",a,b);

          f(n-1,c,b,a);

         }

     }

A、1->2#1->3#3->2#                    B、3->2#1->2#1->3#

C、'1'->'3'#'3'->'2'#'1'->'2'#        C、1->3#1->2#3->2#

(18)下列程序段的输出结果是(18)。

int t,a[3] = {10,5,1};

  int *p;

  for(p =a; p<a+3; p++)

t =t + *p;

  printf(“%d” ,t);

 A、15                   B、16

     C、10                   D、不确定

19)设变量定义为: int *p[3],a[3];,(19)是正确的赋值。

A、p =&a[9]                   B、*p = **a

C、p[0] = a                    D、**p = a

(20)对于以下的变量定义,语句(20)在语法和语义上都是正确的。

struct node{

float x,y;

char s[10];

}point = {1,2, “abc”},*p;

A、*p = point;                   B、p = point;

C、point = p;                    D、p->x = point.y;

 

试题三、程序填空题(每空2分,共20分)

说明:阅读下列程序说明和相应程序,在每小题提供的若干可选答案中,挑选一个正确答案。

1.程序1、

[程序说明]

根据下式计算s 的值,要求精确到最后一项的绝对值小于106   

        s = 1-1/3+1/5-1/7+…….

[程序]

  #include <stdio.h>

  #include <math.h>

  void main()

   {  int flag = 1, t = 1;

(21)

while(    (22)    ){

   item = flag * 1.0 / t ;

   s = s + item ;

      (23)   ;

    t =t+2;

}

printf ( “s = %f\n” ,s);

}

(21) A、double item = 2 , s = 0;              B、double item = 0 , s = 0;

     C、double item = 1 , s = 1;              D、double item = 3 , s = 1;

(22) A、item<1E-6                             B、item>=1e-6;

    C、fabs(item)<1E-6                        D、fabs(item)>=1E-6

(23)  A、flag = -1                            B、s = -s

C、flag = -flag;                        D、t = -t

 2、程序2

[程序说明]

验证哥哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,…,18=7+11。将6——100之间的每个偶数都表示成两个素数之和。函数prime(m)用于判断m是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

[程序]

#include "stdio.h"

#include "math.h"

void main()

{ int i, k;

 int prime(int m);

 for (i=6;i<=100;i=i+2)

for(k=3;k=<50;k++)

 if (    24    ){

     printf ("%d = %d+%d\n", i, k, i-k);

     break;

 }

}

int prime(int m)

{ int k, n;

if(m = = 1) return 0;

n = (int)sqrt (m);

for (k = 2; k <= n ;k++)

      (25) ;

  (26)  ;

}

(24)  A、prime(i)                     B、prime(i) && prime(k)

     C、prime(k) && prime(i-k)        D、prime(k)

(25)  A、if (m%k!=0) return 0            B、if(m%k==0) return 0

     C、if(m%k==0) return 1            D、if(m%k !=0) return 1

(26)  A、return 0 ;                    B、return 1;

     C、else return 0;                 D、else return 1;

 

程序3

   [程序说明]

输入一个字符串(少于80个字符),滤去所有的非八进制字符后,组成一个新符串(八

进制形式),然后将其转化为十进制整数后输入。函数stoi(str)将八进制形式的字符串str

转换为十进制整数,例如,stoi(“12”)的值为10(八进制12对应十进制10)。

 [程序]

#include<stdio.h>

void main()

{ int i,k;

char s[10];

int stoi(char *str);

gets(s);

for( i=k=0;s[i]!=’\0’;i++)

     if(s[i]<=’7’&&s[i]>=’0’)

          (27)  

(28)        

printf(“digit=%d\n”, (29)   )

}

int stoi(char*str)

{ int i,n=0;

    for(i=0;str[i]!=’\0’;i++)

           (30)  

return n;

}

(27)A、s[I]=s[k];i++                       B、s[k]=s[i]

C、s[k]=s[i],k++                       D、s[i]=s[k]

(28)A、s[i]! =‘\0’                     B、s[k]! = ’\0’

C、s[i] =‘\0’                       D、s[k] = ’\0’

(29) A、stoi(s)                           B、s

C、stoi(s[i])                         D、n

(30) A、n = n * 8 + (str[i]–‘0’)        B、n = n * 10 + (str[i]–‘0’)

C、n = n * 8 + str[i]               D、n = n * 10 + str[i]

 

试题四、程序阅读题(每小题5分,共20分)

说明:阅读下列程序,将运行时的输出结果写在答卷纸的相应题号下。

1. 程序1

#include <stdio.h>

void main ()

{  int x = 10023

   do {

printf (“%d#”, x%10);

x = x / 10;

}while (x!= 0);

   }                

 

2. 程序2

  #inclde <stdio.h>

void main ()

   { int i,x=1, y=1;

for(i=1;i<=5; i++)

{ x = x + y;

y++;

printf (“%d#”,x);   

}

   }

3. 程序3

#include <stdio.h>

void main()

 {int i,x = 1 , y = 1 ;

  void f (int m, int n, int * px, int *py);

  f(2004, 70, &x, &y),

  printf ("%d # %d#", x, y);

  f(2005, 98, &x, &y);

  printf ("%d#%d#", x, y);

 }

  void f (int m, int n, int *px, int *py)

  { int k, flag;

    int tab [2][13] = {

       {0, 31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31},

       {0, 31, 29, 31, 30, 31, 30, 31, 31,30, 31, 30, 31}

    };

  flag=m%4==0 && m%100!=0||m%400==0;

  for ( k = 1; n > tab[flag][k]; k++)

  n = n - tab[flag][k];

  *px =k;

  *py = n;

}

4. 程序4

/* 假设读写文件的操作能正常完成 */

#include <stdio.h>

#include <stdio.h>

void main()

{  char ch, *s = "ACEDB";

   int x;

   FILE *in;

   if ((in = fopen("file.txt","w" ))!=NULL)

   while(*s!='\0')

      fputc(*s++, in);

   fclose(in);

   if ((in=fopen("file.txt","r"))!=NULL)

   while((ch=fgetc(in))!=EOF)

{ switch(ch)

{ case 'A': x = 95; break;

          case 'B': x = 85; break;

          case 'C': x = 75; break;

          case 'D': x = 60; break;

          default: x = 0; break;

       }

    printf ("%d#", x );

   }

    fclose (in);

    getch();

}

试题五、程序设计题(每小题各10分,共30分)

1.输入法x ,计算并输出下列分段函数 f(x) 的值。可以调用数学库函数:平方根函数sqrt(),绝对值函数fabs() 和幂函数 pow()。


2.输出一张摄氏一华氏温度转换表,摄氏温度的取值区间是[-1000 C,1500C ],温度间隔50C。要求定义和调用函数 ctof(c),将摄氏温度C转换成华氏温度F,计算公式:

F = 32 + C* 9/5。

3.输入一个正整数不胜n (1≤ n ≤6),再输入一个n 行n列的矩阵,找出该矩阵中绝对值最大的元素以及它的行下标和列下标。