宏程序是什么?

宏程序是什么?,第1张

一.计算机中的“宏” 什么是宏\x0d\x0a\x0d\x0a计算机科学里的宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式。Excel 办公软件自动集成了“VBA”高级程序语言,用此语言编制出的程序就叫“宏”。使用“VBA”需要有一定的编程基础和耗费大量的时间,因此,绝大多数的使用者仅使用了Excel的一般制表功能,很少使用到“VBA”。 \x0d\x0a解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,使用“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。 \x0d\x0a宏的用途在于自动化频繁使用的序列或者是获得一种更强大的抽象能力--但这常常是一回事。 \x0d\x0a计算机语言如C或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C 程序员可以获得更精巧的宏。 \x0d\x0aLisp类语言如Common Lisp和Scheme有更精巧的宏系统: 宏的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。一个C宏可以定义一段语法的替换,然而一个Lisp的宏却可以控制一节代码的计算。 \x0d\x0a获得了控制代码的执行顺序(见惰性计算和非限制函数)的能力,使得新创建的语法结构与语言内建的语法结构不可区分。例如,一种Lisp 方言有 cond 而没有if ,就可以使用宏由前者定义后者。Lisp 语法的去部主要扩展,比如面向对象的CLOS 系统,可以由宏来定义。\x0d\x0a 宏的典型应用\x0d\x0a加速日常编辑和格式设置 \x0d\x0a组合多个命令 \x0d\x0a使对话框中的选项更易于访问 \x0d\x0a使一系列复杂的任务自动执行 \x0d\x0a 宏编程介绍\x0d\x0a\x0d\x0a在用一种不熟悉的宏语言进行宏编程时,可以这样做,首先记录下用户想要宏完成什么,然后打开宏文件并尝试理解命令结构如何工作。也可以修改命令以调整宏。一些宏语言,比如Great Plains账务(?accounting)软件的 Dexterity 运行时引擎,不能从其它数据源(如由逗号分隔的文本文件)导入数据。这一限制可以通过用更强大的编程语言,如 VBA 来创建一个计算机程序在此弱编程语言里生成一个特别的宏来解决。例如,可以对 Microsoft Excel 宏编程从扩展样式表或文本文件中读取数据并创建 Great Plains .mac 文件,这一文件被用于将特定的数据导入 Great Plains. 需要针对每一个新的数据集合声称新的 .mac 文件。\x0d\x0a 键盘宏\x0d\x0a\x0d\x0a键盘宏和编辑器宏分别在图形用户界面和编辑器中被交互式地使用。使用它们可以用简短的击键代替冗长的命令序列,并为重复性任务提供了一个简单的自动化形式。 \x0d\x0a程序员的文本编辑器 Emacs (“编辑宏”[Editing MACroS]的简称)是沿用这一思想的产物。事实上,大多数编辑器是由宏组成的,Emacs 最初被设计为编辑语言 TECO 的宏集,后被移植为 Lisp 的一中方言 Emacs Lisp。\x0d\x0a 宏语言\x0d\x0a\x0d\x0a宏语言是一类编程语言,其全部或多数计算是由扩展宏完成的。宏语言并未在通用编程中广泛使用,但在文本处理程序中应用普遍。例如, \x0d\x0aC preprocessor C 预处理器 \x0d\x0aInternet Macros(iOpus) \x0d\x0aM4(如前所述,源于AT&T,捆绑于Unix) \x0d\x0a宏定义\x0d\x0ac程序提供的预处理功能之一。包括带参数的宏定义和不带参数的宏定义。具体是指用一个指定的标志符来进行简单的字符串替换或者进行阐述替换。形式为:\x0d\x0a#define 标志符(参数表) 字符串\x0d\x0a宏名\x0d\x0a在上定义中的标志符被称为“宏名”。\x0d\x0a宏展开\x0d\x0a在c程序编译时将宏名替换成字符串的过程称为“宏展开”。\x0d\x0a 微软Word和宏病毒\x0d\x0a\x0d\x0aVisual Basic for Applications (VBA),是 Microsoft Office 里的一种编程语言. 但由上面的定义,它完全不是一种宏语言。然而,它的功能已经从中发展并最终替代了用户应用程序的宏思想,所以他被广泛地错误地称为是一种宏语言。 \x0d\x0aVBA 可以访问许多 *** 作系统函数并支持文档打开时自动执行宏。这使得用这种语言写计算机病毒成为可能。1990年代中后期,宏病毒成为了最流行的计算机病毒类型之一。其它的包括宏语言的项目,如openoffice.org,故意从其宏语言中排除了一些功能(如:自动执行)以避免破坏程序。然而,这一特性在很多事务中受到欢迎。 来自“百度知道”

