C的简介

##1.C语言的基本介绍  

·一个程序由一个或多个源程序组成,一个源程序文件中有且只有一个main函数。包括预处理指令`#include`,全局声明,函数定义。

·函数是C的重要组成部分,包括函数首部和函数体。

·最重要的一点,也是我学习C++后搞混的,程序总是从main函数开始执行,没有main函数是会报错的。

·同时一个良好的编程习惯应该包含注释部分。

##2.程序灵魂——算法介绍  

###2.1什么是算法  

·首先程序是由算法加数据结构这两大类组成的,当然还有一些细节,声明啊,注释等。

·算法分两大类,一类是数值运算,一类是非数值运算算法,而不管是什么算法,都是为了在一件事情中找到一定规律去做,按计划好的去实现避免出

###2.2算法特性  

·有穷性,一个算法应该包含有限的操作步骤。

·确定性。算法中每一个步骤都应该是确定的。

·有零个或多个输入。

·有一个或多个输出。

·有效性,算法每一个步骤都应该有效执行。

###2.3算法基本结构  

·顺序结构

·循环结构

·选择结构

##3.顺序结构及一些C的基础要点  

###3.1数据表现形式  

·常量

    常量分为整型,实型,字符型,字符串和符号常量。而字符常量中有一种转义字符,以'\'开头,最常见的是'\n',表示换行。符号常量例子`#define PI 3.14`  

·变量

    变量必须先定义后使用。  

·常变量

    'const int a = 1;'  

`标识符

    C语言规定标识符只能由数字,字母或下划线组成,数字不能开头。  

###3.2整型数据   

·分类

|类型|字节数|取值|

| --- | --- | --- |

|int|4|-2^31~(2^31-1)|

|unsigned int|4|0~(2^32-1)|

|short|2|-2^15~(2^15-1)|

|unsigned short|2|0~2^16-1|

|long|4|-2^31~(2^31-1)|

|unsigned long|4|0~(2^32-1)|

###3.3字符型数据    

没啥就一样

###3.4浮点型数据    

·float,double,long double

##4.选择结构程序设计  

这里也没啥就是if和switch,然后需要搞一下运算优先级。

·关系运算符优先级

    <,>,<=,>=,==,!=,这里前四种的运算优先级相同且高于后两种的运算优先级。  

·逻辑运算符优先级

    !高于&&高于||。  

    且非的运算优先级是最高的,然后是算数运算符,到关系运算符,到&&和||,最后是赋值运算符。  

·条件运算符

    条件运算符有一个条件表达式,由两个符号?和:组成,必须一起使用,及`表达式1?表达式2:表达式3`   

```

max=(a>b)?a:b  

//等价于  

if (a>b)  max=a;  

else max=b;  

//同样也可以写成  

a>b?printf("%d",a):printf("%d",b)  

```

##5.循环结构程序笔记  

处理一些需要重复的问题,可以选择循环结构。

###5.1 while语句    

·while语句就是只要当循环条件表达式为真,就执行循环体语句。

```

 #include<stdio.h>  

int main()   

{  

    int i=1,m=0  

    while(i<100)  

    {  

        m=m+i;  

        i++;  

    }  

    printf("m=%d",m);  

    return 0;  

}  

```

###5.2 do...while语句  

·特点就是先无条件执行一遍循环体,然后判断循环条件是否成立。

###5.3 for语句  

·for语句是用到最多的循环语句,一般形式是for(表达式1;表达式2;表达式3)下面接语句

    表达式1:设置初始条件,只执行一次

    表达式2:循环条件表达式,判断是否循环

    表达式3:循环调整语句

###5.4 循环的终止结束  

·break语句提前终止循环,也可以跳出switch语句。

·continue语句提前结束本次循环,不继续走下面的程序,而不结束整个循环。

##6.利用数组处理批量数据  

·数组是一组有序数据的集合,数组中每一个元素都属于同一个数据类型,用一个数组名和下标来唯一的确定数组中的元素。

###6.1 一维数组初始化  

·在定义是赋初始值。

    `int a[10]={0,1,2,3,4,5,6,7,8,9};`  

·可以只给一部分赋值

·也可以赋值0,`int a[10]={0,1,2,3,4,5,6,7,8,9};`或者`int a[10]={0}`

·也可以不指定数组长度

###6.2 冒泡法  

``` 

  #include <stdio.h>  

int main()  

{  

     int a[10];  

    int i,j,t;  

    printf("input 10 numbers:\n");  

    for(i=0;i<10;i++)  

        scanf("%d",&a[i]);   

    printf("\n");  

    for(j=0;j<9;j++)  

    {  

        for(i=0;i<9-j;i++)  

        {  

            if(a[i]>a[i+1])      

            {  

                t=a[i];  

                a[i]=a[i+1];  

                a[i+1]=t;  

            }  

        }  

    }   

    printf("the sorted number:\n");  

    for(i=0;i<10;i++)  

        printf("%d",a[i]);  

    printf("\n");  

    return 0;  

}   

```

###6.3字符数组   

·如果花括号内提供初值个数大于数组长度,则报错。如果初值个数小于数组长度,则置赋值前面哪些元素,后面空的填\0,即空字符。

·C语言规定字符串结束标志,以字符\0作为结束标志。如果字符数组中存在字符,前九个都不是空字符,而第十个是\0,认为数组中有一个字符串,有效字符九个。

·在向内存中存储时,系统会自动在最后加一个'\0',那么就有了下面这个

```  

 char c[]="i am happy";  

