这篇文章也是一些基础知识,本来准备与上一篇文章一起写的,但是想想还是有点区别的,这个已经走入C语言世界了,所以就另起一文来写咯!
程序=算法+数据结构
算法:指为解决某个特定问题而采取的确定且有限的步骤和方法。
数据结构:数据的类型(int double long 等)数据的组织形式(结构体)。
算法的5个特性:
1.有穷性:一个算法包含的操作步骤应该是有限的
2.确定性:算法中每一条指令必须有确切的含义,不能有二义性,对于相同的输入必须能得到相同的执行结果。
3.可行性:算法中指定的操作,都可以通过已经验证过可以实现的基本运算执行有限次后实现。
4.有零个或多个输入:在计算机上实现的算法是用来处理数据对象的,在大多数情况下这些数据对象需要通过输入来得到。
5.有一个或多个输出:算法的目的是为了求解,这些解只有通过输出才能得到,但是不论是否有解,即使失败,算法最少都会有一个输出。
如何描述一个算法
1.用自然语言描述
2.用程序流程图描述
3.用N-S流程图描述
4.用伪代码描述
5.用计算机语言描述
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语言中表示字符的一种特殊形式,其含义是将反斜杠后面的字符转换成另外的意义,转义字符只能使用小写字母,每个转义字符只能看成一个字符。
字符串常量:字符串常量是一对用双引号括起来的若干字符序列。字符串中字符的个数称为字符的长度,长度为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位只是部分数值有保证。
变量的使用方法:先定义(在内存中分配空间),然后赋值使用。
*内存:正在执行程序的数据 硬盘:长期保存未使用的数据*
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;
}
运行结果为:
下面用具体代码进行演示:
#include<stdio.h>
#define PI 3.141592653
int main(){
//1.整型
//int a = 100;
//int a = 0b1010;//二进制数(0b) 0 1
//int a = 010;//八进制数 (0)
int a = 0xff;//十六进制数
printf("a = %d\n",a);
//2.实型
float b = 12.4;
printf("b = %f\n",b);
float c = 12.4e3;//12.4乘以10的3次方
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的长度(8)
printf("\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;
}
编译运行后的结果: