本文最后更新于:星期日, 四月 26日 2020, 9:57 上午

0 前言

絮叨絮叨,回想一下自上大学至今,已经学习计算机6年了,自己竟然没有很好的掌握住一门语言;隧近期准备重拾C,把学习过程中的笔记分享出来,也方便自己日后查看,下面开始保姆式学习。

代码都是在VS2019中敲的

VS2019下载,安装之前需要安装.NET Framework 4.8,安装没什么特殊要求,正常安装就好了。

1 主函数

#include <stdio.h>
#include <stdlib.h>

//C语言的两种标准主函数

//1.C99标准的主函数,初学
int main(void) 
{

	return 0;

}

//2.标准主函数,涉及到命令行参数时使用
int main(int argc, char *argv[]) 
{

	return 0;

}

//3.C++标准主函数标准形式
int main(void)
{

	return 0;

}

//return 0;程序正常结束

2 头文件

#include <stdio.h> //包含头文件,standard in out标准输入输出
#include <stdlib.h> //standard library标准库
//如何判断函数包含于哪个头文件,可百度也可选中函数右击使用转定义查看,或查看msdn

int main(void)
{
	
	printf("hello word"); //printf函数在头文件stdio.h中
	system("pause"); //system函数在头文件stdlib.h中
	return 0;
}

3 内建函数

内建函数:编译器自带的函数,原本应该包含在头文件中,调用函数时应添加头文件,但是编译器如果内置了,则不加头文件也可直接使用函数,不报错。

//#include <stdio.h>
//#include <stdlib.h>


int main(void)
{

	printf("hello word\nhello word\n"); // \n:转义字符,换行

	system("pause");
	return 0;
}

4 数据类型

/*
基本数据类型:数值类型【整形,浮点型】、字符型
构造类型:数组、结构体、联合、枚举
指针
整形(-2,-1,0,1,2)int,short,long,long long
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	printf("%d\n", 12); //格式化输出符号 %d:转义字符 以十进制整数形式输出参数/数据
	printf("我们的数:%d测试\n", 12);
	printf("12 十进制:%d,\n12八进制:%o,\n 12 十六进制(小写):%x,\n 12 十六进制(大写):%X\n", 12,12,12,12);


	system("pause");
	return 0;
}

5 int类型变量的定义

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
	// 可以直接初始化赋值,也可以先不赋值
	int a = 1234567890, b = 547383934;
	int c;
	c = 10;
	int d;
	//printf("%d\n", d);
	d = a;
	a = b = 10;
	printf("%d,%d", a, c);

	system("pause");
	return 0;
}

6 变量与常量

/*
左值:变量
右值:常量
int表示数的范围(有符号):-2^31——2^31-1(-2147483648——2147483647)
字节是计算机常用的存储单位,但不是最小的,计算机最小的存储单位是位,1字节=8位(8个二进制位)
一个int类型数据占4个字节=32个二进制位
sizeof():得到类型的大小,eg:sizeof(类型:int or float) or sizeof(变量)
*/
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int a = 3; //最大是2147483647,若超出范围则变为负数,相当于是一个圈
	int b, c, d;
	int e, //注释说明变量含义
		f, //注释说明变量含义
		g, //注释说明变量含义
		h; //注释说明变量含义

	printf("%d\n", a);
	printf("%d\n", sizeof(float));


	system("pause");
	return 0;

}

7 无符号整形

/*
无符号整形 unsigned int:0-2^32-1(0-4294967295),用%u转移,占用4个字节
*/


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	unsigned int a = -1; //无符号整形
	printf("%u\n", a);  // %u:无符号十进制整形输出;out:4294967295
					    // %d:有符号十进制整形输出
	unsigned int b = 1;
	printf("%u\n", b); // out:1

	system("pause");
	return 0;
}

8 其他整形

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	short s; //短整形(short int)
	
	s = 12;
	printf("short占用字节数为:%d\n", sizeof(s));	
	//短整形(short)大小为2字节;不同系统大小不同,但是《c和指针》标准规定int型不小于short型,某些系统中int可能大小为2字节;
	//有符号 signed short:-2^15——2^15-1(-32768-32767)
	//无符号 unsigned short:0——2^16-1(0-65535)
	//两种表示个数一样
	printf("s=%hd\n", s);
	//short型输出格式符为%hd,用%d也可


	long l = 13;
	printf("long占用字节数为:%d\n", sizeof(l));
	//long int(长整形),可简写为long
	//占用4字节存储空间,《c和指针》标准中规定long不小于int的长度即可
	//有符号long(signed long)及无符号long(unsigned long)表示范围同int,输出格式符为 %ld 也可用 %d
	printf("s=%ld\n", l);

	long long ll = 15;
	//long long是C99标准中扩展的新类型,VC++6.0中不支持此类型
	//long long占用8字节
	//无符号(unsigned long long int)0——2^64-1
	//有符号(signed long long int)-2^63——2^63-1
	//输出格式符:%lld
	printf("long long占用字节数为:%d\n", sizeof(ll));
	printf("ll=%lld", ll);

	system("pause"); //卡住还可以用getchar(); or while(1);
	return 0;
}

