这里陈述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。
在计算机中存放的时候是根据 小端存放 存放,即高位存放高地址,低位存放低地址。
大端存放 是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端存放 高位存放高地址,低位存放低地址。
取余 % 只取决于被除数的正负;
而取整的正负取决于除数和被除数的正负,有一个是负的输出就是负的。
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的值再就行+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(条件语句){}: 条件语句非真即假,只要为零就是假其余都是真。
将 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);
}
//利用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);
}
}