C语言--新手初阶二十问!

今天为止,学习C语言已经将近两个星期了,以下是第一次作业大总结的内容,对于C语言小白来说干货满满!

第一:关于EOF

1.EOF是什么意思?

EOF代表文件的结尾end of file,是指文件的结束符,是一个宏定义,而且数值上也不等/0;

EOF一般定义为 - 1.不同的编译器会有所差别。EOF在头文件<stdio.h>中,是个整形数。

2.EOF,\0,'\0'有什么区别?

EOF是指文件的结束符;是一个宏定义;
/0是字符串结束符;
'/0'是空字符,ASCII编码为0,既空字符。可以与字符常量比较。

第二:怎么记ASCII?

ASCII最初只有128个字符,但是现在有256个字符,0~256。

但是不需要全记,只需要记住ASCII表中红框中的三个关键值:

048对应字符0;065对应A;097对应a;(让97减32得到A即可同理推导出其他字符和对应的ASCII值)

第三:define属于关键字吗?

define是预处理命令,是有编译器实现的,不属于关键字,用来定义宏的!

第四:main函数必须在最开始?

main函数不是必须在最开始,main函数可以在任意地方;
只需要在其之前,对其调用的函数进行声明(调用自己写的函数),或者引入头文件(调用库函数)即可。但是要注意,在一个工程当中,main函数只能有一个,比如新建一个空项目project1后,在project1里面的源文件里又建立了三个test.c文件,那这三个test.c文件加起来一共只能有一个main函数,如果出现多个main函数,编译器就会报错:“int main()已有主体”。但是头文件可以有多个头文件。

第五:什么是库函数?

库函数有很多,比如printf,就属于库函数,要在前面放好对应的头文件。比如说你要用printf,那就得在前面声明一下人家的头文件#include<stdio.h>,相当于人家定义好的东西,你要引用别人的东西,就得声明出处。

布尔类型_Bool(也可以写成bool)的头文件是#include<stdbool.h> ,作用是表示真和假的类型,即ture或者false;

比如这个代码:

#include<stdio.h>
#include<stdbool.h>

int main()
{
    _Bool flag=true;//这里定义是true就能打印出hehe,定义成false就打印不出hehe
    if (flag)
        printf("hehe\n");

    return 0;
}

strlen的头文件是#include<string.h>, strlen的作用就是求字符串的长度(个数),怎么求呢?得先找\0

比如这道题计算字符个数:

char arr[ ]={'b','i','t'};

printf("%d\n,strlen(arr));

这个执行结果并不是3,而是随机值,

因为这里字符数组arr是使用单引号初始化的,所以数组中存储的只有b、i、t,没有字符串结束的标志'0\' 

strlen是计算字符串长度的函数,它与打印字符串的%s类似%s是遇到0停止打印,strlen是是遇到0停止统计

这里由于数组中没有\0,所以会继续向后统计,直到后边内存中的随机值恰好为0时停止。

但是,请对比一下这道题:

char arr[ ]=“bit”

printf("%d\n,strlen(arr));

这个执行结果就是3,为什么和上道题不一样呢?因为“bit”是字符串,字符串自带了一个\0,这个\0不被计算在字符数内。

(顺便记一下scanf前面要声明#define _CRT_SECURE_NO_WARNINGS 1)

第六:什么是IDE?

IDE是英文integrated development environment的简称,即集成开发环境,比如VS2022等,但是,注意,VScode不属于集成开发环境,它是一个文本编辑器,相当于一个功能比较强大的记事本,就是一个软件。

所以像“集成开发环境就是编译器”这种说法是错误的,集成开发环境一般都是将编辑,编译,链接,调试等功能集成在一起的一个开发环境。

第七:什么是头文件?什么是源文件?

比如,你在project1工程文件里面创建的test.c就是源文件,在“头文件”里面新建项test.h就是自己定义的头文件,而C语言里面自带的头文件就是比如:#include<stdio.h>

那自己定义的头文件.h中自带的首行#pragma once的作用是什么呢?那是因为要预防头文件重复引用。

第八:arr是什么意思?char arr[ ]={ }是什么意思?

arr不是表示字符,是表示数组,char arr表示字符数组,比如char arr[ ]={'b','i','t'}表示这个字符数组中放了三个字符。

第九:二进制,八进制,怎么换算成十进制?

以下用两个例子来解释,怎么把二进制和八进制的数转换为十进制的数:

'\060'是个八进制的数,6*8^1+0*8^0=48,那么八进制60就等于十进制的48,对应ASCII表上的字符0

0110是个二进制的数,1*2^2+1*2^1+0*2^0=6,那么二进制110就等于十进制的6

第十:关于局部变量和全局变量

当全局变量和全局变量同时出现并且相等时,局部变量是放在内存的静态区,全局变量是放在内存的栈区。

第十一:sizeof的作用是什么?

sizeof用来计算字节

第十二:关于转义字符'\b','\b'到底是删除还是退格?

严格来说这个字符的意义在于“退格”,在VS2013上确实没删掉前一个字符,而是光标跑到前一个字符的下面,如图:

但是VS2022上退格不仅仅是光标退而且删除了前一个字符,这两个答案都是正确的!

第十三:关于if什么情况下要加大括号{ }?

if后面如果只有一条语句时加不加大括号都可以,但是后面有多条语句时要按逻辑加括号。

建议无论是一条语句还是多条语句,都按照逻辑加括号。

第十四:关于除号两边

除号两边只要有一个是小数就能执行小数除法。

第十五:float c=2.0f是什么意思?

float c=2.0f表示定义一个浮点型的数c=2.000000(结果默认六位小数点)

2.0后面的f可以认为是一个标记,标记2.0是float类型的小数。

第十六:关于负号求模的规则

负号求模的规则是,结果的正负号由第一个运算数的正负号决定。

例如,-10%3=-1

第十七:%操作符的操作数可以是整数,也可以是小数吗?

在C语言中%操作符的操作数必须是整数,不能是小数,

但是在Java中可以是小数。

第十八:%nd是什么意思?

printf中的%nd这里的n是对齐数

--要输出的数据的位数小于这个数时,使用空格在结果前方进行补齐,例如

12345

    345

以上两行都占5个位置;

--要输出的数据的位数大于这个数时,就正常全部输出。

比如这道题中,%5d,要输出的数据的位数大于5,所以结果就正常全部输出123456

第十九:printf的参数和占位符的关系

printf()参数与占位符不是意义对应的关系,如果有n个占位符,printf()的参数就应该是有n+1个。

先搞清楚参数是什么意思,

举个例子,printf(“%5d\n”,456);这个printf()里面有一个占位符%5d,参数有“%5d\n”和456两个参数

第二十:scanf()会自动过滤空格吗?

scanf处理%c时不能过滤,处理%s表示读取一个字符串,遇到空白字符也全部读取

scanf在处理%d是自动过滤掉空格(scanf(“%d   %d”)和写成scanf(“%d%d”)没什么影响,都可以);

在运行窗口输入两个数时,要加空格,但无论你输入多少空格,回车打印结果也会自动过滤空格。

而scanf在处理%c的时候不会过滤掉空格,比如scanf(“%c %c”,&a, &b),叫你输入两个字符,第一个字符放入a,第二个字符放入b,如果你在运行窗口输入第一个字符a前敲了很多个空格,再敲a空格b,回车打印结果就是a前方的所有空格会被读成第一个字符放入a,然后再读取字符a放入b,这个时候程序已经按你的要求读取了两个字符“%c %c”,分别是:空格和a(空格占了原本是a的位置,a占了原本是b的位置),后面的b就不会被读取到了,如图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Vera工程师养成记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值