C++之C语言基础知识

article/2024/7/17 3:50:48

目录

一 C语言介绍

二 算法

三 数据类型

运算符与表达式

常用数据输入/输出函数

选择结构程序设计

条件运算符

Switch语句:

while语句:

Do..while语句

For循环语句

转移语句


一 C语言介绍

程序语言的发展历程: 机器语言、汇编语言、高级语言

C语言的特点:高效、灵活、功能丰富、表达力强、移植性好;

示例程序:


#include<stdio.h>  //包含头文件int main()  //主函数入口{printf("hello  C  \n");   //使用C函数printf("梦想还是要有的,万一实现了呢?");   //使用C函数return 0;  //程序返回0}完成的C程序:#define _CRT_SECURE_NO_WARNINGS  //这一句是为了清除使用scanf函数的警告,否则无法使用scanf()函数#include<stdio.h>  //包含头文件#define Height 10 //定义常量int calculate(int Long, int Width); //用户自定义函数calculateint main()  //主函数入口{int m_Long=0;//长度int m_Width=0;//宽度int result=0;//表示体积printf("长方形的高度为:%d\n",Height);   //使用C函数printf("请输入长度:\n");   //使用C函数int a=scanf("%d", &m_Long); //输入长方形的长度printf("请输入宽度:\n");   //使用C函数int b=scanf("%d", &m_Width); //输入长方形的长度result = calculate(m_Long, m_Width);printf("长方形的体积是 : %d ", result);return 0;  //程序返回0}//计算体积函数int calculate(int Long, int Width) {int result = Long * Width * Height;return result;}

二 算法

开发一个程序通常要解决算法、数据结构、程序设计方法、语言工具、环境4个问题,其中的算法是核心,主要解决 “做什么” 和 “如何做”的问题。

算法是为解决某一特定类型问题而制定的一个实现过程,具有如下特性:

有穷性:执行的步骤、时间必须是有穷的,不能无限地执行下去;

确定性:每一个步骤定义明确,不能有二义性;

可行性:算法可执行,并且能够得到正确的结果;

输入: 应该有零个或多个输入;

输出:应该有一个或多个输出;

算法优劣批判标准:

正确性:对任何合法的输入,均会得到正确的结果;

可读性:算法容易被理解,便于扩展和阅读;

健壮性:当输入非法时能够进行拦截,确保程序不会瘫痪;

时间复杂度与空间复杂度:算法执行的时间长短与占用的内存空间大小;

算法的描述方法:

  1. 自然语言: 人们常用的自然语言;
  2. 流程图:主要是用流程图符号来表达逻辑的一种图画形式;程序常用有三种基本结构:顺序结构、选择结构、循环结构。任何复杂的算法均可以使用这三种结构画出和表达;
  3. N-S流程图:将全部算法写在一个矩形框内;

三 数据类型

编程规范:

1,代码缩进:代码使用tab键缩进对其,便于阅读,且看起来美观;

2,命名规范:常量名全部大写,成员变量以m_开头,普通变量首字母大写且以类型的首字母开头,指针变量在名称前加p然后名称首字母大写,函数名的每个单词首字母大写。

3,注释:尽量采用行注释

关键字:

Auto

Break

Case

Char

Const

Continue

Default

Do

Double

Else

Enum

Extern

Float

For

Goto

White

Int

Long

Register

Union

Short

Signed

Sizeof

Static

Struct

Switch

Typedef

Return

Unsigned

Void

Volatile

If

标识符命名规则:

  1. 标识符必须以字母或下划线开头;
  2. 除开头外的其他字符可以由字母、下划线、数字组成;
  3. C语言区分大小写;
  4. 标识符不能是关键字;
  5. 标识符应体现一定的功能含义,便于理解;
  6. 标识符可以是任意长度,但外部名必须保证仅前6个字符就能唯一地进行区分。

