C语言程序设计教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

习题1

一、选择题

1.1 简单程序设计步骤中不包括( )。

(A)编码

(B)确定算法

(C)安装编译程序

(D)调试

1.2 算法应当具有的特性不包括( )。

(A)可行性

(B)有穷性

(C)确定性

(D)美观性

1.3 以下选项中叙述正确的是( )。

(A)C程序中的语句要经过编译才能转换成二进制机器指令

(B)算法需要包含所有三种基本结构

(C)有些算法不能用三种基本结构来表达

(D)简单算法的操作步骤不能超过20步

1.4 关于程序设计基本概念,以下叙述错误的是( )。

(A)计算机可以直接执行由任意高级语言编写的程序

(B)高级语言都有与之对应的编译程序或解释程序

(C)用于任何一种计算机高级语言都可以把算法转换为程序

(D)结构化算法可以解决任何复杂的问题

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

(A)只使用三种基本结构即可解决任何复杂问题

(B)C语言程序并不是必须要定义main()函数

(C)只要程序包含了任意一种基本结构,就肯定是结构化程序

(D)程序中的语法错误只能在运行时才能显现

1.6 以下叙述错误的是( )。

(A)计算机可以直接识别由十六进制代码构成的程序

(B)可以连续执行的指令的集合称为“程序”

(C)“程序”是人与计算机“对话”的语言

(D)计算机可以直接识别由0和1组成的机器语言代码

1.7 以下叙述中错误的是( )。

(A)书写风格良好的程序执行效率高

(B)书写风格良好的程序易读性好

(C)C程序可以在一行上写多条语句

(D)C程序允许将一条语句分写在多行上

1.8 关于程序中的注释,以下叙述正确的是( )。

(A)注释的内容必须放在一对/ * 和 * /之间

(B)注释必须置于所说明的语句前或语句后

(C)注释中间可以嵌套另一个注释

(D)注释内容错误会导致编译出错

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

(A)在C语言中分号是语句的组成部分

(B)C语言程序由C语句组成,可以省略main函数

(C)分号是C语句之间的分隔符

(D)所有程序行都必须用分号结束

1.10 在源程序的开始处加上#include <stdio.h>进行文件引用的原因,以下叙述正确的是( )。

(A)stdio.h文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正确使用printf、scanf等函数

(B)将stdio.h中标准输入输出函数连接到编译生成的可执行文件中,以便能正确运行

(C)将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译连接

(D)将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译连接

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

(A)C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件

(B)C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.exe的可执行文件

(C)C编译程序把文件后缀为.obj的二进制文件编译成文件后缀为.exe的可执行文件

(D)链接程序把文件后缀为.c的源程序文件连接成文件后缀为.exe的可执行文件

1.12 以下叙述中错误的是( )。

(A)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

