一、判断题

  1. 表达式 (3.6%2) 符合 C 语言语法。 ( % 运算符要求两边均为整型数据)
  2. 在 C 程序中,用整数 0 表示逻辑值“假”。 (✅ )
  3. 08 是正确的整型常量。 (0 开头的整型常量是八进制数 八进制数字为 0~7 )
  4. 设变量定义为 int a=b=c=5; 则变量 a,b,c 的值都是 5。 ( 逗号分割定义)
  5. 若 x 是单精度实型变量,表达式 (x=10/4) 的值是 2.5。 ( 整数相除,结果为整数)
  6. 若变量定义语句为 int x,y; 则表达式 x=y=1 符合 C 语言语法。 (赋值运算符 = 具有右结合性 等价于 x=(y=1) )
  7. 表达式 !(x>0||y>0) 等价于 !(x>0)&&!(y>0)。 (德摩根定律 )
  8. 表达式 (0x19 <<1) & 0x7 的值是 3。 ( 十六进制 移码运算)
  9. 在 C 语言中名字为 NUM 和 num 的标识符表示的是同一个变量。 ( 变量名大小写敏感 )
  10. 用 #define PI 3.1415926 定义的符号常量 PI 的值在程序中是不能被改变的。 (✅ )

二、选择题

  1. ( )是构成 C 语言程序的基本单位。A

    • (A)函数
    • (B)过程
    • (C)子程序
    • (D)文件
  2. (signed int char)是 C 语言提供的合法的数据类型关键字。

    • (A)float
    • (B)Signed
    • (C)integer
    • (D)Char
  3. 以下选项中不合法的用户标识符是( 字母、数字、下划线组成)。

    • (A)abc.c
    • (B)file
    • (C)Main
    • (D)PRINTF
  4. 合法的 C 语言字符常数是(D )。字符常数 允许 8 16 进制转义。

    • (A)'\084' 8超出八进制范围
    • (B)"A" 字符串
    • (C)'ab' 多字符常量
    • (D)'\x43' 十六进制转义字符
  5. C 语言中,要求运算数必须是整型的运算符是( )。

    • (A)% 取模 要求操作数为整型
    • (B)/
    • (C)<
    • (D)!
  6. 以下选项中不正确的实型常量是( )。

    • (A)2.607E-1
    • (B)0.8103e2
    • (C)77.77
    • (D)456.0e-2.
  7. 合法的 C 语言赋值语句为( )。

    • (A)a=2+b=58 ;
    • (B)i+=-5 ;
    • (C)a<mark>50+(b</mark>50);
    • (D)k =int(a + b);
  8. 不合法的 C 语言赋值语句为( )。

    • (A)++a;
    • (B)n1 =(n2 =(n3= 0));
    • (C)a = b= = c;
    • (D)k = a + b=1 ;
  9. 正确的语句是( )。

    • (A)int x=y=z=0;
    • (B)int z=(x+y)++;
    • (C)x=+3==2;
    • (D)x%=2.5;
  10. 下述程序的输出是( )。

    #include<stdio.h>
    void  main()
    {
        int x=023;
        printf("%d",--x);
    }
    • (A)17
    • (B)18
    • (C)23
    • (D)24
  11. 设 a,b,c 均定义为 int 型,且已赋于大于 1 的数,能正确表达 1/(abc) 的表达式是( )。

    • (A)1/a*b*c
    • (B)1/(a*b*c)
    • (C)1.0/a*b*c
    • (D)1.0/a/b/c
  12. 为表示“a 和 b 都不等于 0”,应使用的 C 语言表达式是( )。

    • (A)(a!=0) || (b!=0)
    • (B)a || b
    • (C)!(a=0)&&(b!=0)
    • (D)a && b
  13. 若 x 是单精度实型变量,k 是基本整型变量,以下正确的输入语句是( )。

    • (A)scanf ("%f%d", &x, &k) ;
    • (B)scanf ("%f%d", x, k) ;
    • (C)scanf ("%d%f", &x, &k) ;
    • (D)scanf ("%d%f", x, k) ;
  14. 已知字符 'c' 的 ASCII 码为 99,语句 printf ("%d,%c",'c', 'c'+1) ; 的输出为( )。

    • (A)99,c
    • (B)99,100
    • (C)99,d
    • (D)语句不合法
  15. 以下选项中不正确的变量名是( )。

    • (A)SUM
    • (B)sum
    • (C)float
    • (D)SuM
  16. 下列表达式的值为 1 的是( )。

    • (A)3﹪5
    • (B)3/5.0
    • (C)3/5
    • (D)3<5
  17. C 语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( )。

    • (A)必须为字母
    • (B)必须为下划线
    • (C)必须为字母或下划线
    • (D)可以是字母、数字和下划线中任一种字符
  18. 下列运算符中优先级最高的是( )。

    • (A)<
    • (B)+
    • (C)&&
    • (D)!=
  19. 阅读以下程序:若 x、i、j 和 k 都是 int 型变量,则执行下面表达式后 x 的值为( )。
    x=(i=4,j=16,k=32)

    • (A)4
    • (B)16
    • (C)32
    • (D)52
  20. 若希望当 A 的值为奇数时,表达式的值为“真”,A 的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是( )。

    • (A)A%2==1
    • (B)!(A%2==0)
    • (C)!(A%2)
    • (D)A%2
  21. 表达式 0x13^0x17 的值是( )。

    • (A)0x04
    • (B)0x13
    • (C)0xE8
    • (D)0x17
  22. 设有以下语句:

    char x=3,y=6,z;
    z=x^y<<2;

    则 z 的二进制值是( )。

    • (A)00010100
    • (B)00011011
    • (C)00011100
    • (D)00011000
  23. 在位运算中,操作数左移一位,其结果相当于( )。

    • (A)操作数乘以 2
    • (B)操作数除以 2
    • (C)操作数除以 4
    • (D)操作数乘以 4
  24. 在位运算中,操作数右移一位,其结果相当于( )。

    • (A)操作数乘以 2
    • (B)操作数除以 2
    • (C)操作数乘以 4
    • (D)操作数除以 4
  25. 以下程序的输出结果是( )。

    #include<stdio.h>
    main( ) 
    { 
        char x=040;
        printf("%o\n",x<<1);
    }
    • (A)100
    • (B)80
    • (C)64
    • (D)32

