分享到:

四川农业大学网络教育期末考试 C语言 复习题

2019-12-04 作者:云南成教招考网 四川农业大学 阅读数:1256

四川农业大学网络教育期末考试

C语言 复习题

     (课程代码  352062)

 

一、选择题

 (1) 有如下程序

main()

{    int     y=3,x=3,z=1;

printf(“%d   %d\n”,(++x,y++),z+2);

}

运行该程序的输出结果是:     D     

A) 3  4            B) 4  2            C) 4  3           D) 3  3

              (第三章 输出语句)

(2)当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是:     C     

   A)c=b=a;         B)(a=c)‖(b=c);

   C)(a=c)&&(b=c);  D)a=c=b;

                (第四章 关系表达式)

(3)在以下一组运算符中,优先级最高的运算符是:     C     

      A)<=                          B)=

      C)%                           D)&&

                  (第四章 运算符的优先级)

(4)请选出合法的C语言赋值语句:     B     

     A) a=b=58                     B) i++;

C) a=58,b=58                  D) k=int(a+b)

              (第三章 赋值语句)

(5)以下说法中正确的是:     C     

   A)#define和printf都是C语句       B)#define是C语句,而printf不是

   C)printf是C语句,但#define不是    D)#define和printf都不是C语句

          (第三章 语句概述)

(6)若有以下定义:    D     

     char    a;    int   b;

     float   c;    double   d;

    则表达式a*b+d-c值的类型为

     A) float     B) int      C) char       D) double

          (第二章 类型混合运算)

(7)若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是:     C    

     A)1                              B)2

     C)2.0                            D)2.5

              (第二章类型混合运算)

 

(8)有以下程序

    #include 

    main()

    { int   a,b,c=246;

      a=c/100%9;

      b=(-1)&&(-1);

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

    }

  输出结果是:     A     

   A) 2,1          B) 3,2             C) 4,3            D) 2,-1

                    (第四章 逻辑运算符)

(9)以下程序运行后,输出结果是:     C     

   A) cde         B)字符c的ASCII码值  C)字符c的地址   D)出错

          main()

          {   char   *s="abcde";

             s+=2;

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

          }

             (第九章 指针的概念)

(10)若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为:     D        

   A)a<>0                          B)!a

   C)a=0                           D)a

                 (第4章 条件表达式)

(11)有如下程序段,其输出结果是什么:    A    

main( )

{int a=1,b=3,c=5;

 if (c=a+b)

 printf ("yes\n");

else printf("no\n"); }

 A) yes   B) no    C)  yes\n    D) no\n

                  (第4章 条件语句)

(12)假设在程序中a,b,c均被定义成整型,并且已赋大于1的值,则下列能正确表

                  1

      示代数式-----的表达式是:     D     

                 abc

     A) 1/a*b*c

     B) 1/(a*b*c)

     C) 1/a/b/(float)c

D) 1.0/a/b/c

            (第二章 类型混合运算)

(13)若i ,j已定义为int类型,则以下程序段中内循环体的总的执行次数是:     A     

     for (i=5;i;i--)

        for(j=0;j<4;j++){...}

  A)20                               B)15

  C)24                               D)16

                    (第五章for循环语句)

(14)下面哪个程序段不是死循环:     C     

(A) a=0; sum=0;

while(a=1)

{sum=sum+a;a++;}

    (B)  {int I,sum=0;

         For(i=1;i<=3;sum++)

            sum+=I;

           } 

    (C)  sum=0;

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

         sum=sum+i;

         

 

     (D)  sum=0;

      for(i=1;  ;i++)

         sum=sum+i;

(第五章for循环语句)

15、设有以下定义:

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

       int (*prt)[3]=a,*p=a[0]

    则下列能够正确表示数组元素a[1][2]的表达式是:    D     

     A)*((*prt+1)[2])             B)*(*(p+5))

C)(*prt+1)+2               D)*(*(a+1)+2)

 

