C语言基础知识

2023-11-08

基本数据类型

整型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<iostream>
#include<string.h> 
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<stdio.h>
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<stdio.h>
#include<string.h>
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<str2\n");
	else
		printf("str1=str2\n");
	strcpy(str1,str2);
	puts(str1);
	strcat(str1,str2);
	puts(str1);
	return 0;
}

3
str1<str2
xyz
xyzxyz

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言基础知识 的相关文章

  • 排序算法总结(长期更新)

    1 最基础的排序算法 1 冒泡排序 思想 每次使用交换的方式将剩余元素中较大的元素放到一端 直到剩余元素为0的时候排序结束 include
  • 静态链表

    代码来源 晴神 算法笔记 静态链表问题通用解题模板 定义静态链表 struct Node typename data int next XXX node size 使用静态链表时 结构体类型名和结构体变量名不要相同 初始化 XXX初始化为正
  • 二叉树专题

    二叉树专题 二叉树的存储与基本操作 二叉树的遍历 先序遍历 中序遍历 后序遍历 层次遍历 利用先序遍历和中序遍历构造二叉树 二叉树的静态实现 一般的树 存储 新建结点 遍历 代码来源 晴神 算法笔记 二叉树的存储与基本操作 定义 struc
  • sprintf实例

    include
  • 数论中的欧拉函数

    在数论中 对于一正整数 n n n 欧拉函数 n varphi n n 定义为
  • 字符串处理专题

    codeup习题 文章目录 codeup习题 Problem A 字符串连接 Problem B 首字母大写 Problem C 字符串的查找删除 Problem D 单词替换 Problem E 字符串去特定字符 Problem F 数组
  • 算法笔记-图搜索

    统计图的连通分支数 思路 建图 搜索 注意这种建图方式是有向图 反例 1 2 3 4 4 1这种不会识别出来 因此建图时需要使用有向图 在add阶段加入两个方向的路径 add时从1开始的边的标号 0用来判断结束 斗则冲突有问题 int to
  • 0027算法笔记——【回溯法】回溯法与装载问题

    1 回溯法 1 描述 回溯法是一种选优搜索法 按选优条件向前搜索 以达到目标 但当探索到某一步时 发现原先选择并不优或达不到目标 就退回一步重新选择 这种走不通就退回再走的技术为回溯法 2 原理 回溯法在问题的解空间树中 按深度优先策略 从
  • 解密 QQ 号-队列-c语言

    问题描述 分析 每次从最前面拿两个 第 1 个扔掉 第 2 个 放到尾部 需要一个数组来存储这一串数即 int q 101 并初始化这个数组即 int q 101 0 6 3 1 7 5 8 9 2 4 head 用来记录队列的队首 即第一
  • PAT题库代码(个人版本)~~持续更新,持续改进!

    引言 之前在网上看到浙江大学的题目系统PAT 想要刷一刷玩 目前是乙级题库 题目不多 持续更新 努力 话不多说 上代码 题目以及运行效果这里就不给出了 与PAT网站上的相同 1002 写出这个数 include
  • leetcode——探索字节跳动系列题目

    今天登陆leetcode发现探索区多了字节跳动的专栏 特意用了一下午去刷 有些是之前刷过的 但题目不错 就当是复习一遍吧 这里记录一下我会的以及自己觉得不错的题目 原题链接请点击题目 一 挑战字符串 3 无重复字符的最长子串 分析 这题要求
  • 一些常见数学问题的算法

    代码来源 晴神 算法笔记 一 最大公约数 int gcd int a int b if b 0 return a else return gcd b a b 二 最小公倍数 lcm a b ab d ab有可能溢出 因此更恰当的写法是a d
  • 求出最大连续子序列和 暴力算法、分治法、动态规划、贪心算法实现;Leecode 51.最大子序和

    求出最大连续子序列和 问题描述 给定一个整数数组 a 找到一个具有最大和的连续子数组 子数组最少包含一个元素 返回其最大和 这个问题也可转入Leecode 51 最大子序和 来源 力扣 LeetCode 示例 输入 2 1 3 4 1 2
  • PAT1023 组个最小数给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小例如:给定两个0两个1三个5一个8得到的数字就是10015558

    1023 组个最小数 20 分 给定数字 0 9 各若干个 你可以以任意顺序排列这些数字 但必须全部使用 目标是使得最后得到的数尽可能小 注意 0 不能做首位 例如 给定两个 0 两个 1 三个 5 一个 8 我们得到的最小的数就是 100
  • 有一个含n(n」2)个整数的数组a,判断其中是否存在出现次数超过所有元素一半的元素

    一 问题描述 有一个含n n gt 2 个整数的数组a 判断其中是否存在出现次数超过所有元素一半的元素 二 问题分析与解答 分析 可以先将数组a中的元素递增排序 再求出出现次数最多的次数maxnum 最后判断是否满足条件 代码实现 incl
  • C语言基础知识

    文章目录 基本数据类型 浮点数比较 常用math函数 循环结构 数组 结构体 字符串 基本数据类型 整型int 一个整数占用32位 bit 即4字节 Byte 取值范围 231 231 1 即绝对值109以内整数 长整型long long
  • 算法➡数学问题

    文章目录 进制转换 最大公约数与最小公倍数 最大公约数 素数 判断素数 素数表的获取 质因子分解 大数运算 大数乘法 几何问题 由三点的坐标求所构成的三角形的面积 判断点是否在三角形内 集合问题 子集问题 数学归纳法 回溯法 全排列 进制转
  • 《算法导论》选择问题(找第K大的数)

    选择问题 Selection Problem 即在n个元素的集合中寻找第K小的元素的问题 第K小的元素又叫第K个顺序统计量 有以下几种变体 找最大值和最小值 同时找最大和最小值 找中位数 第n 2小 找任意第K小的元素 找Top K的元素
  • 设计一个算法判断表达式中的括号是否匹配

    一 问题描述 设计一个算法判断表达式中的括号是否匹配 二 问题解答 解析 这里需要用到STL在算法设计中的应用 STL在算法设计中的应用有如下几种 存放主数据 存放临时数据 检测数据元素的唯一性 数据的排序 优先队列作为堆 因此这里需要用上
  • 剑指offer-解决面试题的思路

    大家好 我是Nefelibat 在博客上记录算法笔记 是因为想push自己每天坚持刷几道算法题 同时也希望能把自己总结到的经验分享给大家 希望大家阅读愉快 目录 在写代码之前明确自己做的事情是什么 该怎么做 画图让抽象问题形象化 题目 二叉

随机推荐