blogjava's web log

blogjava's web log
...

[分享]c语言问题100题

1.  C语言的主要特点有哪些?(多选)

    A.简洁、紧凑,使用方便、灵活,易于学习和应用。
    B.C语言是面向结构化程序设计的语言。
    C.C语言允许直接对位、字节和地址进行操作。
    D.数据类型丰富。
    E.C语言生成的目标代码质量高。
   
    答案:  ABCDE


2.  C语言程序由什么组成?(单选)

   A. 子程序   B. 主程序和子程序   C. 函数   D. 过程

   答案: C


3.  源程序要正确地运行,必须要有什么函数?(单选)

    A. printf函数    B. 自定义的函数
    C. main函数      D. 不需要函数

    答案: C

4.  指出下面合法的标识符:(多选)

    A. 3ab    B. int    C. ABC    D. a_3
    E. sum.a  F. #abc  G. _stu2  H. abc f

    答案:CDG

5.  指出下面哪些是保留字:(多选)

    A. char   B. abc    C. printf   D. Int
    E. float  F. define G. include  H. PI  

    答案:AEFG

6.  指出下面哪些是合法的用户定义的标识符?(多选)

    A. P-S   B. putchar   C. double   D. _908
    E. *par  F. sheep!   G. wind    H. x y

    答案:BDG


7.  C语言的基本类型哪些:(多选)

    A. 整型    B. 枚举型    C. 数组型    D. 指针型
    E. 字符型  F. 构造型    G. 实形      H. 空类型

    答案: ABEG

8. 这段程序中的常量有:(多选)
   #define PI  3.14
   void main()
   {
      int sum;

      sum = 10 + 15;

      printf("sum=%d\n",sum);
      printf("result is 25\n");
   }

   这段程序中常量有:

   A. 10   B. sum   C. 15
   D. 25   E. main  F. PI

   答案:ACF

9. C语言中整形常量按进制划分,有以下几种:(多选)

   A. 十六进制常量   B. 十进制常量
   C. 八进制常量     D. 二进制常量

   答案:ABC


10. 75的十六进制写法为___,八进制写法为___。
    0x75的八进制写法为___,十进制写法为___。
    075的十进制写法为___,十六进制写法为___。


    答案: 0x4b   0113
          0165   117
          61     0x3d

11. 如果要把常量327存入变量a中,a可以定义成哪些类型?(多选)

    A. int       B. char
    C. long      D. float
   
    答案: ACD

12. 下面哪些写法是对的,而且是常量?(多选)

    A. 125    B.  -.456    C. 1.25e20    D. 'AB'
    E. E6     F.  0238     G. 0xabcdef   H. "\n\\\'\123"

    答案: ABCGH

13. 下面哪个表达式的值为4.(单选)

   A. 11/3           B. 11.0/3
   C. (float)11/3    D. (int)(11.0/3+0.5)

   答案: D

14. 已知整型变量a=6,b=7,c=1,则下面表达式的值为多少?

   a+3                ___
   (b-a*3)/5          ___
   c*(a+b)+b*(c+a)    ___
   3.2*(a+b+c)        ___

   答案: 9
         -2       
         62
         44.8

15. 已知整型变量a=6,字符型变量ch='A',浮点数变量f=2.1,则下面表达式的值为多少?
    (提示:'A'的ASCII码为65)

   a+4.5        ___
   ch+a+f       ___
   (a+30)/5     ___
   (a+30)/5.0   ___

    答案: 10.5
          73.1
          7
          7.2

16. 指出下面错误的表达式:(多选)

   A. a+b=5          B. 56=a11   C. i=i++  
   D. 5.6+6.2%3.1    E. 12       F. a=5,b=6,c=7

   答案: BD

17. 若变量f已说明为float类型,i为int类型,则下面哪些表达式(或语句)能够实现将f中的数值保留小数点后两位,第三位进行四舍五入的运算?(多选)

    A. f=(f*100+0.5)/100.0       B. i=f*100+0.5,f=i/100.0;
    C. f=(int)(f*100+0.5)/100.0; D. f=(f/100+0.5)*100.0;

    答案: BC


