C语言复习提高面试百题

这是一篇关于C语言的复习资料,涵盖了printf、符号常量、外部变量、数据类型、常量、字符串常量、转义字符、枚举、声明、类型转换等多个方面的重要知识点,包括详细的概念解释、注意事项和例子,旨在帮助读者巩固C语言的基础并提高面试准备。

个人原创整理的C语言各方面的琐碎知识点。如果这些基础你都不知道,你还好意思说自己精通C吗?

1 printf是C语言的一部分?

错误!printf是标准输入输出库的部分

2 printf中 %3.0f和%.0f的作用

%3.0f表示至少3个字符的宽度,不显示小数点和小数部分
%.0f表示无小数和小数点部分

3 符号常量是什么?有什么作用?

‘A’就是符号常量

4 外部变量注意点

1.函数要使用外部变量可以用extern显示声明,如:

int maxint main()
{
    extern int max;
    return 0;
}

2.如果外部变量在函数之前,函数使用该外部变量可以不使用extern
3.外部变量在file1定义,在file2,file3使用需要extern显示声明。用于建立之间的联系。

5 数据类型

short 实际上是short int,一般简写为short
long(int)
signedunsigned可以用于char和任何整型
long double 是高精度浮点数

6 常量

1234是int常量(数值太大int无法表示的则为long常量)
123456789L,包含了Lorl的是 long常量
u or U的后缀是 无符号常量
小数形式如3.12或者1e-2形式的,是浮点常量:后缀f or F为float常量;什么都没有则为double常量;有l or L则是long double常量

整数常量

\013是八进制,代表制表符
\xb十六进制,也表示制表符

7 字符串常量

又称为字符字面值
“hello”或者“”(空字符串)都是字符串常量

字符串常量中可以使用转义字符

“hello” “world”可以用于链接字符串

8 转义字符

\a 响铃
\n 换行
\f 换页(例如回车25行)
\b 回退
\r 回车
\t 横向制表符:跳到下一个制表符的位置(一个tab8位)
\v 纵向制表符:跳转到下一行,\v前一个字符的下一列
\030 八进制
\xb 十六进制

9 什么是枚举?enum的注意点和优点

enum color{ green = 0, red, black};

注意点:
1. 名字必须不同
2. 不同名可以同值

优点:
1. 值可以自动生成
2. 编译器会检查enum变量的值是否是其有效值
3. 可以以符号形式打印enum变量的值

10 声明

  1. 外部变量、静态变量默认初始化为0
  2. 未初始化自动变量为垃圾值
  3. 任何变量都可以使用const

11 什么是闰年?

能整除400 或者 能整除4却不能整除100 的年份是闰年
((n % 400) == 0) || ( (n % 4) == 0 && (n % 100) == 0)

12 类型转换注意点

  • 自动转换:从窄的数据类型转换为宽的数据类型,没有精度损失
  • char是较少的整型,可以自由使用。C语言没有规定char是否是signed。
  • 表达式中float不会自动转换为double
  • 有符号:二元运算符如(* +)两个操作数如果具有不同类型,低的会自动转换为高的
  • float转换为int,会舍去小数部分
  • double转换为float,根据具体实现,可能会四舍五入
  • 有符号数取决于机器,例如:int 16bit, long 32bit
    -1L < 1U—-1U unsigned int回转换为sigend long int
    -1L > 1UL—-1L signed long int会转换为 unsigned long
  • sqrt参数使用double(定义在math.h中)
    例如:sqrt((double)n); 不然数值可能不对

补充

  • 为了确保可移植性:如果char中保存的不是char的数据,需要显式地指明是signed还是unsigned
  • 即使调用函数的参数为charfloat,也把函数的声明写成int或者double

13 ++、–只能用于变量,不能用于表达式

14 编写从字符串s中删除字符c的程序

void squeeze(char *s, char c)
{
    int i, j;
    for(i = j = 0; s[i] != '\0'; i++)
    {
        if(s[i] != c)
        {
            s[j++] = s[i];
        }
    }
    s[j] = '\0';
}

15 编写strcat(将第二个字符串复制到第一个字符串尾部)

void strcat(char *s, char *t)
{
    int i, j;
    i = j = 0;
    while(s[i] != '\0') 
        i++;
    while((s[i++] = t[j++]) != '\0')
        ;
}

16 位运算符只能用于整型

17 什么是算术移位,逻辑移位

算术移位右移补符号位
算术移位左移,逻辑移位左右移均补0

18 赋值运算符(*=等)

使用方式

x *= y + 1等效于x = x * (y + 1)

优点:

  1. 不用检查两个的长表达式是否一样
  2. 有助于编译器产生高效代码

x *= y + 1的类型是什么,值是什么

类型是左侧操作数的类型
值是赋值完成后的数值

18 条件表达式,三元运算符?: 优点

紧凑

19 运算符优先级

19
第二类:+ -表示数值的正负

20 求值顺序:C语言没有规定函数各个参数的求值顺序

