C语言认识(一)

C语言认识(一)

  • C语言认识
    • 基础书籍
    • 类型介绍
    • 进制
      • 源码,反码,补码
      • 取余 % 和 取整 /
    • a++和++a
    • if语句
    • 练习
      • 猜数字
      • 判断闰年
      • 判断x年x月x日是当年的第几天

C语言认识

这里陈述c语言的入门笔记

基础书籍

在目前学习中,可以从基础书籍入手。
操作系统:计算机的心智操作系统之哲学原理
计算机网络:谢希仁版的计算机网络
微机原理:清华大学出版的微机原理
数据结构

类型介绍

C语言属于强类型语言,需要对变量先定义在赋值,一旦变量的类型确定那么变量的类型将不在改变。
(1byte = 8bit;)
char, 占1个字节
short, 占2个字节
int;, 占4个字节
long, 占4个字节
long int, 占4个字节
long long, 占8个字节
float, 占4个字节
double, 占8个字节
long doubl, 占8个字节
bool, 占1个字节
int a = 10;
short b =12;
a = b;
a = (int)b;这里b的类型不变,变得是数值的类型。

进制

在这里介绍: 2进制 8进制 10进制 16进制
10进制 (119) =>> ( 01110111 ) 2进制
=>> ( 167 ) 8进制
=>> ( 77 ) 16进制

源码,反码,补码

在电脑的存储中,数据是按照补码形式存储的。
char a = 5;
a = 5 // 0000 0101 =>>5; 整数的源码、反码、补码都是一样的。
char b = -5;
b = -5 // 1000 0101 =>> -5 源码
// 1111 1010 =>> 反码
// 1111 1011 =>> 补码 // 0xfb 存放
在数据进行运算的时候必然会有数据的扩充或者截断。
扩充的时候有符号的类型,如果符号位是 0 则全扩展为 0
如果符号位是 1 则全扩充为 1
扩充的时候无符号的类型全扩展为 0
在计算机中存放的时候是根据 小端存放 存放,即高位存放高地址,低位存放低地址。

大端存放 是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端存放 高位存放高地址,低位存放低地址。
C语言认识(一)_第1张图片

取余 % 和 取整 /

取余 % 只取决于被除数的正负;
而取整的正负取决于除数和被除数的正负,有一个是负的输出就是负的。

5%3=5-(5/3)*3=5-3=2
5%(-3)=5-(5/(-3))3=5-(-1)(-3)=2
-5%3=-5-(-5/3)*3=-5-(-1)*3=-2

	//取整
	int a = 5;
	int b = 3;
	printf(" 5 / 3 = %d \n", a / b);
	//1
	a = -5;
	b = 3;
	printf(" -5 / 3 = %d \n", a / b);
	//-1
	a = -5;
	b = -3;
	printf(" -5 / -3 = %d \n", a / b);
	//1
	a = 5;
	b = -3;
	printf(" 5 / -3 = %d \n", a / b);
	//-1
	//取余
	a = 5;
	b = 3;
	printf(" 5 % 3 = %d \n", a % b);
	//2
	a = -5;
	b = 3;
	printf(" -5 % 3 = %d \n", a % b);
	//-2
	a = -5;
	b = -3;
	printf(" -5 % -3 = %d \n", a % b);
	//-2
	a = 5;
	b = -3;
	printf(" 5 % -3 = %d \n", a % b);
	//2

a++和++a

a++ 是先取a的值再就行+1赋值给a ;
++a 是先对a+1再把运算后的结果取出来。

        int a = 5;
	int b = 3;
	++a = b;
	printf("a= %d",a);
	//a= 3
	a++ = b;
	//编译错误

a++ = b;产生编译错误,因为先将a取出来放在临时空间内,当b赋值的时候是将b的值给了临时空间,由于临时空间只读不可取,所以产生编译错误。

if语句

