Bootstrap

C语言真题卷(1)

 

一、选择题(每小题2分,共30分)

1.以下(                ) 是错误的整型常量。

A. -0xabcdef          B. 018          C. 0x29          D. 011

 

2.为了判断两个字符串s1和s2是否相等,应当使用(            )。

A.  if(s1==s2)                          B.  if(s1=s2)              

C.  if(strcmp (s1,s2) == 1)             D.  if(strcmp(s1,s2) == 0)

 

3.以下scanf函数调用语句中错误的是 (         )。

  struct student

  {  char name[20];

     int age;

  }pup[5], *p;

  p=pup;

A.   scanf("%d", p->age);        B.   scanf("%s", pup[1].name);

C.   scanf("%d", &(p->age));    D.   scanf("%s", p->name);

 

4. 以下程序运行结果(              )。

        #include <stdio.h>

int main( )

{

             int sum=0,item=0;

             while (item<5)

             {

                item++;

                sum+=item;

                if(sum>=8)

             break;

               }

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

              return 0;

}

A. 15            B. 10            C. 6               D. 9

 

5.下面程序段的运行结果是(               )。

#include <stdio.h>

int main( )

{

   int i=0, a[]={3,4,5,4,3};

   do{

      a[i]++;

   }while(a[++i]<5);

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

      printf("%d ",a[i]);

   return 0;

}

A.  4 5 6 5 4      B. 3 4 5 4 3    C. 4 5 5 5 4      D. 4 5 5 4 3

 

6.以下程序的输出结果是(             )。

  #include <stdio.h>

int main( )

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

int *p,*q,i,x;

p=&a[0];  q=&a[8];

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

if(*(p+i) == *(q-i) )

               x=*(p+i)*2;

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

return 0;

}

  1.  2         B.  18         C. 10          D.  不确定

 

7.以下程序段的运行结果是(               )。

  #include <stdio.h>

int main( )

{ int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}, *p[4],i;

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

      p[i]=&a[i*3];

    printf("%d\n",p[3][2]);  

    return 0;

}

  1. 11       B.  12       C. 8      D.  9

 

8.要把一个函数计算结果的两个整型数据返回给主调函数,在下面的方法中不正确的是(        )。

A.  用两个return语句              B. 形参用数组,该数组包含两个整型数据

C.  形参用两个整型的指针          D. 用两个整型全局变量

 

9.若已定义:int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a, i=3; 则对a数组元素不正确的引用是  (                 )。

A.a[p-a]         B.p[i]            C.*(&a[i])          D.a[p+a]

 

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

#include <stdio.h>

#include <string.h>

int main( )

{

char s[20]="abcd",*p2="ABCD",str[50]="xyz";

strcpy(str+2, strcat(s+2,p2+1));

printf("%s\n", str);  

     return 0;

}

A. xyabcAB        B. abcABz       C. ABabcz       D. xycdBCD

 

11.若有定义:int a=7; double x=2.5,y=4.7; 则表达式x+a%3*(int)(x+y)%2/4的值是(        )。

A.   2.500000       B. 2.750000         C. 3.500000        D. 0.000000

 

12.对于语句  int *p[10]; ,以下说法正确的是(                    )。

 A. p是一个指针,指向一个数组,数组的元素是整型数据

 B. p是一个指针,指向一个数组,数组中有10个整型数据

 C. p是一个数组,它的每一个元素是指向整型数据的指针

D. p是一个数组,它的每一个元素是指向10个整型数据的指针

 

13.下面程序的输出结果是(          )。

  #include <stdio.h>

#include <string.h>

int main (  )

{

    int i;

    char *s= "abcd";

    for ( i=0 ; i<strlen(s); i++)

       printf ("%s\n" ,s+i );

  return 0;

}

  1. abcd           B. abcd               C. d            D. d

abc               bcd                   cd              dc

ab                cd                    bcd             dcb

a                 d                     abcd            dcba

 

14.若a,b为整型变量,语句:printf("%d",(a=3)&&(b=-3)); 的输出结果是(          )。

