• c语言练习题库


    一、C语言概述练习题
    (一)选择题
    1. 一个C程序的执行是从    A        。
    A) 本程序的main函数开始,到main函数结束
    B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
    C) 本程序文件的第一个函数开始,到本程序main函数结束
    D) 本程序的main函数开始,到本程序文件的最后一个函数结束
    2. 以下叙述不正确的是     AD       。
    A) 一个C源程序必须包含一个main函数
    B) 一个C源程序可由一个或多个函数组成
    C) C程序的基本组成单位是函数
    D) 在C程序中,注释说明只能位于一条语句的后面
    3. 以下叙述正确的是     C       。
    A) 在对一个C程序进行编译的过程中,可发现注释中的拼写错误
    B) 在C程序中,main函数必须位于程序的最前面
    C) C语言本身没有输入输出语句
    D) C程序的每行中只能写一条语句
    4. 一个C语言程序是由    B       。
    A)一个主程序和若干个子程序组成
    B) 函数组成
    C) 若干过程组成
    D) 若干子程序组成
    二、数据类型、运算符与表达式
    (一)选择题
    1. 若x、i、j、k都是int型变量,则计算下面表达式后,x的值为    C       。
        x=(i=4,j=16,k=32)
    A) 4    B) 16                C) 32            D) 52
    2. 下列四组选项中,均不是C语言关键字的选项是   A     。
    A) define         IF         type
    B) getc          char       printf
    C) include    case        scanf
    D) while    go            pow
    3. 下列四组选项中,均是不合法的用户标识符的选项是  B          。
    A) W         P_0         do
    B) b-a          goto          int
    C) float    la0            _A
    D) -123    abc            TEMP
    4. 下列四组选项中,均是合法转义字符的选项是    A       。
    A) ‘\”’    ‘\\’        ‘\n’
    B) ‘\’    ‘\017’    ‘\”’
    C) ‘\018’    ‘\f’        ‘xab’
    D) ‘\\0’    ‘\101’    ‘xlf’
    5. 下面正确的字符常量是      D      。
    A) “c”    B) ‘\\’’        C) ‘’        D) ‘K’
    6. 以下叙述不正确的是     D      。
    A) 在C程序中,逗号运算符的优先级最低    
    B) 在C程序中,MAX和max是两个不同的变量
    C) 若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,二b中的值不变
    D) 当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
    7. 以下叙述正确的是     C       。
    A) 在C程序中,每行只能写一条语句    
    B) 若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
    C) 在C程序中,%是只能用于整数运算的运算符
    D) 在C程序中,无论是整数还是实数,都能被准确无误地表示
    8. 已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=‘A’+‘6’-‘3’后,c2中的值为     B       。
    A) D    B) 68            C) 不确定的值          D) C
    9. sizeof(float)是    B    。
    A) 一个双精度型表达式           B) 一个整型表达式
    C) 一种函数表达式               D) 一个不合法的表达式
    10.设C语言中,一个int型数据在内存中占2个字节,则unsigned int 型数据的取值范围为    C     。
    A) 0~255        B) 0~32767        C) 0~65535         D) 0~2147483647
    11.设有说明:char w; int x; float y; double z;则表达式w*x+z-y值的数据类型为 D  。 (c语言中 两个不同类型的运算 要转化成同类型的 转换从低到高  char-->float-->short-->int-->double
    )
    A) float          B) char          C) int           D) double
    12.设以下变量均为int类型,则值不等于7的表达式是    C     。
    A) (x=y=6,x+y,x+1)              B) (x=y=6,x+y,y+1)    
    C) (x=6,x+1,y=6,x+y)            D) (y=6,y+1,x=y,x+1)    
    (二)填空题
    1. 若有以下定义,则计算表达式y+=y-=m*=y后的y值是    -16

        y = -8-8
        int m=5,y=2;    m = 10   y = -8
    2.  在C语言中,一个int型数据在内存中占2个字节,则 int型数据的取值范围为【2】。                 -32768----32767
    3. 若s是int型变量,且s=6,则下面表达式的值为  1
    s%2+(s+1)%2
    0+1
    4.  若a是int型变量,则下面表达式的值为  26
        (a=4*5,a*2),a+6
    5. 若x和a均是int型变量,则计算表达式(1)后的x值为 12 ,计算表达式(2)后的x 值为  4。
        (1) x=(a=4,6*2)
    (2) x=a=4,6*2
    6.  若a是int型变量,则计算下面表达式后a的值为  2
        a=25/3%3    
    7. 若x和n均是int型变量,且x和n的初值均为5,则计算表达式后x的值为___10_ ,n的值____6___。
    x+=n++     x = x + n++
    8.  若有定义:char c=‘\010’;则变量c中包含的字符个数为 __1__。
    9. 若有定义:int x=3,y=2;float a=2.5,b=3.5;则下面表达式的值为__1___
        (x+y)%2+(int)a/(int)b
    10. 已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=‘a’+‘8’-‘3’的值为___102_____。
    三、简单的C程序设计
    (一)选择题
    1. putchar函数可以向终端输出一个   D        。
    A) 整型变量表达式                      B) 实型变量值
    C) 字符串                             D) 字符或字符型变量值
    2. printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式   B    ;如果字符串长度小于5,则输出按方式    C   。
    A) 从左起输出该字符串,右补空格    B) 按原字符长从左向右全部输出
    C) 右对齐输出该字符串,左补空格    D) 输出错误信息
    3. 阅读以下程序,当输入数据的形式为:25,13,10(注:表示回车),则正确的输出结果为    D        。
        main()
        {    int x,y,z;
             scanf(“%d%d%d”,&x,&y,&z);
             printf(“x+y+z=%d\n”,x+y+z);
        }
    A) x+y+z=48      B) x+y+z=35       C) x+z=35          D) 不确定值
    4. 根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为    A    。
    main()
        {    char ch1,ch2,ch3;
             输入语句
             printf(“%c %c %c”,ch1,ch2,ch3);
        }
        输出形式:A B C
        输入形式:A B C
    A) scanf(“%c %c %c”,&ch1,&ch2,&ch3);
    B) scanf(“%c,%c,%c”,&ch1,&ch2,&ch3);
    C) scanf(“%c:%c:%c”,&ch1,&ch2,&ch3);
    D) scanf(“%c%c”,&ch1,&ch2,&ch3);
    5. 已知ch是字符型变量,下面正确的赋值语句是  BCD     。
    A) ch=‘a+b’;    B) ch=‘\0’;    C) ch=‘7’+‘9’;    D) ch=5+9;
    (二)填空题
    1. 以下的输出结果是【1】。
    main()
    {    short i;
         i=-4;
         printf(“\ni:dec=%d,oct=%o,hex=%x,unsigned=%u\n”,i,i,i,i);
    }

    i:dec=-4,oct=4,hex=4,unsigned=4

    2.  以下的输出结果是【2】。
    main()
    {    char c=‘x’;
         printf(“c:dec=%d,oct=%o,hex=%x,ASCII=%c,\n”,c,c,c,c);
    }
    c:dec=120,otc=170,hex=78,ASCII=x,
    3. 以下的输出结果是【3】。
    main()
    {    int x=1,y=2;
         printf(“x=%d y=%d * sum * =%d\n”,x,y,x+y);
         printf(“10 Squared is : %d\n”,10*10);
    }

    x=1 y=2 * sum * =3
    10 Squared is : 100

    4.假设变量a和b均为整型,以下语句可以不借助任何变量把a、b中的值进行交换。请填空。
        a= a+_b____; b=a- _b____; a=a- _b____;
    5. 若x为int型变量,则执行以下语句后的x 值为___-14______。
    x=7; x+=x-=x+x;  // x=x+x=x-(x+x)  
    x = x + x = 7– 14      x = -1
    z=m=0xFFFF
    6.  有一输入语句scanf(“%d”,k);则不能使float类型变量k得到正确数值的原因是___没有取地址符&____和___%f____。
    四、选择结构
    (一)选择题
    1. 逻辑运算符两侧运算对象三数据类型     D       。
    A) 只能是0和1                             B) 只能是0或非0正数
    C) 只能是=整型或字符型数据            D) 可以是任何类型的数据
    2. 判断char型变量ch是否为大写字母的正确表达式是   C    。
    A) ‘A’<=ch<=‘Z’                  B) (ch>=‘A’)&(ch<=‘Z’)
    C) (ch>=‘A’)&&(ch<=‘Z’)           D) (‘A’<= ch)AND(‘Z’>= ch)
    3. 若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是    C        。
        A) A%2==1        B) !(A%2==0)       C) !(A%2)          D) A%2
    4. 设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为     B    。
        A) 1        B) 2        C) 3          D) 4
    5. 以下程序的运行结果是   B     。
    main()
    {    int a,b,d=241;
         a=d/100%9;        2
         b=(-1)&&(-1);     1
         printf(“%d,%d”,a,b);
    }
    A) 6,1       B) 2,1       C) 6,0         D) 2,0
    6. 已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是  B     。
        if(x>y) 
    z=x; 
    x=y; 
    y=z;
    A) x=10, y=20, z=30                  B) x=20, y=30, z=30
    C) x=20, y=30, z=10               D)  x=20, y=30, z=20
    7. 以下程序的运行结果是   C    。
    main()
    {    int m=5;
         if(m++>5)    
    printf(“%d\n”,m);
         else;
             printf(“%d\n”,m--);
    }
    A) 4       B) 5        C) 6          D) 7
    8. 若运行时给变量x输入12,则以下程序的运行结果是   D     。
    main()
    {    int x,y;
         scanf(“%d”,&x); 
         y=x>12 ? x+10 : x-12;
    printf(“%d\n”,y);
    }
    A) 4       B) 3        C) 2          D) 0
    (二)编程题
    1. 编程实现:输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。
    2.  编程判断输入的正整数是是否既是5又是7的整倍数。若是,则输出yes;否则输出no。
    3.  用switch编程实现:
    ?????????{ -1? ? (x<0)
    ?????? y =?{? 0?? (x=0)
                      {  1      (X>0)  
            
    4. 用switch语句编一程序,对于给定的一个百分制成绩,输出相应的五分制成绩,设:90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’
    五、循环控制
    (一)选择题
    1.设有程序段
     int k=10;
     while(k=0)
    k=k-1;
     这下面描述中正确的是____C_____.
     a)while循环执行10次         b)循环是无限循环
     c)循环体语句一次也不执行    d)循环体语句执行一次
    2.语句while(!E);中的表达式!E等价于____A____.   
      a)E==0      b)E!=1    c)E!=0       d)E==1
    3.下面程序段的运行结果是____C______.
      int n=0;         0   0<=2   1     1<=2   2   2<=2  3    3<=2   4
       while(n++<=2);
    printf("%d",n);
       a)2   b)3  c)4   d)有语法错
    4.下面程序的运行结果是___C_____.
        #include
        main()
         {
         int num=0;
         while(num<=2)  
          {
          num++;                    3
          printf("%d\n",num);       3
          }
         }
    a)1       b)1         c)1       d)1
                  2           2         2
                              3         3
                                        4
    5.以下程序段___C_____.
     x=-1;
       do
    {
        x=x*x;      1
       }while(!x);
     a)是死循环              b)循环执行二次
     c)循环执行一次          d)有语法错误
    6.若有如下语句
       int x=3;
       do
    {
    printf(""%d\n",x-=2);     X = 0 - 2
    }while(!(--x));      -3      
     则上面程序段__B____.
      a)输出的是1   b)输出的是1和-2  c)输出的是3和0  d)是死循环
    7.下面程序的运行结果是__D___.
      #include
    main()
    {
    int y=10;
        do
    {
    y--;          9    7   5   3    1
    }while(--y);     8    6   4   2    0
       printf("%d\n",y--);
    }
      a)-1   b)1   c)8   d)0
    8.若i为整型变量,则以下循环执行次数是__B___.
      for(i=2;i==0;)        
    printf("%d",i--);       
       a)无限次   b)0次     c)1次   d)2次
    9.执行语句for(i=1;i++<4; );后变量i的值是__C____.
      a)3   b)4   c)5     d)不定       1<4  2   2<4  3  3<4  4  4<4  5
    10.以下正确的描述是__B_____.
      a)continue语句的作用是结束整个循环的执行
      b)只能在循环体内和switch语句体内使用break语句
      c)在循环体内使用break语句或continue语句的作用相同
      d)从多层循环嵌套中退出时,只能使用goto语句
    (二)、填空题
    1.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束
    循环。请填空。
      int n=0,c;
      c=getchar();
      while(_c != ‘\n’_____)
       {
       if(c >= ‘0’ &&   c <= ‘9’)n++;
        c=getchar();
       }

    2.下面程序的功能是用"辗转相除法"求两个正整数的最大公约数。请填空。

      #include               
      main()
      {
    int r,m,n;
       scanf("%d%d",&m,&n);                       获取用户输入的m,n的值
       if(m    r=m%n;     246%48      r = 6
       while(r)
    {
    m=n;                    48    
    n=r;                    6
    r=__m%n____;
    }           
       printf("%d\n",n);
      }

    3.下面程序的运行结果是__ 254_______.
      #include
      main()
     {
    int a,s,n,count;
       a=2;s=0;n=1;count=1;
      while(count<=7)
    {
    n=n*a;        2    4    8    16   32   64     128
    s=s+n;       2    6    14   30   62   126    254
    ++count;     2    3    4    5    6    7      8
    }
      printf("s=%d",s);
     }

    4.下面程序段的运行结果是___-5______.
     i=1;a=0;s=1;
     do
    {
    a=a+s*i;      1   -1   2    -2    3    -3   4    -4   5    -5
    s=-s;      -1    1   -1     1    -1    1    -1    1   -1
    i++;       2     3   4     5    6    7     8     9     10    11
    }while(i<=10);  
     printf("a=%d",a);
    5.下面程序段的运行结果是__8____.
       i=1;s=3;
       do
    {                        s     i
    s+=i++;     s = s + i++;     18    6
          if(s%7==0) 
    continue;
          else 
    ++i;
         }while(s<15);
       printf("%d",i);

    s = 4  i=2 i=3   s=7 i=4  s=11 i=5 i=6  s=17 i=7 i=8  
    六、数组
    (一)选择题
    1.以下为一维整型数组a的正确说明是_________.
      a)int a(10);              b)int n=10,a[n];
      c)int n;                  d)#define SIZE 10;
        scanf("%d",&n);           int a[SIZE];
        int a[n];

    2.以下对二维数组a的正确说明是________.
      a)int a[3][];               b)float a(3,4);
      c)double  a[1][4]           d)float a(3)(4);

    3.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为______.
    (假设a[0][0]位于数组的第一个位置上。)
      a)i*m+j     b)j*m+i   c)i*m+j-1    d)i*m+j+1

    4.若二维数组a有m列,则在a[i][j]前的元素个数为________.
      a)j*m+i     b)i*m+j    c)i*m+j-1   d)i*m+j+1

    5.25.若有以下程序段:
        。。。 。。。
    int a[]={4,0,2,3,1},i,j,t;
       for(i=1;i<5;i++)
        {t=a[i];j=i-1;
          while(j>=0&&t>a[j])
            {a[j+1]=a[j];j--;}
          a[j+1]=t;}
       ... ...
     则该程序段的功能是_________.
       a)对数组a进行插入排序(升序)
       b)对数组a进行插入排序(降序)
       c)对数组a进行选择排序(升序)
       d)对数组a进行选择排序(降序)
    ?
    6.有两个字符数组a、b,则以下正确的输入语句是_______.
      a)gets(a,b);                 b)scanf("%s%s",a,b);
      c)scanf("%s%s",&a,&b);       d)gets("a"),gets("b");
    ?
    7.下面程序段的运行结果是_________.
      char a[7]="abcdef";
    char b[4]="ABC";
      strcpy(a,b);
      printf("%c",a[5]);
      a)空格     b)\0    c)e     d)f
    ?
    8.判断字符串s1是否大于字符串s2,应当使用_______.
       a)if(s1>s2)                b)if(strcmp(s1,s2))
       c)if(strcmp(s2,s1)>0)      d)if(strcmp(s1,s2)>0)
    ?
    9.下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用
    空格分隔,请选择填空。
       #include
       main()
       {
        char s[80],c1,c2='';
        int i=0,num=0;
        gets(s);
        while(s[i]!='\0')
         {c1=s[i];
          if(i==0)c2='';
          else c2=s[i-1];
          if(__C_)num++
          i++;
         }
    printf("There are %d words.\n",num);
    }
      a)c1==''&&c2==''     b)c1!=''&&c2==''
      c)c1==''&&c2!=''     d)c1!=''&&c2!=''
    ?
    10.下面程序的运行结果是________.
      #include
     main()
      {char str[]="SSSWLIA",c;
        int k;
        for(k=2;(c=str[k])!='\0';k++)
         {switch(c)
           {case 'I':++k;break;
            case 'L':continue;
            default:putchar(c);continue;
           }
          putchar('*');
       }
    }  
     a)SSW*    b)SW*    c)SW*A     d)SW
    (二)填空题
    1. 若有定义:double x[3][5];则x数组中行下标的下限为________,列下标的上限为_________.
    2.下面程序以每行4个数据的形式输出a数组,请填空。
      #define N  20
      main()
       {int a[N],i;
       for(i=0;i    for(i=0;i    {if  (_______)    _____________
        printf("%3d",a[i]);
       }
     printf("\n");
    }

    3. 下面程序可求出矩阵a的主对角线上的元素之和,请填空。
     main()
      {int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
      for(i=0;i<3;i++)                                 1   3   5
       for(j=0;j<3;j++)                                7   9   11
         if(_________)sum=sum+_______;        13  15  17
        printf("sum=%d\n",sum);
    }
    4. 当从键盘输入18并回车后,下面程序的运行结果是________.
     main()                                     
      {int x,y,i,a[8],j,u,v;
       scanf("%d",&x);         x=18
       y=x;i=0;                y=18  i=0
       do
       {u=y/2;              u=9      u=4      u=2      u=1     u=0
        a[i]=y%2;           a[0]=0   a[1]=1   a[2]=0   a[3]=0  a[4]=1
        i++;y=u;            i=1 y=9  i=2 y=4  i=3 y=2  i=4 y=1 i=5 y=0
        }while(y>=1)           
       for(j=i-1;j>=0;j--)      j=4     j=3  …
         printf("%d",a[j]);       
    ?
    5. 下面程序用插入法对数组a进行降序排序。请填空。
      main()
      {int a[5]={4,7,2,5,1};
        int i,j,m;
       for(i=1;i<5;i++)
         {m=a[i];               m=a[1]
          j=_i-1___;               
          while(j>=0&&m>a[j])    a[i]       {_______    
    ________;
              j--;
           }
        
       }
        for(i=0;i<5;i++)
         printf("%d",a[i]);
        printf("\n");
    }
    ?
    6. 下面程序的功能是在三个字符串中找出最小的,请填空。
     #include
     #include
      main()
     {char s[20],str[3][20];
     int i;
      for(i=0;i<3;i++)gets(str[i]);
     strcpy(s,_______);
      if(strcmp(str[2],s)<0)strcpy(s,str[2]);
      printf("%s\n",_______);
     }
    ?
    7. 下面程序的运行结果是________.
      #include
      main()
      {char s[]="ABCCDA";
        int k;char c;
       for(k=1;(c=s[k])!='\0';k++)
        {switch(c)
          {case 'A':putchar('%');continue;
           case  'B':++k;break;
           default:putchar('*');
    case  'C':putchar('&');continue;
         }
       putchar('#');
       }
    }
    七、函数
    (一)选择题
    1.以下正确的说法是_________.
     建立函数的目的之一是   a)提高程序的执行效率
                            b)提高程序的可读性
                            c)减少程序的篇幅
                            d)减少程序文件所占内存

    2.以下正确的函数定义形式是__C______.
      a)double fun(int x,int y)
      b)double fun(int x; int y)
      c)double fun(int x, int y);
      d)double  fun(int x,y);

    3.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为__B____.
     A)地址传递
     B)单向值传递
     C)由实参传给形参,再由形参传回给实参
     D)由用户指定传递方式

    4.已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array
    的错误定义方式为_____D___.
       int a[3][4];
       f(a);
       a)f(int array[][6])
       b)f(int array[3][])
       c)f(int array[][4])
       d)f(int array[2][5])

    5.以下程序的正确运行结果是_____C____.
      #include
      void num()
    {extern int x,y;int a=15,b=10;
       x=a-b;                 x=15-10=5;
       y=a+b;                 y=15+10=25
      }
     int x,y;
     main()
     {
      int a=7,b=5;      
       x=a+b;                 x=7+5=12
       y=a-b;                 y=7-5=2
      num();
      printf("%d,%d\n",x,y);
     }
    a)12,2    b)不确定   c)5,25   d)1,12
    (二)填空题
    1.以下程序的运行结果是__2___.
      #include
      main()
      {int a=1,b=2,c;
       c=max(a,b);      c=b=2
       printf("max is %d\n",c);
       }
      max(int x,int y)
      {int x;   
       z=(x>y)?x:y;   z的值为x , y 中较大的值
       return(z);
      }

    2.函数gongyu的作用是求整数num1和num2的最大公约数,并返回该值。请填空。
      gongyu(int num1,int num2)
      {int temp,a,b;
       if(num1(__>___) num2)
        {temp=num1;num1=num2;num2=temp;}
       a=num1;b=num2;
       while(_a%b != 0___)
        {temp=a%b;a=b;b=temp;}
       return(b);
    }

    3.以下程序的运行结果是____A+B=9____.
       int a=5;int  b=7;
       main()
      { int a=4,b=5,c;
        c=plus(a,b);                 //c = 9 局部变量起作用
        printf("A+B=%d\n",c);
       }
      plus(int x,int y)
       {int z;
         z=x+y;      //z的值为x, y 之和
         return(z);
       }

    4.以下程序的运行结果是_______.
     main()
     {incx();    x=1
      incy();    y=1
      incx();    x=1
      incy();    y=2
      incx();    x=1
      incy();    y=3
     }
     incx()
      {
      int x=0;
      printf("x=%d\t",++x);
    }
    incy()
     {static int y=0;     //static修饰变量时 只有第一次初始化起作用 
      printf("\ny=%d\n",++y); 
    }
    (三)编程题
    1.??? 已有变量定义和函数调用语句:int x=57 ; isprime(x); 函数isprime( ) 用来判断一个整形数a是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。
    #include
            isprime(int a)
            { int x,y,i;
              y=1;
              x=sqrt(a+1);
              for(i=2;i<=x;i++)

      if(a%i == 0)
      {
        y = 0;
    }
    }
    return y;     
           }

    2.??? a是一个2X4的整型数组,且各元素均已赋值。函数max_value可求出其中的最大的元素值max,并将此值返回主调函数。今有函数调用语句max=max_value(a),请编写max_value函数。
            max_value(int arr[ ][4])
            {                }
    八、编译预处理
    (一)选择题
    1.以下叙述中正确的是________.
     a)在程序的一行上可以出现多个有效的预处理命令行
     b)使用带参的宏时,参数的类型应与宏定义时的一致
     c)宏替换不占用运行时间,只占用编译时间
     d)在以下定义中C   R是称为“宏名”的标识符
       #define   C   R   045

    2.以下程序的运行结果是____B____.
      #define  MIN(x,y)  (x)<(y)?(x):(y)        
      main()
      {int i=10,j=15,k;       
       k=10*MIN(i,j);      //k=10*(i)<(j)?(i):(j)  100<15?100:15   k=15
       printf("%d\n",k);
      }
       a)10   b)15   c)100   d)150

    3.若有宏定义如下:
       #define   X    5         
       #define   Y    X+1
       #define   Z   Y*X/2
      则执行以下printf语句后,输出结果是____D___.
        int a;a=Y;              a=X+1=5+1=6
        printf("%d\n",Z);       z=X+1*X/2=5+1*5/2=7
        printf("%d\n",--a);     --a   = 5
      a)7       b)12      c)12      d)7
        6          6         5        5

    4.请读程序:
      #include
    #define  MUL(x,y)  (x)*y
      main()
      {
       int a=3,b=4,c;
       c=MUL(a++,b++);          c=(a++)*b++=3*4=12
       printf("%d\n",c);
      }
      上面程序的输出结果是_____A____.
      a)12   b)15    c)20       d) 16
    ?
    5.对下面程序段:
      #define A 3
      #define  B(a) ((A+1)*a)
      ...
      x=3*(A+B(7));      x=3*(A+((A+1)*7))=3*(3+(4*7))=3*31=93
     正确的判断是____B_____.
      a)程序错误,不许嵌套宏定义
      b)x=93
      c)x=21
      d)程序错误,宏定义不许有参数
    ?
    九、指针
    (一)选择题
    1.变量的指针,其含义是指该变量的___B______.
      a)值              b)地址
      c)名              d)一个标志

    2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是 D__.
      a)a,point,*&a             b)&*a,&a,*point            int *point = a;
      c)*&point,*point,&a       d)&a,&*point ,point

    3.若有说明;int *p,m=5,n;以下正确的程序段的是___C_____.
     a)p=&n;               b)p=&n;                    
       scanf("%d",&p);       scanf("%d",*p);
     c)scanf("%d",&n);      d)p=&n;   
       *p=n;                  *p=m;   

    4.下面程序段的运行结果是____C_____.
      char *s="abcde";                   s=s+2    
      s+=2;printf("%d",s);
      a)cde     b)字符'c'     c)字符'c'的地址     d)无确定的输出结果

    5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确
    执行的赋值语句是___BD_____.
    a)c=*p1+*p2;    b)p2=c    c)p1=p2      d)c=*p1*(*p2);

    6.以下正确的程序段是__B_______.
      a)char str[20];                    b)char *p;
        scanf("%s",&str);                  scanf("%s",p);
      c)char str[20];                    d)char str[20],*p=str;
        scanf("%s",&str[2]);               scanf("%s",p[2]);

    7.若有说明语句
       char a[]="It is mine";         
       char *p="It is mine";
      则以下不正确的叙述是__D_____.
      a)a+1表示的是字符t的地址          a+1=&a[0]+1 &a[1]
      b)p指向另外的字符串时,字符串的长度不受限制    
      c)p变量中存放的地址值可以改变      
      d)a中只能存放10个字符     最少都需要11个字符    \0

    8.下面程序的运行结果是___-1____.
      #include  
      #include  
      main()
      {
        char *s1="AbDeG";          
        char *s2="AbdEg";
        s1+=2;s2+=2;               s1=s1+2 指向D    s2+=2指向d
       printf("%d\n",strcmp(s1,s2));    不相同
      }
      a)正数    b)负数   c)零   d)不确定的值

    9.下面程序的运行结果是_______.
      #include  
      #include  
      fun(char *w,int n)
       {char t,*s1,*s2;         
        s1=w;s2=w+n-1;                  s10   n>1
        while(s1   }                                             *s1=*s2--   
      main()
    {char *p;                            
      p="1234567";
      fun(p,strlen(p));       
      puts(p);
      }

    a)7654321   b)1714171   c)1711717   d)7177171

    10.若有以下定义,则对a数组元素的正确引用是_________.
     int a[5],*p=a;
     a)*&a[5]   b)a+2  c)*(p+5)  d)*(a+2)

    11.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为______.
      a)*(a[i]+j)   b)(a+i)   c)*(a+j)  d)a[i]+j

    12.若有以下定义,则p+5表示_______.
      int  a[10],*p=a;
      a)元素a[5]的地址             b)元素a[5]的值
      c)元素a[6]的地址             d)元素a[6]的值
    (二)填空题
    1.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。
    请填空。
      #include "stdlib.h"
      main()
      {int *a,*b,*c,num,x,y,z;   
       a=&x;b=&y;c=&z;                     *a=x  *b=y  *c=z    
       printf("输入3个整数:");           
       scanf("%d%d%d",a,b,c);              从用户获取x,y,z的值
       printf("%d,%d,%d\n",*a,*b,*c);      输出x,y,z的值
       num=*a;                             num=x
       if(*a>*b)___ num=*b ___;            if(x>y)  num=*b;
       if(num>*c)__ num=*c ____;           if(x>z)  num=*c
       printf("输出最小整数:%d\n",num);    num为最小值
      }

    2.下面程序段的运行结果是__hELLO!______.
      char s[80],*sp="HELLO!";          
      sp=strcpy(s,sp);                  把sp中内容拷到s中
      s[0]='h';                   
      puts(sp);
      
    3.下面程序段的运行结果是___ef_____.
      char str[]="abc\0def\0ghi",*p=str;      
      printf("%s",p+5);

    4.下面程序的功能是将两个字符串s1和s2连接起来。请填空。
       #include
      main()
      {char s1[80],s2[80];    
      gets(s1); gets(s2);              获取用户输入2个字符串
       conj(s1,s2);                    
       puts(s1);
      }
      conj(char *p1,char *p2)
        {char *p=p1;                     
       while(*p1)_p++_____;
       while(*p2){*p1=______;p1++;p2++;}
       *p1='\0';
       __________;
      }

    5.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______. *(a+5)的值是_________.
    6.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____. *(*(a+1)+0))的值是________.
    7.以下程序将数组a中的数据按逆序存放,请填空。
      #define M 8
      main()
      {int a[M],i,j,t;     
       for(i=0;i    i=0;j=M-1;     
       while(i     {
         t=*(a+i);________;*(_______)=t;
         i++;j--;
         }
      for(i=0;i  }

    8.若有定义:int a[3][5],i,j;(且0<=i<3,0<=j<5),则a数组中任一元素可用
    五种形式引用。它们是:
      (1)a[i][j]
      (2)*(a[i]+j)
      (3)*(*______);
      (4)(*(a+i))[j]
       (5)*(____+5*i+j)

    9.下面程序的运行结果是_________.
      main()
      {char *a[]={"Pascal","C language","dBase","Coble"};
       char (**p)[];
       int j;
       p=a+3;
       for(j=3;j>=0;j--)printf("%s\n",*(p--));
      }
    十、结构体与共同体
    (一)?选择题
    1.C语言结构体类型变量在程序执行期间_________.
       a)所有成员一直驻留在内存中
       b)只有一个成员驻留在内存中
       c)部分成员驻留在内存中
       d)没有成员驻留在内存中

    2.下面程序的运行结果是____D_______.
      main()
     {
       struct cmplx{int x;
                    int y;
                   }cnum[2]={1,3,2,7};
         printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);  3/1*2=6
    }
      a)0      b)1    c)3    d)6

    3.设有如下定义:
      struct  sk
       {int n; 
        float  x;
       }data ,*p;
      若要使p指向data中的n域,正确的赋值语句是___c____.
      a)p=&data.n;
      b)*p=data.n;
      c)p=(struct sk *)&data.n;
      d)p=(struct sk *)data.n;

    4.以下对结构体变量stu1中成员age的非法引用是________.
    struct  student
      {int age;
       int num;
      }stu1,*p;
     p=&stu1;
      a)stu1.age        b)student.age
      c)p->age          d)(*p).age

    5.下面对typedef的叙述中不正确的是______.
      a)用typedef可以定义各种类型名,但不能用来定义变量
      b)用typedef可以增加新类型
      c)用typedef只是将已存在的类型用一个新的标识符来代表
      d)使用typedef有利于程序的通用和移植

    6.以下scanf函数调用语句中对结构体变量成员的不正确引用是________.
       struct  pupil
        {char name[20];
          int age;
          int sex;
        }pup[5],*p;
        p=pup;
       a)scanf("%s",pup[0].name);
       b)scanf("%d",&pup[0].age);
       c)scanf("%d",&(p->sex));
       d)scanf("%d",p->age);
    (二)填空题
    1.以下程序的运行结果是________.
     struct n{
        int x;
        char c;
       };
    main()
      {struct n a={10,'x'};
      func(a);
       printf("%d,%c",a.x,a.c);
      }
    func(struct n b)
      {
      b.x=20;
      b.c='y';
      }

    2.若有定义:
      struct  num
      {int a;
        int b;
        float  f;
       }n={1,3,5.0};
      struct num *pn=&n;
      则表达式pn->b/n.a*++pn->b的值是________,表达式(*pn).a+pn->f的值是________.

    3. 以下程序的运行结果是________.
    struct ks
      {int a;
       int *b;
      }s[4],*p;
      main()
      {
       int n=1;
      printf("\n");
      for(i=0;i<4;i++)
       {
         s[i].a=n;
         s[i].b=&s[i].a;
         n=n+2;
       }
      p=&s[0];
      p++;
      printf("%d,%d\n",(++p)->a,(p++)->a);
    }

    4.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名
    和年龄。请在_______内填入正确内容。
     stati struct man{
        char name[20];
         int age;
      }person[]={"li=ming",18,
                 "wang-hua",19,
                  "zhang-ping",20
                 };

    main()
      {struct man *p,*q;
       int old=0
       p=person;
      for(  ;p_____;p++)
        if(oldage)
         {q=p;______;}
       printf("%s %d",______);
    }

    5. 以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点
    的指针(链表不带头结点)。请在______内填入正确内容。
    struct link
      {char data ;
       struct link *next;
      };

    ....
      struct link *p,*first;
      int c=0;
      p=first;
      while(_____)
       {_______;
        p=_______;
      }
    十一、位运算
    (一)? 选择题
    1.以下运算符中优先级最低的是____C___.以下运算符中优先级最高的是____B___.优先级是& > | > && > ||。

      a)&&       b)&   c)||   d)|

    2.若有运算符<<,sizeof,^,&=则他们按优先级由高到低的正确排列次序是____.
      a)sizeof,&=,<<,^             b)sizeof,<<,^,&=
      c)^,<<,sizeof,&=             d)<<,^,&=,sizeof

    3.sizeof(float)是______.
      a)一种函数调用            b)一个不合法的表示形式
      c)一个整型表达式          d)一个浮点表达式

    4.以下叙述中不正确的是__________.
      a)表达式a&=b等价于a=a&b
      b)表达式a|=b等价于a=a|b
      c)表达式a!=b等价于a=a!b
      d)表达式a^=b等价于a=a^b

    5.若x=2,y=3,则x&y的结果是_________.
     a)0     b)2     c)3       d)5

    6.在位运算中,操作数每左移一位,则结果相当于________.
       a)操作数乘以2       b)操作数除以2
       c)操作数除以4       d)操作数乘以4

  • 相关阅读:
    idea新建一个module时,文件夹显示灰色/pom.xml文件显示灰色且中间有条横线
    C#中的浅拷贝(Shallow Copy)和深拷贝(Deep Copy),深拷贝的集中实现方式,浅拷贝深拷贝的案例
    mysql binlog自动删除与手动删除
    DeepStream系列之yolov8部署测试
    【Spring Boot 源码学习】初识 SpringApplication
    基于人脸5个关键点的人脸对齐(人脸纠正)
    工厂方法模式
    XX市消防救援指挥中心实战指挥平台多链路聚合解决方案实例
    python代码混淆与代码打包
    【Docker 基础教程】侃侃而谈Docker镜像
  • 原文地址:https://blog.csdn.net/zzjlhlcd/article/details/127724520