if(条件语句){}: 条件语句非真即假,只要为零就是假其余都是真。
将 a b c 按从大到小排列

	int a = 5;
	int b = 3;
	int c = 7;
	int d = 0;
	if (a > b)
	{
		d = a;
		a = b;
		b = d;
	}
	if (b > c) 
	{
		d = b;
		b = c;
		c = d;
	}
	if (a > b)
	{
		d = a;
		a = b;
		b = d;
	}
	printf("a,b,c %d %d %d", a, b, c);
	//a,b,c 3 5 7

在不引入第三个变量的时候进行两个值的交换。

        //不引入第三个变量
	int a = 5;
	int b = 3;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("a,b,c %d,%d", a, b);
	//a,b 3 5

练习

猜数字

	int rand_num = 0;//随机数
	int input_num = 0;
	int count = 0;
	bool _continue = true;
	srand(time(NULL));
	rand_num = rand() % 100;
	printf("num = %d", rand_num);

	while (_continue)
	{
		printf("\n请输入数字: ");
		scanf_s("%d", &input_num);
		count += 1;
		printf("\n");
		if (input_num == rand_num) {
			printf("你真棒! %d 次就猜出来了", count);
			_continue = false;
		}
		if (input_num > rand_num) {
			printf("猜大了哦!");
		}
		if (input_num < rand_num) {
			printf("猜小了哦!");
		}
	}

判断闰年

	int Input = 0;
	printf("请输入年份: ");
	scanf_s("%d", &Input);
	if(Input % 4 == 0 && Input % 100 != 0  || Input %400 ==0)
	{
		printf("您所查询的年份%d是闰年 ",Input);
	}
	else {
		printf("您所查询的年份%d是平年 ", Input);
	}

判断x年x月x日是当年的第几天

	//利用switch语句
	int year = 0;
	int month = 0;
	int day = 0;
	int allday = 0;
	bool leap = false;
	printf("请输入年月日:");
	scanf_s("%d %d %d", &year, &month, &day);
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
	{
		leap = true;
	}
	else {
		leap = false;
	}
	switch (month )
	{
	case 1:
		allday = day;
		break;
	case 2:
		allday = 31 + day;
		break;
	case 3:
		allday = 31 + 29 + day;
		break;
	case 4:
		allday = 31 * 2 + 29 + day;
		break;
	case 5:
		allday = 31 * 2 + 29 + 30 + day;
		break;
	case 6:
		allday = 31 * 3 + 29 + 30 + day;
		break;
	case 7:
		allday = 31 * 3 + 29 + 30 * 2 + day;
		break;
	case 8:
		allday = 31 * 4 + 29 + 30 * 2 + day;
		break;
	case 9:
		allday = 31 * 5 + 29 + 30 * 2 + day;
		break;
	case 10:
		allday = 31 * 5 + 29 + 30 * 3 + day;
		break;
	case 11:
		allday = 31 * 6 + 29 + 30 * 3 + day;
		break;
	case 12:
		allday = 31 * 6 + 29 + 30 * 4 + day;
		break;
	default:
		break;
	}
	if (leap)
	{
		printf("%d年%d月%d日,是当年的第%d天.", year, month, day, allday);
	}
	else {
		if (month > 2)
		{
			allday -= 1;
			printf("%d年%d月%d日,是当年的第%d天.", year, month, day, allday);
		}
	}

        //利用if语句和for循环语句
        int year = 0;
	int month = 0;
	int day = 0;
	int sum = 0;
	bool leap = false;
	printf("请输入年月日:");
	scanf_s("%d %d %d", &year, &month, &day);
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
	{
		leap = true;
	}
	else {
		leap = false;
	}
	for (int i = 0; i < month; i++) {
		if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
		{
			sum += 31;
		}
		if (i == 4 || i == 6 || i == 9 || i == 10)
		{
			sum += 30;
		}
		if (i == 2) 
		{
			if (leap) {
				sum += 29;
			}
			else {
				sum += 28;
			}
		}
	}
	if (leap)
	{
		printf("%d年%d月%d日,是当年的第%d天.", year, month, day, sum);
	}
	else {
		if (month > 2)
		{
			sum -= 1;
			printf("%d年%d月%d日,是当年的第%d天.", year, month, day, sum);
		}
	}

你可能感兴趣的:(C语言学习部分知识点)