好的,我可以帮你解释如何用C语言编写计算1+2+3+4+5+6+7+8+9+10的值的程序,并且画出相应的流程图。

首先,你需要定义一个变量来存储这个总和的值,可以命名为sum,然后将它初始化为0。

接下来,你可以使用一个for循环来遍历1到10之间的所有数字,并将它们累加到sum变量中。for循环的语法如下:

```

for (int i = 1i <= 10i++) {

sum += i

}

```

在这个循环中,我们定义了一个计数器变量i,它从1开始,每次增加1,直到它的值达到10为止。在每次循环中,我们将i的值加到sum变量中。

最后,你可以输出sum变量的值,以显示1到10的总和。你可以使用printf函数来打印输出,如下所示:

```

printf("1+2+3+4+5+6+7+8+9+10 = %d\n", sum)

```

这将在控制台上显示以下内容:

```

1+2+3+4+5+6+7+8+9+10 = 55

```

至于流程图,我会尝试画一个简单的:

```

开始 -->初始化sum为0 -->进入循环 -->判断i是否小于等于10 -->是 -->将i加到sum中 -->i自增 -->返回循环开始 -->否 -->输出sum的值 -->结束

```

希望这些解释能帮助你理解如何编写这个程序并画出流程图。

以下环境均在GNU/Linux下。

并且由于本人常年使用C语言,所以写出来的代码类似C

原理:

通过遍历该目录下所有文件,并取得后缀名,再次遍历是否有后缀名相同的文件,并且复制如以该文件后缀名为名的文件。

代码:

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <dirent.h>

#include <sys/types.h>

#include <sys/stat.h>

void cpFile(char *src, char *target) /* src为文件,target为文件夹 */

{

FILE *srcH = NULL

FILE *outH = NULL

char buffer[1024] = ""

char path[1024] = ""

snprintf(path, sizeof(path), "%s/%s", target, src)

srcH = fopen(src, "rb") /* rb表示打开二进制 */

if (srcH == NULL)

{

perror("fopen")

return

}

outH = fopen(path, "wb+")

if (outH == NULL)

{

perror("fopen")

return

}

while (fread(buffer, 1, 1024, srcH) != 0)

{

fwrite(buffer, 1, 1024, outH)

memset(buffer, 0, sizeof(buffer)) /* 清空buffer

                                        中的内容 */

}

fclose(outH)

fclose(srcH)

}

int main()

{

DIR *dp

struct dirent *dirInfo

char lastName[10] = ""

DIR *kindDir

struct dirent *kindDirInfo

if (NULL == (dp = opendir("./")))

{

perror("opendir")

exit(EXIT_FAILURE)

}

while ((dirInfo = readdir(dp)) != NULL) /* 遍历 */

{

if (dirInfo->d_type & DT_DIR)

{

continue

}

memcpy(lastName, strstr(dirInfo->d_name, "."), sizeof(lastName))

if (0 != access(lastName, F_OK)) /* 检测文件夹是否存在,

                           如果不存在那么创建该文件夹 */

{

if (-1 == mkdir(lastName, 0755))

{

perror("mkdir")

continue

}

}

if (NULL == (kindDir = opendir("./")))

{

perror("opendir")

continue

}

/* 再次遍历查找是否有相同后缀名的文件,

并将其复制到指定文件夹 */

while ((kindDirInfo = readdir(kindDir)) != NULL)

{

if (dirInfo->d_type & DT_DIR)

{

continue

}

if (0 == strcmp(lastName, strstr(dirInfo->d_name, ".")))

{

cpFile(dirInfo->d_name, lastName)

}

}

closedir(kindDir)

}

closedir(dp)

return 0

}

注:由于是以.开头,所以在GNU/Linux为隐藏文件。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11435015.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存