1序言:
1与Java、C#等高级语言相比,
C语言却非常简单,学习简单,使用也简单,但是也非常重要,到目前为止基本上操作系统的内核代码超过百分之九十使用
C语言完成,因此学好C语言是学好计算机这门课程的基础,特别是进入系统
编程尤为明显。
?
今天是本人复习C语言课程的第一课,主要重新记录一下C语言的基础知识,这节课涉及到C语言的结构、变量以及类型、输入输出、条件判断以及循环知识。
?
2知识点:
2.1 C语言的结构
?
2.1.1 通常情况下C语言程序是由:
?
1.相关的代码注释,使用/* ··· */可注释单行或多行,也可以用//单行注释(C99标准);
?
2.定义相关变量,全局(静态)变量或局部(静态)变量;
?
3.具有返回值int的main入口函数;
?
4.如果使用外部函数则需要引入头文件;
?
? 5.可有可无返回值其他函数方法;
?
6.使用代码块表示程序的相关判断;
?
下面来看下代码;
?
?
#include
? ? ? ? ? ? ? ? ? #调用
系统函数则需要使用此头文件
?
/* 入口函数 */
int main(void) ? ? ? ? ? ? ? ? ? ? ? #程序入口函数main,此时参数值为void代表未传参数
{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #main入口函数从这里开始,代码块开始处
? ? int data; ? ? ? ? ? ? ? ? ? ? ? ? ? #此data局部变量未初始化且后面未赋值如果直接输出其值是未知的
? ? static int cdata; ? ? ? ? ? ? ? ? ?#未初始化局部静态变量为0存储与bass,以初始化的存储于data?
? ? char* p = "Hello World!\n"; ? ? ?#定义局部变量p并赋值
? ? printf(p); ? ? ? ? ? ? ? ? ? ? ? #调用系统函数,此函数在stdio.h中
? ? int flag = Show(p); ? ? ? ? ? ? ?#调用具有返回类型为int的自定义函数Show(char* p)
? ? return 0; ? ? ? ? ? ? ? ? ? ? ? ?#该方法具有返回值int
} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #main代码块结束处
?
/* Show函数
? ? 参数:char* p
? ? 返回值:int
?*/
int Show(char* p)
{
? ? printf(p);
? ? return 1;
},
?
//全局变量
int golbal_data; ? ? ? ? ? ? ? #未初始化的变量(存储bss)为0,已初始化的全局变量存储在data
?
2.2 变量以及类型
?
2.2.1 数据类型
?
看如下图:
?
?
?
?
?
其中[]中括号代表可有可无;int类型范围取值是:-2^(32-1)至2^(32-1)-1,因此类推其他也是这样计算;int、float、double都是表示最少位数,因为跟操作系统位数有关,比如long intzai 32位操作系统下,跟int类型占用字节数是一样的,但是在64位下就不同,long int是8个字节的。当然还有一些类型比如iso c99扩展类型:int8_t总是8位,int16_t总是16位。可用sizeof(int)、sizeof(long)打印出其在当前平台下的占用字节数。一般尽量使用int类型:效率比较高;double精度够;尽量少用unsigned.
?
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
2.2.2 常量表示
?
2.2.2.1 常量分为:数值常量、字符常量、字符串常量、符号常量,看如下代码:
?
const int i = 123; ? ? ?#代表整型常量
const int i = 033; ? ? ? #代表整型常量使用八进制表示
const int i = 0x1; ? ? ?#使用十六进制表示
const float f = 1.2222;#单精度浮点型,默认带f
const double b = 123.1234567d; #双精度浮点型使用d表示
const char c = 'a'; ? ? ? #字符常量 ?
const char cn = '\\'; ? ? #斜杠转义
2.2.2.1 看如下代码:
?
?
pirntf("%d\n",100); ? ? ? ? ? ? ? ? ? ?#整型直接表示
pirntf("%o\n",100); ? ? ? ? ? ? ? ? ? ?#八进制表示
pirntf("%x\n",100); ? ? ? ? ? ? ? ? ? ?#十六进制表示
pirntf("%f\n",1.1111f); ? ? ? ? ? ? ? ?#单精度表示,单精度常量用f表示
pirntf("%f\n",1.11111111L); ? ? ? ? #双精度用单精度表示只显示小数点6位数,常量后面使用L表示双精度
2.3 格式化输出
?
2.3.1 使用占位符输出,看如下代码:
?
?
int a = 100;
float f = 1.123456f;
double d = 1.12345678L;
char c = 'A';
?
printf("%d\n",a); ? ?#使用%d输出整型a;%u:表示无符号十进制;%ld代表长整型。其中前面可以加上数量比如%2d代表2位;
printf("%f\n",f); ? ?#使用%f输出浮点型f;%2f代表2位浮点型;%2.3f代表2位整数3位小数;%-2.3f同理前面不过且向左靠齐,小数点不够补0对齐。
printf("%c\n",c); ? ?#使用%c输出字符c;
具体可以看看这边文章。
?
2.4 条件判断
?
2.4.1 运算符
?
2.4.1.1 通常情况下我们常用的运算符:
?
一级:(),[],.,->是按左至右顺序;
?
二级:-(负号),++,--,*(取值),&,!,~单目运算符是按右至左,这里特别注意++跟--有前置跟后置区分;sizeof表达式;
?
三级:*,/,%是按左至右计算;
?
四级:+,-是按左至右计算;
?
五级:<<,>>是按左至右计算;
?
六级:>,>=,<,<=是按左至右计算;
?
七级:==,!=是按左至右计算;
?
还有一些这里就不一一列举了比如复合运算符,大家可以看看这边文章这比较详细了。
?
2.4.2 条件判断
?
2.4.2.1 常见条件判断,看如下几种:
?
int a = 0;
?
#单if判断
if(a == 0) ? ??
{
? ? //当a=0操作
}
?
#if-else判断
if(a==0)
{
? ? //当a等于0时操作?
}
else
{
? ? //当a不等于0时操作
}
?