计算机的思维方式:
有一种很抽象的方式来说明解释和编译:(设计算机中存在程序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(先加再赋)。