1. 安装gcc编译器
用 gcc -v 或者cc -v 查看当前编译器的版本,如果不存在就用apt-get install gcc 来安装gcc编译器。
2. gcc编译器的使用
gcc [选项] <文件名> #编译文件
选项 | 操作 |
---|---|
-c | 只是编译不链接,生成目标文件“.o” |
-S | 只是编译不汇编,生成汇编代码 |
-E | 只进行预编译,不做其他处理 |
-g | 在可执行程序中包含标准调试信息 |
-o file | 把输出文件输出到file里 |
-v | 打印出编译器内部编译各过程的命令行信息和编译器的版本 |
-I dir | 在头文件的搜索路径列表中添加dir目录 |
-L dir | 在库文件的搜索路径列表中添加dir目录 |
-static | 链接静态库 |
-llibrary | 连接名为library的库文件 |
3. C语言使用方法
用C语言来打印出实心矩形,空心矩形,空心菱形和等要三角形。
3.1 用传统结构化的方法来编写
编写实心矩形
#include<stdio.h>
int main(){
int i,j;
for(i = 0;i < 10;i++){
for(j = 0;j < 10;j++){
printf("*");
}
printf("\n");
}
return 0;
}
编译后的效果:
编写空心矩形:
#include<stdio.h>
int main(){
int i,j;
for(i = 0;i < 10;i++){
if(i == 0 ||i == 9){
for(j = 0;j < 10;j++){
printf("*");
}
}
else{
printf("*");
for(j = 0;j < 8;j++){
printf(" ");
}
printf("*");
}
printf("\n");
}
return 0;
}
编译后的效果:
编写等要三角形:
#include<stdio.h>
int main(){
int i,j;
for(i = 1;i <= 10;i++){
for(j = 0;j < 10 - i;j++){
printf(" ");
}
for(j = 1;j <= 2 * i - 1;j++){
printf("*");
}
printf("\n");
}
}
编译后的效果:
编写空心菱形:
#include<stdio.h>
int main(){
int i,j;
for(i = 1;i < 11;i++){
for(j = 0;j < 10 - i;j++){
printf(" ");
}
for(j = 1;j <=2*i-1;j++){
if(j == 1 || j == 2*i-1)
printf("*");
else
printf(" ");
}
printf("\n");
}
for(i = 9;i > 0;i--){
for(j = 0;j < 10 - i;j++){
printf(" ");
}
for(j = 1;j <= 2 * i - 1;j++){
if(j==1||j==2*i-1)
printf("*");
编译后的效果:
通过上述的方法编写可以看出,代码中出现大量的冗余,可读性较差,下面介绍用封装函数的方法来打印图形。
3.2 函数封装法编写
#include<stdio.h>
void print(char c){
printf("%c",c);
}
void printn(){
printf("\n");
}
void printspace(){
printf(" ");
}
void printline(int length,char c){
int i;
for(i = 0;i < length;i++){
print(c);
}
printn();
}
void eage(int pointer,int start,int end,char c){
if(pointer == start || pointer == end)
print(c);
else
printspace();
}
void printRec(int length,int height,char c){
int i;
for(i = 0;i < height;i++){
printline(length,c);
}
}
void printBlankRec(int length,int height,char c){
int i,j;
printline(length,c);
for(i = 0;i < height - 2;i++){
for(j = 1;j <= length;j++){
eage(j,1,length,c);
}
printn();
}
printline(length,c);
}
void printTrangle(int height,char c){
int i,j;
for(i = 1;i <= height;i++){
for(j = 0;j < height - i;j++){
printspace();
}
for(j = 1;j < 2 * i;j++){
print(c);
}
printn();
}
}
void printBlankRhombus(int height,char c){
int i,j;
for(i = 1;i <= height;i++){
for(j = 0;j < height - i;j++){
printspace();
}
for(j = 1;j < 2 * i;j++){
eage(j,1,2 * i - 1,c);
}
printn();
}
for(i = height;i > 0;i--){
for(j = 0;j < height - i;j++){
printspace();
}
for(j = 0;j < 2 * i;j++){
eage(j,1,2 * i - 1,c);
}
printn();
}
}
int main(){
printRec(5,6,'*');
printn();
printline(30,'*');
printn();
printBlankRec(10,10,'*');
printn();
printline(30,'*');
printn();
printTrangle(20,'*');
printn();
printline(30,'*');
printBlankRhombus(10,'*');
return 0;
}
编译后执行的效果:
传统的方法和封装函数的方法执行效果一致,但是可读性和可理解性增加了不少,而且便于编写和后期的维护,为程序员的工作带来巨大的便利。