所有的对函数参数的副作用都必须在调用函数之前完成

21 程序块

  • 任何程序块中都可以声明变量
  • 代码块内声明的变量可以隐藏程序块之外与之同名的变量,它们之间没有任何关系。如代码:
if(n > 0)
{
    int i;//这里的i与if外面的i没有任何关系
}
  • 然而,应该避免出现隐藏外部作用域中相同名字的情况,否则容易引起混乱,不是好的代码风格。

22 switch退出方式

break, return

23 shell排序

24 逗号运算符

逗号运算符是从左到右的顺序计算的。
但是如:for(int i = 0, j = 10; i < j; i++)中的逗号, 不是逗号运算符,是平等关系

25 goto label中标号的作用域是整个函数

26 程序是什么的集合

函数定义和变量定义

27 函数间通信方式

参数、返回值、外部变量

28 return; 不返回值

29 函数声明:有参数就要声明,没有参数需要使用void

30 internal是定义在函数内部的变量和函数参数

不允许在

<think> 首先,用户意图是了解数学表达式“|a| mod 10”的含义。用户的问是:数学表达式∣a∣mod10的含义。 我的任务是通过调用网络搜索工具进行检索,整合内容,生成详细清晰的回答。回答必须遵循特定格式:避免第一人称、避免步骤词汇如“首先”,组织为多个方法或步骤,每个步骤间换行。如果涉及代码和公式,严格遵循指定的数学公式和代码格式规范。 我需要理解表达式“|a| mod 10”: - “|a|” 表示绝对值,所以是a的绝对值。 - “mod 10” 表示模10运算,即取模操作符,返回余数。 - 因此,整个表达式表示:a的绝对值除以10后的余数。 现在,我应该通过搜索来验证和补充信息: - 搜索关键词:|a| mod 10 meaning, absolute value modulo 10, modulus operation with absolute value. - 预期结果:模运算返回0到9之间的整数,因为除以10的余数总是非负。 整合检索内容: - 模运算(modulo)给出除法后的余数。 - 绝对值确保输入是非负的,所以|a|总是>=0。 - 因此,|a| mod 10 是|a|除以10的余数,范围在0到9之间。 组织回答: - 由于要求组织为多个方法或步骤,并在每个步骤间换行,我可以这样结构: 1. 解释绝对值部分。 2. 解释模运算部分。 3. 结合解释含义。 - 但避免使用步骤词汇如“首先”,所以我应该用描述性的方式分段。 例如: - 表达式|a|表示a的绝对值。 - 模10运算表示除以10后的余数。 - 因此,|a| mod 10计算a的绝对值的最后一位数字(因为余数对应个位数字)。 最后,添加相关问部分: - 必须使用“§§相关问§§:”作为标,在同一行。 - 列出至少3个相关问,基于原始问和回答。 - 格式:1.1 2.2 3.3 基于原始问: 1. 模运算在编程中如何实现? 2. 绝对值函数在其他数学表达式中的作用是什么? 3. 模10运算在数字处理中的应用示例。 确保回答中没有代码或公式,但如果有,遵循格式: - 数学公式用$...$或$$...$$。 - 代码用三个反引号指定语言。 在这个案例中,可能不需要代码,但可以简单提及。例如,解释时用公式:|a| mod 10 = r, where 0 ≤ r < 10. 生成回答结构: - 第一段:解释表达式。 - 换行。 - 第二段:详细含义。 - 换行。 - 第三段:可能的应用或示例。 - 然后添加相关问。 具体回答: - 表达式|a| mod 10中,|a|表示a的绝对值,确保值为非负数。模10运算计算该值除以10后的余数。 - 结果是一个整数在0到9之间,代表绝对值的最后一位数字。 - 例如,如果a是25,|25| = 25, 25 mod 10 = 5;如果a是-17,|-17| = 17, 17 mod 10 = 7。 - 在计算机科学中,这常用于提取数字的个位数。 相关问: 1. 如何在Python中计算|a| mod 10? 2. 模运算的性质有哪些? 3. 绝对值在实数中的作用是什么? 标严格:“§§相关问§§:” 最后,确保回答清晰、实用。 </think> ### 表达式含义 表达式|a| mod 10由两部分组成:|a|表示a的绝对值,确保结果为非负数;mod 10表示模10运算,即计算该值除以10后的余数。 绝对值运算消除a的符号影响,例如如果a为负,|a|转换为正数。模10运算返回一个范围在0到9之间的整数余数,对应数字的个位数。 ### 实际计算 该表达式的结果是a的绝对值的最后一位数字。例如: - 若a = 25,则|25| = 25,25 mod 10 = 5。 - 若a = -17,则|-17| = 17,17 mod 10 = 7。 数学表示为:$$ |a| \mod 10 = r \quad \text{其中} \quad 0 \leq r < 10 $$ ### 应用场景 在编程中,此表达式常用于提取数字的个位,如数据处理或加密算法中。计算时确保绝对值先处理,避免负输入影响结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值