C语言学习笔记0

---摘要:C语言学习个人向记录---

学习目的

第一篇笔记记一下学习目的

BIMer成天和软件打交道,一定会发现软件的限制

这种时候应该将软件工作托付专业人士

奈何并没有这么简单

建筑行业工具软件市场没有那么发达

BIM作为一个大泡沫行业尚处于混沌状态

二次开发这种建筑工程设计与软件工程灰色地带的行当就自然出现

为什么说是行当,故意的,因为这甚至不能当做一个正经行业

软件工程本身不挣钱,懂得都懂

建筑设计本身也不值钱,懂得也都懂

二次开发叠了两个头秃行业的buff。。。

20210301205942

本身又没有靠谱的商业模式(橄榄山老板是个零几年就搞Revit二次开发的大神,可是有多少公司会为橄榄山付费呢)

可以说比较尴尬

然而很多时候尚处于行业开拓期的人们就是要自己想办法

没有那么多银弹,或者突然冒出来KILLER级别的东西给你用

好的铁匠会给自己打把好锤子

迪士尼的动画实验室是世界顶级的图形学实验室

华为会给自家手机设计旗舰芯片

国产替代这两年基本上从概念走向商业价值

大家还是不能只看见人家吃肉,对吧

学习思路

还是把应用部分放到C#上

C语言看一遍就溜

不做详尽笔记,脑图这些,网上到处都是

零散记下收获,有机会再整理

2021/3/1

分支

getchar()/putchar()

不需要转换说明,stdio.h头文件中

while((ch=getchar())!=\n’){

something;

}

读取每个字符并操作,直到空格

  • 新的库

#include<ctype.h>

isalpha() // 如果是一个字符,返回一个非零值

tolower() 大写改小写

  • isal系列

isalnum/isalpha/isblank/iscntrl/isdigit/isgraph/islower/isprint/ispunct/isspace/isupper/isxdigit

字母或数字/字母/标准空白(空格、水平制表符、换行)/ctrl+/数字/除空格之外的任何可打印字符/小写/可打印字符/标点符号/空白/大写/十六进制数字

  • if else的匹配问题

    1
    2
    3
    4
    5
    if()
    if()
    sth;
    else
    sth;

    没有花括号,if会和最近的else匹配,缩进被忽略了

  • 标记(flag)

举了一个算因数的例子

我来抄一下代码,半抄半写吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//divisors.c  --使用嵌套算约数
#include<stdio.h>
#include<stdbool.h>
int main(void)
{
unsigned long num; //待判断的素数
bool isPrime;
unsigned long i; //可能的约数
printf("输整数,输别的退出");
while((scanf("%lu",&num))==1)
{
for(i=2,isPrime=true;(i*i)<=num;i++)
{
if(i*i==num)
{
printf("唯一约数%lu",i);
isPrime=false;
}
else if(num%i==0)
{
printf("俩约数%lu,%lu",i,num/i);
isPrime=false;
}
}
if(isPrime)
{
printf("好家伙,素数");
}
}
printf("bye");
return 0;
}

这里面的isPrime就是一个flag

放在for的第一个分号前保证刷新

  • 逻辑运算

&& || !

记住优先级,非>与>或

序列点,副作用兑现,顺序

1
if(num!=0&&12/num==2)

这样的写法在其它语言可能会有问题,有可能会算后面的式子报错

1
while(x++<y||x+y>20)

这样的递增也会在逻辑运算符前兑现

  • 选择运算符(?:)

挺有意思一简写

1
2
回答=今天有30度吗?好热:还行;
x=(y<0)?-y:y;
  • continue

用来跳过本次循环剩余的部分

1
2
3
4
5
6
7
8
9
if(A){
continue;
}
someting;
//好像省了一个else
//但是简单的判断逻辑,可以对条件取反
if(!A){
sometin;
}

while :下一个行为是测试进入循环

for :下一个行为是更新

1
2
3
4
5
6
for(count=0;count<10;count++){
ch=getchar();
if(ch=='\n')
continue;
putchar(ch);
}

上面这个会执行多少次呢

每有一个continue,都会先count++,然后判断

while就容易跳过++

  • 多重选择

用switch和break,更方便

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch(A){
case 1:satement 1;
break;
case 2:statement 2;
break;
default:statement 3;
break;
//可以合并标签
switch(A){
case 1:
case 2:statement 1;
break;
default:statement 2;
break;
}