三、填空题

  1. C 程序中定义的一个字符型变量,代表内存中的 __ 字节存储空间。
  2. 表达式 5.5+1/2+86%10 的计算结果是 ______。
  3. 定义 int a=2,b=3,c=4; 则执行完语句 a*=16+b++-++c 后,a 的值是 ______,b 的值是 ______,c 的值是 ______。
  4. 决定表达式运算顺序的两个因素是 __ 和 ______。
  5. x 为 float 型变量,y 为 double 型变量,a 为 int 型变量,b 为 long 型变量,c 为 char 型变量,则表达式 x+y*a/x+b/y+c 的值是 __ 类型。
  6. 把 k1,k2 定义成基本整型变量,并赋初值 7 的定义语句为 ______。若有语句 k1+=k1-=k1+1;,则 k1 的值为 ______。
  7. 已知 x=2.5,y=4.5,z=10,则算术表达式 x+z%3*(int)(x+y)%2/4 的值为 ______,算术表达式 x+z/(int)x 的值为 ______。
  8. printf("%f",(int)(2.5*3.0)/3); 的输出结果是 ______。
  9. 表达式 18/4*3.2/8 值的数据类型是 ______。
  10. 在 C 语言中,char 型数据在内存中的存储形式是 ______。
  11. 以下程序输出结果是 ______。

    #include<stdio.h>
    main()
    { 
        int a,d=241;
        a=d/100%9; 
        printf("%d\n", a); 
    }
  12. 定义:int a=5,b=4; float x=5.5,y=3.7;
    表达式 (float)(a+b)/2+(int)x/(int)y+(int)(x+y)%4/2 值为 ______。
  13. 定义 int a =2,b =3,c =4;
    执行完下列语句 a*=10+(b++)–(++c); 后 a= ______,b= ______,c= ______。
  14. 定义:int y=0,x=3;
    y+=++x*y++;
    运行后 x,y 的值为:x= ______,y= ______。
  15. 定义:int a=20,n=10; 求各式的值。

    • a/= a + a; (a= ______)
    • a%=n %=7; (a= ______)
    • a + = a - = a * = a ; (a= ______)
  16. 若 x、y、z 均为 int 型变量,则执行以下语句后的输出为 ______。

    x=(y=(z=10)+5)–5;
    printf("x=%d,y=%d,z=%d\n",x,y,z);
    y=(z=x=0,x+10);
    printf("x=%d,y=%d,z=%d\n",x,y,z); 
  17. 已知 int a=1,b=3 则 a^b 的值为 ______。
  18. 下面程序段的输出为 ______。

    #include <stdio.h>
    main()
    { 
        printf("%d\n",12<<2); 
    }
  19. 下面程序段的输出为 ______。

    #include <stdio.h>
    main()
    { 
        int a=8,b;   
        b=a|1;
        b>>=1;
        printf("%d,%d\n",a,b);
    }
  20. 若已知 a=10,b=20,则表达式 !a<b 的值为 ______。

习题三(顺序结构)