18. 写出下面这个程序的结果。
   void main()
   {
      int count,i;
      int x,y,z;
  
      x=y=z=0;
      scanf("%d",&count);
      for(i=0;i<count;i++)
      {
         x=(x+1)%2;
         y=(y+1)%3;
         z=(z+1)%5;
      }

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

   如果运行时输入10, 结果是 x=___,y=___,z=___。
   如果运行时输入17, 结果是 x=___,y=___,z=___。

   答案:0   1   0
         1   2   2

19. 已知a为整型变量,那么与表达式 a!=0 真假值情况相同的表达式有哪些?(多选)

    A. a>0||a<0    B. a
    C. !a==0       D. !a

    答案: ABC

20.若要输出下列各种类型的数据,应使用什么转换说明符。(答题请打上双引号)

    字段宽度为4的十进制数应使用"%4d",字段宽度为6的十六进制数应使用___,八进制整数应使用___,字段宽度为3的字符应使用___,字段宽度为10,保留3位小数的实数应使用___,字段宽度为8的字符串应使用___。

    答案:"%6x"   "%o"   "%3c"   "%10.3f"   "%8s"


21. 该源程序执行后,屏幕上显示什么?(单选)

   void main()
   {
      int a;
      float b;

      a=4;
      b=9.5;

      printf("a=%d,b=%4.2f\n",a,b);
   }

   A. a=%d,b=%f\n    B. a=%d,b=%f
   C. a=4,b=9.50     D. a=4,b=9.5

   答案: C

22. 下面哪些是非法的C语言转义字符?(多选)

    A. '\t'    B. '\08'    C. '\0xaf'   D. '\\'   

    答案: BC

23. 以下程序输入三个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,然后输出a,b,c的值。请填空。
   #include <stdio.h>
   main()
   {
      ___
      int temp;
      printf("Enter a,b,c:");
      scanf("%d%d%d",___);
      ___
      a=b;
      b=c;
      ___
      printf("a=%d b=%d c=%d\n",a,b,c);
   }

   答案: int a,b,c;
         &a,&b,&c
         temp=a;
         c=temp;


24. 若a为整型变量,且有以下语句___。(单选)

   a=-017L;
   printf("%d\n",a);

   则下面哪个说法是正确的?

   A. 赋值不合法      B. 输出值为-17
   C. 输出为不确定值  D. 输出值为-15

   答案: B

25. 若ch为char型变量,a为int型变量,(已知字符a的ASCII十进制代码为97)则执行以下语句后的输出为哪一个?(单选)
   
    char ch;
    int a;

    ch='a';
    a=12;
    printf("%x,%o,",ch,ch,a);
    printf("k=%%d\n",k);

    A. 61,141,12,k=%d
    B. 输出项与格式描述符个数不符,输出为零值或不定值
    C. 61,141,k=%d
    D. 61,141,k=%12

    答案: C

26. 若有以下说明语句:(单选)

    char s='\\\092';

    则下面哪一项是正确的.

    A. 使s的值包含2个字符    B. 说明语句不合法
    C. 使s的值包含6个字符    D. 使s的值包含4个字符

    答案: B

27.若k,g均为int型变量,则以下语句的输出为哪一项?(单选)

    int k,g;
   
    k=017;
    g=111;
    printf("%d,",k);
    printf("%x\n",g);
   
    A. 15,6f   B. f,6f    C. f,111    D. 15,111

    答案: A


28. 请从下面的选项中选出正确的C语言的转义字符。(多选)
   
    A. '//'      B. '\''      C. '\t'   D. '\n'
    E. '\1011'   F. '/018'    G. '/123'   H. '\xaa'

    答案:   BCDH

29. 如这程序所示,如果运行时,输入 18,18 ,那么 b的值为多少?(单选)

   void main()
   {
      int a,b;

      scanf("%d,%o",&a,&b);

      b+=a;
      printf("%d",b);
   }

   A. 36   B. 34   C. 输入错误,b的值不确定   D. 18

   答案: C

30. 读懂程序并填空。
   #include <stdio.h>

   void main()
   {
      char ch=0x31;

      printf("%d\n",ch);//屏幕显示___
      printf("%o\n",ch);//屏幕显示___
      printf("%x\n",ch);//屏幕显示___
      printf("%c\n",ch);//屏幕显示___
   }

    答案: 49
          61
          31
          1
 
1.  C程序的结构可分为哪几类?(多选)

    A.顺序结构
    B.循环结构
    C.程序结构
    D.选择结构

    答案: ABD

2.  输入两个实数a,b,然后交换它们的值,最后输出(提示:要交换两个数得借助一个中间变量temp。首先让temp存放a的值,然后把b存入a,再把temp存入b就完成了)。
 
   void main()
   {
      float a,b,temp;

      printf("请输入a和b的值:");
      scanf("%d,%d",___);

      temp = a;
      ___
      ___
      printf("交换后, a=%d , b=%d\n",___);
   }

    答案: &a ,&b
          a = b;
          b = temp;
          a , b

3. 当a,b,c的值分别为3,4,5时,以下各语句执行后a,b,c的值为多少?

        (1)if(a>c)
           {a=b;b=c;c=a;}
           else
           {a=c;c=b;b=a;}
          
           执行后a,b,c的值为___,___,___
        (2)if(a<c)
             a=c;
           else
             a=b;c=b;b=a;
          
           执行后a,b,c的值为___,___,___
        (3)if(a!=c)
             ;
           else
             a=c;c=b;b=a;
          
           执行后a,b,c的值为___,___,___

    答案: 5  5  4
          5  5  4
          3  3  4

4.  当a=3,b=4,c=5时,写出下列各式的值。
    a<b的值为___, a<=b的值为___,
    a==c的值为___, a!=c的值为___,
    a&&b的值为___, !a&&b的值为___,
    a||c的值为___, !a||c的值为___,
    a+b>c&&b==c的值为___。

    答案: 1  1
          0  1
          1  0
          1  1
          0

5.  假设所有变量均已说明,写出下列各程序段运行后x的值。(多选)
    ok1=1; ok2=2; ok3=0; x=15; a=3; b=4;

    (1)if(!ok1)
         x++;
       else if(ok2)
       {
         if(ok3)
           x=3;
         else  
           x=4;
       }
      
       运行后x的值为下面哪一个?
       A. 15   B. 3   C. 16  D. 4

    (2)if(ok1)
       {
         if(a<b)
         {
           if(!ok3)
              x=0;
           else
              x=1;
         }
         else
           x=2;
       }
       else
         x=3;
      
       运行后x的值为下面哪一个?
       A. 0    B. 1    C. 2  D. 3

       答案: D  A

 

6.  若整数x分别等于95、87、100、43、66、79,则以下程序段运行后屏幕显示是什么?
    switch(x/10)
    {
      case 6:
      case 7:
         printf("Pass\n");
         break;
      case 8:
         printf("Good\n");
         break;
      case 9:
      case 10:
         printf("VeryGood\n");
         break;
      default:
         printf("Fail\n");
    }

    x等于 95时,程序段运行后屏幕上显示___
    x等于 87时,程序段运行后屏幕上显示___
    x等于100时,程序段运行后屏幕上显示___
    x等于 43时,程序段运行后屏幕上显示___
    x等于 66时,程序段运行后屏幕上显示___
    x等于 79时,程序段运行后屏幕上显示___
 
    答案: VeryGood  
          Good
          VeryGood
          Fail
          Pass
          Pass

7.  在C语言的if语句中,用作判断的表达式为___。(单选)
   
    A. 关系表达式        B. 逻辑表达式
    C. 算术表达式        D. 任意表达式

    答案: D

8.  请问:下面这个程序段的输出是什么?(单选)

    int a,b,c;

    a=7;b=8;c=9;
    if(a>b)
       a=b,b=c;c=a;
    printf("a=%d b=%d c=%d\n",a,b,c);

    A. a=7 b=8 c=7     B. a=7 b=9 c=7
    C. a=8 b=9 c=7     D. a=8 b=9 c=8

    答案: A

9. 该程序的运行结果是:(单选)

    void main()
    {
        int a,b,c;

        a=2;b=7;c=5;
        switch(a>0)
        {
        case 1:
           switch(b<10)
           {
              case 1:printf("^");break;
              case 0:printf("!");break;
           }
        case 0:
           switch(c==5)
           {
              case 0: printf("*");break;
              case 1: printf("#");break;
              default:printf("%%");break;
           }
        default:
           printf("&");
        }
        printf("\n");
    }

    A. ^#&     B. ^   C. &   D. ^!*#%&

    答案: A

10. 该程序的输出结果是多少?(单选)
  
    m=37;n=13;
    while(m!=n)
    {
       while(m>n)
         m=m-n;
       while(n>m)
         n-=m;
    }
    printf("m=%d\n",m);

    输出结果为:
    A. m=13   B. m=11
    C. m=1    D. m=2

    答案:C

11. 该程序的输出结果是多少?(单选)
  
    for(i=0;i<5;i++)
    {
      for(j=1;j<10;j++)
         if(j==5)
            break;
      if(i<2)
         continue;
      if(i>2)
         break;
      printf("%d,",j);
    }
    printf("%d\n",i);

    输出结果为:
    A. 10,3   B. 5,2
    C. 5,3    D. 10,2

    答案:C

12. 该程序的输出结果是什么?(单选)

  #include <stdio.h>
  void main()
  {
    int n; 
    n=0;
    while(n<8)
    {
      switch(n%3)
      {
      case 2:
        putchar('2');
      case 1:
        putchar('i');
        break;
      case 0:
        putchar('H');
      }
      n++;
    }
  }

    A. Hi2Hi2Hi  B. Hi2
    C. Hi2iHi2i  D. Hi2iHi2iHi

    答案: D


13. 该程序的输出结果是多少?(单选)

   #include <stdio.h>
   main()
   {
      int i,j,x=0;

      for(i=0;i<2;i++)
      {
         x++;
         for(j=0;j<=3;j++)
         {
            if(j%2)
               continue;
            x++;
         }
      }
      printf("x=%d\n",x);
   }

   A. x=4    B. x=8    C. x=6    D. x=12

   答案:  B


14. 若k为整型,以下while循环执行___次.(单选)

    k=2;
    while(k=0)
      printf("%d",k),k--;
    printf("\n");

    A. 无限次   B. 0次   C. 1次   D. 2次

    答案: D

15. 下面这个程序的输出是什么?(单选)

   #include <stdio.h>
   main()
   {
      int y=10;

      while(y--);
      printf("y=%d\n",y);
   }

   A. y=0    B. while构成死循环   C. y=1   D. y=-1

   答案: D

16. 以下程序从读入的整数数据中,统计大于零的整数个数和小于零的整数个数.用输入零来结束输入,程序中用变量i统计大于零的整数个数,用变量j统计小于零的整数个数.请填空.

   #include <stdio.h>
   main()
   {
      ___ n,i,j;
  
      printf("输入非零的整数(输入零结束程序)");
      i=j=0;
      scanf("%d",&n);
      while___
      {
         if(n>0)
            i=___;
         if(n<0)
            j=___;
         ___;
      }
      printf("i=%4d j=%4d\n",i,j);
   }

   答案: int
         (n!=0)
         i+1
         j+1
         scanf("%d",&n)


17. 圆周率pi的近似率可用下面的公式求得:
     pi*pi/6 约等于 1/(1*1) +1/(2*2) +...+1/(n*n)
    由以上公式可知,若n取值10000,则最后一项的值为1E-4,认为可达到精度要求。   以下程序用来求pi的近似值。请填空。(其中函数sqrt(a)用于求a的平方根)(单选)

   #include <stdio.h>
   #include <math.h>
   main()
   {
      long i;
      float pi;
  
      pi=0.0;
      for(i=1;i<=10000;i++)
         pi+=___;
      pi=sqrt(6.0*pi);
      printf("pi=%10.6lf\n",pi);
   }

    A. 1/i*i    B. 1/(i*i)    C. 1.0/i*i   D. 1.0/(i*i)
    答案: D


18. 斐波哪契数列中的头两个数是0和1,从第三个数开始,每个数等于前两个数的和,即:0,1,1,2,3,5,8,13,21,...等。下面这个程序就是求斐波哪契数列的前20个数。请填空。

   #include <stdio.h>
   void main()
   {
       int f,f1,f2,i;

       f1=0;f2=___;
       printf("%d\n%d\n",f1,f2);
       for(i=3;i<=30;___)
       {
          f=___;
          printf("%d\n",f);
          f1=f2;
          f2=___;
       }
   }

    答案: 1
          i++
          f1+f2
          f

19. 下面这个程序执行后i和s的值为多少?(单选)

#include <stdio.h>
void main()
{
    int i,s;

    i=0;s=0;
    while(i<10);
    {
        s+=(i++);
        printf("%d\n",s);
    }
    printf("i=%d\n",i);
}

    A. i值为9,s值为45   B. i值为10,s值为45
    C. i值为10,s值为36  D. 程序陷入了死循环

    答案:  D


20. 下面这个程序打印出以下这个三角形.请填空。

0
11
222
3333
44444
555555
6666666
77777777
888888888
9999999999

   void main()
   {
      int i,j;

      for(i=0;i<=___;i++)
      {
         for(j=0;j<___;j++)
             printf(___);
         ___
      }
   }

   答案: 9
         i
         "%d",i
         printf("\n");


21. 读懂下面的程序并填空。

   #include <stdio.h>
   void main()
   {
      long a,b,r;
 
      scanf("%ld",&a);
      b=0;
      do{
         r=a%10;
         a=a/10;
         b=b*10+r;
      }while(a);

      printf("%ld",b);
   }

    程序运行时如果输入 37   , 输出为___。
    程序运行时如果输入 -345 , 输出为___。
    程序运行时如果输入 10239, 输出为___。

    答案: 73
          -543
          93201

22. 如图所示,该算式在四个字母所在处欠缺四个数位,下面这个程序用穷举法搜寻解法。请填空。

    1A8  
   * 3B  
_________
   C73D  

#include <stdio.h>
void main()
{
  int A,B,C,D;
  int x,y,z;

  for(A=1;A<=9;A++)
    for(B=1;B<=9;B++)
      for(C=1;C<=9;C++)
        for(D=1;D<=9;D++)
        {
          x=100 + ___ + 8;
          y=___;
          z=___+700 +30 +___;

          if(___)
            printf("A=%d,B=%d,C=%d,D=%d\n",
                A,B,C,D);
        }
}

    答案:A*10
         30+B
         C*1000
         D
         x*y==z

1. 请改正下面这个远程序的错误:

#include <stdio.h>
main()
{
   int i,j,list(10);

   for(i=0,i<10,i++)
   {
       list[i] = 2*i+3;
       for(j=9,j>=0,j--)
          printf("%d\n",list[j]);
   }
}

    答案: int i,j,list(10); 改为 int i,j,list[10];
          for(i=0,i<10,i++) 改为 for(i=0;i<10;i++)
          for(j=9,j>=0,j--) 改为 for(j=9;j>=0;j--)


2.  指出下面各说明语句中哪些是合法的:(多选)
    A. int abcd[0x80];     B. char 9ab[10];
    C. char chi[-200];     D. int aaa[5]={3,4,5};
    E. float key[]={3.0,4.0,1,0};    F. char disk[];
    G. int n,floppy[n];      H. int cash[4]={1,2,3,4,5,6};

    答案: ADE

3.根据以下说明,写出正确的说明语句。
    (1)men是一个有10个整型元素的数组。
       ___
    (2)step是一个有4个实型元素的数组,元素值分别为1.9, -2.33, 0, 20.6。
       ___
    (3)grid是一个二维数组,共有4行,10列整型元素。
       ___

    答案: int mesh[10];
          float step[4] = {1.9, -2.33, 0, 20.6};
          int grid[4][10];

4.  请回答下列问题。
    (1)array是一个一维整形数组,有10个元素,前6个元素的初值是9,4,7,49,32,-5,请写出正确的说明语句。
       ___
    (2)该数组下标的取值范围是从___到___(从小到大)。
    (3)如何用scanf函数输入数组的第二个元素。
       ___
    (4)如何用赋值语句把39存入第一个元素。
       ___
    (5)如何表示把第六个和第四个元素之和存入第一个元素。
       ___


    答案:  int array[10] = {9,4,7,49,32,-5};
           0   9
           scanf("%d",&array[1]);
           array[0] = 39;
           array[0] = array[5] + array[3];


5.  写出以下初始化数组的长度。
    (1)int chn[3];
       数组chn的长度为___。
    (2)float isa[]={1.0,2.0,3.0,4.0,5.0};
       数组isa的长度为___。
    (3)int doom[8];
       数组doom的长度为___。
    (4)float pci[4][2];
       数组pci的长度为___。
    (5)int ast[3][3];
       数组ast的长度为___。
    (6)int att[3][4];
       数组att的长度为___。
    (7)float dell[][3]={{1,4,7},{2,5},{3,6,9}};
       数组dell的长度为___。

    答案: 6
          20
          16
          32
          18
          24
          36

6.  这个程序输入了20个数存放在一个数组中,并且输出其中最大者与最小者、,20个数的和及它们的平均值。请填空。

    void main()
    {
        char array___;
        int max,min,average,sum;
        int i;
   
        for(i=0;i<___;i++)
        {
           printf("请输入第%d个数:",i+1);
           scanf("%d",___);
        }

        max=array[0];
        min=array[0];
        for(i=0;i<=___;i++)
        {
           if(max<array[i])
              ___
           if(min>array[i])
              ___
           sum=___;
        }
        average = ___;

        printf("20个数中最大值是%d,",max);
        printf("最小值是%d,",min);
        printf("和是%d,",sum);
        printf("平均值是%d.\n",average);
    }

    答案: [20]
          20
          &array[i]
          19
          max=array[i];
          min=array[i];
          sum+array[i]
          sum/20
         

7.  该程序的运行结果是: min=___,m=___,n=___。
    void main()
    {
      float array[3][4]={
           {3.4,-5.6,56.7},
           {56.8,999.,-.0123},
           {0.45,-5.77,123.5},
           {43.4,0,111.2}
        };

        int i,j;
        int min;
        int m,n;
 
        min = array[0][0];
        m=0;n=0;
        for(i=0;i<3;i++)
        for(j=0;j<4;j++)
          if(min > array[i][j])
          {
            min = array[i][j];
            m=i;n=j;
          }

        printf("min=%d,m=%d,n=%d\n",min,m,n);
    }

    答案: -5.77  1   2

8. 下面的程序中哪一行有错误?(单选)

#include <stdio.h>
main()
{
   float array[5]={0.0};         //第A行
   int i;

   for(i=0;i<5;i++)
      scanf("%f",&array[i]);

   for(i=1;i<5;i++)
      array[0]=array[0]+array[i];//第B行

   printf("%f\n",array[0]);      //第C行
}

    A. 第A行  B. 第B行  
    B. 第C行  D. 没有

    答案: D

9. 若有以下整型的a数组,数组元素和它们得值如下所示:

   数组元素:  a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
   元素的值:  9    4    12   8    2    10   7    5    1    3

    (1)请写出对该数组的说明,并赋以上初值。
       ___
    (2)该数组的最小下标值为___,最大下标值为___。
    (3)写出下面各式的值:
         a[a[9]]的值为___
         a[a[4]+a[8]]的值为___

    答案: int a[10]={9,4,12,8,2,10,7,5,1,3};
          0    9
          8
          8
         

10. 写出下面这个程序的输出结果:

void main()
{
  char str[]="ABCDEFGHIJKL";

  printf("%s\n",str);       屏幕上显示___
  printf("%s\n",&str[4]);   屏幕上显示___
  str[2]=str[5];
  printf("%s\n",str);       屏幕上显示___
  str[9]='\0';
  printf("%s\n",str);       屏幕上显示___
}

    答案: ABCDEFGHIJKL
          EFGHIJKL
          AFCDEFGHIJKL
          AFCDEFGHI

11. 字符串"ab\n\\012/\\\""的长度为___。

    答案: 10

12. 下面哪一项是不正确的字符串赋值或赋初值的方式。(单选)

    A. char *str; str="string";
    B. char str[7]={'s','t','r','i','n','g'};
    C. char str1[10];str1="string";
    D. char str1[]="string",str2[]="12345678";

    答案: C

13. 若有以下说明和语句,则输出结果是哪一项?(单选)
    (strlen(s)为求字符串s的长度的函数)

    char s[12]="a book!";
    printf("%d",strlen(s));

    A. 12   B. 8   C. 7   D. 11

    答案: C


14. 若有以下说明和语句,则输出结果是___。(单选)
    (strlen(s)为求字符串s的长度的函数)

    char sp[]="\t\v\\\0will\n";   
    printf("%d",strlen(sp));

    A. 14    B. 3    C. 9    D. 字符串中有非法字符

    答案: B

15. 若有以下说明和语句,则输出结果是___。(单选)

    char str[]="\"c:\\abc.dat\"";
    printf("%s",str);

    A. 字符串中有非法字符     B. \"c:\\abc.dat\"
    C. "c:\abc.dat"           D. "c:\\abc.dat"

    答案: C


16. 读懂下面的程序并填空。

void main()
{
   char str[80];
   int i=0;

   gets(str);
   while(str[i]!=0)
   {
      if(str[i]>='a'&&str<='z')
        str[i]-=32;
      i++;
   }
   puts(str);
}

   程序运行时如果输入 upcase, 屏幕显示___
   程序运行时如果输入 Aa1Bb2Cc3, 屏幕显示___

   答案: UPCASE
         AA1BB2CC3

1. 分析下面的程序,并写出运行结果。

#include <stdio.h>
int max(int a,int b);

main()
{

  int x,y,z,t,m;
  scanf("%d,%d,%d",&x,&y,&z);
  t=max(x,y);
  m=max(t,z);
  printf("%d",m);
}

int max(int a,int b)
{
  if(a>b)
    return(a);
  else
    return(b);
}

    运行时若输入:10,15,9  则输出:___
    运行时若输入:300,129,300  则输出:___

    答案:15
          300

2. 分析下面的程序,并写出运行结果。

#include <stdio.h>
long sum(int a,int b);
long factorial(int n);

main()
{
  int n1,n2;
  long a;
 
  scanf("%d,%d",&n1,&n2);
  a=sum(n1,n2);
  printf("a=%1d",a);
}

long sum(int a,int b)
{
  long c1,c2;
  c1=factorial(a);
  c2=factorial(b);
  return(c1+c2);
}

long factorial(int n)
{
  long rtn=1;
  int i;
  for(i=1;i<=n;i++)
    rtn*=i;
  return(rtn);
}

    运行时若输入:2,3  则输出:___
    运行时若输入:0, 5  则输出:___

    答案:8
          121

3. 分析下面的程序,并写出运行结果。

#include <stdio.h>
int s();

int x,y;
main()
{
 int n;
 x=1;y=2;
 n=s();
 printf("x=%d,y=%d,n=%d",x,y,n);
}

int s()
{
 int z;
 x=3;y=4;
 z=x+y;
 return(z);
}

    程序运行后输出:___

    答案:  3,4,7


4.  C语言可执行程序从什么地方开始执行?(单选)

    A. 程序中第一条可执行语句    B. 程序中第一个函数
    C. 程序中的main函数          D. 包含文件中的第一个函数

    答案: C

5. 有一个函数原型如下所示:(单选)

      abc(float x,float y);

   则该函数的返回类型为___。

   A. void   B. double   C. int   D. float

   答案: C

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

#include <stdio.h>
int func(int a,int b);

void main()
{
   int k=4,m=1,p;

   p=func(k,m);
   printf("%d,",p);
   p=func("%d\n",p);
}

int func(int a,int b)
{
   static int m=0,i=2;

   i+=m+1;
   m=i+a+b;

   return(m);
}

    A. 8,17    B. 8,16    C. 8,20    D. 8,8

    答案: A

7. 以下程序的输出结果是a=___,b=___,c=___。

#include <stdio.h>
int func(int a,int *p);

void main()
{
   int a=1,b=2,c;

   c=func(a,&b);
   b=func(c,&a);
   a=func(b,&c);

   printf("a=%d,b=%d,c=%d",a,b,c);   
}

int func(int a,int *p)
{
    a++;
    *p=a+2;
    return(*p+a);
}

    答案: 36   16   19

8.  在C语言程序中,下面哪一个是正确的?(单选)

    A. 函数的定义可以嵌套,但函数的调用不可以嵌套
    B. 函数的定义不可以嵌套,但函数的调用可以嵌套
    C. 函数的定义可以嵌套,函数的调用也可以嵌套
    D. 函数的定义和函数的调用都不可以嵌套

    答案: B

9. 下面哪些是定义局部变量储存类别的保留字?(多选)

    A. int   B. auto    C.static    D.float
    E. register  F.extern  G. unsigned H.signed

    答案: BCE

10. 下面这个函数的功能是求两个整数的积,并通过形参传回结果。请填空。

void mul(___x,___y,___result)
{
   ___=x*y;
}

    答案:int   int   int*
         *result

 

 

 

1.对于类型相同的指针变量,不能进行哪种运算?(单选)

    A. +   B. -   C. =   D. ==

    答案: A

2. 若有以下说明和语句,且0<=i<10, 则下面哪个是对数组元素的错误引用?(单选)

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

p=a;

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

    答案: C

3. 若有以下说明和语句,且0<=i<10,则下面哪个是对数组元素地址的正确表示?(单选)

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

    p=a;

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

    答案: D

4. 以下程序的输出结果是___。

#include <stdio.h>
main()
{
   int a[]={1,2,3,4,5,6},*p;
   p=a;
   *(p+3)+=2;
   printf("%d,%d\n",*p,*(p+3));
}

   A. 0,5   B. 1,5   C. 0,6   D. 1,6

   答案: D

5. 以下程序的输出结果是哪一项?(单选)

#include <stdio.h>
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]);
}

    A. 输出项不合法    B. 6
    C. 8               D. 12

    答案: D

6. 如果有以下的定义:(多选)

struct person
{
   char name[20];
   int age;
   char sex;
};

struct person a={"xiao min",20,'m'},*p=&a;
则对字符串"li ning"的引用方式可以是下面哪些?

   A. (*p).name    B. p.name    C. a.name   D. p->name

   答案: ACD


7. 下面哪些定义的结构在内存分配是等价的。(单选)
  
   (1)struct abc{
        char x;
        char y;
        int data;
      };

   (2)struct abc{
        char x,y;
        int data;
      };

   (3)struct abc{
        int data;
        char x;
        char y;
      };

    A. (1)和(2)   B. (2)和(3)
    C. (1)和(3)   D. (1)(2)和(3)

    答案: A


8. 若有以下说明和语句,, 则p1-p2的值为多少?(单选)

int a[10], *p1, *p2;
p1=a;
p2=&a[5];

    A. 5   B. 6   C. 10   D. 没有指针与指针的减法

    答案: A


9. 读懂源程序,并写出正确结果。

#include <stdio.h>

struct stustruct{
  char name[10];
  int score[3];
};
 
void main()
{
   struct stu student={
          "xiaowang",
          {99,87,90}
   };
   struct stu *p1=&student;
   int *p2=student.score;

   printf("%d\n",student.score[0]);//屏幕显示___
   printf("%s\n",p1->name);        //屏幕显示___
   printf("%d\n",p2[2]);           //屏幕显示___
   printf("%d\n",*(p2+1));         //屏幕显示___
}

    答案:99
         xiaoming
         90
         87


10. 已知有以下的说明,

int a[]={8,1,2,5,0,4,7,6,3,9};
    那么a[*(a+a[3])]的值为___.

    答案: 0


11. 已知有以下的说明,那么执行语句a=p+2;后, a[0]的值等于多少?(单选)

float a[3]={1.2,45.6,-23.0};
float *p=a;

    A. 1.2     B. 45.6
    C. -23.0   D. 语句有错
    答案: D

1. 如果想把一些新的数据添加到文件xh.txt中,则应该以下面哪一种方式打开文件?(单选)
   A. fp=fopen(xh.txt,"a");     B. fp=fopen("xh.txt",a);
   C. fp=fopen("xh.txt","a");   D. fp=fopen("xh.txt",'a');

    答案:C

2.  如果要把一个字符'A'写入文件指针fp所指定的文件里,应该如何写?
    ___
    如果要把一个字符串"Hello!"写入文件指针fp所指定的文件里,应该如何写?
    ___
    如果要把两个整数23和567以ASCII码方式写入文件指针fp所指定的文件里,且整数之间以一个空格相隔,应该如何写?
    ___

    答案: fputc('A',fp);
          fputs("Hello!",fp);
          fprintf(fp,"%d %d",23,567);
   
3.  如果有三个整数以ASCII码方式写入了文件指针fp所指定的文件里,且整数之间以逗号相隔。
    问:用a,b,c三个整形变量来获取这三个整数,该如何写?
    ___

    答案: fscanf(fp,"%d,%d,%d",&a,&b,&c);

4. 一个abc.dat文件内容如下:
       0123456789abcdefABCDEF
    一个对abc.dat文件进行操作的程序如下:

#include <stdio.h>
void main()
{
  FILE *fp;
  char ch;
  char str[15];

  fp=fopen("abc.dat","rb");
  if(fp!=NULL)
  {
    fseek(fp,2,SEEK_SET);
    fgetc(fp);
    fgetc(fp);
    fgets(str,15,fp);
    fseek(fp,-4,SEEK_CUR);
    fgetc(fp);
    fseek(fp,4,SEEK_CUR);

    ch=fgetc(fp);
    printf("ch=%c",ch);
    fclose(fp);
  }
}
   程序运行的结果是ch为字符___。
    答案: D


5.  调用fopen函数以文本方式打开文本文件aaa.txt如下
    FILE *fp=fopen("aaa.txt",___);

    如果为了输出而打开应在空白处填入___,
    如果为了输入而打开应在空白处填入___,
    如果为了追加而打开应在空白处填入___。

    答案: "r"
          "w"  
          "a"

6.  下面哪条语句是从文件中读取一个字符?(单选)

    A. ch=getc();         B. fputc(ch,fp);
    C. fscanf("%c",&ch);  D. scanf("%c",&ch);

    答案: C


7. 有5个学生的成绩需要保存在文件score.dat文件中。保存格式如下:
       学生姓名,年龄,成绩<CR>
       学生姓名,年龄,成绩<CR>
           ...
           ...

    请完成下面这段源程序。

