C程选择题(二)


2-111

执行下列程序段的输出结果是()。(2分)

double x = 2.5, y = 4.7; 
int a = 7;

printf("%.1f", x + a%3 * (int)(x+y) % 2 / 4);

A.2.5
B.2.8
C.3.5
D.3.8

答案:A


2-112

执行下列程序段的输出结果是()。(2分)

int num = 1234, s = 0;

while( num != 0){
      s += num % 10;
      num /= 10;
}
printf("%d", s);

A.4321
B.1234
C.0
D.10

答案:D


2-113

设字符型变量x的值是064,表达式 ~ x ^ x << 2 & x 的值是()。(2分)
A.0333
B.333
C.0x333
D.020

答案:A


2-114

设a 为整型变量,不能正确表达数学关系:10 < a < 15 的 C 语言表达式是()。(2分)
A.10 < a < 15
B.a == 11 || a == 12 || a == 13 || a == 14
C.a > 10 && a < 15
D.!(a <= 10) && !(a >= 15)

答案:A


2-115

设以下变量均为int类型,表达式的值不为 9 的是()。(2分)
A.(x = y = 8, x+y, x+1)
B.(x = y = 8, x+y, y+1)
C.(x = 8, x+1, y = 8, x+y)
D.(y = 8, y+1, x = y, x+1)

答案:C


2-124

假定int类型变量占用两个字节,其有定义:int x[10]={0, 2, 4}; 则数组x在内存中所占字节数是()。(2分)
A.3
B.6
C.10
D.20

答案:D


2-125

以下能正确定义数组并正确赋初值的语句是()。(2分)
A.int N=5, b[N][N];
B.int a[1][2]={{1}, {3}};
C.int c[2][ ]={{1, 2}, {3, 4}};
D.int d[3][2]={{1, 2}, {34}};

答案:D


2-126

若有定义:int a[2][3]; 以下选项中对数组元素正确引用的是()。(2分)
A.a[2][0]
B.a[2][3]
C.a [0][3]
D.a[1>2][1]

答案:D


2-127

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

int main(void)
{
      int  m[ ][3] = { 1, 4, 7, 2, 5, 8, 3, 6, 9 };
      int  i, j, k=2;

      for (i=0; i<3; i++)
            printf ("%d ", m[k][i]);

      return 0;
}

A.4 5 6
B.2 5 8
C.3 6 9
D.7 8 9

答案:C


2-128

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

int main(void)
{
      int aa[4][4]={ {1, 2, 3, 4}, {5, 6, 7, 8}, {3, 9, 10, 2}, {4, 2, 9, 6} };
      int i, s=0;

      for(i=0; i<4; i++)
            s += aa[i][1];
      printf("%d\n", s);

     return 0;
}

A.11
B.19
C.13
D.20

答案:B


2-138

设有数组定义:char array [ ]=“China”; 则数组 array所占的空间为()。(2分)
A.4个字节
B.5个字节
C.6个字节
D.7个字节

答案:C


2-139

下述对C语言字符数组的描述中错误的是()。(2分)
A.字符数组可以存放字符串
B.字符数组中的字符串可以整体输入、输出
C.可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D.不可以用关系运算符对字符数组中的字符串进行比较

答案:C


2-140

有以下定义:char x[ ]=“abcdefg”; char y[ ]={‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’}; 则正确的叙述为()。(2分)
A.数组x和数组y等价
B.数组x和数组y的长度相同
C.数组x的长度大于数组y的长度
D.数组x的长度小于数组y的长度

答案:C


2-158

下列语句定义 x 为指向 int 类型变量 a 的指针,正确的是()。
(2分)

A.int a, *x = a;
B.int a, *x = &a;
C.int *x = &a, a;
D.int a, x = a;

答案:B


2-159

以下选项中,对基本类型相同的指针变量不能进行运算的运算符是()。(2分)
A.+
B.-
C.=
D.==

答案:A


2-160

若有以下说明,且0<=i<10,则对数组元素的错误引用是()。(2分)

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

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

答案:C


2-161

下列程序的输出结果是()。(2分)

int main(void)
{
      int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, *p = a+3;

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

      return 0;
}

A. 3
B.4
C.a[4]的地址
D.非法

答案:B


2-162

对于下列程序,正确的是() 。(2分)

void f(int *p)
{
      *p = 5;
}
int main(void)
{
      int a, *p;

      a = 10;
      p = &a;
      f(p);
      printf(%d”, (*p)++);

      return 0;
}

A.5
B.6
C.10
D.11

答案:A


2-180

下面定义结构变量的语句中错误的是()。(2分)
A.struct student{ int num; char name[20]; } s;
B.struct { int num; char name[20]; } s;
C.struct student{ int num; char name[20]; }; struct student s;
D.struct student{ int num; char name[20]; }; student s;

答案:D


2-181

如果有以下定义语句,则输出结果为()。(2分)

