iOS战记 ----C语言基础语法之战(一)
一个机械设计者的转行之战。先跟大家分享一个小笑话,是关于什么年龄适合学习IT的一个问题。
问:我今年15了,学习编程是不是太晚了?
答:晚了,拟打娘胎里出来第一声哭的不是“hello world!”的时候,你就已经输在起跑线上了。
当你一直在纠结这个的时候,送你一句话:
优柔寡断,是人生最大的负能量。人生没什么好优柔的。从生命角度去看,你人生路径上的任何一种选择都是错误的,无论你怎么选,都有差错;因此,当选择来临,A和B,拿一个便走就是。人生没有对错,只有选择后的坚持,不后悔,走下去,就是对的。我最喜欢的一句诗就是:走着走着,花就开了。
下面言归正传。
作为一个大白(零基础)来说,学习C语言中就应该先记住C语言的语法,这是最基础的,在翻看以前的笔记时我发现一些初学者(就我而言)在C语言往往犯的错都是一些基本的语法错误,而一些复杂的算法逻辑错误却很少,所以我就针对我以前所犯的错误和积累的简单经验跟大家分享一下,作者能力有限,有错误之处欢迎大家批评指正。
1、先说一下一个微软的面试题。
scanf("%c %c",&a,&b);
注意:输入语句中的%c和%c之间有个空格,输入的时char类型,该怎么输入呢?
答案是:若a = 10;b = 5;输入10 5
⭐️注意⭐️:10和5之间一定要空格,因为要与scanf语句里面的输入一一对应,空格属于一个字符!
如果输入的时int类型的,则不必在意。
2、scanf语句中有个小点需要注意(苹果本的可以忽略),在控制台输入数值的时候一般外设键盘的最右边的 Enter键是不会执行的,需要中间的大Enter键才行。
3、随机数的选取,其中要注意一点就是会出现一个均匀随机和不均匀随机的问题。例如从30-70里面随机取值要比从10-20里面取值的概率要大。unsigned int random = arc4random()%(70-30+1)+30;
4、对第三题里的unsigned我做一下解释,int整型占四个字节,能表示从-2的32次方到+2的32次方,而unsigned int只能表示0到+2的32次方,是无符号的整型。所以上面的随机变量random的类型就是unsigned int。
5、braeak 和continue在循环体里面的区别,再以后需要重复输入的时候有用。(例如模拟ATM机取钱,如果密码错误需要重新输入)<span style="font-size:18px;"> int i = 1; while (i < 50) { i ++; if (i % 4 == 0) { continue;//跳出本次循环 }if (i % 10 == 4) { break;//直接跳出循环 } printf("%d ",i); }</span>
6、冒泡排序:是一个双循环。一句话记住-----⭐️for for if for⭐️
附加:循环是为数组而生的!不管是C语言中的for,还是Object-C中的for in,都是为了帮助数组实现功能的。
//i是控制趟数 j控制次数
int array[10] = {};
for (int i = 0; i < 10; i ++) {
array[i] = arc4random()%(40 - 20 + 1) + 20;
printf("%d \n ",array[i]);//取20-40内的随机数。
}
for (int i = 0; i < 10 -1 ; i ++) {
for (int j = 0; i < 10 - 1 - i; j ++) {
if (array[j] > array[j + 1]) {
int temp = 0;
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
for (int i = 0; i < 10 -1 ; i ++) {
printf("%d",array[i]);
7、有人会感觉上面的代码怎么有两个变量” i “?我当时也很纳闷,这里牵扯到一个作用域的问题,两个” i “的作用域是不同的,并且小作用域的优先级(执行力)较高。
8、定义两个浮点型(float类型)的变量a和b,但是不能进行判定是否相等,即(a == b),这是不准确的,程序也会报错。
附加:a%(4.0);是非法的表达式,取模运算两边必须都要为整数。
PS:一位全栈大神说过一句经典的话我很佩服,送给大家:
什么时候你的大脑还没记住而你的手指已经把代码敲出来的时候,你也就快成大神了!!!
今天到此为止,附赠一句:基础不牢,地动山摇。