A.   3         B.  -3       C.  1           D. 0

 

15.下列函数欲实现对两个整型变量的值进行交换,下列说法正确的是(               )。

void  swap(int x, int y)

{  int t;

   t=x;  x=y;  y=t;

}

主函数中定义变量int a, b;  调用函数的语句为 swap(&a, &b)

A. 程序有错,调用语句应为swap(a, b);    B.程序有错,函数swap缺少return语句

C. 程序有错,应将swap函数中的形参x,y,局部变量t定义为整型指针类型,执行语句不变

D. 以上说法都不正确

二、填空题(每空2分,共30分)

1. 在C语言中存储字符串 "abcdef" 至少需要(                        )个字节。

 

2. 用if语句实现与以下赋值语句 k=a>b?(b>c?1:0):0;一样的功能, 对应的if语句为

(                                                  )。

 

3. 在C程序中有自定义函数f,函数首部为:void f(int *x),主函数中有数组定义为 int a[5],以数组a为实参,则调用该函数的语句为(                           )。

 

4. 使用malloc函数,分配能够存储4个double数据的内存空间,并将起始地址赋值给指针变量p,变量p已经定义:double *p; 相应的赋值语句是(                        )。

 

5. 以下程序的输出结果是(                      )。

  #include <stdio.h>

#define PT 5.5

#define S(x) PT*x*x

int main( )

{    int a=1,b=2;

         printf("%.1f\n" ,S(a+b));

         return 0;

 }

 

    6. 如果指针fp所指向的文件未结束,函数feof(fp)的返回值为(                        )。

 

    7. 若有以下定义:

struct link{

      int data;

        struct link *next;

}*head, *p;

 并已建立如下图所示的链表结构,第1个结点为10所在结点,第2个结点为30所在结点。

2249b99225014f550fb4815e33b7404c89f9045a?a03844f58f51247fabb8e4c9463edb0ba2634a26?a03844f58f51247fabb8e4c9463edb0ba2634a26?a03844f58f51247fabb8e4c9463edb0ba2634a26?2249b99225014f550fb4815e33b7404c89f9045a?2249b99225014f550fb4815e33b7404c89f9045a?2249b99225014f550fb4815e33b7404c89f9045a?head …

 

指针P指向如下结点:

a03844f58f51247fabb8e4c9463edb0ba2634a26?2249b99225014f550fb4815e33b7404c89f9045a?p

 

则能够把p所指结点插入到链表中,成为链表第2个结点的程序段是

(                                                                            )。

 

    8.下列程序的输出结果是(                                 )。

       #include <stdio.h>

int main( )

      {   int i;

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

          switch(i)

         {   case 1: printf("%d",i);

             case 2: printf("%d",i);

             default: printf("%d",i);

         }

       return 0;       }

    9. 以下函数的功能是(                                                    ) 。

int function(char *x)

{

char *p=x;

while(*p++);

return(p-x-1);

}

 

    10. 若有定义:int a=10,b=8,c; 则执行语句c=(a&b)>>2; 变量c的值为(               )。

    

11. 以下程序的功能是统计输入的字符串中数字字符的个数并输出,输入换行符时结束,请分析程序并填空。

 #include <stdio.h>

int main( )

{

   int n=0; char c;

   while (                        )

     if (                          )

 n++;

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

   return 0;

}

 

12. 函数fun的函数首部为:int  fun(int i,int j)且函数指针变量P定义如下:int(*P)(int i,int j);则使指针P指向函数fun的赋值语句是(                           )。

 

13. 若有定义结构体及函数定义如下,函数fun所实现的功能是(                              )。

  struct node{

int data;

struct node *next;

};

void fun(struct node *head)

{

struct node *p=head;

while(p)

{  if ((p->data%)%2)

               printf("%d",p->data);

           p=p->next;

}

}

 

14. 有以下语句,执行之后变量k的值是(                      )。

  int a[5]={2,4,6,8,10},*p, k;

  p=&a[2];

  k=*(--p);  

 

   三、程序阅读题。 (每小题5分,共30分)

     1. 写出以下程序的输出结果。

          #include <stdio.h>

