学习软件
1,线上编译(重点在了解语法,不在编写程序)
2,本地软件(适合初学者,不大,就几十兆)
Dev C++5.11百度云下载链接
提取码:8783
注:安装步骤直接next就可以。其中,安装时选择语言为English,安装完后选择工具语言可为简体中文。
Error
1,对于C而言,提示的错误并不一定就在本行。
line3少了一个分号,错误显示在line4.将分号换行写在第三行和第四行代码之间,就不会报错。
Difference
1,0和o区别
:因为早期电文报为了区分0和o,将0写成
在C语言中的0延续了电文报中的写法(右侧)。
2,void main()和int main()区别:
①void不需要返回值(return),而后者一定要有返回值(return 0为正常结束,否则为异常)。
②使用void main()虽然程序可以编译运行,但却不利于操作系统判断其状态。
注:有些编译器里漏写了renturn 0,根据C99标准会自动在.exe文件中添加。
3,跳转语句的区别:
break:跳出就近一层循环(接力break:标号+if)
continue:结束本次循环,忽略后面的代码
return:void时无需返回值,通常用于函数末尾
goto:无条件跳出循环
goto 标号(out);
...
标号(out):要执行的句子(return 0);
Knowledge
1,标准的C语言格式:
int main(int argc,char *argv[])
{
return 0;
}
/*初学者:*/
int main(){
return 0;
}
其中,argc:argument count,记录了用户在运行程序的命令行中输入参数个数;
argv:argument variant,指向的数组中至少有一个字符指针,即arg[0]。它通常指向程序中的可执行文件的文件名。
一般都会使用printf(),所以需要调用库函数 <stdio.h>
2,int main()和#include<stdio.h>不能写在同一行
,否则会报错:
3将英文字符误输入成中文字符
,会报错:
4,一个程序本次启动可以,下次就报错了:
数组越界(segmentation fault);指针出错。
Rule
1,变量:
保存数据的地方。
①定义:<类型变量><变量名称>(多个名称用“,”隔开;只能由字母、数字、下划线组成,且数字不在第一位,关键字不用做标识符)。可以在代码任何地方定义变量(C99)。
②赋值:变量=想赋的值。
③初始化:<类型变量><变量名称>=<初始值>(不初始化,会将变量现有地址里所原本具有的值赋给变量)。
所有变量一旦被定义类型,是不能改变的。常量:
2,常量:
固定不变的数。方便理解“莫名其妙”的数字。
const:此变量的值一旦被初始化,就不能再更改。
3,运算符优先级:
举例:①printf("%d", k>i<j);(先算k>i,再看<j)
②(这里保留小数点后一位)
printf("%d\n",10/3.03); →10.0
printf("%d\n",10/33.0); →9.0
4,复合赋值:
a+=4即a=a+4。
5,递增递减运算符:
单目运算符,算子必须是变量。
①a++(后缀形式):先运算再+1;a=a+1,a++是+1以前的值;
②++a(前缀形式):先+1再运算;a=a+1,++a是+1以后的值;
③a–:略
④–a:略
6,if-else条件判断语句:
注:①if ( 1<=n<=2 );(没有意义,但也没有语法错误,执行空语句)
②if判断条件里只有0和1两个值,为真1则执行对应的语句。
③( 1<=n<=2 )和( n>=1&&n<=2 )不等价,前者C语言会把它译成逻辑值,运算不了。
7,while(其他情况)和do-while(必须执行一次时推荐)循环语句:
while先判断再循环;do-while先循环再判断
8,for循环语句(有固定次数时推荐):
for(语句1(init);语句2(condition);语句3(increment){
statement;
}
注:三个分号必须有,三个语句都可为空;
先12,若condition为真,执行statement;否则不执行。再3,再23232…循环。
9,switch-case语句:
switch(控制表达式){
case 常量1:
语句1;break;
case 常量2:
语句2;break;
...
default:
break;
}
常量:常数或常数表达式
break:跳出本轮循环,没有break就会接着执行下一个case
10,运算:
①短路:在计算&&或||时,一旦左边能确定整个表达式,则不会进行右边式子运算。
②条件运算符:a=(a>0)?a-1:a+1;(当a>0时,a=a-1;否则,a=a+1)。
③i=3,5;→3
i=(3,5);→5。
在for中被使用,如:for(i=0,j=10;i<j;i++,j–)…
④pow(float x, float y) :x的y 次幂
注:pow函数效率很低。
11,数组
①定义数组:如int a[2];下标从0开始,a[2]是不存在的。
注:数组一旦创建,不能改变大小,下标从0开始计数;在内存中连续存储。
More
1,注释的处理:
①对于注释/**/的替换:语句中的注释会被转换成一个空格,其它位置的注释会被忽视掉
#include <stdio.h>
int/**/main(){
printf("Hello World");
return 0;
}
正常运行;大小 127.931640625 KiB(和之前不加注释一样大小)同理去证明。
②预处理器仅通过检查注释的结束符来检测注释中的字符,因此,不能嵌套块注释(/**/)。然而,可以使用/和/注释包含单行注释(//)的源代码:
/* 暂时注释掉这两行:
in a=2; // 定义a是一个常量
b = a+2; // 计算b值
暂时注释到此 */
如果想要注释掉包含块注释的部分程序,可以使用条件预处理命令:
#if 0
in a=2; /* 定义a是一个常量*/
b = a+2; /* 计算b值*/
#endif
2,字母的表示
①大写字母:x>=‘A’&&x<=‘Z’。
②(ASCII码,26个字母)A:65;a:97。
3,随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
srand(time(0));
int a=rand();
printf("%d\n",a);
return 0;
}
注:x%n:[0,n-1]的一个整数。