//等价于  

char c[]={"i am happy"};  

//等价于  

char c[]={'i','','a','m','','h','a','p','p','y','\0'};  

//而不与下面这个等价  

char c[]={'i','','a','m','','h','a','p','p','y'};  

//前三者长度为11,最后一个为10  

```

·字符数组输出不包括'\0','printf("%s",c)'。

###6.4 一些字符串相关函数

·puts——输出字符串,其作用是将一个字符串(以\0结束)输出到终端。'puts(str);'

`gets——输入字符串,从终端输入一个字符串,得到一个函数值。

·strcat——字符串拼接,'strcat(str1,str2)',将str2拼接到str1后面,str1必须足够大。

·strcpy和strncpy——字符串复制,'strcpy(str1,str2)',将str2复制到str1中,从起始位开始,str1也需要足够大。'strncpy(str1,str2,2)',将str2中前2个复制到str1中。取代str1中前两个字符。

strcmp——字符串比较函数。'strcmp(str1,str2)',将两个字符串从左至右比,若全部相同则字符串相等,出现不同,以第一个不同为准。结果由函数值带回,相同0,str1>str2,返回一个正整数,str1

·strlen——测字符串长度,不包括\0。

·strlwr——转换小写

·strupr——转换大写

##7.指针  

###7.1 什么是指针  

·vc中为int分配4个字节,float四个字节,char一个字节,内存区每一个字节有一个编号,这就是地址,地址指向的是该变量单元,地址称为指针。

·'i_pointer = &i;'表示将i的地址存放到i_pointer中,i的地址是2000,那i_pointer的值就是2000,这个2000是i的地址。这时i=3,那么*i_pointer=3;*i_pointer表示i_pointer所指对象。此时,*i_pointer是指针,指向一个地址,i_pointer是指针变量,存放地址的变量。

###7.2 指针变量定义和初始化

·类型名 * 指针变量名

    'int * p;'  

·**初始化(这是定义加初始化,不是指针变量的赋值过程,区分!!)**

    'int * p = &a;'//定义指针变量p,指向a。  

**定义时 指针变量前面的'*'表示该变量为指针型变量,指针变量名是p,不是'*p'。**

·一个变量的指针包含两个方面,以是以存储单元编号表示的纯地址,一是指向的存储单元的数据类型。

###7.3 字符串指针  

```  

·char *string = "hello world";  

等价于  

char *string;  

string = "hello world";  

//把字符串第一个元素地址赋值给指针变量string,输出的时候会自动加1。  

```

##8.自建数据类型  

###8.1结构体  

·声明

    struct 结构体名  

    {成员列表};  

    //成员声明需要有类型声明,***类型名 成员名***  

·在声明同时定义变量

    struct 结构体名  

    {成员列表  

    }变量名列表;  

·定义结构体数组

    struct 结构体名  

    {成员列表}数组名[数组长度];  

·结构体指针

    p指向一个结构体变量stu。下面三种用法等价  

- stu.num(stu.成员名)

- (*p).成员名

- p->num

·枚举

声明

    enum [枚举名]{枚举元素列表};  

    //枚举元素不能赋值  

    enum Weekday{a,b,c};  

定义变量

    enum Weekday  workday;  

    //   枚举类型   枚举变量  

    workday = a; 

##9。对文件的输入输出  

·一个文件要有一个唯一的文件标识,文件标识包括三部分:

- 文件路径

- 文件名主干

- 文件后缀

    'C:\temp\file.dat'  

·映像文件-在内存中以二进制形式存储的,不加转换的输出到外存,就是二进制文件,可以认为它就是存储在内存的数据的映像。

·文本文件-要求在外存上以ASCII代码形式存储,则需要在存储前进行转换。

·fopeen(文件名,使用文件方式);

|文件使用方式|       含      义      |指定文件不存在|

|--|--|--|

|r(只读)|打开一个已存在的文件输入数据|出错   |

|w(只写)|打开一个文本文件写入数据|建立新文件|

|a(追加)|向文本文件尾添加数据|出错|

|r+(读写)|打开一个文本文件读写|出错   |

|w+(读写)|打开一个新的文本文件读写|建立新文件|

    如果不能打开文件,fopen函数将带回一个出错信息,返回一个空指针NULL。  

    'if((fp=fopen("file","r"))==NULL)'  

·关闭文件 fclose(文件指针);

·读写一个字符

    fgetc(fp)从fp指向的文件读入一个字符  

    fputc(ch,fp)将字符ch写到文件指针变量fp所指文件。  

·读写一个字符串

    fgets(str,n,fp)n是要求得到的个数,但实际只从fp所指文件中读入n-1个字符,最后加一个'\0',这样得到字符串共有n个字符,放到字符数组str中。读完前遇到'\n'或文件结束符EOF,读入结束,但遇到的'\n'也将作为字符读入,函数出错返回NULL。  

·格式化方法读写文本文件

    fprintf(文件指针,格式字符串,输出列表);  

    fscanf(文件指针,格式字符串,输出列表);  

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354