C语言复习提高面试百题

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

个人原创整理的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 程序是什么的集合

函数定义和变量定义

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猎羽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值