【C语言】练习题整理:11

简介: 【C语言】练习题整理:11

前言

今天是10道选择题

1

题目

下面代码段的输出结果是:

int main() 
{
  int a = 3;
  printf("%d\n", (a += a -= a * a)); 
  return 0;
}

答案

-12

知识点

自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符

如x=y=z,由于“=”的右结合性,应先执行y=z,再执行x=(y=z)运算。

C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

计算顺序是从左至右

先计算a * a,

再依次向左计算

a * a == 9

3 - 9 == -6

-6 + -6 == -12

2

题目

若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是

#include <stdio.h>
int main()
{
  char c;
  int v0 = 0, v1 = 0, v2 = 0;
    do
    {
      switch (c = getchar())
      {
      case'a':case'A':
      case'e':case'E':
      case'i':case'I':
      case'o':case'O':
      case'u':case'U':v1 += 1;
      default:v0 += 1; v2 += 1;
      }
    } while (c != '\n');
    printf("v0=%d,v1=%d,v2=%d\n", v0, v1, v2);
    return 0;
}

答案

v0=12,v1=4,v2=12

讲解

这道题容易做出v0=8,v1=4,V2=8这样的结果

但我们需要注意的是:case后面没有break的话,会一直执行下去

所以default一共执行了12次

3

题目

如下函数是求两个int数字最大公约数的,指出其中存在的问题【多选】

int gcd(char x, char y)
{
  int min = x < y ? x : y;
  for (min = 0; min > 0; min--)
    if (x% min = 0 && y % min = 0)
      return min;
}

A: 参数类型不对

B: 循环变量min初值不对

C: 判断等于的符号不对

D: 返回类型不对

答案

A、B、C

讲解

这就是一道简单的概念题

A:函数实参是int类型,形参用char,发生截断,数据丢失

B:min在for循环中,被初始化为0,与传入的参数已经无关了

C:if条件判断处,将判断相等符号==,写成赋值符号=

D:虽然这个函数不是在所有条件下都有返回值,但这里返回值类型没问题

4

题目

下列 for 循环的次数为

for (int i = 0; i || i++ < 5;);

答案

无限次

知识点

i先使用再增加,

使用:0<5,为真,值是1

增加:i增加为1,

判断条件:1||1,恒为真,死循环

5

题目

在c语言中,一个函数不写返回值类型,默认的返回类型是

答案

int

知识点

我第一次知道这个知识点

6

题目

设函数 fun 和实参数组的说明是如下形式,则对函数的调用语句中,正确的是

void fun(char ch, float x[]);
float a[10];

A: fun(“asd” , a[]);

B: fun(‘x’ , A);

C: fun(‘68’ , 2.8);

D: fun(32 , a)

答案

D

知识点

数组传参只传入数组名就可以了,

如C选项这种,传入的是float类型,与数组无关

7

题目

在上下文及头文件均正常的情况下,下列代码的输出是( )(注: print 已经声明过)

int main()
{
  char str[] = "Geneius";
  print(str);
  return 0;
}
print(char* s)
{
  if (*s)
  {
    print(++s);
    printf("%c", *s);
  }
}

答案

suiene

知识点

这段代码就是使用递归倒序打印字符串

但因为是++s,在回归时s指向的对象已经不是第一个字符了,所以打印不出G

8

题目

在下面的字符数组定义中,哪一个有语法错误( )

A:char a[20]="abcdefg"; 
B: char a[]="x+y=5."; 
C: char a[15]; 
D: char a[10]='5'

答案

D

解法

’5‘是字符常量,不能用于数组的初始化

9

题目

下列定义数组的语句中正确的是【多选】( )

A:#define size 10
  char str1[size], str2[size+2];
B:char str[];
C: int num['10'];
D:int n=5; 
  int a[n][n+2];

答案

AC

解法

这里对C和D做一下解释

C:

字符’0’,转换成十进制为48,所以C选项最终为

int num[48]

D:

注意:在C99之后支持使用变长数组

但这是特例,在此不做考虑

10

题目

已知 i,j 都是整型变量,下列表达式中,与下标引用 X[i][j] 不等效的是【多选】()

A: *(X[i]+j) 
B: *(X+i)[j] 
C: *(X+i+j) 
D: *(*(X+i)+j)

答案

BC

解法

A选项是 正确的,X[i]就是第i行的数组名,数组名表示首元素的地址,X[i]表示第i行的第一个元素的地址,+j后就是第i行下标为j的元素的地址,整体解引用就是X[i][j],A正确。

B选项因为[]的优先级高于*,所以代码相当于**((x+i)+j),X+i+j后就越界了,并不代表X[i][j],所以错误。

C选项也明显不对,X是二维数组的数组名,数组名相当于第一行的地址,X+i+j,跳过了i+j行,就越界了,C错误。

D选项是标准的指针形式访问二位数组的一个元素。

结语

这篇文章到这里就结束了,我们下篇文章见~


相关文章
|
4月前
|
C语言
c语言编程练习题:7-8 是不是太胖了
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)
109 0
|
4月前
|
C语言
c语言编程练习题:7-17 成绩转换
本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:
79 0
|
4月前
|
C语言
c语言编程练习题:7-40 到底是不是太胖了
c语言编程练习题:7-40 到底是不是太胖了
51 0
|
4月前
|
C语言
c语言编程练习题:7-36 韩信点兵
c语言编程练习题:7-36 韩信点兵
54 0
|
C语言 CDN
C语言基础练习题(2)
C语言基础练习题(2)
122 1
|
12月前
|
存储 人工智能 编译器
【C语言】练习题整理:12
【C语言】练习题整理:12
108 0
|
C语言
C语言基础练习题(1)
C语言基础练习题(1)
60 0
|
人工智能 算法 测试技术
【C语言】初阶完结练习题
C语言初阶知识点已经全部更完,相信大家对C语言初阶已经有了一个整体的概念,但我们只知道一些理论上的知识还是没有用的,所以今天我在网上找了一些题目给大家练习巩固之前学的知识,这样能更好的帮助我们加深对其的理解。
209 0
|
26天前
|
机器学习/深度学习 存储 C语言
【C语言篇】C语言常考及易错题整理DAY1
swap函数调用时用的是全局变量,主函数中定义的变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平 行关系;输出语句这里,考虑局部优先的原则。
|
26天前
|
存储 人工智能 大数据
【C语言篇】C语言常考及易错题整理DAY2
p是一个指针数组,p[i] = &a[i*3]相当于是把数组a每3个一组分开并把每组的首地址存在p数组,此时p类似一个4行3列的二 维数组,p[3][2]就是4行第3个元素12。