int main( )

 {  int  x, y;

            for(x=30, y=0; x>=10, y<10; x--, y++)

                 x/=2, y+=2;

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

          return 0;

}

 

      2. 请写出以下程序的运行结果。

              #include<stdio.h>

int z=0;

void f(int *x, int y)

{

              ++*x;

              y--;

              z=*x+y+z;

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

}

int main( )

{

                int x=1, y=5,z=9;

                f(&x,y);

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

                return 0;

}

         

      3. 阅读以下程序,说明函数f实现的功能是什么,并写出主函数运行后的输出结果。

            #include <stdio.h>

void f(int *a,int n)

{   int i,t;

                for(i=0;i<n/2;i++)

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

}

int main( )

{   int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;

                f(b+2,5);

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

 s+=b[i];

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

             return 0;

}

 

 

      4.  请写出以下程序的运行结果。

            #include <stdio.h>

int f(int *a,int n)

{   if(n>1)

return a[0] + f(&a[1],n-1);

                else

 return a[0];

}

int main( )

{   int aa[ ]={1,2,3,4,5},s;

    s=f(&aa[0],sizeof(aa)/sizeof(int));

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

return 0;

}

 

      5. 请写出以下程序的运行结果。

              #include <stdio.h>

int fun(int k)

{

                  static int a=0;

                  a+=k;

                  return a;

}

int main( )

{  int i,s=0;

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

                    s=s+fun(i);

                printf("s=%d\n",s);

                return 0;

}

 

      6. 请写出下列程序的运行结果。

#include <stdio.h>

#include <string.h>

int main( )

{

 char ch[3][5]={"135","246","789"},*p[3];

             int i,j,s=0;

             for(i=0;i<3;i++) p[i]=ch[i];

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

              for(j=0;p[i][j]>='0'&&p[i][j]<='9';j+=2)

            s=10*s+p[i][j]-'0';

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

            return 0;

}

 

   四、编程题。 1,2,3小题每小题10分,4,5小题每小题15分,共60分。

    1. 黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。例如,对三位数207:第1次重排求差得:720 - 27 = 693;第2次重排求差得:963 - 369 = 594;第3次重排求差得:954 - 459 = 495;编写程序,实现如下功能:输入一个三位整数,输出将其转换为黑洞数的过程,输入输出格式为:

     输入: 207

     输出: 1:720-27=693

            2:963-369=594

            3:954-459=495

     如果输入的三位数字全部相同,则只输出一次重排求差过程,值为0就停止。

 

     2. 编写一个函数,实现字符串的复制,函数首部定义为:char * str_copy(char *d, char *s)

     函数功能为:将第二个参数s所表示的字符串复制到第一个参数d所表示的字符串中,函数返回值为第一个参数的值。请写出完整的函数,并写出主函数,对该函数进行验证。 (说明:本题不允许使用string.h中的标准函数,不允许改变函数首部)

 

3. Fibonacci数列定义如下:第1,第2个数均为1,从第3个数开始,该数是其前面两个数之和。Fibonacci数列为:1,1,2,3,5,8,13,… 。编写递归函数,求Fibonacci数列的第n个数,并编写主函数,调用该递归函数,输出数列第60个数的值。

 

4. 编写一个函数,函数功能为判断一个整数是否为质数。并写出主函数,调用该函数,将10000之内的所有质数输出到屏幕,每行输出10个数据,并统计一共有多少个质数;并将这些质数依次写入一个文件中,文件名为zhishu.dat,文件中的格式与输出格式一致。

 

5. 定义一个结构体类型描述图书的基本信息,一本图书的基本信息包括:编号,书名,作者,价格。  

编写程序,实现如下功能:(1)输入10本书的信息,保存在结构体数组中。(2)输出10本图书中价格最高的图书信息。(3)对结构体数组按照价格进行升序排列,排序之后,下标为0的数组成员存放价格最低的图书信息,…下标为9的数组成员存放价格最高的图书信息。

 

 

 

 

 

 

 

 

 

 

;