首页 > 其他分享 >01-C语言基础语法

01-C语言基础语法

时间:2023-06-22 15:12:46浏览次数:37  
标签:main 01 常量 int 数据类型 C语言 语法 printf include

目录

一. C语言发展史

1963 年ALGOL 60 作为C语言最早的模型,剑桥大学将其发展成为 CPL(Combined Programing Language)。1967 年,剑桥大学的 Matin Richards 对 CPL 语言进行了简化,产生了 BCPL 语言。

1970 年,美国贝尔实验室(Bell Labs)的 Ken Thompson 将 BCPL 进行了修改,并取名叫做 B 语言,意思是提取 CPL 的精华(Boiling CPL down to its basic good features)。并用 B 语言写了第一个 UNIX 系统。

1973 年,AT&T 贝尔实验室的 Dennis Ritchie(D.M.RITCHIE) 在 BCPL 和 B 语言的基础上设计出了一种新的语言,取 BCPL 中的第二个字母为名,这就是大名鼎鼎的 C 语言。

1978 年K&R C作为当时C语言事实上的标准,. 1983年到1989年C89(ANSI C), 从起草到草案被ANSI正式通过称为美国国家标准, 被称为C89标准. 1990年C90(ISO C)在C89基础上做了印刷排版上的修改, 技术上完全一样. 1995年在C90基础上做了技术补充, 经过扩充后的C90被称为C95。

1999 年,ANSI 和 ISO 又通过了最新版本的 C 语言标准和技术勘误文档,该标准被称为 C99 。这基本上是目前关于 C 语言的最新、最权威的定义了。

二. 数据类型

1. 为什么需要数据类型?

编程是为了解决生活中的问题, 解决问题就需要有描述问题的能力. 例如去超市买东西就需要设计到金额的大小以及运算, 代码中就需要有对应的数据类型去描述生活中的问题, 然后进行模拟问题的过程再解决问题.

2. C语言中的数据类型(注意点1: "/": 表示需要依据定义的情况来决定. 注意点2: 在C语言标准中 long >= int 即可并不一定是8, 由编译器决定. folat和double同理)

基本数据类型 名称 数据类型大小
char 字符型 1
short 短整型 2
int 整形 4
long 长整型 4
float 单精度浮点型 4
double 双精度浮点型 8
构造数据类型 名称 数据类型大小
arr[] 数组 /
struct 结构体 /
union 共同体 /
enum 枚举类型 /
指针类型 名称 数据类型大小
int * 指针 4
空类型 名称 数据类型大小
void 空类型
/*
	数据类型大小测试代码
*/
#include <stdio.h>

int main()
{
	printf("%d\n", sizeof(char));
	printf("%d\n", sizeof(short));
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(long));
	printf("%d\n", sizeof(float));
	printf("%d\n", sizeof(double));
	printf("%d\n", sizeof(int*));
	return 0;
}

三. 常量和变量

1. 常量概念

值不能改变的量称为常量. 例如: 圆周率, 身份证号码, 性别, 血型....

2. 常量定义方式

  • 字面常量
  • const 修饰的常变量
  • #define 定义的标识符常量
  • 枚举常量
/*
	常量定义方式测试代码
*/
#include <stdio.h>

//MALE,FEMALE,SECRET是枚举常量
enum Sex
{
 MALE,
 FEMALE,
 SECRET
};

int main()
{
    //字面常量演示, 这样写代码是能正常运行的
    3.14;//字面常量
    1000;//字面常量
    
    //const 修饰的常变量    注: 这里的pai是const修饰的常变量
    const float pai = 3.14f;  
    pai = 5.14;//是不能直接修改的!
    
    //#define的标识符常量 演示
 	#define MAX 100
    printf("max = %d\n", MAX);
    
    //枚举常量演示    注:枚举常量的默认是从0开始,依次向下递增1的
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);
    
     return 0;
}

3. 知识拓展

上面例子上的 pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了
变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。

/*
	代码验证
*/
#include <stdio.h>

