C语言学习日记1:22-2-23

103 阅读3分钟

计算机的思维方式:

有一种很抽象的方式来说明解释编译:(设计算机中存在程序A,程序员写的为程序B) 解释:B存在一个文件里交给A,A能读懂B,并将其逐条运行,下次运行B仍要交给A。 编译:B交给A,A将B转化成计算机能读懂的程序B*,B*直接在计算机中运行。 语言本身没有这种区分,是人为习惯性选择方式执行,如今两种方式已无太大区别。

编译-->运行

C语言需要编译才能运行,需要: 编译器、编译器 两者合一为:IDE(集成开发环境)

基本运算

一些运算、赋值的区别,今天才搞透彻。例如:

#include <stdio.h>
int main()
{
	printf("%d\n");
	printf("%d\n",3+6);
	printf("3+6=%d\n",3+6);
	printf("1+2=%d\n",3+6);
	return 0;
}

在这里插入图片描述 由此可见得字符串中%d赋值的规律。 其中%d涉及“赋值与初始化”问题,在后续变量问题中也一样。

常量与变量

变量同样需要初始化,也可用const确定变量值(使其只读)。

整数与浮点数

众所周知,整数之间运算结果只能为整数。

#include <stdio.h>
int main()
{
	printf("%d",10/3*3);
	return 0;
}

10/3=3,3*3=9。 在这里插入图片描述

此时若把10换成10.0(浮点数),结果如何:

#include <stdio.h>
int main()
{
	printf("%d",10.0/3);
	return 0;
}

在这里插入图片描述

结果没有意义,原因是%d是整型变量值,无法计算浮点数10.0,此时应改成%f,结果便为3.3333...,再*3可恢复成10.0。 浮点本身的意义为:小数点的浮动,整数小数点固定在个位后。 若一条语句同时出现浮点数和整数,则C语言会把整数转化为浮点数。

表达式

在一个表达式中,除了加减乘除等算符,其余用于计算的元素都是算子。 有一个计算时间差的例子:输入两个时间(小时和分钟),计算之间的差值并再以小时和分钟的形式表达出来。 这个时候就不能简单的相减(可能出现一个时间的小时和分钟一大一小的情况),所以要综合利用到许多算符。

//计算时间差
#include <stdio.h>
int main()
{
	int hour1,hour2,minute1,minute2;
	scanf("%d:%d",&hour1,&minute1);
	scanf("%d:%d",&hour2,&minute2);
	int t1,t2;
	t1=hour1*60+minute1;
	t2=hour2*60+minute2;
	printf("%d:%d",(t2-t1)/60,(t2-t1)%60);
	return 0;
 } 

例如输入1:40与3:30 在这里插入图片描述

可以精准地得到相差1小时50分钟。

通过变量问题学习调试

将a与b两个变量赋值,再通过设置中间变量交换双方值。

//交换变量 
#include <stdio.h>
int main()
{
	int a=5,b=6;
	int t;
	t=b;//t=6
	b=a;//b=5
	a=t;//a=6
	printf("a=%d,b=%d",a,b);
	return 0;
 } 

在此过程中,通过调试可以得到每一步的转换过程(DevC++为例) 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

a++与++a

对于两者区别的理解,有多种方法,例子是如下: 在这里插入图片描述

由此可见为:拆分成每一步看其值的思想,但同样也可以用调试,且代码更简单粗暴的方法:

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

更正:以上不对。还是应该用例子中的办法,把每一个过程中的自增前后的a给区分开来,而不是像我这样单纯的一步步调试,显示的还是自增后的结果。。。刚开始甚至print部分就是一个a,现在换成print结果还是一样,所以应该把a++也给print出来,就像:

a=10;
a++;
b=a++;
//以及
a=10;
++a;
b=++a;

与这样的思想是一样的,得出的结果易知:a++是a自增前的值,b应该与a一样(先赋再加);++a是a自增后的值,b应该是a+1(先加再赋)。