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]


不同于三字符组在源文件的任何出现都会被预处理器替换,双字符如果出现在字符串字面值(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


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开始:

例如:
#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;
}
