数据类型:

  1. 基本类型:整型(短、基本、长整形)、字符型、实型(单、双精度型)、枚举类型;
  2. 构造类型:通过添加、设计、组合,形成新的数据类型;
  3. 指针类型:主要用于表示内存地址;
  4. 空类型:用void表示,用于对函数的返回值类型进行限定;

常量:

  1. 整型常量: 有十进制、八进制、十六进制三种表示方式;
  2. 实型常量:也称为浮点型常量,表示实型的方式有小数和指数两种;

    double sum = 12.22222;  //小数表示法double sum2 = 1.23e5;   //指数表示法
  1. 字符型常量:主要指字符常量和字符串常量,字符使用符号 ‘ ’ 包围起来,字符串使用“” 包裹起来;
  2. 转义字符:

 \n  ---回车换行

 \t  ----横向跳至下一制表位置

\v----竖向跳格

\b---退格

\r ---回车

\f----走纸换页

\\ ---反斜杠“\”

\’ ----单引号

\a---鸣铃

\ddd---1~3位八进制数所代表的字符

\xhh---1~2位十六进制数所代表的字符

  1. 符号常量: 主要是指使用 #define 定义的符号常量,如 #define PI 3.14

变量:

变量就是在程序运行过程中可以变化的量。变量的定义格式为:变量类型 变量名=初始值 ;

  1. 变量类型修饰符分类:

类型

关键字

类型

关键字

有符号基本整型

int

无符号短整型

Unsigned short

无符号基本整型

Unsigned

有符号长整型

Long

有符号短整型

short

无符号长整型

Unsigned long

单精度类型

Float

双精度类型

Double

长双精度类型

Long double

字符型

Char

变量的存储类型:

  1. 自动变量 auto:变量存储在内存的动态存储区,变量一般默认使用auto,如 auto int a=20;

每次执行到该变量定义语句时,都会产生一个新的变量,并且重新对其初始化;

  1. 静态变量 static:存储在内存的静态存储区,static修饰的变量在第一次执行初始化完毕后,在随后的执行中将一直是第一次使用的值;

  1. 寄存器变量 register:申请把变量放在寄存器中,但是实际不一定会有作用。

  1. 外部变量 extern:外部存储变量,就是说当前要使用的变量是存储在外部的。

文件A代码:

#include<stdio.h>int iExtern = 12;文件B代码并访问外部变量:#include<stdio.h>  int main(){extern int iExtern;printf("%d", iExtern);return 0;}

混合运算:

不同类型数据之间在进行运算前,需要转换为同一种类型,转换的规律如下:

Char、short---》int--->unsigned---》long、float---》double

如下示例:

  

  char c = 'a';float f = 2.3f;long s = 123222;double sum = c + f + s;printf("%d\n", sum);

运算符与表达式

运算符分类:

  1. 赋值运算符:=
  2. 算数运算符:+ ,-, * , / , % ,+, - (后面两个代表正、负,前面两个代表加减),++,--
  3. 关系运算符:>,   >=,   <,   <=,  ==,   !=
  4. 逻辑运算符:&&(逻辑与),  ||(逻辑或) ,!(逻辑非)
  5. 位逻辑运算符:<< ,>>,&, ^, |
  6. 逗号运算符: ,(逗号用于将多个表达式分隔开)
  7. 复合赋值运算符:+= ,-=, *= , /= , % =,

表达式:由操作符和操作数组成,表达式可出现在赋值语句的右侧或函数的参数中。

#include<stdio.h>  #define PI 3.1415int main(){extern int iExtern;int b = 20;int c = 0;printf("%d\n", iExtern + b);c = b + 22;printf("%d\n", c);printf("%d\n", iExtern);printf("%d\n", b);printf("%d\n", c);getchar();return 0;}自动类型转换:低字节类型向高字节类型转换系统会自动完成,但是会损失精度,如小数点截断等。float f = 12.4f;int a = f; //会截断小数部分,只取整数部分强制类型转换:不同变量类型之间的强制转换,由开发人员自行决定。float d = 12.45;int c = (int)d; //强制转换为int型自增与自减运算在变量前后位置的区别:int c = 123;c++; //先使用变量c的值,然后在自增1++c; //先自增变量c的值,然后载使用变量