一、单项选择题

  1. 对于 int i, j; char c; 当输入序列为 1dc2 3 4 时,执行语句 scanf("%dd%c%*d%*d%d", &i, &c, &j); 后 i,j,c 的值分别为( )。

    • (A)1 2 ‘d’
    • (B)1 2 ‘c’
    • (C)1 4 ‘d’
    • (D)1 4 ‘c’
  2. 若 x 是单精度实型变量,k 是基本整型变量,以下正确的输入语句是( )。

    • (A)scanf ("%f%d", &x, &k) ;
    • (B)scanf ("%f%d", x, k) ;
    • (C)scanf ("%d%f", &x, &k) ;
    • (D)scanf ("%d%f", x, k) ;
  3. 已知字符 ‘c’ 的 ASCII 码为 99 ,语句 printf ("%d,%c", ’c’, ’c’+1 ) ; 的输出为( )。

    • (A)99,c
    • (B)99,100
    • (C)99,d
    • (D)语句不合法
  4. 下面程序段的输出结果是( )。

    main (  )
    { 
        int x=10;
        printf("%d\n",(x=5*6,x*4,x+5)); 
    }
    • (A)30
    • (B)125
    • (C)35
    • (D)120
  5. 已知 i、j、k 为 int 型变量,若从键盘输入:1,2,3<回车>,使 i 的值为 1、j 的值为 2、k 的值为 3,以下选项中相对应的正确输入语句是( )。

    • (A)scanf("%2d%2d%2d",&i,&j,&k);
    • (B)scanf(""%d %d %d",&i,&j,&k);
    • (C)scanf("%d,%d,%d",&i,&j,&k);
    • (D)scanf("i=%d,j=%d,k=%d",&i,&j,&k);
  6. 设 c 是一个字符变量,求解表达式( )后,c 的值不是 1 就是 0。

    • (A)c=getchar()!='\n'
    • (B)(c=getchar())!='\n'
    • (C)c = '1'
    • (D)c = EOF
  7. 设有 float 类型变量 a 的值是 1.89,执行语句 printf("%d,%.1f\n", (int)a, (int)a); 后,输出的值是( )。

    • (A)1,1.0
    • (B)2,2.0
    • (C)1,2.0
    • (D)1,0.0
  8. 设有 float 类型变量 a 的值是 1.6789,执行语句 printf("%.2f ",(float)((int)a)); 后,输出的值是( )。

    • (A)1.00
    • (B)2.00
    • (C)1.67
    • (D)1.68
  9. 设有 int 类型变量 a 的值是 1,执行语句 printf("%d\n",a++>1); 后,输出的值是( )。

    • (A)1
    • (B)2
    • (C)0
    • (D)3
  10. 下面程序段的输出结果是( )。

    main(){
        int x=0x10;
        printf("%d,%d,%d\n", x, x|0, x||0); 
    }
    • (A)16,16,1
    • (B)10,10,1
    • (C)16,16,0
    • (D)16,0,0

二、阅读下列程序,写出运行结果

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

    #include <stdio.h>
    void main()
    { 
        int a = 0x12;
        printf(“%d\n”,a);
        printf ("%x, %o", 17, 17);  
    }
  2. 运行时输入数据为:69 72,则下面程序的运行结果是( )。

    #include <stdio.h>
    void main()
    {   
        unsigned k,n;  
        scanf("%u",&n);  
        k=n%10*10+n/10;
        printf("n=%d    k=%d\n",n,k);
    }
  3. 下面程序运行结果是( )。

    #include <stdio.h>
    void main()
    {  
        int x=40,y=4,z=4;
        x=y= =z; printf("%d   %d   %d\n",x,y,z);
        x=x= =(y=z); printf("%d   %d   %d\n",x,y,z);
    }
  4. 下面程序的运行结果是( )。

    #include <stdio.h>
    void main()
    {  
        int x,y,z; 
        x=y=2; z=3;
        y=x++-1; printf("%d\t%d\t%d\t",x,y,z);
        y=--z+1; printf("%d\t%d\t%d\n",x,y,z);
        x=y=z=0; ++x&&++y||++z;
        printf("%d\t%d\t%d\t",x,y,z);
        --x&&++y&&++z; 
        printf("%d\t%d\t%d\n",x,y,z);
    }
  5. 阅读下列程序,运行时输入 3 4 5 6,则输出结果( )。

    #include<stdio.h>
    #include<math.h>
    main()
    { 
        float a1,a2,a3,s,d;
        scanf(“%f%*f%f%f”,&a1,&a2,&a3);
        s=(a1+a2+a3)/2;
        s=sqrt(s*(s-a1)*(s-a2)*(s-a3));
        printf(“%.2f%.2f  %-10.3f\\n”,a1,a2,a3,s);
    }

习题四(选择结构)

一、单项选择题

  1. 有以下程序

    #include<stdio.h>
    main( )
    { 
        int n;
        scanf(“%d”,&n);
        if(n++>5) printf(“%x\n”,n);
        else printf(“%x\n”,n--);
    }

    若执行程序时从键盘上输入 9,则输出结果是( )。

    • (A)11
    • (B)A
    • (C)9
    • (D)8
  2. 下列程序的运行结果是( )。

    #include<stdio.h>
    main( )
    { 
        int x=100,a=10,b=20,ok1=5,ok2=0; 
        if(a<b)
            if(b!=15)
                if(!ok1)
                    x=1;
                else 
                    if(ok2) x=10;
        x=-1;
        printf(“%d\n”,x);
    }
    • (A)-1
    • (B)0
    • (C)1
    • (D)不确定的值
  3. 下列程序的运行结果是( )。

    #include<stdio.h>
    main( )
    { 
        float x=2.0,y;
        if(x<0.0) y=0.0;
        else if(x<10.0) y=1.0/x;
             else y=1.0;
        printf(“%f\n”,y);
    }
    • (A)0.000000
    • (B)0.250000
    • (C)0.500000
    • (D)1.000000
  4. 以下程序段的输出结果为( )。

    x=0;y=2;z=3;
    switch(x+1)
    { 
        case 1 : switch(y= =2)
                 {
                     case 1 : printf(“*”);break;
                     case 2 : printf(“%”);break;    
                 }
        case 2 : switch(z)
                 { 
                     case 1: printf(“$”);
                     case 2 : printf(“*”);break; 
                     default : printf(“#”);          
                 }
    }
    • (A)*#
    • (B)*$*
    • (C)*%$*#
    • (D)*
  5. 为了避免在嵌套的条件语句 if-else 中产生二义性,C 语言规定:else 子句总是与( )配对。

    • (A)缩排位置相同的 if
    • (B)其之前最近的 if
    • (C)其之后最近的 if
    • (D)同一行上的 if
  6. 下列程序段的输出结果是( )。

    int a = 10, b=0;
    if ( a > 15 )
        b = 1;
    else if ( a < 2 )
        b = 2;
    else
        b = 3;
    printf("%d", b);
    • (A)3
    • (B)2
    • (C)1
    • (D)0
  7. 下列程序段的输出结果是( )。

    int k=1;
    switch(k)
    {
        case 1:putchar(‘P’);
        case 2:
        case 3: putchar(‘Q’); break;
        case 4: putchar(‘R’);
        default: putchar(‘S’);
    }
    • (A)P
    • (B)PQ
    • (C)PQR
    • (D)PQRS

二、阅读下列程序,写出运行结果

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

    #include<stdio.h>
    main( )
    { 
        if(2*2<mark>5<2*2</mark>4) 
            printf(" T");
        else
            printf(" F");
    }
  2. 若当程序运行输入字母 H,则下面程序运行结果是( )。

    #include<stdio.h>
    main( )
    { 
        char ch;
        ch=getchar( );
        switch(ch)
        {
            case ‘H’: printf(" Hello!\n");
            case ‘G’: printf(" Good morning!\n");
            default: printf(" Bye-Bye!\n");
        }
    }
  3. 若当程序运行输入 3 和 5,则下面程序运行结果是( )。

    #include<stdio.h>
    main( )
    { 
        int x,y; 
        scanf(“%d,%d”,&x,&y);
        if(x==y) 
            printf(“x==y”); 
        else if(x>y)
                 printf(“x>y”);
             else 
                 printf(“x<y”);
    }

三、程序填空题

  1. 输入的一个小写字母,将字母循环后移 5 个位置后输出,如 'a' 变成 'f', 'w' 变成 'b'。

    #include <stdio.h>
    main()
    {
        char c;
        c=getchar();
        if(______1______)
            c=c+5;
        else
            if (c>='v' && c<='z')
                ______2______
        putchar(c);
    }
  2. 输入三个整数 x,y,z,请把这三个数由小到大输出。

    #include<stdio.h>
    main()
    {
        int x,y,z,t;
        1       
        if (x>y)
        { t=x;x=y;y=t;} 
        if(x>z)
        { t=z;z=x;x=t;}
        if( 2 )
        { t=y;y=z;z=t;}
        printf("small to big: %d %d %d\n",x,y,z);
    }

习题五(循环结构)

一、单项选择题

  1. 设有程序段

    int k=10;
    while(k=0) k=k-1;

    则下面描述中正确的是( )。

    • (A)while 循环执行 10 次
    • (B)循环是无限循环
    • (C)循环体语句一次也不执行
    • (D)循环体语句执行一次
  2. 下面程序段的运行结果是( )。

    a=1; b=2; c=2;
    while(a<b<c) { t=a; a=b; b=t; c--; }
    printf(“%d,%d,%d”,a,b,c);
    • (A)1,2,0
    • (B)2,1,0
    • (C)1,2,1
    • (D)2,1,1
  3. 对 for(表达式1;;表达式3) 可理解为( )。

    • (A)for(表达式1;0;表达式3)
    • (B)for(表达式1;1;表达式3)
    • (C)for(表达式1; 表达式1;表达式3)
    • (D)for(表达式1; 表达式3;表达式3)
  4. 下面程序段的运行结果是( )。

    for(y=1;y<10;) y=((x=3*y,x+1),x-1);
    printf(“x=%d,y=%d”,x,y);
    • (A)x=27,y=27
    • (B)x=12,y=13
    • (C)x=15,y=14
    • (D)x=y=27
  5. 执行语句 for(i=1;i++<4;); 后变量 i 的值是( )。

    • (A)3
    • (B)4
    • (C)5
    • (D)不定
  6. 若运行以下程序时,从键盘输入 2473<回车>,则下面程序的运行结果是( )。

    #include <stdio.h>
    main()
    {
        int c;
        while((c=getchar())!=‘\n’)
            switch(c-‘2’)
            {
                case 0:
                case 1: putchar(c+4);
                case 2: putchar(c+4); break;
                case 3: putchar(c+3);
                default: putchar(c+2); break;
            }
        printf(“\n”);
    }
    • (A)668977
    • (B)668966
    • (C)66778777
    • (D)6688766
  7. 下面程序的运行结果是( )。

    #include <stdio.h>
    main()
    {
        int num=0;
        while(num<=2)
        {
            num++;
            printf(“%d\n”,num);
        }
    }
    • (A)1
      1
      1
      1
    • (B)1
      2
      2
      2
    • (C)1
      2
      3
      3
    • (D)1
      2
      3
      4
  8. 下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择填空。

    #include <stdio.h>
    main()
    {
        int a,b,t;
        scanf(“%d %d”,&a,&b);
        while( )
        {
            if(a>b)
            { t=a; a=b; b=t; }
            printf(“%d,%d”\n”,a,b);
            scanf(“%d %d”,&a,&b);
        }
    }
    • (A)!a=b
    • (B)a!=b
    • (C)a==b
    • (D)a=b

二、阅读下列程序,写出运行结果

  1. 阅读下列程序,写出运行结果:

    #include <stdio.h>
    main( )
    {
        int x=3;
        do
        {
            printf("%3d",x-=2);
        }while(!(--x));
    }
  2. 阅读下列程序,写出运行结果:

    #include <stdio.h>
    main( )
    {
        int j=0,k=0,a=0;
        while(j<2)
        {
            j++;
            a++;
            k=0;
        }
        while(k<=3)
        {
            k++;
            if(k%2!=0)
                continue;
            a++;
        }
        a++;
        printf("%d\n",a);
    }
  3. 阅读下列程序,指出运行结果:

    #include <stdio.h>
    main( )
    {
        int i;
        for(i=0;i<5;++i)
        {
            if(i==3)
            {
                printf("%d\n",++i);
                break;
            }
            printf("%d",++i);
        }
    }
  4. 阅读下列程序,指出运行结果:

    #include <stdio.h>
    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;
        }
        printf("a=%d\n",a);
    }
  5. 阅读下列程序,指出运行结果:

    #include <stdio.h>
    main( )
    {
        int i,a=0;
        for(i=1;i<=5;i++)
        {
            do
            {
                i++;
                a++;
            }while(i<3);
        }
        i++;
        printf("a=%d,i=%d",a,i);
    }
  6. 输入 4<回车> 后,下列程序的输出结果是( )。

    #include <stdio.h>
    main( )
    { 
        int j,k,n;
        float f,s;
        scanf(“%d”,&n);
        s=0; f=1;
        for(k=1;k<=n;k++) {
            for(j=1;j<k;j++)
                f=f*k;
            s=s+f;
            printf(“% .0f#”,s); 
        }       
    }
  7. 下列程序段的输出是( )。

    #include <stdio.h>
    main()
    { 
        int k;
        for(k=1; k<5; k++)
        {
            if(k % 2) printf("*");
            else continue;
            printf("#");
        }
    }

三、程序填空题

  1. 程序填空,已知有如下计算公式:
    π≈4*(1/1-1/3+1/5-1/7+……)
    下列程序就是根据这一公式计算圆周率的。其中,精度控制在 0.00001;变量 s 表示当前符号项,item 表示当前项,n 表示当前项的序号。

    #include <stdio.h>
    #include <math.h>
    main( )
    {
        float pai=0.0,item=1.0,s=1.0;
        int n=1;
        while( )
        {
            pai+=item;
            s=-s;
            item=s/(2*n+1);
            
        }
        pai=4*pai;
        printf("pai=%f\n",pai);
    }
  2. 程序填空,输入 1 个长整型,求各位数字的平方和。
    例如:输入 –123,输出 14。

    #include <stdio.h>
    void main( )
    { 
        int digit;
        long in , s;
        scanf(“%ld”,&in);
        ;
        ;
        while(in>0) {
            ;
            s=s+digit*digit;
            ;
        }
        printf(“sum=%ldn”,s);
    }
  3. 程序填空,该程序功能:输入 1 个整数后,输出该数的位数(若输入 3214 则输出 4,输入 -23156 则输出 5)。

    #include <stdio.h>
    void main()
    { 
        int n,k=0;
        scanf("%d",&n);
        while( __________ )
        {
            k++;
            __________;
        }
        printf("%d\n",k);
    }
  4. 程序填空,该程序功能:求输入的整数各位数字之和,如输入 234 则输出 9,输入 -312 则输出 6。

    #include <stdio.h>
    #include <math.h>
    void main()
    {
        int n,s=0;
        scanf("%d",&n);
        ____________
        while(n!=0) 
        {
            ____________
            n=n/10;
        }
        printf("%d\n",s);
    }
  5. 程序填空,循环输入若干个整数(以输入 Ctrl+z 结束循环),输出每个数的位数。例如:

    #include <stdio.h>
    void main()
    { 
        int n,m,k;
        while(scanf("%d",&n)!= __________) {
            m=n; __________;
            while(m!=0){
                k++;__________;
            }
            printf("%d是%d位整数\n",__________);
        }
    }

习题六(数组)

一、单项选择题

  1. 在 C 语言中,引用数组元素时,其数组下标可以是( )。

    • (A)整型表达式
    • (B)整型表达式或整型常量
    • (C)整型常量
    • (D)任何表达式
  2. 以下能对一维数组 a 进行正确定义及初始化的语句是( )。

    • (A)int a[10]=(1,2,3);
    • (B)int a[10];a[10]=(1,2,3);
    • (C)int a[10];a[10]={1,2,3};
    • (D)int a[10]={1,2,3};
  3. 若二维数组 a 有 m 列,则计算任一元素 a[i][j] 在数组中位置的公式为( )。

    • (A)i*m+j
    • (B)i*m+j-1
    • (C)j*m+i
    • (D)i*m+j+1
  4. 以下对二维数组 a 的正确定义是( )。

    • (A)int a[3][];
    • (B)float a(3)(4);
    • (C)double a[1][4];
    • (D)float a(3,4);
  5. 有两个字符数组 a、b,则以下正确的输入语句是( )。

    • (A)gets(a,b);
    • (B)scanf("%s%s",&a,&b);
    • (C)scanf("%s%s",a,b);
    • (D)gets("a"),gets("b");
  6. 下面程序段的运行结果是( )。

    char a[7]="abcdef";
    char b[4]="ABC";
    strcpy(a,b);
    printf("%c",a[5]);
    • (A)\0
    • (B)空格
    • (C)e
    • (D)f
  7. 判断字符串 s1 是否大于字符串 s2,应当使用( )。

    • (A)if(s1>s2)
    • (B)if(strcmp(s1,s2))
    • (C)if(strcmp(s1,s2)>0)
    • (D)if(strcmp(s2,s1)>0)
  8. 若有说明:int a[][4]={1,1}; 则下面不正确的叙述是( )。

    • (A)二维数组 a 的第一维大小为 1
    • (B)数组 a 的每个元素都可得到初值 1
    • (C)a[0][0] 和 a[0][1] 可得到初值 1,其余元素初值默认为 0
    • (D)二维数组 a 的第一维大小可省略
  9. 若有说明:int a[][3]={1,2,3,4,5,6,7}; 则数组 a 第一维大小为( )。

    • (A)3
    • (B)2
    • (C)1
    • (D)不确定
  10. 对两个数组 a 和 b 进行如下初始化

    char a[ ]=”you”;
    char b[ ]={‘y’,’o’,’u’};

    则以下叙述正确的是( )。

    • (A)a 与 b 数组完全相同
    • (B)a 与 b 数组长度相同
    • (C)a 和 b 数组中存放地都是字符串
    • (D)a 数组比 b 数组长度长
  11. 假设字符数组 a 和 b 中均存有字符串,判断 a 与 b 中字符串是否相等,应使用( )。

    • (A)if(a=b)
    • (B)if(a==b)
    • (C)if(strcmp(a,b)==0)
    • (D)if(strcpy(a,b))
  12. 下面程序段运行的结果是( )。

    char c[]=”\t\v\\\0will\n”;
    printf(“%d”,strlen(c));
    • (A)14
    • (B)9
    • (C)4
    • (D)3
  13. 对以下说明语句的正确理解是( )。
    int a[10]={1,2,3,4,5};

    • (A)将 5 个初值依次赋给 a[1] 至 a[5]
    • (B)将 5 个初值依次赋给 a[6] 至 a[10]
    • (C)将 5 个初值依次赋给 a[0] 至 a[4]
    • (D)因为数组长度与初值个数不同,语句有错
  14. 下面程序段运行的结果是( )。

    int i;
    int a[3][3]={1,2,3,4,5,6,7,8,9};
    for(i=0;i<3;i++)printf(“%3d”,a[i][2-i]);
    • (A)3 5 7
    • (B)3 6 9
    • (C)1 5 9
    • (D)1 4 7
  15. 以下正确的数组定义语句是( )。

    • (A)int a[1][4]={1,2,3,4,5};
    • (B)float x[3][]={{1},{2},{3}}
    • (C)float x[3][3]={{1},{2},{3},{4}}
    • (D)float x[3][3]={{1},2, 3}
  16. 下面程序段运行的结果是( )。

    float x[3][3]={{1},2,3} ;
    printf("%6.2f",x[1][1]);
    printf("%6.2f",x[2][0]);
    • (A)3.00 0.00
    • (B)2.00 3.00
    • (C)0.00 3.00
    • (D)1.00 3.00

二、阅读下列程序,写出运行结果

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

    #include <stdio.h>
    main()
    {
        char ch[7]={“12ab56”};
        int i,s=0;
        for(i=0;ch[i]>=‘0’&&ch[i]<=‘9’;i+=2)
            s=10*s+ch[i]-‘0’;
        printf(“%d\n”,s);
    }
  2. 下面程序的运行结果是( )。

    #include <stdio.h>
    main( )
    { 
        int i=1,n=3,j,k=3;
        int a[5]={1,4,5};
        while(i<=n&&k>a[i])i++;
        for(j=n-1;j>=i;j--)
            a[j+i]=a[j];
        a[i]=k;
        for(i=0;i<=n;i++)
            printf(“%3d”,a[i]);
    }
  3. 若当程序运行输入:hello everybody 则下面程序运行结果是( )。

    #include <stdio.h>
    main( )
    { 
        char str[30];
        scanf(“%s”,str);
        printf(“%s”,str);
    }
  4. 若当程序运行输入:hello everybody 则下面程序运行结果是( )。

    #include <stdio.h>
    main( )
    { 
        char str[30];
        gets(str);
        printf(“%s”,str);
    }
  5. 下面程序的运行结果是( )。

    #include <stdio.h>
    main()
    { 
        int i,k=5,a[10],b[3];
        for(i=0;i<10;i++) a[i]=i;
        for(i=0;i<3;i++) b[i]= a[i*(i+1)];
        for(i=0;i<3;i++) k+=b[i]*2;
        printf(“%d\n”,k);
    }

三、程序调试题

  1. 下面程序可求出矩阵 a 的主对角线上的元素之和,请按程序功能填空。

    #include <stdio.h>
    main()
    { 
        int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
        for(i=0;i<3;i++)
            for(j=0;j<3;j++)
                if(_____)sum=sum+_______;
        printf("sum=%d\n",sum);
    }
  2. 下面程序以每行 4 个数据的形式输出 a 数组,请按程序功能完成填空。

    #include <stdio.h>
    #define N 20
    main()
    { 
        int a[N],i;
        for(i=0;i<N;i++)scanf("%d",_______);
        for(i=0;i<N;i++)
        {
            if (_____________) _____________
            printf("%3d",a[i]);
        }
        printf("\n");
    }
  3. 下面程序的功能是在三个字符串中找出最小的,请按程序功能完成填空。

    #include<stdio.h>
    #include<string.h>
    main()
    { 
        char s[20],str[3][20];
        int i;
        for(i=0;i<3;i++)gets(str[i]);
        strcpy(s,_______);
        for(i=0;i<3;i++)
            if(strcmp(str[i],s)<0)strcpy(s,str[i]);
        printf("%s\n",_______);
    }
  4. 判断 100-200 之间有多少个素数,并输出所有素数,每行只能输出 10 个数。

    #include <stdio.h>
    ________________
    main()
    { 
        int m,i,k,h=0,leap=1;
        printf("\n");
        for(m=100;m<=200;m++)
        { 
            k=sqrt(m+1);
            for(i=2;i<=k;i++)
                if(________________)
                { 
                    leap=0;
                    break;
                }
            if(leap)
            { 
                printf("%-4d",m);
                h++;
                if(______________) printf("\n");
            }
            leap=1;
        }
        printf("\nThe total is %d",h);
    }
  5. 下面程序的功能是将字符串 s 中所有的字符 'c' 删除。请根据程序功能完成程序代码中填空。

    #include <stdio.h>
    main()
    { 
        char s[80];
        int i,j;
        printf(“input a string:”);
        
        for(i=0,j=0;s[i]!=‘\0’;i++)
            if( ) {s[j]=s[i];j++;} 
        
        puts(s);
    }
  6. 求出数组 m 中各相邻两个元素的和,并将这些和存放在数组 n 中,按每行 4 个元素的形式输出。(例如:n[1]=m[1]+m[0],…………,n[9]=m[9]+m[8]),请根据程序功能完成程序代码中填空。

    #include <stdio.h>
    void main()
    {
        int m[10],n[10],i;
        printf("\nInput 10 numbers: ");
        for (i=0; i<10;i++) /* 数组输入 */
            scanf("%d", &m[i]);
        for (i=1; i<10; i++)
            n[i]=______1______; /* 计算 n 数组中的元素 */
        for (i=1; i<10; i++)
        {
            printf("%3d",n[i]);
            if (______2______) printf("\n"); /* 每行打印 4 个数据 */
        }
    }
  7. 下面程序功能实现将两个字符串连接起来。下面源程序中 “/ N /” 的下一行中有错误,请改正。注意:不得加行、减行、加句、减句。

    #include <stdio.h>
    void main()
    {
        char s1[80],s2[40];
        int i=0,j=0;
        printf("\nInput the first string:");
        scanf("%s",s1);
        printf("\nInput the second string:");
        scanf("%s",s2);
        while (s1[i] !='\0')
        /****** 1 ******/
            i+1;
        while (s2[j] !='\0')
        /****** 2 ******/
            s1[++i]=s2[++j]; /* 拼接字符到 s1 */
        s1[i] ='\0';
        printf("\nNew string: %s",s1);
    }
  8. 设计程序:将数组 a 的每 1 行均除以该行上绝对值最大的元素,然后将 a 数组以二维形式输出到屏幕

    #include <stdio.h>
    #include <math.h>
    main()
    {
        float a[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}};
        float x;int i,j;
        for(i=0;i<3;i++)
        { ;/*将每行第一个元素暂定为绝对值最大的元素*/
            for(j=0;j<3;j++)
                if(fabs(a[i][j])>fabs(x)) ;
            for(j=0;j<3;j++)
                a[i][j]=a[i][j]/x;
        }
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
                printf("%10.6f",a[i][j]);
            ;
        }
    }
  9. 累加 a 字符串中所有非大写英文字母字符的 ASCII 码,将累加和存入变量 x 并显示。

    #include <stdio.h>
    void main()
    { 
        int x, i;
        char a[]="Windows Office 2010";
        /****在以下空白处写入执行语句******/
    
    
        /****在以上空白处写入执行语句******/
        printf("%d\n",x);
    }
  10. 在数组 x 的 10 个数中求平均值 v,找出与 v 相差最小的数组元素存入变量 y 并显示 v、y。

    #include <stdio.h>
    #include <math.h>
    void main()
    { 
        int i; double d,v,y;
        double x[10]={1.2,-1.4,-4.0,1.1,2.1,-1.1,3.0,-5.3,6.5,-0.9};
        /*****在以下空白处写入执行语句 ******/
    
    
        /****在以上空白处写入执行语句 ******/
        printf("%f %f\n",v,y);
    }