int main()
{
	int num = 0;
	const int a = 3;

	//case后面必须跟一个常量表达式, 当使用a作为表达式的时候, 会报语法错误提示a为局部变量
	switch (num) {
		case a: 
			break;
		default:
			break;
	}
}

四. 字符串和转义字符

1. 字符串 注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串 内容。

"hello bit.\n" : 这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

/*
	示例代码, 验证C语言中字符串由'\0'结尾
*/
#include <stdio.h>

int main()
{
    char arr1[] = "bit";
    char arr2[] = {'b', 'i', 't'};
    char arr3[] = {'b', 'i', 't', '\0'};
    printf("%s\n", arr1);  //bit
    printf("%s\n", arr2);  //bit烫烫烫烫墙it
    printf("%s\n", arr3);  //bit
    return 0;
}

2. 转义字符

\是C语言中的转义字符, 搭配其他字符可以构成不同的特殊效果. 例如\n意思是换行, \t 表示制表符.

/*
	示例代码, 展示转义字符\的效果.
*/
#include <stdio.h>
int main()
{
	//打印c:\code\test.c
	printf("c:\code\test.c");       // c:code	est.c
	printf("c:\\code\\test.c");     //c:\code\test.c

	//打印(are you ok??)
	printf("(are you ok??)");     //(are you ok]   ----  这里是因为??)会被解析成]
	printf("(are you ok\?\?)");   //(are you ok??)
}

3. 常见转义字符搭配

转义字符 释意
\? 在书写连续多个问号时使用,防止他们被解析成三字母词
\' 用于表示字符常量'
\“ 用于表示一个字符串内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。 如: \130 X
\xdd dd表示两个十六进制数字. 如: \x30 0
/*
	\ddd示例代码, 需要注意的点.
*/
#include <stdio.h>
int main()
{
    printf("%d\n", strlen("abcdef"));
    printf("%d\n", strlen("c:\test\628\test.c"));	 //14  \62被解析成一个转义字符, 8不能和62一起看
    return 0;
}

4. 注释: 主要有两种注释风格

  • C语言风格的注释 /xxxxxx/
    缺陷:不能嵌套注释
  • C++风格的注释 //xxxxxxxx
    可以注释一行也可以注释多行

五. 选择语句

1. if else 语句

#include <stdio.h>
int main()
{
    int coding = 0;
    printf("你会去敲代码吗?(选择1 or 0):>");
    scanf("%d", &coding);
    if(coding == 1)
   {
       prinf("坚持,你会有好offer\n");
   }
    else
   {
       printf("放弃,回家卖红薯\n");
   }
    return 0;
}

2. switch 语句

