1. C语言书写规范:
关键字是C语言中具有特殊意义的单词,全部小写
一行内尽量放置一条语言,超长的语句可以放在多行内
在合适的地方使用空格提高可读性
被同一个大括号包含的语句要左对齐,被不同大括号包含的语句要用缩进区分开
联系不紧密的语句之间可以使用空行隔开
标识符尽量用英文写,多个单词可以采用驼峰方式或下划线方式进行区分
C语言常用编译工具:
GNU Compiler Collection(gcc)
MinGW(Windows系统下的gcc工具)
2. C语言程序的开发步骤:
使用vi/vim编写C语言源程序,编写完成后保存退出
使用gcc 对源程序进行处理得到计算机认识的可执行文件
使用命令./a.out(默认文件)执行得到的文件
以#开头的语句叫做预处理指令,#include预处理指令用于把其他文件的内容加入到当前文件中。
可以用<>或""包括被加入的文件名
<>表示文件应该从系统中规定好的位置寻找
""表示文件应该从源文件当前所在目录开始找起
C语言程序中可以加入文字内容帮助理解程序的工作过程,这些文字内容叫做注释。注释分两种,一种是单行注释,由//开头一直到行尾,另一种是多行注释,由/*开头到*/为止。
#include
#include "01demo.h"
/*
* 多行注释
* 文件名称: 01demo.c
* 文件作者: xkzhai
* 单位: njust
* 编写时间: 2019/08/18
* 版本: 1.0
*
*/
int main(){
int variable = 3; // 变量初始化
// variable = 3; // 变量赋值语句
int price = 20;
price * variable; //单行注释: 单张电影票价格是20,一共3张
printf("总票价为:%d\n",price * variable);// 总票价为:60
printf("%d * %d = %d \n",price,variable,price*variable);// 20 * 3 = 60
return 0;
}
其中stdio.h是绝大数C语言程序都需要包含的文件, 01demo.h是一个头文件示例:
int main();
3. GCC
3.1 GCC的处理过程:
预编译:这个阶段用来处理所有的预处理指令
编译:对预处理后的代码进行翻译工作,得到计算机能够认识的格式,编译工作得到的结果文件叫做目标文件,扩展名是.o
链接:把所有的目标文件和其他必要的文件合并在一起得到最终的可执行文件
3.2 GCC的常用选项:
-o 用于指定最终生成的可执行文件的名字
gcc -o 01demo 01demo.c
-E 只对源文件进行预处理
-c 只对源文件进行预处理以及编译工作,生成目标文件
-std=c89/-std=c99 用来指定编译所遵循的C语言标准,缺省按照C89标准
4. 变量与printf
4.1 变量
变量是C语言程序中用来记录数据的唯一方式,变量中记录的数字随时可以被改变;
02test.c
/*
* 计算 1 * 4, 2 * 4, 3 * 4, 4 * 4
* */
int main(){
int number1 = 1, number2 = 4;
number1 * number2;
number1 = number1 + 1;
number1 * number2;
number1 = number1 + 1;
number1 * number2;
number1 = number1 + 1;
number1 * number2;
return 0;
}
一个变量只能记录某一种特定类型的数据(强类型语言的特征),变量必须声明后才可以使用;
可以使用=(赋值操作符)给变量赋值,也可以把变量直接当成数字使用
03swap.c
/*
* 交换两个变量中数字的练习
*
* */
int main(){
int number1 = 3, number2 = 7;
// 使用临时变量完成交换
int temp = number1;
number1 = number2;
number2 = temp;
// 不使用临时变量
number1 = number1 + number2;
number2 = number1 - number2;
number1 = number1 - number2;
return 0;
}
使用变量可以将语句统一
04tri.c
/*
* 计算
* 54321
* 4321
* 321
* 21
* 1
*
* */
int main(){
int number1 = 54321;
int number2 = 10000;
number1 = number1 % number2;
number2 = number2 / 10;
number1 = number1 % number2;
number2 = number2 / 10;
number1 = number1 % number2;
number2 = number2 / 10;
number1 = number1 % number2;
return 0;
}
4.2 printf
* printf第一个参数内部不进行运算
/*
* printf函数练习
*
*/
#include
int main(){
printf("%c\n",'a');// 输出字符
printf("%d\n",5);
printf("%4d\n",5);//数字占4个位置,数字右对齐
printf("%-4d\n",5);//-表示数字左对齐
printf("%04d\n",5);//没有占满的位置用0占位
printf("%f\n",1.5f);// 单精度浮点数,小数点后占6位
printf("%5.2f\n",1.5f);//小数点后保留2位,共占5位
printf("%5.2f\n",0.001f);//小数点后保留2位,共占5位
printf("%lf\n",0.001);// 双精度浮点数用%lf表示
printf("%g %lg\n",1.5f,1.5);// 小数点后面不会补0
// 输出123456789
printf("%d%d%c78%d\n",123,45,'6',9);
return 0;
// 输出结果
//a
//5
// 5
//5
//0005
//1.500000
// 1.50
// 0.00
//0.001000
//1.5 1.5
//123456789
}
printf练习
/*
* 在屏幕上打印如下内容
* 1234567 8 9
* 123456 8 79
* 12345 8 679
* ...
* 1 8 2345679
*
* */
#include
int main(){
int number1 = 1234567, number2 = 9, power = 10;
printf("%d8%d\n",number1,number2);
number2 = number1 % 10 * power + number2;
number1 = number1 / 10;
power = power * 10;
printf("%d8%d\n",number1,number2);
number2 = number1 % 10 * power + number2;
number1 = number1 / 10;
power = power * 10;
printf("%d8%d\n",number1,number2);
number2 = number1 % 10 * power + number2;
number1 = number1 / 10;
power = power * 10;
printf("%d8%d\n",number1,number2);
number2 = number1 % 10 * power + number2;
number1 = number1 / 10;
power = power * 10;
printf("%d8%d\n",number1,number2);
number2 = number1 % 10 * power + number2;
number1 = number1 / 10;
power = power * 10;
printf("%d8%d\n",number1,number2);
number2 = number1 % 10 * power + number2;
number1 = number1 / 10;
power = power * 10;
printf("%d8%d\n",number1,number2);
return 0;
}
5. 作业
/*
屏幕打印出如下内容,每行内容由上一行计算得到
54321
4321
321
21
1
*/
#include
int main(){
int number1 = 54321, inpower = 10000;
printf("%d\n",number1);
number1 = number1 % inpower;
inpower = inpower / 10;
printf("%d\n",number1);
number1 = number1 % inpower;
inpower = inpower / 10;
printf("%d\n",number1);
number1 = number1 % inpower;
inpower = inpower / 10;
printf("%d\n",number1);
number1 = number1 % inpower;
inpower = inpower / 10;
printf("%d\n",number1);
return 0;
}
/*
屏幕打印出如下内容,每行内容由上一行计算得到
1 * 4 = 4
2 * 4 = 8
3 * 4 = 12
4 * 4 = 16
*/
#include
int main(){
int multi1 = 1, multi2 = 4;
printf("%d * %d = %d\n",multi1, multi2, multi1 * multi2);
multi1 = multi1 + 1;
printf("%d * %d = %d\n",multi1, multi2, multi1 * multi2);
multi1 = multi1 + 1;
printf("%d * %d = %d\n",multi1, multi2, multi1 * multi2);
multi1 = multi1 + 1;
printf("%d * %d = %d\n",multi1, multi2, multi1 * multi2);
return 0;
}