C语言算法及常量变量相关知识【C语言学习笔记】

C/C++
234
0
0
2022-11-28

这篇文章也是一些基础知识,本来准备与上一篇文章一起写的,但是想想还是有点区别的,这个已经走入C语言世界了,所以就另起一文来写咯!

算法相关知识

程序=算法+数据结构

算法:指为解决某个特定问题而采取的确定且有限的步骤和方法。

数据结构:数据的类型(int double long 等)数据的组织形式(结构体)。

算法的5个特性:

1.有穷性:一个算法包含的操作步骤应该是有限的

2.确定性:算法中每一条指令必须有确切的含义,不能有二义性,对于相同的输入必须能得到相同的执行结果。

3.可行性:算法中指定的操作,都可以通过已经验证过可以实现的基本运算执行有限次后实现。

4.有零个或多个输入:在计算机上实现的算法是用来处理数据对象的,在大多数情况下这些数据对象需要通过输入来得到。

5.有一个或多个输出:算法的目的是为了求解,这些解只有通过输出才能得到,但是不论是否有解,即使失败,算法最少都会有一个输出。

如何描述一个算法

1.用自然语言描述

img

2.用程序流程图描述

img

3.用N-S流程图描述

img

4.用伪代码描述

img

5.用计算机语言描述

img

C语言的三种基本结构

1.顺序结构

2.选择结构(if和switch)

3.循环结构(while和for)

数据相关知识

数据的表现形式:常量和变量

常量:整型常量、实型常量、字符常量、字符串常量、符号常量

变量:整型变量、浮点型变量

五个常量:

整型常量(int):整数常量是指直接实用的整形常数,又称整形常数或者整数,例如,1,-9等。

例:100 200 0b1010 0104 0xff

实型常量:实型常量又称浮点型,由整数和小数部分组成,其中用十进制的小数点隔开。

例:12.4 12.4e3 12.4e-3 12.4+3

字符常量(char):字符常量分为一般字符常量和特殊字符常量,使用单撇号括起一个字符的形式即字符常量,字符常量是区分大小写的,且只能包括一个字符,不能是字符串。

例:‘a’ '\n' '\101\' '\x41'

这里需要了解一下转义字符:特殊字符常量就是转义字符,转义字符是C语言中表示字符的一种特殊形式,其含义是将反斜杠后面的字符转换成另外的意义,转义字符只能使用小写字母,每个转义字符只能看成一个字符。

img

字符串常量:字符串常量是一对用双引号括起来的若干字符序列。字符串中字符的个数称为字符的长度,长度为0的字符串称为空串。

例:”hello“ "aaa\"t\n\b”

符号常量:在C语言中,通常将程序中的常量定义为一个标识符,这个常量就叫做符号常量。在使用符号常量之前必须先进行定义,大多数情况下,符号常量用大写英文字母表示。

例:#define 其中 #:符号常量名 define常量值

变量相关

整型变量:整型变量表示的是整数类型的数据,在C语言中,整型变量的值可以是十进制,八进制,十六进制,但在内存中存储着是二进制数。(关于进制数的转换方法请参考:https://www.php.cn/faq/417579.html)整型变量只能存储整型数据,不能类型的变量类型存储数值的范围不同,整型变量的存储类型主要有:短整型short,基本整型int,长整型long等;

实型变量(float、double):C语言中浮点型变量指的就是实数变量(存放可以带小数的数据的变量),并且实型变量分为两类:单精度型(float)和双精度型(double)。

float:通常占用4个字节(32位)存储空间,其数值范围为-3.4E38~3.4E38,单精度浮点数最多有7位十进制有效数字,单精度浮点数的指数用“E”或“e”表示。如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。

double:通常占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。双精度完全保证的有效数字是15位,16位只是部分数值有保证。

C语言中变量遵循“先定义后使用”的原则

变量的使用方法:先定义(在内存中分配空间),然后赋值使用。

*内存:正在执行程序的数据 硬盘:长期保存未使用的数据*

1.先定义变量的格式:数据类型 变量名 例:int i;double price

数据类型:表示想要存储什么类型的数据就定义什么类型的变量。

变量名:就是你想给这个变量起个什么名字,通常都是用字母、数字与下划线组合而成。

2.变量定义完了之后接下来就是使用变量,为变量赋值。

赋值:将一个值放到一个变量中,这个动作叫“赋值”。通俗点讲,“给变量赋值”意思就是将一个值传给一个变量。

赋值的格式:变量名 = 要赋的值。 (从右往左赋值 )例:int a = 5

C语言里若没给变量赋初值,变量的值一定是未知的。

#include<stdio.h>
int main(){
//    int a,b,c;
//    a = b = c = 10;
//int a = b = c = 10;错误 
    int a,b,c=10;  //正确 
    int a=10,b=10,c=100//正确 
    printf("a = %d\n",a);// 
    printf("b = %d\n",b);
    printf("c = %d\n",c);
    return 0;
}

算术运算符:+(加号)-(减号)*(乘号) /(除号)%(求余数)+(正号)-(负号)

自增运算符:++

自减运算符:--

++和--的优先级高于算术运算符

#include<stdio.h>
int main(){
    int a  =10;
    int b;
//    b = a++;//1.++   2.赋值 
//    //1. 先将a的值赋值给b
//    //2.再将a的值+1  
    //a++:先使用a的值,然后再将a的值加1。  
    //++a:先将a的值加1,再使用a的值。 
    b = ++a; 
    printf("a = %d\n",a);
    printf("b = %d\n",b); 
    return 0;
} 

)

