BUAA程设第一周上机总结
判断相等
在C语言中,判断两个数是否相等应当使用双等号==
,而不是等号=
。
有些时候,当我们在判断条件中写 =
并不会报错,这很可能导致在Dbug的时候一直看不到错误的地方,导致做无用功。
解决这个问题的根本方法是把写 ==
刻进DNA里(雾)。
此外还有一种可以使用的方法:比如我们想比较
a
a
a 和
1
1
1 的大小,我们可以写成这样:if(1 == a)
这样写的好处是,如果我们将 ==
错误写成了 =
,即写成了 if(1 = a)
那么编译器将会在这个地方报错。(因为1
是不可修改的左值)
此外,使用 !=
判断不等,使用 x >= 1 && x <= 10
而不是 1 <= x <= 10
来判断范围。
最后不要把赋值的 =
写成判断相等的 ==
。(x
char型变量的判断
c h a r char char 型变量可以视作范围是 0 − 127 0 - 127 0−127 的整型变量,这意味我们可以对其进行加减操作。如果我们想得知一个字符的ASCII码,我们可以用单引号将其括起来。
if(c == 'A')//判断char型变量是否是大写字母A
关于判断表达式的一些拓展
实际上诸如 i f , w h i l e , f o r if,while,for if,while,for 等语句对判断条件进行测试时,实质上测试的是括号中表达式的值是否为 0 0 0。
在C语言中, 0 0 0 的值代表假;所有非 0 0 0 的值都代表真。
举例而言,==
对左右数字的判断会返回一个值,如果左右两数相等,则返回值为
1
1
1,否则为
0
0
0。
同理,<
、>
、<=
、>=
对左右数字的判断也会返回一个值,如果表达式成立则返回
1
1
1,否则返回
0
0
0。
这也是未来同学们可能读到类似下面的代码:while(T--)
,这就是将变量
T
T
T 直接用作
w
h
i
l
e
while
while 语句的测试条件,当
T
T
T 的值为
0
0
0 的时候自动退出循环。
此外在这部分还可能会犯的错诸如
while(T--); //多打了一个分号!这个while毫无意义!
{
//code
}
就需要同学们编写代码时细心检查了。
顺便讲一下赋值式的返回值。诸如 a = 1
这样的赋值表达式,它的返回值就是你赋给左侧的值。即 a = 1
的返回值是
1
1
1 ,这个特性使得连续赋值可能成立,如 a = b = 1
。这也是为什么将赋值表达式写在判断条件里不会报错,因为它确实是正确的返回了一个值的(虽然返回的值往往不合心意)。
同学们对于这些内容如果读不懂,可以先不管,以后慢慢理解就好。
判断条件中的与和或
在判断条件中,如果想表达当两个条件同时成立时才判断成立,可以使用 &&
,如果想表达两个条件有任一条件成立就判断成立,可以使用 ||
。
使用例:
if(a == 1 && b == 1){ //当a和b同时为1时条件成立
printf("a and b are 1");
}
else if(a == 1 || b == 1){ / 当a或b有一个为1时条件就成立
printf("a is 1 or b is 1");
}
关于全局变量
遇到了几个同学问我变量为什么可以定义在 m a i n main main 函数外,和定义在 m a i n main main 内有什么区别。这个问题如果太具体的解释会有点超纲,等以后同学们学的东西更多的时候再详细解释。
现在同学们只需要知道以下几点:
- 定义在 m a i n main main 函数外的变量叫做全局变量,而定义在 m a i n main main 函数(包括其他自己写的函数)内部的变量叫做局部变量。
- 全局变量在定义的时候如果没有赋初值则会被自动初始化为 0 0 0 ,而局部变量则没有这一行为。
- 在全局变量开的数组可以开得更大一些。(局部变量数组不要超过 1 e 6 1e6 1e6 ,全局变量数组不要超过 1 e 8 1e8 1e8 )
- 若是定义了一个全局变量,那么在剩余部分的代码不要有任何变量与这个全局变量重名。
- 在任何一处修改全局变量,都会造成这个全局变量值的改变。(这句话等同学们学到函数就明白是什么意思了)
现阶段,局部变量完全可以满足做题的需求,因此目前同学们开局部变量就可以了。
赋初值问题
在使用局部变量的时候要确保它是有一个值的,不要使用未初始化的局部变量参与任何运算。
赋值的手段包括:
- 在定义时直接赋值,如
int a = 1;
,就在定义变量 a a a 的时候将初值赋为 1 1 1 。 - 使用输入函数赋值,如
scanf("%d", &a);
,这样变量 a a a 也会被成功赋值。
如果使用任何未被赋值的变量,都将导致未知的错误。将变量赋初值是一个良好的习惯,希望同学们能培养这个习惯。
代码风格
在同学们学习代码时,希望能从初学开始就逐渐培养良好的码风。
首先是多写注释。在将来特别是写一些大体量的代码时,注释的存在是十分重要的。
C语言的注释写法:
单行注释:
//这是一个单行注释
多行注释:
/*
这是一个多行注释
*/
注释的存在不仅是为了方便别人读懂自己的代码,也可以减轻自己给自己 D b u g Dbug Dbug 时候的痛苦。有时自己写的代码,过了几天回头来读就读不懂了,而如果代码有注释的话就会让自己更容易读懂之前的代码,减少工作量。
其次是空格问题。在代码中合理使用空格会增强代码可读性。
一般而言,在一行中使用 ,
后会跟一个空格,双目运算符如 + - * /
等,运算符左右都要加空格。与之相同的还有 = == || &&
等。
然后是代码的缩进。这个就不解释了,直接看对比:
//不缩进,无空格
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d",&a,&b);
c=a+b;
printf("%d",c);
return 0;
}
//有缩进,有空格
int main(){
int a, b, c;
scanf("%d", &a, &b);
c = a + b;
printf("%d", c);
return 0;
}
怎么样,对比是不是就出来了呢?
(大括号换不换行都可以,这个目前完全是看个人习惯)
最后是变量命名问题。变量命名应尽可能做到让人一读便懂。
这个问题在规模较小的程序里尚不明显。同学们在未来写大规模的代码时可能要同时使用数十个变量,如果全都按照 a 、 b 、 c 、 x 、 y a、 b、 c、 x、 y a、b、c、x、y 的风格命名,那代码的可读性将大大降低,甚至无人能懂。
C语言变量命名规则有许多,同学们可以自行了解,选择自己喜欢的方式,但无论哪种方式都应做到让自己定义的变量含义易懂。这真的很重要!!!
第一周的总结拓展就先到这里,同学们要继续努力呀!