第一课 C语言简明教程

时间:2022-01-23 23:03:10

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 <stdio.h>                   #调用系统函数则需要使用此头文件

/* 入口函数 */
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 数据类型

      看如下图:

第一课 C语言简明教程

第一课 C语言简明教程

      其中[]中括号代表可有可无;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.2222f;#单精度浮点型
const double b = 123.1234567; #双精度浮点型
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时操作
}

#if-elseif-else判断,中间可以有多个else if,最后的else也可有可无
if(a == 0)
{
#当a等于0时操作
}
else if(a == 1)
{
#当a等于1时操作
}



else
{
#前面条件不符合运行这,相当于默认操作
}

      2.4.2.3 创建类型的逻辑判断,看如下:

int a = 0;
int b = 1;
int c = 2;

if(a == 0 || b == 2) #因为是逻辑或会产生短路(一个为真结果就真不会再去判断b是否等于2)
{
#操作
}

if(a == 0 && b == 2) #因为是逻辑与也会产生短路(1个为假时结果就为假不会再判断b是否等于2)
{
#操作
}


if(a == 0 || b == 2 && c == 1) #因为&&运算符比较高,此相当于a == 0 || 0这样结果为真
{
#操作
}

  

      2.4.2.3 switch条件

switch(variable)     
{
case A:
//program code
break;
case B:
//program code
break;
case C:
//program code
break; #这个break语句一般情况都会有,当然不排除case one,case two都执行

default: #养成习惯最后的default一定要有即使没语句;
break;
}

#这个variable关心最多的是什么类型,这里说下:int,char,short int,long int是不是就只是这几个呢,答案是:经过查看下ANSI它是只有一句话整型。也问了一下他人也只是说是能转换成整型的就可以,至于byte不知道怎么试,倒是补上

  2.5 循环语句

    2.5.1 for循环,看如下代码:

int a = 10;
int b = 0;
for(b=0;b < a; b++)
{
printf("%d\n",b)
}

  

    2.5.2 while 以及do-while(),看如下代码:

#上面的for语句可以改写
int a = 10;
int b = 0;
while(b < a)
{
printf("%d\n",b);
}

#也可以使用do-while()语句,但是结果却不一样因为这个语句先执行在判断所以它比前面的循环多了一次如下
int a = 10;
int b = 0;
do
{
printf("%d\n",b);
}while(b < a)

    这节课的C语言基础就先到这里!