c语言
1.1开发环境
VMware:虚拟机(模拟计算机)
linux_env:镜像文件
Terminal
用户和系统进行交互的一个工具
Is
列出当前目录下的文件
vi编辑器的使用
vi专门用来写代码的工具
vi hello.c //如果hello.c存在就打开,不存在就新建
命令行模式、底行模式转为插入模式:
-
i:进入插入模式,在光标所在位置前面开始新增资料
-
I:从光标所在列的第一个非空白字符前面开始插入资料
-
o:在光标所在列下新增一列并进入插入模式
-
O:在光标所在列上新增一列并进入编辑模式
-
a:从光标所在位置后面开始新增资料
-
A:从光标所在列最后面的地方开始新增资料
vi hello.c //新建一个c文件
//helloworld文件
gcc hello.c //编译文件 生成可执行文件
./a.out //运行可执行文件
vi文件操作指令
-
:q 结束编辑退出vi
-
:q!不保存编辑过的文档
-
:w 保存文档,其后可加要保存的文件名
-
:wq 保存文档并退出
-
:zz 同上
-
:x 同上
vi的删除/修改与复制
-
剪切
-
nx 剪切从光标所在的字符开始的n个字符
-
ncb 剪切光标所在的前n个单词
-
ncw 剪切光标所在的后n个单词
-
c$ 剪切从光标所在的字符到行尾的所有字符
-
ndd 剪切自光标所在行开始的n行,如果不够则到字符段截止为止
-
复制
-
y$ 复制从光标所在的字符到行尾
-
nyy 复制下n行
-
粘贴
-
p 将缓冲区内的字符粘贴到光标所在位置
-
u 撤销
C语言注释
//单行注释
/*...*/多行注释
C语言变量
变量定义及输出
int a;//定义一个变两
int a = 100;//定义并赋初值
#include<stdio.h>
int main()
{
int a = 100;//定义整数
printf("a is %d\n",a);//输出小数
}
#include<stdio.h>
int main()
{
float b = 1.02;//定义小数
printf("b is %f\n",b);//输出小数
retern 0;
}
数值转换
数的表示形式
-
2进制
-
8进制 在c语言中0开头表示8进制
-
10进制 0x开头表示16进制
-
16进制
输入语句
#include<stdio.h>
int main()
{
int num1,num2,result;
scanf("%d%d",&num1,&num2);
result = num1%num2;
printf("result is %d\n",result);
return 0;
}
求和
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int sum = a+b+c;
printf("sum is %d",sum);
return 0;
}
求平均值
#include<stdio.h>
int main()
{
float a,b,c;
scanf("%d%d%d",&a,&b,&c);
float average = (a+b+c)/3.0;
printf("average is %f\n",average);
return 0;
}
逻辑表达式
-
== 相等
-
!= 不相等
-
>
-
<
-
>=
-
<=
例子:输入一个数,判断此数是不是0
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a==0)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
例子:
-
显示:“please input a number”
-
用户输入
-
判断用户输入的数是不是>90
#include<stdio.h>
int main()
{
printf("please input a number\n");
int a,*p;
float b;
char str[10]="";
scanf("%s",str);
if(strchr(str,'.')==NULL)
{
sscanf(str,"%d",&a);
p=&a;
}
else
{
sscanf(str,"%d",&a);
p=&b;
}
}
练习:用户输入一个整数,判断这个数是不是偶数,如果是偶数,打印evev,如果是奇数打印odd
继续:如果是偶数判断这个数的一般是不是偶数
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a%2!=0)
{
printf("odd\n");
}
else
{
printf("even\n");
if((a/2)%2!=0)
{
printf("a/2 is odd\n");
}
else
{
printf("a/2 is even\n");
}
}
return 0;
}
//函数写法?
#include<stdio.h>
int isevev(int a)
{
if((a/2)%2!=0)
{
printf("odd");
}
else
{
printf("even");
}
}
int main()
{
int a;
scanf("%d",&a);
isevev(a);
isevev(a/2);
return 0;
}
//作业:
-
判断一个数是否满足条件: a) 是7的倍数 b) 不是3的倍数 如果满足,输出yes,不满足输出no
-
计算某一时间的下一秒(笔试编程题) 20 59 59 下一秒 21:00:00 要求,如果用户输入了错误的时间,退出 25点退出, 61秒退出
```c
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a&b&c);
if(a<24)
{
if(b<60)
{
if(c<60)
{
c++;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
else
{
return 0;
}
if(c>=60)
{
c=0;
b++;
}
if(b>=60)
{
b=0;
a++;
}
if(c>=24)
{
a=0
}
if(a<10)
{
printf("0%d",a);
}
else
{
printf("%d",a);
}
printf(":");
if(b<10)
{
printf("0%d",b);
}
else
{
printf("%d",b);
}
printf(":");
if(c<10)
{
printf("0%d",c);
}
else
{
printf("%d",c);
}
return 0;
}
```
#include<stdio.h>
int a;
double b;
int if_even()
{
int *p;
scanf("%s",str);
if(strchr(str,'.')==NULL)
{
sscanf(str,%d,&a);
p=&a;
break;
}
else
{
continue;
}
}
int main()
{
while(1)
{
char str[];
scanf("%s",str);
if_even(str[])
}
}
Gcc概述
gcc编译流程
-
预处理
-
编译
-
汇编
-
链接
语法:gcc[option|filename]
option
-E:可以使编译器在预处理阶段结束时就停止编译
-S:能使编译器在进行完编译之后就停止
编译流程分析
-
预处理阶段
-
gcc-E-o [目标文件] [编译文件]
-
.i文件为经过预处理的c原始文件
-
将头文件加入到.c文件中形成.i文件
-
编译阶段
-
检查代码的规范性、是否有语法错误
-
把代码翻译成汇编语言
-
将.i程序翻译成.s汇编语言原始程序
-
汇编阶段
-
将汇编语言转化为二进制目标代码
-
连接阶段
-
连接系统函数库
-