linuxc

  • Post author:
  • Post category:linux




Linux c



vim基本操作

命令行

同时新打开一个文件,如果没有该文件会创建一个新文件

sp name

撤回上一个命令

u

显示行号

set nu或者set number

取消行号

set nonu或者set nonumber

从光标开始剪切9行

9dd

从光标开始复制9行

9yy

粘贴

p

保存打开的所有文件

wqa



linux中c语言常用

通过一个例子进行解释,一个main()文件,一个max(),一个min(),在main()文件中引用max.h,min.h完成对函数子文件引用

首先是main文件

#include<stdio.h>
#include"max.h"
#include"min.h"
int main()
{
	int a=33;
	int b=21;
	c=max(a,b);
	d=min(a,b);
	printf("the max is %d,the min is %d",c,d);
	return 0;
}

max()

int max(int a,int b)
{
	if(a>b){
		return a;
	}
	else{
		return b;
	}
}

min()

int min(int a,int b)
{
	if(a<b){
		return a;
	}
	else{
		return b;
	}
}

max.h

int max(int a,int b)

min.h

int min(int a,int b)

在linux运行c文件可生成.out文件,通过查看.out文件查看结果,由gcc生成文件,-o指定文件名字为a.out

gcc max.c min.c main.c -o a.out

直接查看a.out中的结果

./a.out

在实际运行中我们常把指定文件先翻译成.o的计算机语言,可以理解为二进制文件,减少电脑识别时间,这样在运行整体程序时为提高速度

生成min的.o文件

gcc -c min.c -o min.o

再直接代替运行即可

gcc min.o max.o main.c

我们在实际操作中,运行一个程序需要同时调用多个文件,会很复杂,通过使用make提前写好执行命令

vim Makefile
a.out:max.o min.o main.c
	gcc max.o min.o main.c -o a,out
max.o:max.c
	gcc -c max.c -o max.o
min.o:min.c
	gcc -c min.c -o min.o

运行make,直接输入

make



封装函数的思想

编写代码是为了解决一个实际问题,而我们在解决这个问题中往往需要重复,许多不可避免的步骤。

此时我们可以对这个流程进行一个整体的剥离,把框架理解出封装出一个函数,只需要进行一次流程描述,在合适的地方只需引用此函数即可,就能避免反复编写同一个内容。

在我们写程序时,就已经在进行这个方法了,我们每次在写c文件时,都需要引用头文件#include<stdio.h>,#include文件的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸。

例如,我们常说的printf函数和scanf函数,也是各自的封装。

fprintf(stdout,"content")
fscanf(stdin,"content")

再举一个简单的实例,打印等腰三角形。

打印等腰三角形,即在每行前一部分打印空格,中间打印星号,后一部分打印空格,换行。同时空格部分每行都累减1,星号累加2。

等腰三角形例图

按照一般方法,我们可以用嵌套的for循环,

void dysjx(int a,char c)
{
        int i;
        int j;
        for(j=1;j<a;j+=2){
/*              for(i=0;i<a-j/2;i++){
                        printf(" ");
                }
                for(i=0;i<j,i++){
                	printf("%c",c);
                }
                for(i=0;i<a-j/2;i++){
                        printf(" ");
                 printf("\n");
                }
         }
}

第一个for循环进行换行,有多少行,同时定义每行中间星号数目;

中间for循环,描述行内变化,每一行长是2a+1,第一个for是第一部分空格,第二个for循环是星号,第三个for循环是第二部分空格,for循环之后换行。星号每次每行增加两个,空格循环就每次减少一个,总长度不变,等腰三角行即可。

使用简便点方法,分装类,我们发现主要是嵌套的for语句比较多,且意思相近,都是为了打印多少个字符。可以这样:

//定义打印字符c,a次
void pc(int a,char c)
{
        int i;
        for(i=0;i<a;i++){
                printf("%c",c);
        }
}

源程序就可变成:

void dysjx(int a,char c)
{
        int i;
        int j;
        for(j=1;j<a;j+=2){
       			pc(a-j/2,' ');
                pc(j,c);
                pc(a-j/2,' ');
                printf("\n");
        }
}

同时,里面还有一个换行也会经常使用,可以将使其言简意赅,提高编程效率。

//换行,br在html语言中也正是换行的意思,容易理解。
void br()
{
        printf("\n");
}

源程序就可变成:

void dysjx(int a,char c)
{
        int i;
        int j;
        for(j=1;j<a;j+=2){
       			pc(a-j/2,' ');
                pc(j,c);
                pc(a-j/2,' ');
                br();
        }
}



版权声明:本文为jvdidns原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。