1、C语言简介

低级语言→高级语言(相当于专业照相馆拍照→手机随便拍) 
C语言国标 ANSI C C89/C90,C99/C11
主流编译器Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C

#include<stdio.h>

int main(void)
{
    printf("helloworld\n");
    return 0;    
}

stdio,std=standard,io=input output,stdio.h即标准输入输出头文件 
main函数是主函数,程序的入口,有且只有一个
int main中的int表示main函数调用返回一个整型值
return 0 返回值是0
printf ("内容",变量),输出库函数表示打印,print意为打印,f表示formatted

2、数据类型
类型char、short、int、long、longlong、float、double
字节  1、      2、     4、   4、      8、            4、      8 
long字节可能是4或8,因为ANSI C标准只规定sizeof(long)>= sizeof(int) 

1字节(Byte)=8位(bit) 

%c=字符型,%s=字符串,%d=整型 或 10进制ASCII码,%f=浮点型,%lf=双精度浮点型,%p=地址型 ,%x=16进制ASCII码,%o=8进制ASCII码
 
所有的小数默认都是双精度浮点型,所以当定义float浮点型时可以加f,如:float a=11.2f  向内存申请四个字节存放a
输出时,%.nf可以控制显示小数的位数为n 
              %nd可以控制最小输出长度, 长度超过n的,直接输出,不足n位的用空格补齐
二进制转换十进制,比如010→0*2^2+1*2^1+0*2^0=2 

报错error: stray '\163' in program表示语句中使用了中文符号!!! 

3、变量和常量 
(1)全局变量和局部变量

全局变量是定义在代码块{ }之外的变量,局部变量是定义在代码块{ }之内变量。

变量名相同的时候,局部变量优先,局部变量只在大括号内产生作用(作用域) 
scanf("%d",&变量),输入库函数,&表示取地址,将输入的数据放入变量地址中 

c语言规定,变量要定义在当前代码块的最前面 ,否则可能报错,c++则不限制 

全局变量定义方式
①直接在main函数外定义
②在解决方案内其他文件main函数外定义的全局变量,使用extern int 变量名;引用到本文件定义 

某些编译器会提示“scanf、strcpy、strlen、strcat ”是不安全的
如VSC++,可在第一行加入#define _CRT_SECURE_NO_WARNINGS 
也可在安装路径下的vc/vcprojectitems/newc++file.cpp中添加上述语句成为默认语句

(2)常量
①字面常量 :直接写出来的常量如3.14 
②const 修饰的常变量: 如const int a=1; 不能再被赋值修改,其本质仍是变量,但拥有常量属性 

    int n=10;const m=10

    int arr[n]={0};     //失败

    int arr[m]={0};    //失败

    数组[ ]内必须是常量,在需要使用常量的地方 变量和常变量都不可使用

③#define 定义的标识符常量, 如: #define MAX 10 
④枚举常量 , enum 常量名{xx,xxx} ;

例如: enum Color

    {

        RED,YELLOW,

        BLUE,

    };

    int main()

    {enum Color color = BLUE; color=YELLOW;  /*BLUE=5  此处不能给枚举常量BLUE赋值,会报错*/

    return 0;}

4、字符串 
由双引号引起来的一串字符称为字符串字面值,或者简称字符串,如:"abcde"
字符串的结束标志是一个 \0 的转义字符。
在计算字符串长度的时候 \0 是结束标志,不算作字符串内容,不计长度

int main()

{

char arr1[]="abc";

char arr2[]={'a','b','c'};

printf("%s\n",arr1);    //输出结果abc

printf("%s\n",arr2);    //输出结果abcXXXXXX,因为没有\0结束

}

 

转义字符(转换字符原来的意思) 
 \n 换行 

 \t 水平制表符,长空白

 \v 垂直制表符

 \' 字符常量'

 \" 字符常量"

 \\ 表示一个反斜杠\

 \? 让问号成为问号,防止被解析成三字母词,如:"??)"会被误解为"]" 

 \a 警告,蜂鸣

 \b 退格符

 \f 进纸符,换一页

 \r 回车

 \d 输出十进制ASCII码,如:'A'-65,'a'-97,'\0'-0等等

 \ddd 表示1~3个八进制的数字,当d>=8时候不会转义 

 \xdd 表示2个十六进制数字,如:x61=6*16^1+1*16^0=97 

注意:

①如果要打印路径

例如:

printf("c:\test\32\test.c");  //打印结果:c:        est→        请按任意键继续...

应改为printf("c:\\test\\32\\test.c"); 

②三字符组

例如:

printf("(are u ok??)\n");  //打印结果:(are u ok]

C语言笔记1_C语言C语言笔记1_C语言_02

不同于三字符组在源文件的任何出现都会被预处理器替换,双字符如果出现在字符串字面值(quoted string)、字符常量、程序注释中将不被替换。双字符组的替换发生在编译器对源程序的tokenization阶段(即识别出关键字、标识符等,类似于自然语言的“断词”),仅当双字符组作为一个token或者token的组成部分时(如%:%:被替换为预处理运算符##),双字符组才被替换为单字符。如:

例如:

%:include <stdio.h>

%:include <stdlib.h>

%:include <string.h>

int main(int argc, char**argv)

<%

char buf<:100:> = <% 0 %>;

char *hello = "hello world";

memcpy(buf, hello, strlen(hello));

printf("%s ", buf);

return 0;

%>

③\ddd

例如:

printf("%d\n", strlen("c:\test\32\test.c"));

输出结果是13,\t是一个字符,\32是一个字符(\ddd型,\后ddd是8进制数(不能超过8),此处是32作为8进制数转化为10进制数,即3*8+2=26,所对应的ASCII码值)

④\xdd

例如:

printf("%c\n", 'x61');

输出结果为a,61是16进制数,转化为10进制为6*16+1=97,97对应ASCII表为a

C语言笔记1_C语言_03

C语言笔记1_C语言_04

5、选择语句

例如:

if(coding == 1)

  {

      prinf("坚持,你会有好offer\n");

  }

   else

  {

      printf("放弃,回家卖红薯\n");

  }

6、循环语句

①while当型循环

②for直到型循环

③do...while

例如:

while(line<=20000)

  {

       line++;

       printf("我要继续努力敲代码\n");

  }

 

7、函数

函数的特点就是简化代码,代码复用。

例如:

int Add(int x, int y){int z=x+y;return z;}

int main(){

int a=100;int b=200;int sum=0;

sum=(a,b);

printf("sum=%d\n",sum);

return 0;

}

 

8、数组

一组相同类型元素的集合

数组的下标从0开始:

C语言笔记1_C语言_05

例如:

#include <stdio.h>

int main()

{

int i = 0;

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

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

{

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

}

printf("\n");

return 0;

}