习题七(函数+编译预处理)

一、选择题

  1. 以下正确的函数声明语句形式是( )。

    • (A)double f(int a,int b)
    • (B)double f(int a, b)
    • (C)double f(int a;int b)
    • (D)double f(int a,int b);
  2. C 语言允许函数定义时缺省函数值类型,此时该函数值类型默认为( )。

    • (A)double 型
    • (B)long 型
    • (C)void 型
    • (D)int 型
  3. 下面函数调用语句中实参的个数为( )。
    max(3+5,sqrt(4),(7,8));

    • (A)3
    • (B)5
    • (C)4
    • (D)2
  4. 在函数调用 func((x+2,y),z*2) 中的实参个数是( )。

    • (A)3
    • (B)2
    • (C)4
    • (D)5
  5. C 语言规定,当函数调用中实参为简单变量时,它与对应形参之间的数据传递方式是( )。

    • (A)单向传数值
    • (B)双向传数值,即由实参将值传给形参,再由形参传回给实参
    • (C)可以由用户选择传递方式
    • (D)传地址
  6. 以下程序的正确运行结果是( )。

    #include <stdio.h> 
    main()
    {
        int a=2;
        printf(“%4d”,f(a+1));
    }
    int f(int x)
    {
        int a=0;
        a++;x++; 
        return (x+a);
    }
    • (A)4
    • (B)5
    • (C)6
    • (D)7
  7. 凡是函数中未指定存储类型的局部变量,其隐含的存储类型为( )。

    • (A)外部型(extern)
    • (B)自动型(auto)
    • (C)静态型(static)
    • (D)寄存器型(register)
  8. 以下程序的正确运行结果是( )。

    #include <stdio.h>
    main()
    {
        int k=4,m=1,p,i;
        for(i=0;i<2;i++)
            p=f(k,m);printf(“%d”,p);
    }
    f(int a,int b)
    {
        static int m=0,i=2;
        i+=m+1;
        m=i+a+b;
        return m;
    }
    • (A)17
    • (B)16
    • (C)20
    • (D)8
  9. 若用数组名作为函数调用的实参,则传递给形参的是( )。

    • (A)数组的首地址
    • (B)数组第一个元素的值
    • (C)数组中全部元素的值
    • (D)数组元素的个数
  10. 若调用一个函数,该函数定义中函数值类型缺省,且此函数中没有 return 语句,则正确的说法是( )。

    • (A)没有返回值
    • (B)返回若干个系统默认值
    • (C)能返回一个用户所希望的函数值
    • (D)返回一个不确定的值
  11. 已有如下数组定义和 f 函数调用语句:

    int a[3][4];
    f(a);

    则在 f 函数的说明中,对形参数组 array 的正确定义方式为( )。

    • (A)f(int array[][])
    • (B)f(int array[3][])
    • (C)f(int array[][4])
    • (D)f(int *array)
  12. 以下不正确的说法为( )。

    • (A)在不同函数中可以使用相同名字的变量
    • (B)形式参数是局部变量
    • (C)在函数内定义的变量只在本函数范围内有效
    • (D)在函数内的复合语句中定义的变量在本函数范围内有效
  13. 以下程序的正确运行结果是( )。

    #include <stdio.h>
    void num()
    {
        extern int x,y;
        int a=15,b=10;
        x=a-b;
        y=a+b;
    }
    int x,y;
    main()
    {
        int a=7,b=5;
        x=a+b;
        y=a-b;
        num();
        printf(“%d,%d\n”,x,y);
    }
    • (A)12,2
    • (B)不确定
    • (C)5,25
    • (D)1,12
  14. 在一个 C 源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( )。

    • (A)extern
    • (B)register
    • (C)auto
    • (D)static
  15. 以下程序的正确运行结果是( )。

    #include <stdio.h>
    main()
    { 
        int a=2,i;
        for(i=0;i<3;i++) printf(“%4d”,f(a));
    }
    
    f(int a)
    { 
        int b=0;
        static int c=3;
        b++; c++;
        return(a+b+c);
    }
    • (A)7 7 7
    • (B)7 10 13
    • (C)7 9 11
    • (D)7 8 9