16、不能把字符串:Hello!赋给数组b的语句是:    B    

A)char b[10]={'H','e','l','l','o','!'};

B)char b[10];b="Hello!";

C)char b[10];strcpy(b,"Hello!");

D)char b[10]="Hello!";

 

17、设有以下定义:

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

       int (*prt)[3]=a,*p=a[0]

    则下列能够正确表示数组元素a[1][2]的表达式是:    D     

     A)*((*prt+1)[2])             B)*(*(p+5))

C)(*prt+1)+2               D)*(*(a+1)+2)

 

  18、 请选出以下语句的输出结果:   A      

               printf("%d\n",strlen("\t\"\065\xff\n"));

A) 5       B) 14       C) 8        D)输出项不合法,无正常输出

 

 

(19)假定所有变量均已正确说明,下列程序段运行后x的值是:     B     

      a=b=c=0;x=35;

      if(!a)x--;

         else if(b);

      if(c)x=3;

         else x=4;

A)34              B)4          C)35              D)3

              (第四章if语句)

(20)运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为:    C     

   A) 2,0         B) 5,0           C) 5,5          D) 2,5

       #include<stdio,h>

       main()

       { int v1=0,v2=0;

         char ch;

         while((ch=getchar())!='#')

             switch(ch)

             { case  'a';

               case  'h';

               default;    v1++;

               case   '0'; v2++;

             }

       printf("%d,%d\n",v1,v2);

}

    (第四章switch语句)

(21)执行以下程序段时:  A        

   A)循环体将执行一次              B)循环体将执行两次

   C)循环体将执行无限次            D)系统将提示有语法错误

          x=-1;

          do  {x=x*x;    }   while(! x);

             (第五章do_whule语句)

(22)执行下面的程序后,a的值为:     B     

     main()

     {   int a,b;

         for (a=1,b=1;a<=100;a++)

         {     if(b>=20)break;

               if(b%3==1)

               {b+=3;

                continue;

                }b-=5;

         }

     }

   A)7                                 B)8

   C)9                                 D)10

            (第5章break,continue语句)

23)下面能正确进行字符串赋值操作的语句是:    C     

   A) char s[5]={"ABCDE"};      B) char s[5]={'A','B','C','D','E'};

   C) char *s;s="ABCDEF";       D) char *s; scanf("%s",s);

             (第6章 字符数组的定义;第9章 字符串指针)

(24)不能把字符串:Hello!赋给数组b的语句是:    B     

A)char b[10]={'H','e','l','l','o','!'};

B)char b[10];b="Hello!";

C)char b[10];strcpy(b,"Hello!");

D)char b[10]="Hello!";

      (第6章 字符数组的使用)

(25)函数调用:strcat(strcpy(str1,str2),str3)的功能是:     C    

     A)将串str1复制到串str2中后再连接到串str3之后

     B)将串str1连接到串str2之后再复制到串str3之后

     C)将串str2复制到串str1中后再将串str3连接到串str1之后

D)将串str2连接到串str1之后再将串str1复制到串str3中

       (第6章 字符串处理函数)

(26)给出以下定义:

     char x[ ]="abcdefg";

     char y[ ]={'a','b','c','d','e','f','g'};

    则正确的叙述为:   C     

     A)数组X和数组Y等价              B)数组x和数组Y的长度相同

     C)数组X的长度大于数组Y的长度    D)数组X的长度小于数组Y的长度

        (第6章 字符数组的定义)

 

(27)以下程序的输出结果是:    D     

   A)AfghdEFG     B)Abfhd     C)Afghd    D)Afgd

   #include   

   main(  )

   {    char    *p1,*p2,str[50]="ABCDEFG";

        p1="abcd";      p2="efgh";

        strcpy(str+1,p2+1);    strcpy(str+3,p1+3);

        printf("%s",str);

   }

       (第6章 字符串处理函数;第9章 字符串指针)

(28)下面哪个程序段编译会出错:    D     

