【C语言】练习题专栏(9)

简介: 【C语言】练习题专栏(9)

前言

今天是五道基础的选择题,包含一些简单的小知识,希望对大能有帮助。

1.

题干

答案

A\C\D

知识点

本题考察的知识点有两个:宏定义和typedef重定义。

宏仅仅是将INT_PTR替换成int *

int *a,b其中,a的类型是int *而b为Int,因为其中的*会与a先结合
然而int_ptr不是去简单的替换,它类似于int *a,*b

这就是typedef与宏定义的区别,

(宏定义感觉很容易出错,之后会介绍一道类似的题)

2.

题干

答案

A\B

知识点

这题还挺有意思的,考察的是对于scanf参数以及数组名的理解。

我们都知道scanf函数传进去的参数应该是地址,也就是指针类型的变量 ,&b不用说,肯定是对的。

而数组名除了两种特殊的情况以外(一个是取地址、一个是在sizeof中单独出现的时候,此处不再作过多的说明)都指的是首元素的地址,在此处,我们可以看到,占位符是%s:打印字符串,所以无论是传进去首元素的地址还是数组的地址,都可以完成输入。

3.

题干

答案

B

知识点

这道题考察的就是对于宏定义的变量的理解

(宏定义在有些时候真的挺坑的)

宏只是单纯的替换

先把用到的所有地方对宏进行替换,先不考虑运算规则,

替换的过程:N 先替换 M 中的 N 得到 2 + 1

再用 M 替换 NUM 中的 M

小提示:使用宏定义的变量的话,建议使用()帮助自己理解

4.

题干

答案

C

知识点

很简单的一道题,放在这里就是复习一下static的使用,此处做一个static这个知识点的拓展

static:静态的

用法一:

static修饰局部变量

本质:使变量的存储位置发生了变化

注意:变量的作用域没变,无法出作用域使用 // 延长的是生命周期

局部变量:每次进入函数会重新创建,出了函数就会销毁(将空间还给操作系统)

存储在栈区,进入作用域自动创建,出作用域自动销毁

修饰之后:

局部变量出了作用域不会回收,延长局部变量的生命周期,如果反复调用函数,会出现累积的效果

存储在静态区,直到程序结束,变量才会被回收 // static所在代码在编译期间已分配地址,其代码行在运行时不再执行,即其地址不再变化

用法二:

static修饰全局变量

修饰后:

全局变量无法在其他源文件中被引用

使其只能在其所在的源文件内部使用

即使其外部链接属性变为内部链接属性(理解即可,不用深究)

用法三:

static修饰函数

函数不存在生命周期

修饰前:函数具有外部链接属性

修饰后:外部链接属性变为内部链接属性

函数只能在其所在的源文件内部使用,其他源文件无法使用

这样就能设多个函数,并且名字一样也不会冲突

这是我另一篇文章中的原话,在此引用一下

5.

题干

答案

D

知识点

A

考察结构体知识中的内存对齐,在此处我只能简单的说明(因为作者还没学会):结构体的大小,是大于等于其各个成员大小之和的,之后我会出一篇文章关于结构体的详细解释。

B

考察的是两个浮点型的数据如何比较

先解释为什么不能直接用a == 0.0来判断,

首先,我们都知道数据在内存中是以二进制的形式来存储的,由于浮点数十进制转化成二进制的机制,会造成精度损失,因此在浮点数的比较中,无法直接令两个浮点数是否相等来判断两个浮点数。

那么,如何比较呢,此处提供两个方法:

在介绍之前附上我另一篇文章的链接:

浮点数在内存中的存储

可能会对大家理解下面的方法有一些帮助

方法1
#include<stdio.h>
#include<math.h>
#define EPS 0.0000000001
int main()
{
  double x = 1.0;
  double y = 0.1;
  if(fabs((x - 0.9) - y < EPS))
  printf("Yes");
  else
  printf("No");
}

当两个浮点数相减比一个很小的数还要小时,可认为两个浮点数相等

换句话说就是:在一定范围内,就认为两数相等

fabs函数

对于浮点型数据取绝对值,返回值类型是double

需要包含头文件<math.h>

方法2
#include<stdio.h>
#include<math.h>
#include<float.h>
int main()
{
  double x = 1.0;
  double y = 0.1;
  if(fabs((x - 0.9) - y < DBL_EPSILON))
  printf("Yes");
  else
  printf("No");
}
DBL_EPSILON

精度:分为自定义精度和系统精度

方法1使用的EPS就是自定义精度。

DBL_EPSILON就是系统精度,需要包含头文件

是最小的一个数

#include<float.h>

下图是DBL_EPSILON的定义

C

C选项就很简单了,a是数组名,存储的是首元素地址,还是char*类型的,只能存储一个字节大小的变量,hello world十四个字节只能存进去h,这个字符。

结语

这次整理的五道题就到这里了,个人感觉整理下来还是收获了很多呢,希望看完这篇文章的你也有所收获,我们下篇文章见~

相关文章
|
C语言
C语言刷题指南(二)
C语言刷题指南(二)
70 0
|
人工智能 算法 测试技术
【C语言】初阶完结练习题
C语言初阶知识点已经全部更完,相信大家对C语言初阶已经有了一个整体的概念,但我们只知道一些理论上的知识还是没有用的,所以今天我在网上找了一些题目给大家练习巩固之前学的知识,这样能更好的帮助我们加深对其的理解。
226 0
|
编译器 C语言
C语言刷题(1)
C语言刷题(1)
88 0
|
6月前
|
C语言
C语言刷题1
C语言刷题1
448 0
|
存储 编译器 C语言
|
编译器 测试技术 C语言
|
C语言 数据安全/隐私保护
C语言刷题
C语言刷题
70 1
|
编译器 C语言
C语言刷题指南(三)
C语言刷题指南(三)
75 0
|
C语言
C语言刷题指南(一)
C语言刷题指南(一)
142 0
|
算法 C语言
C语言刷题指南(四)
C语言刷题指南(四)
66 0