struct {
      int x, y;
} s[2] = { { 1, 3 }, { 2, 7 } };
printf(%d\n”, s[0].y/s[1].x );

A.0
B.1
C.2
D.3

答案:B


2-182

根据下面的定义,能打印出字母M的语句是()。(2分)

struct person{
      char name[10];
      int age;
} c[10] = { “John”, 17, “Paul”, 19, “Mary”, 18, “Adam”, 16 };

A.printf(“%c”, c[3].name);
B.printf(“%c”, c[3].name[1]);
C.printf(“%c”, c[2].name[0]);
D.printf(“%c”, c[2].name[1]);

答案:C


2-183

设有如下定义,则对data中的a成员的正确引用是()。(2分)

struct sk{ int a; float b; } data, *p=&data;

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

答案:B


2-184

对于以下结构定义,( *p)->str++中的++加在()。(2分)

struct { int len; char *str; } *p;

A.指针str上
B.指针p上
C.str指向的内容上
D.语法错误

答案:D


2-193

要调用数学处理函数时,在#include命令行中应包含()。(2分)
A.“stdio.h”
B.“string.h”
C.“math.h”
D."ctype.h"

答案:C


2-194

对于以下递归函数f,调用f(4),其返回值为() 。(2分)

int f(int n)
{    if (n)  return f(n - 1) + n;
     else return n;
}

A.10
B.4
C.0
D.以上均不是

答案:A


2-195

执行下列程序后变量i的值应为()。(2分)

  #define MA(x, y)  ( x*y )
   i = 5;
   i = MA(i, i + 1)7;

A.30
B.19
C.23
D.1

答案:B


2-196

宏定义“#define DIV(a, b) a/b”,经DIV(x + 5, y - 5) 引用,替换展开后是()。(2分)
A.x + 5 / y - 5
B.(x + 5 / y – 5)
C.(x + 5) / (y - 5)
D.(x + 5) / (y - 5);

答案:A


2-197

执行下面程序,正确的输出是()。(2分)

int x = 5, y = 7;
void swap ( )
{
      int z ;

      z = x ;  x = y ;  y = z ;
}
int main(void)
{
      int x = 3, y = 8;
      swap ( ) ;
      printf ("%d,%d \n", x , y ) ;

      return 0 ;
}

A.3,8
B.8,3
C.5,7
D.7,5

答案:A


2-198

下面说法中正确的是()。(2分)
A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度
B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度
C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑变量生命周期问题
D.静态全局变量使用过多,可那会导致动态存储区(堆栈)溢出

答案:A


2-209

下面程序的运行结果是()。(2分)

#include<stdio.h>
int main(void)
{
      int x[5] = { 2, 4, 6, 8, 10 }, *p, **pp;

      p = x;
      pp = &p;
      printf("%d ", *(p++));  /* 数字后有一个空格 */
      printf("%d\n", **pp);

      return 0;
}

A.4 4
B.2 4
C.2 2
D.4 6

答案:B


2-210

对于以下变量定义,正确的赋值是()。(2分)

int *p[3], a[3];

A.p = a
B.
*p = a[0]
C.p = &a[0]
D.p[0] = &a[0]

答案:D


2-211

下列程序的输出是()。(2分)

#include<stdio.h>
int main(void)
{
      int i, a[12] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, *p[4];

      for (i = 0; i < 4; i++){
           p[i] = &a[i*3];
      }
      printf("%d\n", p[3][2]);

      return 0;
}

A.上述程序有错误
B.6
C.8
D.12

答案:D


2-212

下列程序的输出结果是()。(2分)

#include <stdio.h>
#include <string.h>
char *fun(char *t)
{
      char *p = t;
      return (p+strlen(t)/2);
}
int main(void)
{
      char *str = "abcdefgh";

      str = fun(str);
      puts(str);

      return 0;
}

A.abcdefgh
B.abcd
C.efgh
D.fgh

答案:C


2-219

以下语句将输出 ()。(2分)

#include <stdio.h>
printf("%d  %d  %d", NULL, '\0', EOF);

A.0 0 1
B.0 0 -1
C.NULL EOF
D.1 0 EOF

答案:B


2-220

如果二进制文件a.dat已经存在,现在要求写入全新数据,应以()方式打开。(2分)
A.“w”
B.“wb”
C.“w+”
D."wb+"

答案:B


2-221

定义FILE *fp; 则文件指针fp 指向的是()。(2分)
A.文件在磁盘上的读写位置
B.文件在缓冲区上的读写位置
C.整个磁盘文件
D.文件类型结构体

答案:D


2-222

缓冲文件系统的文件缓冲区位于()。(2分)
A.磁盘缓冲区中
B.磁盘文件中
C.内存数据区中
D.程序文件中

答案:C


2-223

直接使文件指针重新定位到文件读写的首地址的函数是() 。(2分)
A.ftell()函数
B.fseek()函数
C.rewind()函数
D.ferror()函数

答案:C


  • 7
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值