A) max(int x,int y,int *z)          B) max(int x, int y)        

      { *z=x>y?x:y;}                {return  x>y?x:y;}

C) max(int x,int y)                  D)   int max(int x, y)        

      { int z;                            {  int z

        z=x>y?x:y;                           z=x>y?x:y;

        return z;}                              return z;}

 

 (29)下列程序执行后输出的结果是:    D     

     #include〈stdio.h〉

     f(int a)

     {  int b=0;

        static c=3:

        a=c+ +,b+ +;

        returu(a);

     }

     main( )

     { int a=2,i,k;

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

           k=f(a+ +);

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

     }

     A)3         B)0         C)5         D)4

         (第7章 静态变量)

(30)下列程序执行后输出的结果是:    A     

     int d=1;

     fun (int q)

     {    int d=5;

          d + =q+ +;

          printf("%d".d);

     }

     main( )

     {    int a=3;

          fun(a);

          d + = a + +;

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

     }

     A)8   4     B)9   6       C)9   4       D)8    5

         (第7章 函数调用;第3章 复合赋值运算符)

 (31)以下程序的输出结果是:    D     

     main()

     {   int x=10,y=10;

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

     }

   A)10 10                         B)9 9

   C)9  10                         D)10 9

       (第7章 函数调用时,参数结合方式:右结合)

(32)有以下程序

    int fun(int x , int y , int *cp , int *dp)

   {  *cp=x+y;    *dp=x-y;  }

   main()

   {  int a, b, c, d;

    a=30;  b=50;

    fun(a,b,&c,&d);

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

       }

 输出结果是:    C     

     A)50,30        B)30,50         C)80,-20         D)80,20

 

         (第7章 函数调用 ;第9章 指针变量做参数)

 

(33)执行下面的程序后,a的值是:    B     

     #define    SQR(X)  X*X

     main( )

     { int a=10,k=2,m=1;

       a/=SQR(k+m)/SQR(k+m);

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

     }

     A)10        B)1        C)9         D)0

         (第8章 带参宏定义)

(34) 以下有关宏替换的叙述不正确的是:    D     

A) 宏替换不占用运行时间            B)宏名无类型

C)宏替换只是字符替换              D)宏名必须用大写字母表示

        (第8章 宏定义)

(35)C语言的编译系统对宏命令的处理是:    D     

A) 在程序运行时进行的

B) 在程序连接时进行的

C) 和C程序中的其它语句同时进行编译的

D) 在对源程序中其它成份正式编译之前进行的

        (第8章 宏定义运行特点)

(36)若有宏定义如下:

            #define  X    5

            #define  Y    X+1

            #define  Z    Y *X / 2

      则执行以下printf语句后,输出结果是:    D     

            int a;  a=Y;

            Printf("%d\n", Z);

            Printf("%d\n", - - a);

      A) 7          B) 12          C) 12           D) 7

         6             6              5              5

           (第7章 函数调用;第8章 带参宏定义)

37、 若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是:   D      
A) &t[3][2]  B) t[3][2]   C) t[1][0]   D) t[2]+1

 

38、若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是:    C     

     A)1                              B)2

     C)2.0                            D)2.5

 

39、当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是:     C     

   A)c=b=a;         B)(a=c)‖(b=c);

   C)(a=c)&&(b=c);  D)a=c=b;

 

40、C语言的编译系统对宏命令的处理是:  D       

A) 在程序运行时进行的

B) 在程序连接时进行的

C) 和C程序中的其它语句同时进行编译的

D) 在对源程序中其它成份正式编译之前进行的

 

(41)请读程序:

#define ADD(x)   x+x

main()

{

   int m=1, n=2, k=3;

   int sum=ADD(m+n) * k;

   printf("sum=%d", sum);

}

上面程序的运行结果是:    B     

A) sum=9      B) sum=10       C) sum=12       D) sum=18

       (第8章 带参宏定义)

(42)在宏定义#define PI  3.14159中,用宏名PI代替一个:    D     