9 变量取地址

/*
C语言的优势就是通过地址可以操作内存空间
单位Bit——Kb——Mb——Gb
取地址符:&
表达式:&a、12+13、a都是表达式,每个表达式都有一个结果
语句:有分号的是语句
*/
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
	int a = 12;
	
	printf("%p\n", &a); //%p就是以地址形式(16进制)输出,通常用16进制输出地址。
	printf("%#p\n", &a);//%#p就是以地址形式输出,加上前缀0x

	system("pause");
	return 0;
}

10 sacnf & 变量的输入

#define _CRT_SECURE_NO_WARNINGS //宏需要加在最前才有效

#include <stdio.h>
#include <stdlib.h>

//#pragma warning(disable:警告码) 可去除相应的警告

int main(void)
{
	int a;
	scanf("%d", &a);


	system("pause");
	return 0;
}
#include <stdio.h>
#include <stdlib.h>


int main(void)
{
	int a = 12;
	printf("前 a=%d\n", a);
	scanf_s("%d", &a);	//一定要加取地址符&,否则会引起异常。
	printf("后 a=%d\n", a);

	int b = 1,
		c = 2;
	printf("前b=%d c=%d\n", b, c);
	//输入前想加入输入提示,可以在前面加个printf()
	scanf_s("%d,%d", &b, &c); //两个%d(转义字符)之间用什么隔开,输入时就用什么隔开(默认为空格)
	printf("后b=%d c=%d\n", b, c);

	system("pause");
	return 0;
}

11 浮点型(float)

/*
精度的定义:第一个非零数到最后一位的个数,并非小数点后位数。

float:
表示数范围:(-3.40282e+038 ~ -1.17549e-038) 0.0 (+1.17549e-038 ~ +3.40282e+038)
标准规定:指数范围不小于-37~38
有效数位:6(标准规定为6)
double:
表示数范围: (-1.79769e+308 ~ -2.22507e-308)  0.0  (+2.22507e-308 ~ +1.79769e+308)
标准规定:指数范围不小于-37~38
有效数位:15(标准规定为10)
long double:同double
有效数位:18(标准规定为10)
*/

# include<stdio.h>
# include<stdlib.h>

int main(void)
{
	float f = 123.45; // %f,占用4个字节,
	double d = 12.123; // %lf,占用8个字节
	long double ld=11.22 ; // %lf,占用内存空间不小于double型,不同编译器不同,但肯定是2的倍数

	printf("%f,%lf,%lf\n", f, d, ld); 
	printf("%e,%e,%e\n", f, d, ld); // 科学计数法表示


	system("pause");
	return 0;
}

0和0.0是不同的

# include<stdio.h>
# include<stdlib.h>

# include<float.h>


int main(void)
{
	printf("%e\n", 0); // out:8.280795e-305
	printf("%e\n", 0.0); // out:0.000000e+00

	printf("%e\n", FLT_MIN); //选中FLT_MIN右击选择转定义,可查看浮点型变量最大最小值

	system("pause");
	return 0;
}

12 浮点型的精度

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
	float f = 2333.345678;
	printf("%f\n", f); //out:2333.345703,float型有效数位为6,经测试本机为7位,只要大于等于标准就可

	double d = 2333.3456789123412345;
	printf("%.20lf\n", d); //out:2333.34567891234109993093,可见有效数位是16位,大于标准规定的10,即可
						   //由于 %f 和 %lf 可输出的小数位数是6个,所以要输出20位小数时要写为 %.20lf

	double d2 = 2333.34;
	printf("%.20lf\n", d2);//out:2333.34000000000014551915,
	
	double d3 = 2333.34;
	printf("%lf\n", d3);//out:2333.340000,6位

	//在vs中,long double和double完全相同。不同编译器不同。

	system("pause");
	return 0;
}
本文作者:Darren
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

本站支持评论邮件提醒功能,在邮箱输入框中留下你的邮箱,这样就能通过邮件收到回复!