key=value
$key -> value
SHELL=/bin/bash
通过命令修改:export 变量名=变量值
一但对出当前会话,所有对环境的修改都将失效。
通过主配置文件修改:.bashrc/.bash_profile
每次启动会话,shell都会读取主配置文件,并根据其中的内容设置环境变量。
九、简单shell脚本
shell脚本就是一个拥有可执行属性的文本文件,其中可以包含多条命令、变量、各种控制结构,已完成比较复杂的任务。
#表示注释,被脚本解释器忽略,但是#!/bin/bash不会被忽略,其目的是告诉脚本解释器用什么shell运行该脚本。
第三课 C语言编程基础
一、背景介绍
1960,剑桥大学,Algol 60,算法语言,复杂,不适于系统编程。
1963,MIT,CPL(Combined Programming Language)语言,更贴近底层,适合系统编程,太复杂。
1967,BCPL(Basic CPL),简单化,实用。
1970,贝尔实验室,B语言,针对UNIX系统开发。
1973,DMR(里奇),C语言,引入类型,使用结构化控制。
1978,《The C Programming Language》出版,K&R,C语言走向世界。
1989,ANSI C标准,C89。
1990,修订,C90。
1999,ISO C标准,C99。
二、我的第一个C语言程序
三、C语言程序的开发周期
1.编辑:编写源程序,保存退出。hello.c
2.预编译:处理包含文件和宏扩展。
3.编译:生成目标模块。hello.o
4.链接:将多个目标模块和库链接成一个可执行程序。a.out
5.载入:将可执行文件读入内存,形成进程映像。
6.运行:处理器执行进程映像中的代码。从main函数开始。
四、gcc常用选项
-o 输出文件名:指定生成的文件名
-E:只做预编译
-c:只做编译,不做链接
-S:产生汇编文件
-l:指定链接库
-L:指定库的目录
-I:指定头文件的目录
-std=c89/c99:指定语言标准
-Wall:生成警告
五、#include指令
用<>包含的头文件,到标准头文件路径(usr/include)下寻找。
用""包含的头文件,优先到当前目录下寻找。
一般情况下,建议用<>包含标准头文件,用""包含自定义头文件。如果头文件既不在当前目录下,也不在标准头文件路径中,可以通过-I选项告诉编译器到哪里寻找这样的头文件。
六、C语言程序的注释
1.以/*开始,以*/结束,中间的部分为注释,没有行数限制,不能嵌套。
2.//单行注释,从//开始到本行末尾是注释。
a /* b c
d */ e
f
b c d是注释
a // b c
d // e
f
b c e是注释
七、编码规范
1.语句尽量分在多行中书写。
int main (void) {printf ("hello word"); return 0;} // 不好
int main (void) {
printf ("hello world\n");
return 0;
}
2.空格可以使代码更加清晰。
3.缩进可以增强代码的层次感。
4.必要空行可以增强代码的逻辑性。
5.命名风格
1)匈牙利命名
int nAge;
CreateWindow
2)下划线方式
create_window
八、变量
1.变量就是内存中的一个区域,其值可以改变,通过变量名加以标识和区分,变量有类型和值。
2.变量类型包括char(1字节)、int(4字节)、short(2字节)、long(4字节)、long long(8字节)、float(4字节)、double(8字节),等等。另外还包括复合类型。
1.23 = 123 * 10^-2阶码,IEEE
3.变量的定义
类型 变量名 = 初值;
int a = 10;
int b; // 未初始化的变量,其值不确定
4.可以printf函数输出变量的值
printf ("%d", a);
printf ("%d %d", a, b);
printf ("a=%d, b=%d\n", a, b);
a=10, b=1434
整型:%d
字符:%c
浮点数:%f/%lf
5.变量名必须是合法标识符
1)必须以字母或下划线开头
int abc; // ok
int _abc; // ok
int 2abc; // error !
int *abc; // error !
2)包含字母、下划线和数字
int a_2; // ok
int a-2; // error !
3)大小写敏感
int a, A; // 两个变量
4)不能与关键字冲突
int float; // error !
5)理论上变量名的长度没有限制,但是具体的编译器往往会截断。
6)变量命名最好有意义。
int age;
float salary;
int max;
int ttt, zyu; // 不好
九、基本数据类型
C语言的基本数据类型包括:
char:字符/单字节整数,1字节
unsigned char:非负的单字节整数,1字节
short:双字节整数,2字节
unsigned short:非负的双字节整数,2字节
int:四字节整数,4字节
unsigned int:非负的四字节整数,4字节
long:四字节整数,4字节
unsigned long:非负的四字节整数,4字节
long long:八字节整数,8字节
unsigned long long:非负的八字节整数,8字节
float:浮点数,4字节
double:双精度浮点数,8字节
long double:长双精度浮点数,12字节
1.字符型
1)字符型变量的底层存储就是整数,对于字符而言存储的是该字符在ASCII表中的代码。
'A' - 65
'a' - 97
'0' - 48
2)字符常量通过一对单引号('')表示。
char c = 'A'; // 实际上c中存放的是65
3)用printf显示字符的时候,如果用%c显示的是字符,如果用%d显示的就是ASCII码。
4)转义字符
\n:换行,光标移到下一行行首
\r:回车,光标移到当前行行首
\t:制表
\v:垂直制表
\b:退格
\a:响铃
\\:\
\':'
\":"
%%:%
5)取值范围
char:8位,1字节,有符号,-128 ~ 127(-2^7 ~ 2^7-1)
unsigned char:8位,1字节,无符号,0 ~ 255 (0 ~ 2^8 - 1)
2.整型
1)int代表16位或32位整数,可以用short/long进行修饰,short (int)用16位表示,long (int)用32位表示。有符号的int有正负之分,无符号的int (unsigned int)只有0和整数。
2)整型常数
100:默认为int,十进制
100L:long
100LL:long long
100u:unsigned int
100UL:unsigned long
0100:八进制,64
0x100:十六进制,256
3.浮点数
float/double/long double
1.23:默认为double
1.23f:float
1.23L:long double
浮点类型在计算机内部存储都是近似值。
十、三个常用函数
printf (格式化串, 变量表);
scanf (格式化串, 地址表);
从键盘读取数据到变量中。
int a;
scanf ("%d", &a);
一次调用输入多个数据,各个数据以空白字符(空格、制表、回车)分隔。
sizeof ():获取一个变量或类型的字节数。
#include <stdio.h>
int main (void) {
char c = 'A';
printf ("c=%c\n", c);
printf ("c=%d\n", c);
c = c + 1;
printf ("c=%c\n", c);
printf ("c=%d\n", c);
printf ("hello\n");
printf ("hello\r");
printf ("%d\t%d\n", 100, 200);
printf ("%d\v%d\n", 300, 400);
printf ("hello\bworld\n");
printf ("\a\a\a\a");
printf ("hello\\world\n");
printf ("\'hello\'\n");
printf ("\"hello\"\n");
printf ("100%%\n");
c = 128;
printf ("%d\n", c);
unsigned char uc = 256;
printf ("%u\n", uc);
return 0;
}
/* hello.c
这是一个非常简单的程序
作者:minwei
时间:2012-8-1
目的:C语言教学
*/
/* 包含文件 */
#include <stdio.h> // 标准输入输出
#include "hello.h" // 自定义头文件
/* 主函数,进程的入口 */
int main (void) {
/* 打印输出 */
printf ("hello world\n");
/* 返回0 */
return 0;
}
#include <stdio.h>
int main (void) {
int a;
// scanf ("%d", &a);
// printf ("a=%d\n", a);
char c;
// scanf ("%c", &c);
// printf ("c=%c\n", c);
float f;
// scanf ("%f", &f);
// printf ("f=%f\n", f);
double d;
// scanf ("%lf", &d);
// printf ("d=%lf\n", d);
scanf ("%d%f%lf", &a, &f, &d);
printf ("%d,%f,%lf\n", a, f, d);
return 0;
}
#include <stdio.h>
int main (void) {
printf ("%d\n", sizeof (char));
printf ("%d\n", sizeof (short));
printf ("%d\n", sizeof (int));
printf ("%d\n", sizeof (long));
printf ("%d\n", sizeof (long long));
printf ("%d\n", sizeof (float));
printf ("%d\n", sizeof (double));
printf ("%d\n", sizeof (long double));
unsigned int u;
printf ("%d\n", sizeof (u));
return 0;
}
#include <stdio.h>
int main (void) {
int a = 10;
int b;
int c = 20, d;
printf ("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);
float e = 1.23;
double f = 4.56;
printf ("e=%f,f=%lf\n", e, f);
return 0;
}