江苏省计算机变态二级.docx

上传人:b****3 文档编号:4470938 上传时间:2022-12-01 格式:DOCX 页数:12 大小:19.63KB
下载 相关 举报
江苏省计算机变态二级.docx_第1页
第1页 / 共12页
江苏省计算机变态二级.docx_第2页
第2页 / 共12页
江苏省计算机变态二级.docx_第3页
第3页 / 共12页
江苏省计算机变态二级.docx_第4页
第4页 / 共12页
江苏省计算机变态二级.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

江苏省计算机变态二级.docx

《江苏省计算机变态二级.docx》由会员分享,可在线阅读,更多相关《江苏省计算机变态二级.docx(12页珍藏版)》请在冰豆网上搜索。

江苏省计算机变态二级.docx

江苏省计算机变态二级

2010春  第二部分C语言程序设计

 

一、选择题(用答题卡答题,答案依次填在21~30答题号内,共l0分)

21.C语言规定,在一个源程序中main函数的位置   _____(21)_____   。

    A.必须在最开始              B.必须在最后

    C.必须在预处理命令的后面    D.可以在其他函数之前或之后

22.以下选项中,______(22)______ 是C语言关键字

  A.printf    B.include    C.fun   D.default

23.已知有声明"int a=3,b=4,c;",则执行语句"c=1/2*(a+b);"后,c的值为__(23)___ 。

    A.0    B.3    C.3.5   D.4

24.设指针变量占2个字节的内存空间,若有声明"char *p="123";int c;",则执行语句"c=sizeof(p);"后,c的值为__(24)___

  A.1    B.2    C.3 D.4

25.已知有声明"int a=3,b=4;",下列表达式中合法的是    (25)

    A.a+b=7    B.a=|b|    C.a=b=0   D.(a++)++