常用数据输入/输出函数

输入函数有:

  1. 字符数据输入 getchar();
  2. 字符串数据输入 gets
  3. 格式化数据输入 scanf

输出函数有:

  1. 字符数据输出 putchar()
  2. 字符串数据输出 puts()
  3. 格式化数据输出 printf()


   

 //字符输出函数putchar('q'); //输出一个字符,也可以填入转义码char c = getchar();//输入一个字符,并用变量获取putchar(c);//输出一个字符,这里直接使用字符变量c作为参数输入puts("打印一段字符串"); //在屏幕上面打印一段字符串//字符串输入函数char ch[20];//用于保存输入的字符串gets(ch); //原来的gets函数已弃用,这个函数在vs中使用不了puts(ch);//输出数据char c = 'a';int a = 0;//格式输出函数printf("%c",c); // %c 代表需要转换为char型输出, c为需要转义的char变量,若有多个变量转义则需要转义的字符的位置和变量的位置一一对应。//格式输入函数scanf("%d",&a); //两个参数含义为: 转义类型 和 参数地址,当有多个转义及地址时也需要一一对应;printf("%d", a);//把输入的额变量值输出

选择结构程序设计

if语句:

格式为 if(表达式){  条件为true时的执行逻辑  }

if (5>4){printf("大于....");}

If else 语句:

格式为 if (表达式) {条件为true时执行代码 } else{条件为false时执行代码 }

if (5>4){printf("大于....");}else{printf("小于.....");}

Else if语句:

语法为 if (表达式) { }  else if(表达式){ } ..... else{ }

if (5>4){printf("大于....");}else if (4>3){printf("大于.....");}else{printf("小于.....");}

条件运算符

语法为: 表达式1 ? 表达式2 : 表达式3

int a = 2000332;int b = 7833 * 12;int c = a > b ? 1 : 0;if (c==1){printf("a大于b");}else{printf("a小于b");}

Switch语句:

语法 :

switch(表达式) {

Case 情景1 :

语句块

Break;

......

}

int a = 2000332;int b = 7833 * 12;switch (a>b){case true:printf("大于");break;case false:printf("小于");break;}

while语句:

语法: while(表达式){ 语句块(循环体) }

int i = 0;while (i<10){printf("%d \n", i);i++;}死循环:while表达式的值永远为true的时候,那么while将无限循环下去。

Do..while语句

语法为 do{ 执行语句 }while(  条件表达式 );

int i = 0;do{printf("%d \n", i);i++;} while (i < 10);

For循环语句

语法为 for(循环变量初值;循环条件;循环变量改变){ 循环体 }

for (int i = 0; i < 10; i++){printf("%d \n",i);}For循环的其他几种写法:int i = 0for (; i < 10; i++) //预先定义初始变量,直接省略不写{printf("%d \n",i);}for (int i = 0; ; i++) //省略第二个判断表达示不写,程序陷入死循环{printf("%d \n",i);}for (int i = 0;i < 10 ; ) //省略第三个判断表达示不写,把自增表达式写在循环体里面{printf("%d \n",i);i++;}Int i,j;for ( i = 0,j=0; i < 10; i++,j++) //在表达式1和3处可以用逗号分割写多个表达式{printf("%d \n",i);}

循环可以嵌套使用,上述三种类型的循环可以任意嵌套使用。

转移语句

转移语句包括goto语句、break语句、continue语句;

Goto语句为无条件语句,可以使程序跳转到函数内部的任意一条可以执行语句处。同时也可以用于跳出循环或跳入循环。

