一.Linux基础
1.linux优点(笔试重点)
1)开放性
2)免费性
3)多用户,多任务
4)良好的用户界面
5)设备独立性
6)可靠的系统安全性(普通用户切换超级用户需要密码)
2.国产操作系统
1).uos
2).麒麟os
3.常用命令
~ : 表示家目录
/ : 根目录
./ :当前目录
../: 上一级目录
双击tab键:自动补全内容,如果没有提示表示路径错误
选中内容表示复制,按滚轮表示粘贴内容
ctrl+shift+加号 : 终端界面变大
ctrl+shift+减号 : 终端界面变小
按向上的箭头,调出上一次输入过的命令。
1).终端介绍与切换用户(超级用户相当于vip,当操作权限提示不够时可切换超级用户模式)
gec:用户名;
@ubuntu:系统名;
$:用户权限(普通);
#:用户权限(超级);
切换超级用户命令:sudo -s;
返回普通用户命令:su gec;
2).基本指令
ls:列出当前目录内容
(注意:在列出根目录内容时,指令和路径之间要空格)
ls -a:列出目录信息(包括隐藏文件)
ls -l:详细列出目录或文件信息
chmod+权限代号+文件名:修改文件权限
(权限代号:r表读取权限代号为4,w表写入权限,代号为2,x表执行或切换权限,代号为1,-表不具任何权限,代号为0)
cd:进入某个目录
touch:创建文件
rm:删除文件
mkdir:创建目录
rm +文件名+'-r':删除目录(-r表递归删除)
cp:拷贝文件
cp +文件名+'-r':拷贝目录
mv:移动
pwd:显示文件绝对路径
clear:清屏
应用练习:
在根目录创建doc_test,将家目录里面的doc拷贝到/doc_test目录,并修改doc里面的文件main.c的权限为
用户对文件的权限为 读写执行 //421
用户组对文件的权限为写执行 //021
其它用户对文件的权限为只读 //400
3.linux下编译程序(c语言)
1)在虚拟机页面进行共享文件夹设置
2)ubutnu进入共享文件夹命令:
cd /mut /hgfs /HF2304
3)编译命令:
gcc hf.c -o hf
./hf
(注意: hf.c是需要编译的程序源码,hf是编译后的可执行程序,./hf是执行程序的意思 )
二.c语言数据类型
在c中我们把:
比特位(bit)作为二进制数,cpu计算单位
字节:计算机存储容量的单位
二进制数:0和1
1字节 = 8bit位
1KB = 1024字节
1M = 1024KB
1G = 1024MB
1T= 1024G
1.整型
int a = 12;
int = 4字节
1)int本意即整数的意思
2)int a代表在内存中开辟一块区域,用来存放整数,a我们叫变量
3)变量a有取值范围即为-2147483648到2147483647(int为4字节,而1字节为2^8,)
4)整型修饰符:(使用整型修饰符后,关键字int可以省略)
-
short:用来缩短整型变量的尺寸,减少取值范围并节省内存。
-
long:用来增长整型变量的尺寸,增大取值范围并占用更多的内存。
short a;//短整型
long b;//长整型
long long c;//长长整型
unsigned e;//无符号整型
unsigned short f;//无符号短整型
unsigned long g;//无符号长整型
unsigned long long h;//无符号长长整型
5)格式控制符
int 整型:%d
unsigned int 无符号整型 : %u
short整型:%hd,h代表half,即一半的存储字节
long整型:%ld
long long整型:%lld
显示不同进制的前缀 : %#o、%#x
符号位:
有符号的整型数据,首位为符号位,0表示正数,1表示负数(0多1少)。
无符号的整型数据,没有符号位
6)取值范围
unsigned char 0~255 //一字节,2^8 -1即256-1=255(无符号)
char -128 ~ +127 //有符号时要带负的,左边一部分,右边一部分
图解:
7)编码形式
正数:原码和补码是一致的
负数:求补码时要用绝对值取反加一表达,且注意符号位(第一位)不变
注意事项:
- 当遇到整型输出%d时,是用原码解读
- %u(无符号)输出时,取值范围为0-4294967295
- %hhu输出时,取值范围为0-255(4字节的一半的一半为1字节)
-
负数遇到%u时要换到u的范围内计算,且负数要换成补码与u范围比较
-
注意数值溢出
实例:(每个输出都要看懂)
其中(1)部分解释如下:
(其第二个%u时要借位)
练习:
#include <stdio.h>
int main()
{
unsigned char a = 257;
char b = 129;
printf("a:%hhu\n",a);//1
printf("b:%hhd\n",b);//-127
printf("b:%hhu\n",b);//%u只和正数玩儿,遇到负数要看%u的范围,借位。65409
return 0;
}
8)进制转换
- 十进制转二进制:除2取余数,由下到上排序。
- 十进制转八进制 (%o),十进制转十六进制(%x):和上面一样,只是除数变成8或16,其它不变。
- 二进制转八进制或十六进制或十进制
- 小数转二进制
2.浮点型
1)类别
- 单精度浮点型(float),4字节
- 双精度浮点型(double),8字节
- 长双精度浮点型(long double),16字节
- 占用内存越多,可以表达的精度越多
注意:科学计数法(float):2.0e30 即2.0*10^30
3.字符
char a = 'a';// 'a'是字符变量,代表字母a
char b = '\n'; // '\n'是不可见字符,代表回车键
字符 | 十进制 |
SPACE(空格) | 32 |
A | 65 |
a | 97 |
0 | 48 |
注意:字符本质上就是一个单字节的整型,支持整型所有运算:
char a = 'a';// 存储在内存中是97
char b = '1';// 存储在内存中是49
char c1 = 20;
char c2 = c1 + 'a'; // 等价于char c2 = 20+97;printf("%c\n",c2); // 以字符形式输出117,即 'u'
printf("%d\n",c2); // 以整型形式输出117// 小写字符大写字符相互转换 ' ' = 32,这个十分重要,笔试会考
char a = 'b'- ' ';
printf("%c\n",a); //Bchar b = 'B'+' ';
printf("%c\n",b); //b
- 转义字符:
'\b' : 表示退格符
'\a': 表示告警,主板蜂鸣器
'\t': tab键'\ddd' ddd 表示八进制数,打印出来的是该数字对应的ascii码
格式为'\'后面又三个数,每个数的范围在 0 - 7
printf("%c\n",'\102'); // 八进制'\xhh'hh 表示十六进制 打印出来的是该数字对应的ascii码
printf("%c\n",'\x41'); //A
实例:
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("efg\a");
printf("abcd\b");
printf("efg\n");
// 转义字符---八进制'\xxx',注意x的大小为0-7
// 注意转义字符的范围一定是127以内,不要超出char类型范围
int a = '\102';
printf("%o,%d,%c\n",a,a,a);
//printf("%o\n",'\109'); // 不合法,单个字符是0-7
// 转义字符---十六进制'\xhh',注意h的大小为0-F
int b = '\x4f';
printf("%x,%d,%c",b,b,b);
return 0;
}
4.字符串
1)定义方式:指针和数组
char *s1 = "abcd"; // 使用字符指针来表示字符串
char s2[ ]= "abcd"; // 使用字符数组来表示字符串
2)这里要注意任何字符串都以 '\0' 作为结束标记。(这样会多占一格内存,如字符串"abc"占用了4个位置)
5.布尔类型
1)概念:只有真与假2种组合,非0即真,0为假。
2)语法
bool a = 1; // 逻辑真,此处1可以取其他任何非零数值
bool b = 0; // 逻辑假 c
3)在使用bool定义变量时要多加一个头文件:
#include<stdio.h>
#include<stdbllo.h>
4)这里补充一个枚举函数:enum,用法如下:
enum color{yellow=10,gree,blue,red};//若以列应用enum则从0开始计数,依次增1
printf("%d",yellow); //10
printf("%d",red); //13
6.常量与变量
1)概念:不可改变的内存叫常量,可以改变的内存叫变量
2)举例
int a = 100; // a是变量,而100是常量
float f = 3.14; // f是变量,而3.14是常量
char s[] = "abcd"; // s是变量,"abcd"是常量
7.标准输入
1)scanf:严格定义,严格存取,该拿的拿,不该拿的不拿
2)getchar:键盘上敲击什么,就输出什么
注意:scanf() 与 printf() 不同,scanf() 的格式控制串不可乱写,尤其是结尾处的 \n,否则运行会出问题。
// 此处输入时必须带逗号
scanf("%d,%d", &a, &b);// 此处必须先输入a=,然后才能输入整数
scanf("a=%d", &a);// 此处结束输入时按下的回车符将被scanf()误以为格式控制符,无法正常结束输入
scanf("%d\n", &a);
练习:
编程实现如下功能:
-
如果用户输入大小写字母,则输出字母对应的ASCII码值。
-
如果用户输入ASCII码值,则输出对应的大小写字母。
-
输入大写写字母转为小写字母
#include <stdio.h>
int main()
{
char a;
scanf("%c",& a);
printf("%d\n",a);
int b;
scanf("%d",& b);
printf("%c\n",b);
char c, d;
scanf("%c",& c);
d = c + ' ';
peintf("%c\n",d);
return 0;
}