二、阅读下列程序,写出运行结果

  1. 运行结果为:( )。

    #include <stdio.h>
    int a=16,b=7;
    int max(a,b)
    {
        int c;
        c=a>b?a:b;
        return c;
    }
    main( )
    {
        int a=5;
        printf(“%d”,max(a,b));
    }
  2. 运行结果为:( )。

    #include <stdio.h>
    int jc(int x)
    {
        static int jcx=1;
        jcx=jcx*x;
        return jcx;
    }
    main( )
    {
        int i;
        for(i=1;i<=3;i++) printf(“%d!=%d\n”,i,jc(i));
    } 
  3. 运行结果为:( )。

    #include <stdio.h>
    #define M 2
    main( )
    {
        int x;
        x=func(M);
        printf(“%d”,x);
    }
    int func(int x)
    {
        double a=13;
        a/=x;
        return a;
    }
  4. 运行结果为:( )。

    #include<stdio.h>
    void sort(int a[ ])
    {
        int i,j,t;
        for(i=0;i<4;i++)
            for(j=0;j<4-i;j++)
                if(a[j]>a[j+1]) t=a[i],a[j]=a[j+1],a[j+1]=t;
    }
    main( )
    {
        int a[5]={3,-5,2,7,9},i,t,j;
        sort(a);
        for(i=0;i<=4;i++)printf(“%d”,a[i]);
    }
  5. 运行结果为:( )。

    #include <stdio.h>
    main( )
    {
        f1( );
        f2( );
        f1( );
        f2( );
    }
    f1( )
    {
        int a=0;
        printf(“a=%d\n”,++a);
    }
    f2( )
    {
        static int b=0;
        printf(“b=%d\n”,++b); 
    }
  6. 运行结果为:( )。

    #include <stdio.h>
    int a=5; int b=7;
    main()
    {
        float plus (int ,int);
        int a=4,b=5,c;
        c=plus(a,b);
        printf("A+B=%f\n",c);
    }
    float plus(int x,int y)
    {
        float z;
        z=x+y;
        return z;
    }
  7. 运行结果为:( )。

    #include <stdio.h>
    int func(int n)
    {
        if(n==1) return 1;
        else 
            return (n*func(n-1));
    }
    main()
    {
        int x;
        x=func(3);
        printf(“%6d”,x);
    }
  8. 运行结果为:( )。

    #include <stdio.h>
    void swap(int x[])
    {
        x[0]=x[0]+x[1];
        x[1]=x[0]-x[1];
        x[0]=x[0]-x[1];
    }
    main( )
    {
        int a[2]={5,6};
        swap(a);
        printf(“%d,%d”,a[0],a[1]);
    }
  9. 程序运行输出结果为:( )。

    #include<stdio.h>
    int f2(int n)
    { 
        if(n<mark>1||n</mark>2)return n;
        else return n*f2(n-2);
    }
    void main()
    { 
        printf(“%d”,f2(6));
    }
  10. 运行结果为:( )。

    #include<stdio.h>
    main()
    {
        int p(int );
        printf(“%d”,p(3));
    }
    int p(int n)
    {
        return ((n<=0)?n:p(n-1)+p(n-2));
    }

