1.文件梳理
- 虚拟机终端相关内容
[1]基本内容
用户名:Ubuntu whoami
主机名:Ubuntu hostname
:$中间位置 当前路径 默认在家目录~
查看当前路径:pwd
绝对路径:从根目录开始逐层向下查找 /home/text1/file1/
相对路径:以当前位置为参照
$:普通用户
root:超级用户
补充:Linux中一切皆文件
其中有两大特殊位置:
根目录:/
家目录:home/用户名 ~
[2]快捷键
放大终端 ctrl shift +
缩小终端 ctrl -
清屏 ctrl L
历史命令 上下箭头
打开终端
- 直接点击
- ctrl shift n 打开终端,路径在当前文件夹
- ctrl alt t 家目录
关闭终端
- 直接点击
- ctrl d
- exit
[3]新建文件、查看文件、复制文件、移动文件、切换路径、删除文件
新建:
文件夹:mkdir 文件夹名字
文件:touch 文件名.后缀 (文件格式)
注:相同路径下,不能新建同名文件夹;会报错
文件:更新文件时间戳
相同路径下,同时新建多个文件/文件夹: 名字中间用空格隔开:
如:mkdir a b c
Touch text1.c text2.c text3.c
新建多层嵌套文件夹:
如:mkdir day01/a/b/c -p
查看:
ls 查看当前路径下所有内容(文件名)
ls -a 查看当前路径下所有内容,包括隐藏内容
ls -l 查看当前路径下所有内容的详细信息
扩展:ls -l test.c 查看test.c文件的详细信息
内容分析:
如: - rw-rw-r-- 1 Ubuntu Ubuntu 0 7月 1 10:52 file1.c
文件类型 权限 链接数 用户名 组名 大小 修改时间 文件名
第一个字符:文件类型7种 bcd-lsp
b:块设备文件 /dev;c:字符设备文件
d:目录文件 文件夹
-:普通文件 .c .h .txt
l:链接文件 <LinuxC高级>
s:套接字文件 <网络编程>
p:管道文件 <IO>
rw-rw-r-- 文件权限 三个一组 共9个
rwx:可读可写可执行 rw-:可读可写不可执行
rwx rwx rwx
自己 组内 其他
权限值:r:4 w:2 x:1 -:0
修改文件/文件夹权限:
chmod 777 file1.c
rw- rw-r-- 664
复制
文件: cp 要复制的文件 目标地址
文件夹:cp -r 要复制的文件夹 目标地址
移动
mv 要移动的文件/文件夹 目标地址
重命名:mv 要移动的文件/文件夹 目标地址/新名字
cp和mv区别:
cp之后源文件还在;mv之后源文件不在
重命名:cp -r 要复制的文件夹 目标地址/新名字
使用cp重命名,源文件还在
切换
下一级: cd 文件夹名字
上一级: cd ..
当前: cd .
上一次: cd -
根目录: cd /
家目录: cd ~ 或 cd /home/hq 或 cd 或 cd #
删除
文件: rm 文件名
文件夹:rm -r 文件夹名字
-f 强制删除
扩展:rmdir 只能删除空目录
[4]vi编辑器
打开vi编辑器:输入 vi 文件名.文件格式 进入
三种模式:(作用)
命令行模式:复制、粘贴、删除、光标移动等(打开时默认为该模式)
复制 yy nyy(光标选中y n:行数 复制几行)
删除(剪切) dd ndd
粘贴 p
撤销 u
反撤 ctrl r
光标移动首行 gg
光标移动最后一行首行 G
光标移动行首 0
光标移动行尾 $
插入模式:编辑代码(a,i,o任意字母,可从命令行进入插入模式,退出使用esc)
底行模式:保存、退出、复制、分屏、查找、替换等(shift:可从命令行换到底行模式)
保存 w 退出 q 保存并退出 wq 强制 !
vsp 分屏本文件
vsp 文件名 分屏打开另外一个文件
查找 /找的东西
替换 s/a1/a2 光标所在行的第一个a1替换成a2
s/a1/a2/g 光标所在行的所有a1替换成a2
%s/a1/a2/g 改变全文
1,$s/a1/a2/g 改变全文
设置行号 set nu
取消 set nonu
取消高亮 nohl
边看代码,边运行:底行模式时输入w(保存)
不看原码,直接运行:底行模式时输入wq(保存并退出)
终端显示文件内容:cat 文件名
补充:vim编辑器配置C语言程序片段
- 先找到文件夹:家目录下文件的位置home/../../../
打开其中的c.文件名
- 编辑文件 vi c.文件名
注:如果输入vi test2.c 但当前路径没有test2.c文件则自动生成test2.c
3.文件相关操作:
cat 文件名.c在终端查看文件的内容
head 文件名.c在终端查看文件内容,默认查看前十行
head -n 文件名.c 在终端查看文件内容de前n行
tail 文件名.c在终端查看文件内容,默认查看后十行
tail -n文件名.c 在终端查看文件内容de后n行
4.#include <stdio.h> 函数库
#开头 预处理
.h文件 头文件
< .h> 系统配置文件 /usr/include
" .h" 用户新建的头文件(一般在当前文件夹里)
5.int main(int argc, const char *argv[])
main主函数,程序的入口;一个工程中主函数有且仅有一个
扩展:命令行参数 argc 命令行输入字符串的个数
argv 存储命令行输入的字符串
6.{printf("hello world\n");return 0;}
// 主函数中的return,是主函数的结束标志 0整数 int
// 函数的返回值要和函数的数据类型保持一致;不要返回值,函数数据类型可以定义成void
注意:编译时:warning:不影响程序执行; error:编译结束,不会生成可执行文件
[3] gcc编译器
简写编译:
方法一:gcc 文件名t.c 编译文件,生成a.out ; ./a.out运行文件
方法二:gcc 文件名.c -o 文件名 ; ./test
完整编译
预处理
展开头文件,替换宏定义,删除注释
gcc -E 文件名.c -o 文件名.i
编译:检查语法问题,有错报错,没有则继续运行生成汇编文件
gcc -S 文件名.i -o 文件名.s
汇编:生成一个不可执行的二进制文件
gcc -c文件名.s -o 文件名t.o
链接:链接库函数,最终生成二进制可执行文件
gcc 文件名.o -o 文件名
运行:./文件名
[6]vscode编辑器
终端:code 文件夹名字
[7]计算机的存储单位 1024(默认) 1000(商家)
计算机最小存储单位:位bit
1字节(byte)=8位 位:0 1
换算:
1KB=1024B 1024
1MB=1024KB
1GB=1024MB
1TB=1024GB
[8] 计算机数据表示形式
一、数值型数据
二进制 0 1 2=10
八进制 0-7 8=010
十进制 0-9
十六进制 0-9 a-f 16=0x10
a | b | c | d | e | f |
10 | 11 | 12 | 13 | 14 | 15 |
- 十转二:
1)短除法:一直/2
2)拆分法( 8421法)
3)电脑自带计算器——>程序员模式
- 二转十 8421法
- 二转八
一位八进制用三位二进制转
11 010 110--->0326
- 八转二(一个一个转)
0777--->111 111 111
- 二转十六
一位十六进制用四位二进制转
1101 0110--->0xd6
- 十六进制转二进制
0xab--->10101011
二、 非数值型数据
非数值型数据实际应用如:操作的ASCII码值
man手册 一般用来查看一些命令或函数的用法
终端输入:
man man(查看一些命令或函数)
man man ascii(查看ascii表内容)
ASCII码表:(一些常用内容)
char字符型 ' '包裹一个字符
'\0' 0 字符串结束标志
'\n' 10 换行
SPACE 32 空格
'0' 48
'A' 65
'a' 97
注:’A’+32 = ‘a’
\转义字符 'n'字符n '\n'换行
例:
[9] 词法符号
运算符 关键字 标识符 分隔符 标点符号
一、关键字
存储类型:auto static extern register
数据类型:int char float short long double signed unsigned
构造数据类型:struct enum union
分支:if else switch case default for do while go to break continue
其他:void const sizeof volatile return typedef
32位:4G 64位:2^48 虚拟内存空间
栈区:由系统自动开辟,自动回收 M
堆区:程序员手动开辟空间(malloc),手动回收(free)
全局区/静态区: .bss .data
常量区:char *p="hello"
二、标识符
在给变量、数组、函数等命名时, 遵循标识符的命名规则:
1)由字母、数字、下划线(_)组成
2)开头不能是数字
3)不能和关键字重名
4)见名知意
补充:
helloWorld:小驼峰命名(除第一个单词外,其他单词开头大写)
HelloWorld:大驼峰命名(每个单词开头大写)
三、运算符
算术运算符 逻辑运算符 位运算符 关系运算符 三目运算符 赋值运算符
1)算术运算符:+ - * / % ++ --
/ :整数相除,结果会向下取整
int a=5/2;
printf("%d\n",a); //2
========================
float a=5/2;
printf("%f\n",a);//2.000000 默认打印小数点后六位
float b=2;
printf("%f\n",b);//2.000000
==========================
float a=5.0/2;
printf("%f\n",a); //2.500000
==========================
强制转换
float a=(float)5/2; //强制转换只在当前这一行生效
printf("%.1f\n",a); //2.500000 %.1f保留一位小数
float b=5/2;
printf("%f\n",b); //2.000000
% :取余 5%2==1 13%10=3
只能用于整数运算
++ :i++;//i=i+1;独立成句
++a:先+再打印答案,a++:先打印答案再加
例:
2.题目
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 10; 分析如下:
int b = a--; b=10,a=9
int c = a + b + 2; c=9+10+2=21
int d = (b--) + (++c); d=10+22=32,b=9,c=22
printf("%d\n",d);
} [单选题] *
A. d = 31
B. d = 32
C. d = 33
- d = 34
k=011=1001=9
输出为9
D