A) 常量       B)单精度数        C)双精度数       D)字符串

          (第8章 宏定义)

 

(43)设有以下定义:

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

       int (*prt)[3]=a,*p=a[0]

    则下列能够正确表示数组元素a[1][2]的表达式是:    D     

     A)*((*prt+1)[2])             B)*(*(p+5))

C)(*prt+1)+2               D)*(*(a+1)+2)

    (第9章 数组指针与指向主组的指针)

 

44、能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假“的表达式是___C____。

A) (x>=1)&&(x<=10)&&(x>=200)&&(x<=210)

B) (x>=1) || (x<=10) || (x>=200) || (x<=210)

C) (x>=1)&&(x<=10) || (x>=200)&&(x<=210)

D) (x>=1) || (x<=10)&&(x>=200) || (x<=210)

 

45、在C语言中,合法的长整型常数是:     A     

A)0L           B)4962710     C)0.054838743    D)2.1869e10

 

46、下列4个函数中,:     C     能实现交换变量值的功能。

A)void fun_a(int x,int y)                 B)void fun_b(int *x,int *y)

       {     int *p;                                        {     int *p;

                     *p=x;x=y;y=*p;}                        *x=*y;*y=*x;}

C)void fun_c(int *x,int *y)                     D)void fun_d(int x,int y)

       {     *x=*x+*y;                                  {     int p;

              *y=*x-*y;                                         p=x;x=y;y=p;

              *x=*x-*y;}                                 }

 

47、 请选出合法的C语言赋值语句:     B     

     A) a=b=58                     B) i++;

C) a=58,b=58                  D) k=int(a+b)

 

48、下列程序的输出结果是:   C       

     main( )

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

       p=a;

       k=&p;

       printf("%d",*(p++));

       printf("%d\n",* *k);

     }

     A)4  4     B)2  2       C)2  4      D)4  6

 

 49、以下说法中正确的是:    C      

   A)#define和printf都是C语句       B)#define是C语句,而printf不是

   C)printf是C语句,但#define不是    D)#define和printf都不是C语句

 

 

50、有以下程序

    #include 

    main()

    { int   a,b,c=246;

      a=c/100%9;

      b=(-1)&&(-1);

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

    }

  输出结果是:   A       

   A) 2,1          B) 3,2             C) 4,3            D) 2,-1

 

51、若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为:  D       

   A)a<>0                          B)!a

   C)a=0                           D)a

 

52、假定所有变量均已正确说明,下列程序段运行后x的值是:     B     

      a=b=c=0;x=35;

      if(!a)x--;

         else if(b);

      if(c)x=3;

         else x=4;

A)34              B)4          C)35              D)3

 

53、 执行以下程序段时:    A     

   A)循环体将执行一次              B)循环体将执行两次

   C)循环体将执行无限次            D)系统将提示有语法错误

          x=-1;

          do  {x=x*x;    }   while(! x);

 

54、以下程序的输出结果是:    D     

   A)AfghdEFG     B)Abfhd     C)Afghd    D)Afgd

   #include   

   main(  )

   {    char    *p1,*p2,str[50]="ABCDEFG";

        p1="abcd";      p2="efgh";

        strcpy(str+1,p2+1);    strcpy(str+3,p1+3);

        printf("%s",str);

   }

 

55、以下程序的输出结果是:    D     

     main()

     {   int x=10,y=10;

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

     }

   A)10 10                         B)9 9

   C)9  10                         D)10 9

 

二 、 简单题:

(1)      简述C语言中有哪几种语句,并举例?(P43)

        5种。(控制、函数、表达式、空、复合语句)

(2)      分别各列出两种C语言中的输入输出函数,并例举出每个函数的使用格式?  

Getchar(); putchar(); printf();scanf()            (p48)

(3)      简述C语言中三种循环结构的特点。 (p84)

while ; do_while  ;  for

