代码编织梦想


目录)

第一章 前言

C语言的诞生是现代程序语言革命的起点,是程序设计语言发展史中的一个里程碑。——Dennis M Ritchie(C语言之父)

1.1 计算机的基础知识

常用的数制:
在这里插入图片描述
数据在内存中的储存
1、内存
内存是由一系列电子线路单元组成,每个电子线路单元有两种稳定状态,分别是二进制的0或1,称之为位,位是组成内存的最小单元。
(1)内存中的数据单元
①字节(Byte)。一个字节由8个连续二进制组成,每个二进制都有一个编号,其编号顺序按位自右向左为0~7,也可称为第0位、第1位·····第7位、第8位。字节是数据储存的最小单元,
②字(Word)。连续的两个字节称为字。连续的两个字又称为双字。连续的两个双字称为4字。如下图所示:
在这里插入图片描述
③字长。中央处理器在单位时间内一次处理的二进制数的位数叫字长。
数据在内存中的存储:
数据在内存中的存储形式称为机器码,机器码所表示的实际值称为真值。

第二章 C语言基础

2.1 标识符

标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。
标识符的命名规则如下:
❑ 标识符由字母(包括大写字母和小写字母)、数字及下画线组成,且第一个字符必须是字母或者下画线。
❑ 在C语言中,大写字母和小写字母是有区别的,即作为不同的字母来看待,应引起注意。下面是合法的C语言标识符:
year,Day,ATOK,X,_ CWS,HAO
❑而下面的标识符名是不合法的:
#123,.COM,$100,1996Y,1_2_3,Win3.2,LOOP, A=2

2.2 关键字

关键字是指在高级语言中,那些已经定义过的标识符,用户不能再将这些字作为变量名、常量名、函数名、数组名等。
C语言共有32个关键字,具体可分为4类,如下:

数据类型关键字(12个)char、double、enum、float、int、long、short、signed、struct、union、unsigned、void。
控制语句关键字(12个breakcase、continue、default、do、else、for、goto、if、return、switch、while
存储类型关键字(4个)auto、extern、register、static
其他关键字(4个)const、sizeof、typedef、volatile

2.3 常量

常量是指在程序运行过程中其值不随程序的运行而改变的量。常量在程序中不需要进行任何说明就可以直接使用,常量本身就隐含了它的类型。常量分为直接常量和符号常量。

2.3.1 数值常量

数值常量由数字构成的常量。
如100、250、1000这种整数在C语言中叫做整型常量–整数型常量
如1.22、3.142等带有小数点的称为实型常量–实数型常量

2.3.2 字符常量

字符常量即为用字符构成的常量。
也可由两种表现形式:
❑普通字符:26个英文字母如‘a’‘b’,用单引号括起来后都是普通字符,事实上这些字符常量在计算机中是以ascll码表示的,因此可以把它看成变化的数值,如‘a’在计算机中代表的就是97这个数值。
❑转义字符:这是C语言自己定义的字符,是一种控制字符,以字符\开头,如经常使用的‘\n’就代表换行,‘\t’代表空格。

2.3.3 字符串常量

字符常量的集合版本,将多个字符用双引号括起来,就是字符串常量。
❑定义:用双引号(“”)括起来的0个或者多个字符组成的序列
❑存储:每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志
例如下面的是合法的字符串常量:
“hello”,“CHINA”,“a”,"$123.456",“C language programming”,“a\n”,“#123”,“ ”

2.3.4 符号常量

符号常量是在C语言中,可以用一个标识符来表示一个常量,这个标识符称之为符号常量。其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。
1、#define 定义:
符号常量在使用之前必须先定义,其一般形式为:

#define 标识符 
enum EnumName{标识符,标识符,...};

其中#define 也是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。
2、const定义 :
形式为 :

const type name = vcalue;
例如:const int MONTHS = 13

这样就可以在程序中使用MONTHS而不是13了。常量(如MONTHS)被初始化后,其值就被固定了,编译器将不允许再修改该常量的值。

2.4 变量

变量是指在程序运行过程中其值可以改变的量。程序中使用的变量名是用户根据需要而取名的,变量名必须符合标识符的命名规则。

2.4.1 变量的定义

变量必须先定义,后使用。凡未被定义的,不能作为变量名,这就能保证程序中变量名正确使用。变量定义的语法为:

    数据类型  变量名;

请注意区分变量名和变量值这两个概念。变量名实际上是以一个名字代表一个储存地址。
定义变量时需要注意以下几点:
❑ 每个变量定义语句都必须以分号结尾。
❑ 变量定义语句可以出现在变量使用之前的任何位置。程序设计时只要不违背“先定义,后使用”的原则即可。
❑ 变量一经定义,每个变量就有一种确定的类型,在编译时就能为其分配相应的存储单元。
❑ 一个变量在内存中占据一定的存储单元,用变量名来标识在内存中所分配的存储单元,在该存储单元中存放变量的值。

2.4.2 变量的初始化

变量的初始化就是对变量赋初值。
对变量的赋值主要通过使用赋值表达式:

变量名 =;

变量的初始化有两种方法:一种是定义初始化,即定义变量的同时对其赋予初始值。例如:

int x=1;
int y=2;
double z=3.0;

另一种是先定义变量,然后再进行赋值。例如:

int x,y;
double z;
x = 1;y = 1;
z = 3.0;

对于变量的初始化,可以归纳出以下几点:(1)初始化实际上是一个赋值语句。
(2)在定义变量的时候,可以只给部分变量赋值。
(3)如果同时对几个变量赋相同的初值,应该注意书写格式。
(3)如果同时对几个变量赋相同的初值,应该注意书写格式。

在C语言中使用变量时,如果它出现在表达式中,事先必须有一个初始值,否则其值将是一个不确定的值。变量获取初始值有以下几种方法。
❑ 赋值语句:“=”在C语言中是赋值符号,运用赋值符号可以对变量进行赋值。例如:ch=’A’。
❑ 读取语句:有些程序的值是不确定的,需要用户自己输入,因此需要用读取语句从外部的输入。

2.5 常变量

C99允许使用常变量,方法是在定义变量时,前面加一个关键字const
例如:

const int a = 3

定义a为一个整形变量,指定其职位3,而且在变量存在的期间其值不能改变

2.6 标识符

标识符是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。

以下是合法的标识符:

a, x,  x3, BOOK_1, sum5

以下是非法的标识符:

3s        不能以数字开头
s*T       出现非法字符*
-3x       不能以减号(-)开头
bowy-1    出现非法字符减号(-

第三章 C语言数据类型,运算符

第四章 C语言顺序结构

4.1C语句概述 (语句描述了一种行为,是向计算机发出的执行某一操作的指令)

4.1.1表达式语句

表达式后加一个“;”构成表达式语句。
例:

加入存在变量定义:
int  a,b;
以下语句存在意义:
a=3;          //赋值表达式构成语句,赋值变量a
b=a+3;      //赋值表达式构成语句将a+3的结果赋给b
a++;         //自加表达式构成语句,执行后变量a自加
a=3,b=4;   //逗号表达式构成语句,执行后变量a的值为3,b的值为4

4.1.2 流程控制语句

(1)选择结构的控制语句:if双分支选择结构,which多分枝选择结构。
(2)循环结构控制语句:while语句和for语句控制的当型循环结构,do~while控制的直到型循环结构。
(3)控制流程转换语句:又称为跳转语句,包括break,contiune,goto,return语句。

4.1.3 空语句

只有一个分号,用于完善选择结构和循环结构。

4.1.4 复合语句

以花括号“{ }”括起来的功能相对完善的程序段。
例:

#include <stdio.h>
int add(int x, int y)
{
       int t;
       t = x + y;
       return (t);
}
void main()
{
       int a, b, sum;
       scanf("%d%d", &a, &b);
       sum = add(a, b);
       printf("sum=%d\n", sum);
}

4.1.5 函数调用语句

#include <stdio.h>
#include <math.h>          //编译预处理命令,不是C语言
void main()
{
       int x, y;              //变量定义
       scanf_s("%f", &x);     //函数调用语句,调用库函数scanf_s()
       if (x < 0)             //控制选择结构的if的语句
       {
              x = -x;
              y = sqrt(x + 6);   //赋值语句
       }                      //复合语句
       else
              y = 1;
       printf("y=%f", y);      //函数调用语句,调用库函数printf()
}

4.2 常用库函数的使用

4.2.1 库函数的使用

  • 函数调用的一般形式为 函数名(参数表列)

  • 用“函数名”表示调用的是哪个函数。“参数表列”是确定的值构成的表列,是传递给函数的参数,“参数表列”中的参数必须和函数原型中生命的参数的个数和类型保持一致。函数调用后加“;”就构成了函数调用语句。

  • 库函数是放在函数库中的函数,调用函数时必须告诉编译系统该库函数属于哪一个函数库,以便编译器能检查函数是否合法,并有效地执行该函数,这一过程称为声明。

  • 标准库函数声明为:#include<头文件>
    以下为常用标准库函数表
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    例:正弦函数原型为:*double sin(double x)*

#include <stdio.h>
#include <math.h>           //调用包含sin函数在内的头文件math.h
void main()
{
       float x, y;
       x = 1.5;
       y = sin(x);
       printf("%f\n", y);
}

4.2.2 输出函数

4.2.2.1 字符输出函数(putchar)
  • putchar向终端输出单个字符。

一般格式:putcahr(实参)实参可以是cahr数据类型也可以是int数据类型。
例:

#include <stdio.h>
int main()

{
       putchar('a');  //输出变量a中存储的字符
}
#include <stdio.h>
int main()
{
       putchar('\n');   //输出换行字符
}
#include <stdio.h>
int main()
{
       putchar('\101');   //输出字符'A'
}
4.2.2.2 格式输出函数(printf)
  • printf函数调用的一般形式:printf(格式控制,输出列表)

  • "格式控制"是一个字符串,由普通字符、以“%"开头的格式控制字符构成;”输出列表“是需要输出的数据项列表,数据项之间用逗号隔开。

  • 格式控制(用双引号引起来): 格式控制字符、转义字符、普通字符

  • 输出列表:常量、变量、表达式、函数调用。

  • 在这里插入图片描述

  • 在这里插入图片描述

#include <stdio.h>
int main()                                      //用int,而不用void.
{
       int a = -1;                                 //定义常量a
       
       printf("%d,%o,%x,%X,%u", a, a, a, a, a );   //%d以十进制形式输出带符号整数,%o以八进制输出整型数的机器码,%x以十六进制输出整型数的机器码,%X以十六进制输出整型数的机器码(大写),%u无符号十进制输出整型数。

}
//输出结果:-1,177777,ffff,FFFF,65535
#include <stdio.h>
void main()
{
       float a = 123.456;
       printf(" % f, % e", a, a);
}
//输出结果:123.456000,1.23456e+02
#include <stdio.h>
void main()
{
       printf(" % c, % s", 'A', "china");
}
//输出结果:A,china
#include <stdio.h>
void main()
{
       int a, b;
       a = 123, b = 12345;
       printf(" % d, % 4d, % -4d, % #o, % 4d", a, a, a, a, b);
}
//输出结果:123, 123,123 ,0173,12345
void main()
{
       float a = 123.456;
       printf(" % f, % 8f, % 8.2f, % .2f", a, a, a, a);
}
//输出结果:123.456000, 123.456000, 123.46, 123.46

%c控制单个字符输出。
%s控制字符串输出。

4.2.3输入函数

4.2.3.1 字符输入函数
  • getchar由终端向程序中输入一个字符。使用时必须包含stdio.h函数库,预处理命令:#includde <stdio.h>

  • 字符输入函数getcahr( )调用的一般形式:getcahr( )

#include <stdio.h>
int main()
{
       char c1, c2;
       c1 = getchar();
       c2 = getchar();
       putchar(c1);
       putchar(c2);
}
输入ab
执行ab
4.2.3.2 格式输入函数
  • scanf函数调用一般形式:scanf(格式控制,地址表列);

  • 格式控制:格式字符、普通字符

  • 地址表列:取地址运算符:&;变量地址的表示:&a。

在这里插入图片描述
在这里插入图片描述

//这里使用的是vc2019版,scanf不够安全呗,所以vs就弄了个scanf_s出来,不过貌似这个代码只能在vs上编译
#include <stdio.h>
#pragma warning(disable:4996)
int main()
{
       int k;
       float f;
       scanf_s("%3d%*4d%f",&k,&f);
       printf("%d,%f",k,f);
}

4.3 顺序结构程序设计举例

  • 已知三角形的三边边长,求三角形的面积
    area=(a+b+c)/2
#include<stdio.h>
#include<math.h>
void main() 
{
       float a, b, c, s, area;
       scanf_s("%f,%f,%f", &a, &b, &c);
       s = (a + b + c) / 2;
       area = sqrt(s * (s - a) * (s - b) * (s - c));
       printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n", a, b, c, s);
       printf("area=%7.2f\n", area);
}
  • 交换两个变量的值
#include <stdio.h>
void main()
{
       char A, B, t;
       A = 'w';
       B = 'o';
       t = A;
       A = B;
       B = t;
       printf("A=%c,B=%c", A, B);
}
  • 输出一个3位整数的逆序数。比如输入123,输出321。
#include <stdio.h>
int main()
{
       int k, m, a0, a1, a2;
       printf("input:");
       scanf_s("%d", &k);
       a0 = k / 100;
       a1 = (k - 100 * a0) / 10;
       a2 = k % 10;
       m = 100 * a2 + 10 * a1 + a0;
       printf("m=%d\n", m);
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_46166537/article/details/106662841

IEEE754浮点数标准及浮点型和整型之间的转换-爱代码爱编程

“IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number),一些特殊数值((无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发

C语言——IO操作(一)-爱代码爱编程

C语言——IO操作(一) 1 标准IO介绍 I/O: stdio sysio (优先使用标准IO) IO是一切程序实现的基础。 stdio fopen(); fclose(); fgetc(); fputc(); fgets(); fputs(); fread(); fwrite(); scanf(); printf(); fseek(

C语言程序设计:“编辑单词本”功能编写-爱代码爱编程

目录 概述菜单函数“删除单词”子函数效果图菜单栏选择“删除单词”功能删除“happy”单词单词本前后对比后记 概述 在索引文章中我们提到过,编辑单词本功能,包括实现增加、修改、删除、补充单词等功能,因此需要先编写一个菜单子函数,用来进行功能选择,然后再编写对应的子程序,具体代码如下: 菜单函数 void Vocabulary() { i

数据结构】图解KMP模式匹配算法(C语言)-爱代码爱编程

文章目录 介绍KMP模式匹配原理next数组值推导KMP模式匹配算法实现KMP模式匹配改进nextval数值推导测试代码 介绍 KMP算法是有Kunth和Partt共同研究,Morris独立研究发表的模式匹配算法,可以大大避免重复遍历的情况,我们把它称之为克努特-莫里斯-普拉特算法,简称KMP算法。 KMP模式匹配原理 从朴素模式匹配的角

c语言基础——编译器和链接器等-爱代码爱编程

前言 以下这些都是我自己在学习《C Primer Plus》的过程中所记下的一些个人觉得对学习C语言有一些帮助的内容。 1.源代码文件,目标代码文件和可执行文件 源代码文件-包含了我们使用C语言编写的代码,文件名一般是以.c结尾的。 目标代码文件包含的是机器语言代码,是由源代码文件转换而来的。这里的机器语言代码并不能直接运行,因为缺少了启动代码

C语言回文数字-爱代码爱编程

写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。 题目: 题目链接:https://www.dotcpp.com/oj/problem1434.html 题目 1434: [蓝桥杯][历届试题]回文数字 时间限制: 1Sec 内存限制: 128MB