void main()
{
    FILE *fp;
    int i;

    char name[80];
    int age;
    float score;

    fp=fopen(___,"w");
    for(i=0;i<5;i++)
    {
       printf("请输入第%d个学生的信息\n",___);
       printf("姓名:");
       scanf(___);
       printf("年龄:");
       ___
       printf("成绩:");
       ___
       fprintf(fp,___,name,age,score);
    }
    ___
}

   答案: "score.dat"
         i
         "%s",name
         scanf("%d",&age);
         scanf("%f",&score);
         "%d,%d,%f\n"
         fclose(fp);

8. C语言中的文件类型如何划分?(单选)

   A. 索引文件和文本文件两种
   B. ASCII文件和二进制文件两种
   C. 只有文本文件一种
   D. 只有二进制文件一种

   答案: B

9. 下面这个程序将用户从键盘输入的字符写入keyb.dat文件中,当键入字符'!'时,结束输入,把'!'写入文件后关闭文件,程序结束。
   请找出错误。

#include <stdio.h>
void main()
{
  char ch;
  FILE *fp;

  fp=fopen("keyb.dat","wb");
  do
  {
    ch=getchar();
    fprintf(fp,"%c",ch);
  }while(ch!='!')
  close(fp);
}
 
    答案:  }while(ch!='!') 改为 while(ch!='!');
           close(fp); 改为 fclose(fp);

 