(4)      简述C语言中全局变量与局部变量的区别,以及对程序调用的影响?(P146)

全局:函数体外定义的变量;局部:函数体内定义的变量;

全局对各个程序中的修改都起作用。

(5)      简述C语言中动态变量与静态变量的区别,以及对程序调用的影响?(P150)

动态:auto; 静态:static ,静态变量存储在专用的静态存储区中,在函数结束是不会消失,下次对函数调用有起作用,直到整个程序运行结束才消失。

  (6) 分析数组指针和指向数组的指针有何区别?(p190)

      定义方式不同;意义不同。

(7)          分析什么是形式参数,实际参数?比较实际参数是数组名和数组元素时有何区别?(p123)

数组元素是一般值传递,数组名是传递的地址,因此, 对主调函数的影响也不同。

  (8) 简述文件操作的步骤?(p292)

         1、文件指针的定义2、文件打开3、文件读写4、文件关闭

  (9)C语言中十进制、八进制、十六进制表示的方法是什么?十进制数100表示为八进制、十六进制分别是什么? (0144,0X64)

(10)简述break;和continue;语句的不同?

       break;跳出循环结构,执行循环结构后面的语句。

 continue;跳出本次循环,回到循环开头重新执行。

(11)、分别各列出两种C语言中的输入输出函数,并例举出每个函数的使用格式?  

printf,scanf,getchar,putchar

(12)、有如下定义:int  a[10],*p=a; 和float a[10],*p=a;若执行p++;后,p增值是否相同?并说明其原因?

     不一样,不同数据类型存储占用空间不一样。

三、编 程 复 习 题

【程序1】

题目:输入三个整数x,y,z,请把这三个数由小到大输出。
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
       然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
2.程序源代码:
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{t=x;x=y;y=t;} /*交换x,y的值*/
if(x>z)
{t=z;z=x;x=t;}/*交换x,z的值*/
if(y>z)
{t=y;y=z;z=t;}/*交换z,y的值*/
printf("small to big: %d %d %d\n",x,y,z);
}
-----------------------------------------------------------------------------

【程序2】

题目:输出9*9口诀。
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
2.程序源代码:
#include "stdio.h"
main()
{
  int i,j,result;
  printf("\n");
  for (i=1;i<10;i++)
   { for(j=1;j<10;j++)
     {
      result=i*j;
      printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
     }
    printf("\n");/*每一行后换行*/
   }
}
-----------------------------------------------------------------------------

【程序3】

题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
       则表明此数不是素数,反之是素数。       
2.程序源代码:
#include "math.h"
main()
{
  int m,i,k,h=0,leap=1;
  printf("\n");
  for(m=101;m<=200;m++)
   { k=sqrt(m+1);
    for(i=2;i<=k;i++)
      if(m%i==0)
       {leap=0;break;}
    if(leap) {printf("%-4d",m);h++;
         if(h%10==0)
         printf("\n");
        }
    leap=1;
   }
  printf("\nThe total is %d",h);
}

-----------------------------------------------------------------------------
【程序4】
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
    本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:
main()
{
int i,j,k,n;
printf("'water flower'number is:");
  for(n=100;n<1000;n++)
  {
   i=n/100;/*分解出百位*/
  j=n/10%10;/*分解出十位*/
   k=n%10;/*分解出个位*/
   if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
    {
    printf("%-5d",n);
    }
  }
printf("\n");
}

-----------------------------------------------------------------------------
【程序5】

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为'\n'.
      
2.程序源代码:
#include "stdio.h"
main()
{char c;
  int letters=0,space=0,digit=0,others=0;
  printf("please input some characters\n");
  while((c=getchar())!='\n')
  {
  if(c>='a'&&c<='z'||c>='A'&&c<='Z')
   letters++;
  else if(c==' ')
   space++;
    else if(c>='0'&&c<='9')
        digit++;
      else
        others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
space,digit,others);
}

 

自己复习有关排序的程序!!

 

推荐阅读

云南成人招考网