三、单项选择题(编译预处理)

  1. 以下叙述中正确的是( )。

    • a) 在程序的一行上可以出现多个有效的预处理命令行
    • b) 使用带参的宏时,参数的类型应与宏定义时的一致
    • c) 宏替换不占用运行时间,只占用编译时间
    • d) 在以下定义中 C R 是称为“宏名”的标识符
      #define C R 045
  2. 以下程序的运行结果是( )。

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

    #define MAX(x,y) (x)>(y)?(x):(y)
    main()
    {
        int a=5,b=2,c=3,d=3,t;
        t=MAX(a+b,c+d)*10;
        printf(“%d\n”,t);
    }
    • a) 70
    • b) 60
    • c) 7
    • d) 6
  4. 若有宏定义如下:

    #define X 5
    #define Y X+1
    #define Z Y*X/2

    则执行以下 printf 语句后,输出结果是( )。

    int a;a=Y;
    printf("%d ",Z);
    printf("%d\n",--a);
    • a) 7 6
    • b) 12 6
    • c) 12 5
    • d) 7 5
  5. 请读程序:

    #include <stdio.h>
    #define MUL(x,y) (x)*y
    main()
    {
        int a=3,b=4,c;
        c=MUL(a++,b++);
        printf("%d\n",c);
    }

    上面程序的输出结果是( )。

    • a) 12
    • b) 15
    • c) 20
    • d) 16
  6. 对下面程序段:

    #define A 3
    #define B(a) ((A+1)*a)
    ...
    x=3*(A+B(7));

    正确的判断是( )。

    • a) 程序错误,不许嵌套宏定义
    • b) x=93
    • c) x=21
    • d) 程序错误,宏定义不许有参数
  7. 以下正确的描述是( )。

    • a) C 语言的预处理功能是指完成宏替换和包含文件的调用
    • b) 预处理指令只能位于 C 源程序文件的首部
    • c) 凡是 C 源程序中行首以 # 标识的控制行都是预处理指令
    • d) C 语言的编译预处理就是对源程序进行初步的语法检查
  8. 在“文件包含”预处理语句的使用形式中,当 #include 后面的文件名用 < > (尖括号) 括起时,找寻被包含文件的方式是( )。

    • a) 仅仅搜索当前目录
    • b) 仅仅搜索源程序所在目录
    • c) 直接按系统设定的标准方式搜索目录
    • d) 先在源程序所在目录搜索,再按照系统设定的标准方式搜索

本文归档于个人知识库 · 领域:CS & AI · 模块:04 Project_CS_AI/Programming