1.下面这个程序的作用是统计公元1年到公元2000年的闰年个数。判断闰年的方法是:能被400整除的年是闰年;除能被400整除的年以外,凡是能被4整除,但不能被100整除的年是闰年。其余年份是平年。请填空。

#include <stdio.h>
void main()
{
  int year;
  int count=0;

  for(year=0;year<=2000;year++)
    if( (_____)
         ||( year%4==0 && ____) )
      ____;
 
  printf("%d",count);
}

    答案:year%400==0
          year%100!=0
          count++


2. 读懂程序并填空。

#include <stdio.h>

void main()
{
  int digit_num=0;
  int letter_num=0;
  int other_num=0;
  char ch;

  while(1)
  {
    ch=getchar();
    if(ch=='!')
      break;
    if(ch>='0'&&ch<='9')
      digit_num++;
    else if( (ch>='A'&&ch<='Z')
          ||(ch>='a'&&ch<='z') )
      letter_num++;
    else
      other_num++;
  }

  printf("The number of digit  is %d\n",digit_num);
  printf("The number of letter is %d\n",letter_num);
  printf("The number of other  is %d\n",other_num);
}

    程序运行时如果输入:
        123adfhd^%234FDG%34%hJK+!_AAAD!<回车>
    最后,变量 digit_num的值为___,
         变量letter_num的值为___,
         变量 other_num的值为___。

    答案: 8
          11
          5


3. 下面这个程序要求用户输入两个整数和一个字符。字符必须是'+'、'-'、'*'、'/'其中的一个。然后程序输出两数作相应运算的结果。
    例如:输入 123,34,+  程序输出 123+34=157。请填空。

#include <stdio.h>
void main()
{
   float d1,d2,result;
   char op;
   int error=0;

   scanf("%f,%f,%c",&d1,&d2,&op);
   switch(op)
   {
   case '+':result=___;break;
   case '-':result=___;break;
   case '*':result=___;break;
   case '/':result=___;break;
   default :error=1;
   }

   if(error)
     printf("运算操作符输入有错!");
   else
     printf("%.2f%c%.2f=%.2f\n",___);
}

    答案: d1+d2
          d1-d2
          d1*d2
          d1/d2
          d1,op,d2,result

4. 除1外,只能被1和自己本身整除的自然数叫素数。下面这个程序就是求2到100之间的素数。其中判断某数为素数的方法为用2到该数平方根之间的自然数去试整除该数。如果没有哪个数能够整除该数,那么该数为素数;如果有,那么时合数。请填空。
   (函数sqrt(a)求a的平方根)

#include<math.h>
#include <stdio.h>

void main()
{
   int i,j,k;
   int flag;

   for(i=2;i<=___;i++)
   {
     flag=1;
     k=(int)sqrt(i);
     for(j=2;j<___;j++)
       if(___==0)
       {
         flag=0;
         break;
       }
     if(flag)
       printf("%d\n",i);
   }
}

    答案:100
         k
         i%j


5.如图所示为数学上的杨晖三角形,它的规律是:
     1.每一行的首尾列都是1。
     2.每一行的第i列(除首尾列外)是上一行的第i-1列与上一行的第i列的和。
1
1   1
1   2   1
1   3   3   1
1   4   6   4   1
1   5  10  10   5   1
1   6  15  20  15   6   1

   下面这个程序打印了10层杨晖三角形,请填空。

#include <stdio.h>

#define LAYER    10
#define LAYER_1  (LAYER+1)
#define NUM  ( LAYER_1 * (LAYER_1 /2) )

void main()
{
   int array[NUM],*p[LAYER],i,j,pos;

   for(i=0;i<LAYER;i++)
   {
      pos= i*(i+1)/2;
      p[i]=&array[pos];
   }

   for(i=0;i<LAYER;i++)
      p[i][0]=p[i][i]=___;

   for(i=2;i<LAYER;i++)
      for(j=1;j<i;j++)
         p[i][j]=___;

   for(i=0;i<LAYER;i++)
   {
      for(j=0;j<=i;j++)
        printf("%5d",___);
      printf("\n");
   }
  
}

    答案: 1
          p[i-1][j-1]+p[i-1][j]
          p[i][j]


6.  当程序输入0 -5 3时,程序依次输出哪三个数? ___、___、___
    如果把SIZE改成5,输入89,34,25,-1,22,程序依次输出哪五个数? ___、___、___、___、___

#include <stdio.h>
#define SIZE  3
void swap(int *a,int *b);

void main()
{
  int data[SIZE];
  int i,j;
 
  for(i=0;i<SIZE;i++)
    scanf("%d",&data[i]);

  for(i=0;i<SIZE-1;i++)
    for(j=i+1;j<SIZE;j++)
      if(data[i]>data[j])
        swap(&data[i],&data[j]);

  for(i=0;i<SIZE;i++)
    printf("%d  ",data[i]);
}

void swap(int *a,int *b)
{
  int temp;

  temp=*a;
  *a=*b;
  *b=temp;
}

    答案: -5  0  3
          -1  22  25  34  89

 

 


7.  请选择您认为正确的说法。

    A.在C语言中,函数可以嵌套定义。
    B.程序中的注释部分可有可无,通常可以省略。
    C.在函数中,只能有一条return语句。
    D.C程序中,会检查数组下标是否越界。
    E.在C程序中,ABC和abc是两个不同的变量。
    F.在C语言中,函数中的变量可以赋初值,每调用一次该函数,就赋一次初值。
    G.C语言中不能对数组名进行加减和赋值运算。

    答案: BEG

虽然这已经是很古老的东西了,但是还是留起来,做个纪念。。。

posted on 2006-03-28 09:51 record java and net 阅读(3573) 评论(1)  编辑  收藏 所属分类: dot net相关

评论

# re: [分享]c语言问题100题[未登录] 2013-11-01 08:56 小浩

已知银行整存整取存款不同期限的月息利率分别为:
月息利率= 要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。要求用switch结构实现。
2. 任意输入一个3位数,判断其是不是水仙花数。水仙花数:各位数的立方和等于该数本身,如153=1的立方+5的立方+3的立方。
  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

常用链接

留言簿(44)

新闻档案

2.动态语言

3.工具箱

9.文档教程

友情链接

搜索

最新评论