(B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

(C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中

(D)C语言源程序经编译后生成后缀为.obj的目标程序

1.13 流程图是描述算法的很好的工具,一般的流程图中由几种基本图形组成。其中判断框的图形是( )。

(A)菱形

(B)长方形

(C)平行四边形

(D)椭圆形

1.14 关于C语言标识符,以下叙述错误的是( )。

(A)标识符可全部由数字组成

(B)标识符可全部由下画线组成

(C)标识符可全部由小写字母组成

(D)标识符可全部由大写字母组成

1.15 以下叙述错误的是( )。

(A)若用户标识符的命名与预定义标识符相同,命名无效

(B)若用户标识符的命名与关键字相同,将产生编译错误

(C)若用户标识符的命名与预定义标识符相同,预定义标识符失去原有含义

(D)若用户标识符的命名与预定义标识符相同,可能引发运行错误

1.16 以下是正确C语言标识符的是( )。

(A)&3

(B)#3

(C)_3

(D)-3

1.17 以下选项中不能在C语言程序中用作用户标识符的是( )。

(A)auto

(B)scanf

(C)Float

(D)_3_14

1.18 C语言中,最基本的数据类型包括( )。

(A)整型、实型、逻辑型

(B)整型、字符型、数组

(C)整型、实型、字符型

(D)整型、实型、结构体

1.19 C语言整数不包括( )。

(A)带小数点的整数

(B)正整数

(C)负整数

(D)无符号整数

1.20 以下选项中可用作C程序合法整数的是(选项B的数字间有一个空格)( )。

(A)xff

(B)1 2

(C)0x77

(D)018

1.21 在C语言中,以下选项中不能正确表示10×1000之值的是( )。

(A)1.0E4.0

(B)1.E4

(C)10E3

(D)1.0e4

1.22 以下选项中,合法的C语言实数是( )。

(A).4e0

(B)4.3e0.2

(C)E4.8

(D)0.29E

1.23 设有语句:printf("%2d\n",2010);,则以下叙述正确的是( )。

(A)程序运行时输出2010

(B)程序运行时输出20

(C)程序运行时输出10

(D)指定的输出宽度不够,编译出错

1.24 以下是正确C语言实型常量的是( )。

(A).e-1

(B)e-1

(C)-1e

(D)1e-1

1.25 以下非法的字符常量是( )。

(A)'\\n'

(B)'\101'

(C)'\x21'

(D)'\0'

1.26 若有说明语句:char c='\72';则变量c中存放的是( )。

(A)2个字符

(B)1个字符

(C)3个字符

(D)4个字符

1.27 以下合法的转义字符是( )。

(A)'\0X41'

(B)'\0x41'

(C)'\X41'

(D)'\x41'

1.28 以下不是合法C语言转义字符的是( )。

(A)'\c'

(B)'\a'

(C)'\b'

(D)'\r'

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

(A)表达式9-'0'的值是数值9

(B)表达式'A'+32的值是字母A的ASCII码

(C)表达式'a'-32的值是字母a的ASCII码

(D)表达式9+'0'的值是字符9的ASCII码

1.30 以下选项中,合法的C语言常量是( )。

(A)21.84

(B)'CPP'

(C)"\1.0

(D)MB

1.31 以下选项中,合法的一组C语言数值常量是( )。

(A)12. 0Xa23 4.5e0

(B)028 .5e-3 -0xf

(C).177 4e1.5 0abc

(D)0x8A 10,000 3.e5

1.32 以下选项中,合法的数值型常量是( )。

(A)3.1415

(B)"A"

(C)092

(D)0xDH

1.33 以下选项中,合法的数值型常量是( )。

(A)3.2

(B)'X'

(C)099

(D)0xEH

1.34 关于C语言的变量名,以下叙述正确的是( )。

(A)变量名不可以与关键字同名

(B)变量名不可以与预定义标识符同名

(C)变量名必须以字母开头

(D)变量名是没有长度限制的

1.35 以下非法的定义语句是( )。

(A)long b=0L;

(B)unsigned int a=-100u;

(C)short c2=0123;

(D)int d=0x0;

1.36 设有两行定义语句:

int scanf;

float case;

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

(A)两行定义语句都不合法

(B)两行定义语句都合法

(C)第1行语句不合法

(D)第2行语句不合法

1.37 设有定义:double x;,以下选项中不能将输入数据3.14读入赋给变量x的是()。

(A)scanf("%4.2f",&x);

(B)scanf("%lf",&x);

(C)scanf("%le",&x);

(D)scanf("%4lf",&x);

1.38 若有定义:char c; int d;,程序运行时输入:c=1,d=2<回车>,能把字符1输入给变量c、整数2输入给变量d的输入语句是( )。

(A)scanf("c=%d d=%d", &c,&d);

(B)scanf("c=%c d=%d", &c,&d);

(C)scanf("c=%d,d=%d", &c,&d);

(D)scanf("c=%c,d=%d", &c,&d);

1.39 若有定义:int a; float b; double c; ,程序运行时输入:1,2,3<回车>,能把1输入给变量a、2输入给变量b、3输入给变量c的输入语句是( )。

(A)scanf("%d,%f,%lf", &a,&b,&c);

(B)scanf("%d%f%lf", &a,&b,&c);

(C)scanf("%d,%lf,%lf", &a,&b,&c);

(D)scanf("%d,%f,%f", &a,&b,&c);

1.40 有以下程序段

      char c1,c2,c3;
      scanf("%c%c%c",&c1,&c2,&c3);
  

若要给c1、c2、c3分别输入字母A、B、C,则以下对输入形式的描述正确的是( )。

(A)字母A、B、C之间可以用空格分隔

(B)字母A、B、C之间不能有分隔符

(C)字母A、B、C之间可以用回车符分隔

(D)字母A、B、C之间可以用“Tab”键分隔

1.41 设有定义:int a,b; float x,y; ,则以下选项中对语句所做的注释叙述错误的是( )。

(A)scanf("%d%d%f",&a,&b); / * 多余的格式符%f完全不起作用 * /

(B)scanf("%d%d",&a,&b,&x); / * 多余的输入项不能获得输入数据 * /

(C)scanf("%d%f%d",&a,&b,&x); / * 输入项与格式符类型不匹配,变量b和x得不到正确的输入数据 * /

(D)scanf("Input:%d%d",&a,&b); / * 格式串中允许加入格式符以外的字符串 * /

1.42 以下选项中错误的是( )。

(A)printf("%s\n", 's');

(B)printf("%d %c\n", 's','s');

(C)printf("%c\n", 's'-32);

(D)printf("%c\n", 65);

1.43 以下能正确输出字符a 的语句是()

(A)printf("%s", "a");

(B)printf("%s", 'a');

(C)printf("%c", "a");

(D)printf("%d", 'a');

1.44 设有定义:double x=2.12;,以下不能完整输出变量x值的语句是( )。

(A)printf("x=%5.0f\n",x);

(B)printf("x=%f\n",x);

(C)printf("x=%lf\n",x);

(D)printf("x=%0.5f\n",x);

1.45 以下不能输出小写字母a的选项是( )。

(A)printf("%c\n","a");

(B)printf("%c\n",'A'+32);

(C)putchar(97);

(D)putchar('a');

1.46 设有定义:

      int n = 1234;
      double x = 3.1415;
  

则语句 printf("%3d,%1.3f\n", n, x);的输出结果是( )。

(A)1234,3.142

(B)123,3.142

(C)1234,3.141

(D)123,3.141

1.47 若有定义:int a=0,b=0,c=0,d=0;,以下关于C语言表达式:(++a || ++b) ? ++c : ++d 执行顺序的叙述正确的是( )。

(A)先执行++a,表达式++a的值为1;再执行++b,表达式++b的值为1,由此可确定(++a || ++b)值为1,因此执行++c

(B)先执行++a,表达式++a的值为1,由此可确定(++a || ++b)值为1,因此执行++c

(C)先执行++b,表达式++b的值为1;再执行++a,表达式++a的值为1,由此可确定(++a || ++b)值为1,因此执行++c

(D)先执行++b,表达式++b的值为1,由此可确定(++a || ++b)值为1,因此执行++c

1.48 以下选项中,与n=i++完全等价的表达式是( )。

(A)n=i,i=i+1

(B)n+=i+1

(C)i=i+1,n=i

(D)n=++i

1.49 以下不能用于实型数据的运算符是( )。

(A)%

(B)/

(C)*

(D)+

1.50 设有定义:int x=7,y=12;,则以下表达式值为3的是( )。

(A)(y%=x)-(x%=5)

(B)y%=(x%=5)

(C)y%=x-x%5

(D)y%=(x-x%5)

1.51 若有定义:int a,b,c;以下程序段的输出结果是( )。

      a=11;  b=3;  c=0;
      printf("%d\n",c=(a/b,a%b);
  

(A)2

(B)0

(C)3

(D)1

1.52 设有定义:int x,y,z;,且各变量已赋正整数值,则以下能正确表示代数式"1/(xyz)"的C语言表达式是( )。

(A)1.0/x/y/z

(B)1/x*y*z

(C)1/(x*y*z)

(D)1/x/y/(double)z

1.53 设有定义:double x=5.16894;,则语句printf("%lf\n",(int)(x*1000+0.5)/1000.);的输出结果是( )。

(A)5.16900

(B)5.16800

(C)0.00000

(D)输出格式说明符与输出项不匹配,产生错误信息

1.54 设变量m为float类型,变量n为int类型,则以下能实现将m中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( )。

(A)m=(m*100+0.5)/100.0

(B)n=m*100+0.5, m=n/100.0

(C)n=m/100+0.5, m=n*100.0

(D)m=m*100+0.5/100.0

1.55 若有C语言表达式2+3*4+7/3,以下选项中叙述正确的执行顺序是( )。

(A)先执行3*4得12,再执行7/3得2.5,最后执行2+12+2.5得16.5

(B)先执行3*4得12,再执行2+12得14,再执行7/3得2,最后执行14+2得16

(C)先执行7/3得2,再执行3*4得12,再执行12+2得14,最后执行2+14得16

(D)先执行2+3得5,再执行5*4得20,再执行20+7得27,最后执行27/3得9

1.56 若有定义int a, b, c;以下选项中的赋值语句正确的是( )。

(A)a=(b=c) + 1;

(B)(a=b)=c=1;

(C)a=(b==c)=1;

(D)a+b=c;

1.57 以下选项中合法的C语言赋值语句是( )。

(A)++i;

(B)a=b=34

(C)a=3,b=9

(D)k=int(a+b);

1.58 若有定义:double a=22;int i=0,k=18;则不符合C语言规定的赋值语句是( )。

(A)i=(a+k)<=(i+k);

(B)i=a%11;

(C)a=a++,i++

(D)i=!a;

1.59 若变量已正确定义并赋初值,以下合法的赋值语句是( )。

(A)k=(m==n);

(B)k=-m-n

(C)k=int(m+n);

(D)k=m*n=1;

1.60 若有定义语句:

  int x=10;
  

则表达式x-=x+x的值为( )。

(A)10

(B)-20

(C)0

(D)-10

1.61 若有定义语句:int a=12;,则执行语句:a+=a-=a*a;后,a的值是( )。

(A)-264

(B)552

(C)144

(D)264

1.62 设有定义:int a=0,b=1,c=1;以下选项中,表达式值与其他三个不同的是( )。

(A)b=a==c

(B)a=b=c

(C)a=c==b

(D)c=a!=c

1.63 以下选项中,当且仅当x的绝对值在1~6范围内表达式值为“真”的是( )。

(A)(x>=-6)&&(x<=-1)||(x>=1)&&(x<=6)

(B)(x>=1)&&(x<=6)&&(x>=-6)&&(x<=-1)

(C)(x>=-6)||(x<=-1)||(x>=1)||(x<=6)

(D)(x>=1)&&(x<=6)||(x>=-1)&&(x<=-6)

1.64 以下与数学表达式 "0<x<5且x≠2" 不等价的C语言逻辑表达式是( )。

(A)(0<x<5) && (x!=2)

(B)0<x && x<5 && x!=2

(C)x>0 && x<5 && x!=2

(D)(x>0 && x<2) || (x>2 && x<5)

1.65 下关于逻辑运算符两侧运算对象的叙述中正确的是( )。

(A)可以是任意合法的表达式

(B)只能是整数0或非0整数

(C)可以是结构体类型的数据

(D)只能是整数0或1

1.66 以下选项中与 ( !a== 0 )的逻辑值不等价的表达式是( )。

(A)( a== !0 )

(B)a

(C)(a>0 || a<0)

(D)(a!= 0)

1.67 以下与表达式(!x==0) 的逻辑值不等价的选项是( )。

(A)x==1

(B)x

(C)x!=0

(D)x>0 || x<0

1.68 以下表达式的值与x无关、其值恒为真的是( )。

(A)0 < x < 5

(B)x>10 && x<5

(C)x>10 && x<5

(D)x<10 && x>5

1.69 设有定义:int a=0,b=1;,以下表达式中,会产生“短路”现象,致使变量b的值不变的是( )。

(A)+a||++b

(B)a++||++b

(C)a++&&b++

(D)a++&&b++

1.70 已知a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a>b)&&(n=c<d)后n的值为( )。

(A)1

(B)0

(C)2

(D)-1

1.71 设有定义:int x=11,y=12,z=0;,以下表达式值不等于12的是( )。

(A)(z,x,y)

(B)(z=x,y)

(C)z=(x,y)

(D)z=(x==y)

1.72 以下程序段中的变量已定义为int类型:

  sum=pad=5;  pAd=sum++,pAd++,++pAd;
      printf( "%d\n", pad );
  

程序段的输出结果是( )。

(A)6

(B)4

(C)5

(D)7

1.73 有语句:k=x<y ?(y<z?1:0):0; ,以下选项中,与此语句功能相同的是( )。

(A)if(x<y || y<z) k=1; else k=0;

(B)if(x<y) k=0; else if(y<z) k=1;

(C)if(x<y) if(y<z) k=1;else k=0;

(D)if(x<y && y<z) k=1; else k=0;

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

(A)在C语言中,预处理命令行都以“#”开头

(B)预处理命令行必须位于C源程序的起始位置

(C)#include <stdio.h>必须放在C程序的开头

(D)C语言的预处理不能实现宏定义和条件编译的功能

1.75 以下关于编译预处理的叙述中错误的是( )。

(A)预处理命令行必须位于源程序的开始

(B)源程序中凡是以#开始的控制行都是预处理命令行

(C)一行上只能有一条有效的预处理命令

(D)预处理命令是在程序正式编译之前被处理的

1.76 下面关于编译预处理的命令行,正确的是( )。

(A)#define PAI 3.14

(B)#Define Eps 0.00001

(C)##DEFINE FALSE 0

(D)#define int INT

1.77 有以下程序

  #include <stdio.h>
  #define f(x) x*x*x
  main()
  {
      int a=3,s,t ;
      s=f(a+1);
      t=f((a+1));
      printf("%d,%d\n",s,t);
  }
  

程序运行后的输出结果是( )。

(A)10,64

(B)10,10

(C)64,10

(D)64,64

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

  #define   MIN(x,y)   (x)<(y)?(x):(y)
  #include <stdio.h>
  void main()
  {
      int  i,j,k;
      i=10;j=15; k=10*MIN(i,j);
      printf("%d\n",k);
  }
  

(A)15

(B)100

(C)10

(D)150

1.79 有以下程序:

  #include <stdio.h>
  #define S(x) x*x/x
  main( )
  {
      int k = 6, j = 3;
      printf("%d,%d\n", S(k+j+2), S(j+k+2));
  }
  

程序运行后的输出结果是( )。

(A)11,11

(B)29,29

(C)26,29

(D)121,121

二、读程序回答问题

1.80 有以下程序:

  #include   <stdio.h>
  main( )
  {
    int  x=0x13;
    printf("INT:%d\n", x+1);
  }
  

程序运行后的输出结果是( )。

(A)INT:14

(B)INT:13

(C)INT:12

(D)INT:20

1.81 有如下程序:

  #include <stdio.h>
  main()
  {
    int  x=072;
    printf("%d\n", x+1);
  }
  

程序运行后的输出结果是( )。

(A)59

(B)73

(C)115

(D)72

1.82 有以下程序:

  #include <stdio.h>
  main()
  {  char  a,b,c,d;
    scanf("%c%c",&a, & b);
    c=getchar();
    d=getchar();
    printf("%c%c%c%c\n",a,b,c,d);
  }
  

当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符)

    12<CR>
    34<CR>
  

则输出结果是( )。

(A)12

    3

(B)12

   34

(C)12

(D)1234

1.83 有以下程序:

  #include   <stdio.h>
  main( )
  {  int  x=0x9;
    printf("%c\n", 'A'+x);
  }
  

程序运行后的输出结果是( )。

(A)I

(B)J

(C)K

(D)H

1.84 有以下程序,程序的运行结果是( )。

  #include <stdio.h>
  main()
  {  int  k=-17;
    printf("%d,%o,%x\n", k, 1-k, 1-k);
  }
  

(A)-17,22,12

(B)-17,12,22

(C)-17, -22, -12

(D)17,22,12

1.85 有以下程序:

  #include <stdio.h>
  #include <math.h>
  main()
  {
      int  a=1,b=4,c=2;
      double  x=10.5,y=4.0,z;
  z = ( a+b )/c + sqrt( y ) * 1.2 / c + x;
      printf("%f\n", z);
  }
  

程序运行后的输出结果是( )。

(A)13.700000

(B)14.000000

(C)15.400000

(D)14.900000

1.86 有以下程序:

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

程序运行后的输出结果是( )。

(A)15

(B)30

(C)28

(D)14

1.87 有以下程序(字母A的ASCII代码为65):

  #include <stdio.h>
  main()
  {
  char  c1='A',c2='Y';
  printf("%d, %d\n", c1, c2 );
  }
  

程序运行后的输出结果是( )。

(A)输出格式不合法,输出出错信息

(B)A, Y

(C)65, 90

(D)65,89

1.88 有以下程序:

  #include <stdio.h>
  main()
  {
    printf("%d\n", NULL );
  }
  

程序运行后的输出结果是( )。

(A)0

(B)变量无定义,输出不确定

(C)-1

(D)1

1.89 有以下程序:

  #include <stdio.h>
  main()
  {
    int  a,b,c=241;
    a = c/100 % 9;
    b = ( -1 )&&( -1 );
    printf("%d, %d\n", a, b );
  }
  

程序运行后的输出结果是( )。

(A)2,1

(B)6,1

(C)6,0

(D)2,0

1.90 有以下程序:

  #include <stdio.h>
  main()
  {
      int  a;
    a = (int)1.99*3;
      printf("%d\n", a);
  }
  

程序的运行结果是( )。

(A)3

(B)5

(C)6

(D)结果不确定

1.91 有以下程序:

  #include <stdio.h>
  main()
  {
    int  x=010,  y=10;
    printf("%d,%d\n", ++x, y- -);
    }
  

程序运行后的输出结果是( )。

(A)10,9

(B)11,10

(C)010,9

(D)9,10

1.92 有以下程序:

  #include <stdio.h>
  main()
  {
      int  a=0,b=0,c=0,d=0;
    (++a || ++ b) ? ++c : ++d;
    printf("%d,%d,%d,%d\n", a,b,c,d);
  }
  

程序的运行结果是( )。

(A)1,0,1,0

(B)1,1,0,1

(C)1,0,0,1

(D)1,1,1,0

1.93 有以下程序:

  #include  <stdio.h>
  main()
  {
      int s,t,A=10; double B=6;
    s=sizeof(A); t=sizeof(B);
    printf("%d,%d\n",s,t);
  }
  

在VC6.0平台上编译运行,程序运行后的输出结果是( )。

(A)10,6

(B)4,4

(C)2,4

(D)4,8