int main(){int a = 14;//跳转到标签的代码处goto print;printf("a的值为:%d", a);//定义要跳转的标签名称print:printf("hello");return 0;}

Break语句: 用于终止当前循环,然后继续执行后面的代码。

int main(){int a = 0;for (a = 0; a < 10; a++){if (a==5){break; //如果条件满足,便结束当前循环}}printf("hello");return 0;}

Continue语句:结束本次循环剩余未执行的代码,继续下一次循环,


http://www.ngui.cc/article/show-1200658.html

相关文章

AI狂飙突进,存力需作先锋

5月30日&#xff0c;在2023中关村论坛成果发布会上&#xff0c;《北京市加快建设具有全球影响力的人工智能创新策源地实施方案&#xff08;2023-2025年&#xff09;》正式发布。《实施方案》要求&#xff0c;支持创新主体重点突破分布式高效深度学习框架、大模型新型基础架构等…

day46-动态规划8-单词拆分问题

139.单词拆分-完全背包问题区分求组合数和排列数 本题可以使用回溯算法进行暴力搜索&#xff0c;但是如何使用动态规划的思路进行求解呢。将字符串可以理解成一个容器&#xff0c;将单词可以当成物品&#xff0c;那么此时问题转化成利用物品能否装满容器的问题。这个时候由于返…

淘宝监控竞品sku数据接口

电商竞品数据监控查询可以通过以下几个步骤实现&#xff1a; 确定需要监控的竞品&#xff1a;首先需要明确自己店铺的产品定位和竞争对手&#xff0c;选择需要监控的竞品。 选择监控工具&#xff1a;根据需求和预算选择适合自己的电商竞品数据监控工具&#xff0c;例如谷歌分析…

archive log list :报错的解决办法

装好oracle数据库之后&#xff0c; 没事在练习sql语句&#xff0c; 看看一些基本的字典表啊啥的 但是当我执行 archive log list这个的时候居然给我报错&#xff0c; 这句话的意思是&#xff1a; 查看数据库的备份和恢复策略&#xff0c;并确定归档文件的具体位置&#xff…

Arthas-Class/Classloader相关命令使用

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 开头&#xff1a; 我们先说下生产使用频率较高的有哪些&#xff1a;dump、jad、mc、retransfo…

Django框架:优缺点、实用场景及与Flask、FastAPI的对比

Django是一个使用Python语言编写的高级Web框架&#xff0c;它提供了快速开发、可重用和可维护的Web应用程序所需的一切组件。在本文中&#xff0c;我们将探讨Django的get和post请求、优缺点、实用场景以及与Flask、FastAPI的对比。 Django的get和post请求 在Django中&#xff0…

leetcode95--不同的二叉搜索树 II(java)

不同的二叉搜索树 II leetcode95 -- 不同的二叉搜索树 II题目描述 解题思路代码演示二叉树专题 leetcode95 – 不同的二叉搜索树 II 原题链接: https://leetcode.cn/problems/unique-binary-search-trees-ii/ 题目描述 给你一个整数 n &#xff0c;请你生成并返回所有由 n 个节…

1036 Boys vs Girls(38行代码)

分数 25 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 This time you are asked to tell the difference between the lowest grade of all the male students and the highest grade of all the female students. Input Specification: Each input file contai…

Task 异步编程教程

系列文章目录 Task 异步编程教程 系列文章目录前言常见的用法&#xff1a; Task 异步编程教程目录1. 异步编程基础1.1 异步操作的概念和优势1.2 使用 async 和 await 关键字定义异步方法1.3 异步方法的返回类型和特点 2. Task 类的基础2.1 Task 类的构造方法和静态方法2.2 Task…

Linux :: 【基础指令篇 :: 文件内容操作:(4)】:: head / tail 指令 :: 指定查看文件的部分内容 | 查看前 n 行内容

前言&#xff1a;本篇是 Linux 基本操作篇章的内容&#xff01; 笔者使用的环境是基于腾讯云服务器&#xff1a;CentOS 7.6 64bit。 学习集&#xff1a; C 入门到入土&#xff01;&#xff01;&#xff01;学习合集Linux 从命令到网络再到内核&#xff01;学习合集 注&#xff…