26.已知有声明"char s[20]="Hello";",在程序运行过程中,若要想使数组s中的内容修改为"Good",则以下语句中能够实现此功能的是 (26) 。

    A.s="Good";              B.s[20l="Good";

    C.strcat(s,"Good");      D.strcpy(s,"Good");

27.已知有声明"int a[4][4]={{1,2,3,4},{5,6,7,8),{9,10,11,12},{13,14,15,16)};",若需要引用值为12的数组元素,则下列选项中错误的是(  27  )    。

    A.*(a+2)+3    B.*(*(a+2)+3)    C.*(a[2]+3)  D.a[2][3]

28.已知有声明"int n;float x,y;",则执行语句"y=n=x=3.89;"后,y的值为   (  28  )     。

    A.3    B.3.0    C.3.89 D.4.0

29.已知有声明"int a=12,b=15,c;",则执行表达式"c=(a||(b-=a))"后,变量b和c的值分别为(  29  )

    A.3,1    B.15,12    C.15,1 D.3,12

30.下列叙述中,正确的是   _____(30)______   。

  A.C语言中的文件是流式文件,因此只能顺序存取文件中的数据。

  B.调用fopen函数时若用"r"或"r+"模式打开一个文件,该文件必须在指定存储位置或默认存储位置处存在。

  C.当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到该文件中的第1个数据

  D.无论以何种模式打开一个已存在的文件,在进行了写操作后,原有文件中的全部数据必定被覆盖

二、填空题(将答案填写在答题纸的相应答题号内,每个答案只占一行,共30分)

●  基本概念

1.  数学式 所对应的c语言表达式为pow(x, __

(1)__)。

2.  已知有声明"char ch='g';",则表达式ch=ch-'a'+'A'的值为字符    

(2)    的编码。

3.  在C语言系统中,如果一个变量能正确存储的数据范围为整数-32768~32767,则该变量在内存中占_____(3)_____个字节。

    '

4.  已知有声明"int a[3][2]={{1,2),{3,4},{5,6}},*p=a[0];",则执行语句"printf("%d\n",*(p+4));"后的输出结果为__(4)___    。

5.  已知有声明和语句"int a;scanf("a=%d",&a);",欲从键盘上输入数据使a中的值为3,则正确的输入应是 _____(5)_____    。

•  阅读程序

6.  以下程序运行时输出到屏幕的结果为  (6)    。

    #include

    #define MAX(A,B)  A>B?

2*A:

2*B

    void main()

    {int a=1,b=2,c=3,d=4,t;   

     t=MAX(a+b,c+d);

     printf("%d\n",t);

    }

7.以下程序运行时输出到屏幕的结果是    (7)    。

    #include 

    void main()    

    {int a=1,b=2;    

     a+=b;

     b=a-b;

     a-=b;

     printf("%d,%d\n",a,b);

    }

8.以下程序运行时输出到屏幕的结果是  (8)    。

    #include 

    void swap(int a,int b)

    {int t;

     if(a>b)t=a,a=b,b=t;

    }

    void main()

    {int x=13,y=11,z=12;

     if(x>y)swap(x,y);

     if(x>z)swap(x,z);

     if(y>z)swap(y,z);

     printf("%d\t%d\t%d\n",x,y,z);

    }

9•以下程序运行时输出到屏幕的结果第一行是    (9)    ,第二行是  (10)    ,第三行是(11)    。

  #include

  int g(int x,int y)

  {  return x+y;

  }

  int f(int x,int y)

  {

    {static int x=2;

    if(y>2)

    { x=x*x;

      y=x;

    }

    else y=x+1;

    }

    return x+y;

  }

  void main()

  {int a=3;

   printf("%d\n",g(a,2));

   printf("%d\n",f(a,3)); 

   printf("%d\n",f(a,2));

  }

10.以下程序运行时输出到屏幕的结果是    (12)    。

    #include 

    void fun(int m,int n)

    {if(m>=n)

       printf("%d",m);

    else

      fun(m+1,n);

    printf("%d",m);

    }

    void main()

    {  fun(1,2);  }

11.以下程序运行时输出到屏幕的结果第二行是 (13) ,第四行是  (14)   。

    #include

    #define N 6

    void main()

    {int i,j,a[N+1][N+1];

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

    {a=1;a[1]=1;}

    for(i=3;i<=N;i++)

      for(j=2;j

     a[j]=a[i-1][j-1]+a[i-1][j];

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

    {  for(j=1;j<=i;j++)   

         printf("M",a[j]);

    printf("\n");

    }

   }

12.以下程序运行时输出到屏幕的结果第一行是    (15)    ,第二行是    (16)    。

    #include

    void fun(char *p1,char *p2);

    void main()

    {int i;  char a[]="54321";

     puts(a+2);

     fun(a,a+4);

     puts(a);

    }

    void fun(char *p1,char *p2)

    {char t;

     while(p1

     {t=*p1;*p1=*p2;*p2=t;

      p1+=2,p2-=2;

     }

    }

13.以下程序运行时输出至到屏幕的结果第一行是(17) ,第二行是(18) 。

    #include

    typedef struct{int x,y;}direction;

    int visible(direction s,direction A,direction B,direction C)

    {direction p1,p2;

     int d;

     p1.x=B.x-A.x;

     p1.y=B.y-A.y;

     p2.x=C.x-A.x;

     p2.y=C.y-A.y;

     d=s.x*p1.x*p2.x+s.y*p1.y*p2.y;

     printf("M\n",d);

     return d>0;

    }

    void main()

    {char *ss[]={"invisible","visible"};

     direction s={1,1},T={1,1},A={0,0},B={2,1};

     puts(ss[visible(s,T,A,B)]);

    }

    •  完善程序 

    14.以下程序的功能是:

统计一个字符串中数字字符"0"到"9"各自出现的次数,统计结果保存在数组

    count中。

例如,如果字符串为"lenterschar4543123564879ffgh",则统计结果为:

1:

2 2:

1 3:

2 4:

3

    5:

2 6:

1 7:

1 8:

1 9:

1。

试完善程序以达到要求的功能。

    #include

    void fun(char *t,int count[])

    {  char *p=t;

       while(  _____(19)_____  )

       {  if(*p>='0' && *p<='9')

            count[_____(20)_____]++;

          p++;

       }

    }

    void main()

    {char s[80]="1enterschar4543123564879ffgh";int count[10]={0},i;

     fun(s,count);

     for(i=0;i<10;i++)

       if(count) printf("%d:

%d  ",i,count);

    }

    15.下列程序的功能是对a数组a[0]~a[n-1]中存储的n个整数从小到大排序。

排序算法是:

第一趟通

    过比较将n个整数中的最小值放在a[0]中,最大值放在a[n-1]中;第二趟通过比较将n个整数中的

    次小值放在a[1]中,次大值放在a[n-2]中;......,依次类推,直到待排序序列为递增序列。

试完喜

    程序以达到要求的功能。

    #include

    #define  N 7

    void sort(int a[],int n)

    {int i,j,min,max,t;

    for(i=0;i<___(21)___;i++)

    { ______(22)______ 

     for(j=i+l;j

      if(a[j]

      else if(a[j]>a[max])max=j;

    if(min!

=i)

    {t=a[min];a[min]=a;a=t;}

    if(max!

=n-i-1)

     if(max==i)

      {t=a[min];a[min]=a[n-i-1];a[n-i-1]=t;}

     else

     {t=a[max];a[max]=a[n-i-1];a[n-i-1]=t;}

     }

    }  

    void main()

    {int a[N]={8,4,9,3,2,1,5},i;

    sort(a,N);

    printf("sorted:

\n");

    for(i=0;i

    printf("\n");

    }

16.下列程序中函数find_replace的功能是:

在s1指向的字符串中查找s2指向的字符串,并用s3指向

    的字符串替换在s1中找到的所有s2字符串。

若sl字符串中没有出现s2字符串,则不做替换并使

    函数返回0,否则函数返回1。

试完善程序以达到要求的功能。

   #include

    #include

    int find_replace(char s1[],char s2[],char s3[])

    {  int i,j,k,t=0;  char temp[80];

      if(s1[0]=='\0'||s2[0]=='\0')return t;

      for(i=0;s1!

='\0';i++)

      {  k=0;  j=i;

         while(s1[j]==s2[k]&&s2[k]!

='\0')

         {  j++;

           ___(23)_________ 

         }

         if(s2[k]=='\0')

         {  strcpy(temp,&s1[j]);

            ___________(24)________;

            i=i+strlen(s3);

           _______(25)_________;

            t=1;

         }

    }

    return t;

  }

    void main()

    {char line[80]="This is a test program and a test data.";

     char substr1[10]="test",substr2[10]="actual"; 

     int k;

     k=find_replace(line,substr1,substr2);

     if(______(26)_______)

       puts(line);

     else

      printf("not found\n");

         }

17.设hl和h2分别为两个单链表的头指针,链表中结点的数据结构为:

    typedef struct node

    {int data;

     struct  node *next;

    }NODE;    .

    sea_del函数的功能是:

删除hl指向的链表中首次出现的与h2指向的链表中数据完全匹配的

    若干个连续结点,函数返回hl指向链表的头指针。

例如,初态下,hl指向链表和h2指向链表如下图所示:

试完善函数sea_del以达到要求的功能。

NODE *sea_del(NODE *h1,NODE *h2)

{NODE *p,*ph,*q,*s;

  ph=NULL;p=q=h1;  s=h2;

  if(h1==NULL||__(22)__) return h1;

  while(p!

=NULL&&s!

=NULL)

  {while(q->data==s->data&&q&&s)

    {  q=q->next;

       s= __(28)__;

    }

    if(s!

=NULL)    /*失配时,h1起始结点后移,h2从首结点开始*/

    {  ph=p;

       p=q=p->next;

       s=__(29)__;

    }

    else    、

      if(ph==NULL)  h1=q;

      else ph->next=q;

    }

     __(30)__   

   }

改错题:

[程序功能]

  输入两个正确日期且年份在1900-9999范围内,计算

并输出两个日期之间间隔的天数,例如:

2008-8-1

和2009-8-1之间间隔的天数为365

  提示:

能被4整除并且不能被100整除的年份是闰年,能

被400整除的年份也是闰年,其他年份则是平年

[测试数据与运行结果]

显示:

first  date:

输入:

1980-2-1

显示:

second date:

2009-8-1

输出:

10774  days

[含有错误的源程序]

#include 

#define leap(int y) ((y)%4==0 && (y)%100!

=0||(y)%400==0)

struct d

{int y,m,d;};

int days(struct d d1,struct d d2)

{int mon[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}};

 int i; long td=0;

 for(i=d1.y;i

   td=leap(i)?

366:

365;

 for(i=1;i

   td-=mon[leap(d1.y)];

 td-=d1.d-1;

 for(i=1;i

  td+=mon[leap(d2.y)];

 td+=d2.d-1;

 return td;

}

void main()

{struct d d1,d2;

 long td;

 printf("first date:

");

 scanf("%d-%d-%d",d1.y,d1.m,d1.d);

 printf("second date:

");

 scanf("%d-%d-%d",d2.y,d2.m,d2.d);

 td=days(d1,d2);

 printf("%ld",td);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1