/*
	注意点: 在visual studio中scanf()被视为不安全的, 会发生运行时错误, 导致程序无法正常运行需要使用
	scanf_s(). 但是在啊哈C中是可以正常使用的. 
*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num = 0;
    scanf_s("%d", &num); // 保存 scanf 函数的返回值

    switch (num) {
    case 1: printf("The number is 1\n");
        break;
    case 2: printf("The number is 2\n");
        break;
    default: printf("Error: the number must be 1 or 2\n");
        break;
    }

    return 0;
}

六. 循环语句

1. while 循环

#include <stdio.h>
int main()
{
    printf("加入比特\n");
    int line = 0;
    while(line<=20000)
   {
        line++;
        printf("我要继续努力敲代码\n");
   }
    if(line>20000)
        printf("好offer\n");
    return 0;
}

2. for 语句循环

#include <stdio.h>

int main()
{
	for (int i = 0; i <= 3; i++) {

		printf("%d\n", i);
   }
}

3. do while 循环

#include <stdio.h>

int main()
{
	int i = 3;
	do
	{
		printf("%d\n", i);
	} while (i--);
}

七. 函数

1. 函数特点

简化代码, 实现代码复用.

#include <stdio.h>
int main()
{
    int num1 = 0;
   int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}
上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
   int z = x+y;
   return z;
}
int main()
{
    int num1 = 0;
   int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = Add(num1, num2);
    printf("sum = %d\n", sum);
    return 0;
}

标签:main,01,常量,int,数据类型,C语言,语法,printf,include
From: https://www.cnblogs.com/Deng-S/p/17497763.html

相关文章

  • cad2016图文安装教程附安装包下载
    大家好,今天给大家分享下cad2016安装教程注意安装前请推出杀毒软件,防止误报影响安装进程安装包下载cad2016下载链接:https://pan.baidu.com/s/1S3Jt3rtnrVogC0Qtjb_8pg?pwd=e3yh提取码:e3yh第一步:鼠标右键解压到“CAD2016”   第二步:双击运行“CAD_2016”   第......
  • ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes
    今天在批量伪造测试数据时,MySQL收到下面异常:ERROR1153(08S01):Gotapacketbiggerthan'max_allowed_packet'bytes。这是因为没有调整mysql的默认配置,默认最大只能处理16M的文件,而我要导入的伪造数据有50M的一个SQL。于是调整配置文件:/etc/my.cnf修改mysql的最大允许包大小......
  • 转Java路线语法注意点
    面向对象编程概念:面向对象编程——以类的方式组织代码,以对象的组织数据。1.类和对象类是一个模板:抽象,对象:一个具体的实例。2.方法就是函数。3.对象的引用引用类型:基本类型(8)对象是通过引用来操作的:栈——>堆。4.属性在Java里叫字段。5.对象的创建和使用必须使用new关键......
  • Vue(二):指令语法之v-bind
    一、什么是指令语法vue中模板语法有两大类,第一类是插值语法,第二类就是指令语法。1.插值语法插值语法在上一篇“vue的简单使用”中已经提到了。功能:用于解析标签体的内容写法:{{XXX}},XXX为js表达式2.指令语法功能:用于解析标签(包括标签属性、标签事件、标签体内容等)本文来学......
  • 【技术积累】Vue.js中的基础概念与语法【一】
    写在前面学习Vue之前最好有前端三驾马车的基础【HTML+CSS+JavaScript】笔者接了一个从头开发的Vue项目,由于公司急着要,没有时间慢慢像在学校里学了,只能边学边做,现在项目雏形已经做的差不多了,因此正好以自己的方式来写笔记笔者接项目的时候Vue零基础,前端基础也是除了div几个标签......
  • 图的遍历——DFS, BFS(邻接矩阵,邻接表)——C语言描述
    图的遍历——DFS,BFS(邻接矩阵,邻接表)——C语言描述目录图的遍历——DFS,BFS(邻接矩阵,邻接表)——C语言描述0测试用例框架1图的深度优先遍历(DFS)1.1邻接矩阵(1)数据结构(2)代码(3)测试用例(4)打印结果1.2邻接表(1)数据结构(2)代码(3)测试用例(4)结果2图的广度度优先遍历(BFS)2.1队列(1)数据结构......
  • P5025 SNOI2017 炸弹
    P5025SNOI2017炸弹不难看出本题是可以转化为图论模型的:建立\(n\)个点代表\(n\)个炸弹,如果第\(i\)个炸弹能直接引爆第\(j\)个炸弹,就连边\(i\toj\)。这样的图论模型很好地刻画了原题中引爆的传递性,题意中第\(i\)个炸弹能直接/间接引爆第\(j\)个炸弹直接等价于......
  • gRPC 的 RoadMap 20160325 更新
    gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(ProtocolBuffers)序列化协议开发,且支持众多开发语言。下面我们就从HTTP2、ProtoBuf3、Nginx、gRPC的角度看他们的RoadMAP。HTTP22015年5月HTTP2协议正式版发布:RF......
  • C语言中数组和指针
    (文章目录)前言本文将给大家带来C语言中非常重要的两个知识点,指针和数组。一、指针的概念指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,指针既然都用来存放地址了那就说明指针也是一个变量。二、指......
  • 自学C语言2023_6_21
    变量的作用域和生命周期: 作用域:变量的生效范围就是作用域局部变量的作用域:变量所在的局部范围(大括号内) 全局变量的作用域:整个工程其他.c文件的变量:需要使用extern声明一下变量  生命周期:变量的创建和销毁之间的时间段局部变量:进入局部范围生命开始,出局部范围生命......