复合赋值运算符:+= -= *= /= %=

#include<stdio.h>
int main(){
    int a =30;
    //a+=3;则a = a + 3 
    //a-=3;则a = a -3; 
    //a*=3;则a = a *3; 
    //a/=3;则a = a/3; 
    //a%=3;则= a%3; 
    printf("a = %d\n",a);
    return 0;
} 

不同类型数据间的混合运算

(1)+、-、*、/、运算符两侧中有一个为float或double型,结果都为double型数据。

(2)如果 int型与float型数据进行运算,会先把int型和和float型数据转换为double型,然后再进行运算,结果是double型

(3)字符(char)型数据与整形数据进行运算,就是把字符型数据的ASCLL代码与整形数据进行运算。如:12+'A'等效于12+65结果为77,字符型数据与实型数据进行运算,则会将字符型的ASCLL代码转换为double型数据然后再进行运算。

赋值过程中的类型转换

1.将浮点型数据赋值给整型变量时,直接舍弃小数部分。

2.将整型数据赋值给浮点型时,数值不变,以指数形式存储到浮点型变量中。

3.将一个double型数据赋值给float变量时,截取其前面7位有效数字,放到float变量的存储单元中,要注意数值范围不要溢出。

4.字符型数据赋值给整型变量,直接将字符的ASCII码赋值给整型变量。

强制类型转换

强制类型转换的格式为: (type_name) expression type_name为新类型名称,expression为表达式。

#include <stdio.h>
int main(){
    int sum = 103;  //总数 
    int count = 7;  //数目 
    double average;  //平均数
    average = (double) sum / count;
    printf("Average is %lf!\n", average);
    return 0;
}

运行结果为:

img

C语言中printf用法:常用输出控制符

img

下面用具体代码进行演示:

#include<stdio.h>
#define PI 3.141592653
int main(){
    //1.整型
    //int a = 100;
    //int a = 0b1010;//二进制数(0b) 0 1
    //int a = 010;//八进制数 (0int a = 0xff;//十六进制数 
    printf("a = %d\n",a);
    //2.实型
    float b = 12.4;
    printf("b = %f\n",b);
    float c = 12.4e3;//12.4乘以103次方 
    printf("c = %f\n",c);
    float d = 12.4e-3;
    printf("d = %f\n",d);
    //3.字符(ascii)常量----单引号中表达的是一个种含义 
    char e = 'a'; //'ab' 
    printf("e = %c\n",e);
    char f = '\n';//换行  \---》转意(义)\n 
    printf("f = %c\n",f);//\t-->tab的长度(8printf("\a"); //发出警告 
    printf("\\");
    char g = '\101';//八进制数 --65A  97a 
    printf("g = %c\n",g);
    char h = '\x41';//十六 65 
    printf("h = %c\n",h);
    //4.字符串常量
    char i[] = "hello";
    printf("i = %s\n",i);//"a"  'a'
    //5.符号常量
    printf("area =  %f\n",PI*4*4);
    return 0;
} 

编译运行后的结果:

img