01-C语言基础语法
一. 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;
}
01-C语言基础语法的更多相关文章
- 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB
走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...
- C语言基础语法
#include <stdio.h> int main() { int age; printf("input your age"); scanf("%d&qu ...
- Smali语言基础语法
1.Smali语言基础语法-数据类型与描述符 smali中有两类数据类型:基本类型和引用类型.引用类型是指数组和对象,其它都是基础类型. 基本类型以及每种类型的描述符: Java类型 类型描述符 说明 ...
- 黑马程序员——OC语言基础语法 面向对象的思想
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...
- 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...
- php语言基础语法与编程工具推荐
php脚本语言,需要在服务器端执行,用浏览器返回HTML结果.在PHP中所有的语法都是如此,用户端是无法修改的,只有浏览权限. 一.php基础语法之输出方法 1.PHP中所有的脚本,可以放在文件中的任 ...
- C语言基础语法之指向函数的指针
指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...
- Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别
Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...
- NDK以及C语言基础语法(一)
一.什么是NDK? Native Development Kit (本地开发工具包): NDK中提供了一系列的工具,帮助我们快速开发C/C++的动态库,并能自动将so文件和java文件一起打包成apk ...
- Go语言--基础语法笔记
### 换了工作,好久没有添加新文章了,本来是想更新到github上的,想想还是在博客里放着,感觉以前的文章都没有很仔细,都只是问题处理的记录, 以后想新加一些整理的笔记也好 ### 主要内容 2.1 ...
随机推荐
- 网络计划技术——关键路线法(Python)
关键路径法是基于进度网络模型的方法,用网络图表示各项活动之间的相互关系,获得在一定工期.成本.资源约束条件下的最优进度安排.关键路径法源于美国杜邦公司对于项目管理控制成本.减少工期的研究.1959年, ...
- [网络/Linux]CentOS7:OpenSSH升级到7.9p1 | 含: 安装Telnet/OpenSSH【telnet/ssh】
[Q0 OpenSSH/sshd/ssh/scp/sftp,及OpenSSL这些软件组件之间有什么联系吗?] 请跳转咱的另一篇博文,相信阅读完后,你会清楚很多: [网络/SSH]OpenSSH: ss ...
- sql ytd 附python 实现方式
ytd释义 YTD分析属于同比分析类,其特点在于对比汇总值,即从年初第一日值一直至今的值累加.作用在于分析企业中长期的经营绩效. 做法 假定: 有一张销量明细表 date 仓库 sku 销量 2020 ...
- 【前端基础】(二)promise异步编排
☆promise异步编排 javascript众所周知只能支持单线程,因此各种网络请求必须异步发送,导致可能会出现很多问题,比如如下我们有三个文件,现在要求进行如下请求: ① 查出当前用户信息 ② 根 ...
- Go语言核心知识回顾(接口、Context、协程)
温故而知新 接口 接口是一种共享边界,计算机系统的各个独立组件可以在这个共享边界上交换信息,在面向对象的编程语言,接口指的是相互独立的两个对象之间的交流方式,接口有如下好处: 隐藏细节: 对对象进行必 ...
- Network Science:巴拉巴西网络科学阅读笔记2 第一章图论
第一章:图论 完全图又被称为团. Metcalfe's Law: Metcalfe's law states that the value of a telecommunications networ ...
- Function-advanced
函数进阶 1. 函数防抖 在频率触发的情况下 只有等待一定的时间才会触发 执行一次代码 特点 执行之前先清除之前的即将执行操作 保证只有最后一次生效 优化高频执行JS代码操作 提高性能 防抖代码实现 ...
- RTSP Server(LIVE555)源码分析(四)-SETUP信令
主要分析RTSPServer::RTSPClientSession针对客户端SETUP事件处理 一. SETUP信令,handleCmd_SETUP源码解析 1)步骤1.03,parseTranspo ...
- [Pytorch框架]3.2 MNIST数据集手写数字识别
文章目录 3.2 MNIST数据集手写数字识别 3.2.1 数据集介绍 3.2.2 手写数字识别 3.2 MNIST数据集手写数字识别 import torch import torch.nn as ...
- 深入理解前端字节二进制知识以及相关API
当前,前端对二进制数据有许多的API可以使用,这丰富了前端对文件数据的处理能力,有了这些能力,就能够对图片等文件的数据进行各种处理. 本文将着重介绍一些前端二进制数据处理相关的API知识,如Blob. ...