C语言基础知识

文章目录

    • 基本数据类型
    • 浮点数比较
    • 常用math函数
    • 循环结构
    • 数组
    • 结构体
    • 字符串

基本数据类型

整型int
一个整数占用32位(bit),即4字节(Byte),取值范围 -231~(231-1) 即绝对值109以内整数。
长整型long long
一个整数占用64位(bit),即8字节(Byte),取值范围 -263~(263-1) 即绝对值1018以内整数;
当赋予大于231-1的初值时,初值后应加上LL。
浮点型float double
单精度和双精度浮点数分别占用32,64bit;但前者有效精度只有6 ~7位,后者有15 ~16位。
字符型
小写字母ASCII码比大写字母大32。
布尔型
整型常量在赋值给布尔型时会自动转换为true(非零)或false(零);但在计算机中true储存为1,false储存为0。
const常量

const int INF=(1<<30)-1;

浮点数比较

const double eps=1e-8;
const double Pi=acos(-1.0);

#define Equ(a,b) (fabs((a)-(b))<(eps)) 
#define More(a,b) (((a)-(b))>(eps))
#define Less(a,b) (((a)-(b))<(-eps))
#define MoreEqu(a,b) (((a)-(b))>(-eps))
#define LessEqu(a,b) (((a)-(b))<(eps))

常用math函数

fabs(double x)
对double型变量取绝对值
floor(double x) 和 ceil(double x)
对double型变量向下和向上取整
pow(double r,double p)
rp
sqrt(double x)
double型变量算术平方根
log(double x)
double型变量以自然数为底的对数
sin(double x) cos(double x) tan(double x)
正弦,余弦和正切值,参数要求为弧度制

	double db=sin(pi*45/180);
	printf("%f",db);

0.707107

round(double x)
将double型变量四舍五入,返回值也是double型,需进行取整

	double db=round(3.49);	
	printf("%d\n%d\n",(int)db);

3


循环结构

break用于跳出循环,continue用于结束当前循环,直接进入下一轮循环


数组

若将整个数组都赋初值0:

//直接用一个大括号表示 
	int arr[10]={};
//将数组的第一个元素赋值为0 
	int arr[10]={0};

memset()
memset(数组名,值,sizeof(数组名))
memset是按照字节赋值,因此对于int型整数其4个字节会赋同样的值,一般赋值0或-1

#include
#include 
int main(){
	int arr[5];
	memset(arr,0,sizeof(arr));
	for(int i=0;i<5;i++){
		printf("%d ",arr[i]);
	}
} 

0 0 0 0 0


结构体

对于一个普通定义的结构体,其内部生成一个不可见的默认构造函数,因此可以不经初始化就定义结构体类型的变量。

struct stuInfo{
	int id;
	char gender;
	//默认生成的构造函数 
	stuInfo(){
	}
};

但是当结构体内变量很多时赋值比较复杂,因此可以重新定义构造函数。

struct stuInfo{
	int id;
	char gender;
	//其中_id _gender也可以是其他不与id gender相同的变量名 
	stuInfo(int _id,char _gender){
		id=_id;
		gender=_gender;
	}
};

或者可以简化为一行

struct stuInfo{
	int id;
	char gender;
	stuInfo(int _id,char _gender):id(_id),gender(_gender){
	} 
};

重新定义构造函数后,可以在需要时直接对结构体变量进行赋值

stuInfo stu=stuInfo(1203,'M');

但是重新定义构造函数后,由于默认生成的构造函数被覆盖,不能不经初始化就定义结构体变量。可以将其手动加上,只要参数个数和类型不完全相同,就可以定义任意多个构造函数以适应不同的初始化需要。

struct stuInfo{
	int id;
	char gender;
	//用以不初始化就定义结构体变量 
	stuInfo(){
	}
	//只初始化gender 
	stuInfo(char _gender):gender(_gender){
	}
	//同时初始化id和gender 
	stuInfo(int _id,char _gender):id(_id),gender(_gender){
	} 
};

字符串

scanf() printf()
scanf()中,%c格式能够识别空格换行并将其输出;%s通过空格换行来识别一个字符串的结束
getchar() putchar()
输入输出单个字节
gets() puts()
gets()用来输入一行字符串,识别换行符作为结束,并将其储存在一维数组中;
在使用scanf()后,若使用gets(),需先用getchar()接受换行符。
puts()用来输出一行字符串,即将一维数组在界面上输出,并跟一个换行

#include
int main(){
	char str[10];
	gets(str);
	puts(str);
	return 0;
}

sscanf() sprintf()

	sscanf(str,"%d",&n);

将数组str中的内容以%d的格式写入n中

	sprintf(str,"%d",n);

将n中的内容以%d的格式写入str中
cin() cout()
要读入一整行,需使用getline()函数

	char str[100];
	cin.getline(str,100);

若为string容器,则用如下方式输入

	string str;
	getline(cin,str);

string.h头文件

#include
#include
int main(){
	char str1[10]="abc";
	char str2[10]="xyz";
	printf("%d\n",strlen(str1));
	if(strcmp(str1,str2)>0)
		printf("str1>str2\n");
	else if(strcmp(str1,str2)<0)
		printf("str1);
	else
		printf("str1=str2\n");
	strcpy(str1,str2);
	puts(str1);
	strcat(str1,str2);
	puts(str1);
	return 0;
}

3
str1 xyz
xyzxyz

你可能感兴趣的:(算法笔记,算法笔记)