c语言中define的用法

c语言中define的用法,第1张

C语言是计算机软件领域非常经典的编程语言,unix、linux等众多 *** 作系统均是由C语言编写而成。而在硬件控制、底层驱动等应用领域,C语言更是具有不可替代的作用。下面我就跟你们详细介绍下c语言中define的用法,希望对你们有用。

c语言中define的用法如下:

#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。

1 #define命令剖析

11 #define的概念

#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。

该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。

(1) 简单的宏定义:

#define <宏名><字符串>

例: #define PI 31415926

(2) 带参数的宏定义

#define <宏名> (<参数表>) <宏体>

例: #define A(x) x

一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译,宏替换是简单的替换。

12 宏替换发生的时机

为了能够真正理解#define的作用,让我们来了解一下对C语言源程序的处理过程。当我们在一个集成的开发环境如Turbo C中将编写好的源程序进行编译时,实际经过了预处理、编译、汇编和连接几个过程,见图1。

源程序预处理器修改后的源程序编译器汇编程序汇编器可重定位的目标程序连接器可执行的目标程序图1 C语言的编译过程

其中预处理器产生编译器的输出,它实现以下的功能:

(1) 文件包含

可以把源程序中的#include 扩展为文件正文,即把包含的h文件找到并展开到#include 所在处。

(2) 条件编译

预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或排除在外,通常把排除在外的语句转换成空行。

(3) 宏展开

预处理器将源程序文件中出现的对宏的引用展开成相应的宏 定义,即本文所说的#define的功能,由预处理器来完成。

经过预处理器处理的源程序与之前的源程序有所有不同,在这个阶段所进行的工作只是纯粹的替换与展开,没有任何计算功能,所以在学习#define命令时只要能真正理解这一点,这样才不会对此命令引起误解并误用。

2 #define使用中的常见问题解析

21 简单宏定义使用中出现的问题

在简单宏定义的使用中,当替换文本所表示的字符串为一个表达式时,容易引起误解和误用。如下例:

例1 #define N 2+2

void main()

{

int a=NN;

printf(“%d”,a);

}

(1) 出现问题:在此程序中存在着宏定义命令,宏N代表的字符串是2+2,在程序中有对宏N的使用,一般同学在读该程序时,容易产生的问题是先求解N为2+2=4,然后在程序中计算a时使用乘法,即NN=44=16,其实该题的结果为8,为什么结果有这么大的偏差

(2)问题解析:如1节所述,宏展开是在预处理阶段完成的,这个阶段把替换文本只是看作一个字符串,并不会有任何的计算发生,在展开时是在宏N出现的地方 只是简单地使用串2+2来代替N,并不会增添任何的符号,所以对该程序展开后的结果是a=2+22+2,计算后=8,这就是宏替换的实质,如何写程序才 能完成结果为16的运算呢?

(3)解决办法:将宏定义写成如下形式

#define N (2+2)

这样就可替换成(2+2)(2+2)=16

22 带参数的宏定义出现的问题

在带参数的宏定义的使用中,极易引起误解。例如我们需要做个宏替换能求任何数的平方,这就需要使用参数,以便在程序中用实际参数来替换宏定义中的参数。一般学生容易写成如下形式:

#define area(x) xx

这在使用中是很容易出现问题的,看如下的程序

void main()

{

int y=area(2+2);

printf(“%d”,y);

}

按理说给的参数是2+2,所得的结果应该为44=16,但是错了,因为该程序的实际结果为8,仍然是没能遵循纯粹的简单替换的规则,又是先计算再替换 了,在这道程序里,2+2即为area宏中的参数,应该由它来替换宏定义中的x,即替换成2+22+2=8了。那如果遵循(1)中的解决办法,把2+2 括起来,即把宏体中的x括起来,是否可以呢?#define area(x) (x)(x),对于area(2+2),替换为(2+2)(2+2)=16,可以解决,但是对于area(2+2)/area(2+2)又会怎么样 呢,有的学生一看到这道题马上给出结果,因为分子分母一样,又错了,还是忘了遵循先替换再计算的规则了,这道题替换后会变为 (2+2)(2+2)/(2+2)(2+2)即44/44按照乘除运算规则,结果为16/44=44=16,那应该怎么呢?解决方法是在整个 宏体上再加一个括号,即#define area(x) ((x)(x)),不要觉得这没必要,没有它,是不行的。

要想能够真正使用好宏定义,那么在读别人的程序时,一定要记住先将程序中对宏的使用全部替换成它所代表的字符串,不要自作主张地添加任何其他符号,完全展 开后再进行相应的计算,就不会写错运行结果。如果是自己编程使用宏替换,则在使用简单宏定义时,当字符串中不只一个符号时,加上括号表现出优先级,如果是 带参数的宏定义,则要给宏体中的每个参数加上括号,并在整个宏体上再加一个括号。看到这里,不禁要问,用宏定义这么麻烦,这么容易出错,可不可以摒弃它, 那让我们来看一下在C语言中用宏定义的好处吧。

3 宏定义的优点

(1) 方便程序的修改

使用简单宏定义可用宏代替一个在程序中经常使用的常量,这样在将该常量改变时,不用对整个程序进行修改,只修改宏定义的字符串即可,而且当常量比较长时, 我们可以用较短的有意义的标识符来写程序,这样更方便一些。我们所说的常量改变不是在程序运行期间改变,而是在编程期间的修改,举一个大家比较熟悉的例 子,圆周率π是在数学上常用的一个值,有时我们会用314来表示,有时也会用31415926等,这要看计算所需要的精度,如果我们编制的一个程序中 要多次使用它,那么需要确定一个数值,在本次运行中不改变,但也许后来发现程序所表现的精度有变化,需要改变它的值, 这就需要修改程序中所有的相关数值,这会给我们带来一定的不便,但如果使用宏定义,使用一个标识符来代替,则在修改时只修改宏定义即可,还可以减少输入 31415926这样长的数值多次的情况,我们可以如此定义 #define pi 31415926,既减少了输入又便于修改,何乐而不为呢?

(2) 提高程序的运行效率

使用带参数的宏定义可完成函数调用的功能,又能减少系统开 销,提高运行效率。正如C语言中所讲,函数的使用可以使程序更加模块化,便于组织,而且可重复利用,但在发生函数调用时,需要保留调用函数的现场,以便子 函数执行结束后能返回继续执行,同样在子函数执行完后要恢复调用函数的现场,这都需要一定的时间,如果子函数执行的 *** 作比较多,这种转换时间开销可以忽 略,但如果子函数完成的功能比较少,甚至于只完成一点 *** 作,如一个乘法语句的 *** 作,则这部分转换开销就相对较大了,但使用带参数的宏定义就不会出现这个问 题,因为它是在预处理阶段即进行了宏展开,在执行时不需要转换,即在当地执行。宏定义可完成简单的 *** 作,但复杂的 *** 作还是要由函数调用来完成,而且宏定义 所占用的目标代码空间相对较大。所以在使用时要依据具体情况来决定是否使用宏定义。

形式参数不能用带引号的字符串替换。

但是,如果在替换文本中,参数名以#作为前缀则结果将被扩展为 由 实际参数 替换 此实际参数的带引号的字符串。

例如,可以将它与字符串连接运算结合起来编写一个调试打印宏:

#define dprint(expr) printf(#expr “ = %\n”,expr)

使用语句 dprint(x/y);

调用宏时,该宏将被扩展为:printf(“x/y”“ = %\n”,x/y);

其中的字符串被连接起来了,这样便等价于printf(“x/y = %\n”,x/y);

在实际参数中,每个双引号 “ 将被替换为 \” ;反斜杠\将被替换为\\,因此替换后的字符串是合法的字符串常量。

预处理运算符 ## 为宏扩展提供了一种连接实际参数的手段。如果替换文本中的参数与 ## 相邻,则该参数将被实际参数替换,##与前后的空白符将被删除,并对替换后的结果重新扫描。

例如,下面定义的宏paste用于连接两个参数

#define paste(front, back) front ## back

因此,宏调用past(name,1)的结果将建立记号name1

c语言中没有swap这个函数,C语言不支持重载,也没有模版的概念,所以对于每一种类型,都要写出相应的swap,如

intSwap (int , int );

longSwap (long , long );

stringSwap (char , char );

宏定义swap(t,x,y)以交换t类型的两个参数(要使用程序块结构)。

程序如下:

#include <iostreamh>

#define SWAP(t,x,y) \

{\

t temp = y;\

y = x;\

x = temp;\

}

main()

{

int a = 10, b = 5;

SWAP(int,&a,&b)

cout << a << endl << b<<endl;

}

用\换行,\的意思是说把下一行看作和这行是同一行换行必须要反斜杠,而且\後面直接回车,不能有空格。

实验一 简单C程序的调试

一、实验目的

熟悉在VC的运行环境下,编辑调试C语言程序的一般步骤。掌握编写与调试简单C语言程序的基本方法。

二、实验要求

1. 仔细阅读下列实验内容,并编写出相应的C语言源程序。

2. 在VC运行环境下,编辑录入源程序。

3. 调试运行源程序,并记录下调试运行过程中出现的所有错误及改正方法。

4. 掌握如何根据出错信息查找语法错误。

5 写出本次实验的实验报告。

三、实验内容

1.从键盘输入一个以秒为单位的时间值(如10000秒),将其转化为以时、分、秒表示的时间值并输出。

#include <stdioh>

void main()

{int time,h,min,sec;

printf("请输入时间,以秒为单位\n");

scanf("%d",&time);

h=time/3600;

min=(time%3600)/60;

sec=(time%3600)%60;

printf(" 时间转换为:%d h %d min %d s\n",h,min,sec);

}

2.已知如下二元一次方程组的系数值,求该方程组的解。

a1x+b1y=c1

a2x+b2y=c2

#include <stdioh>

void main()

{float a1,b1,c1,a2,b2,c2,m,n,p;

printf(" 请输入二元一次方程组的各项参数:");

scanf("%f %f %f %f %f %f",&a1,&b1,&c1,&a2,&b2,&c2);

p=a1b2-a2b1;

if(p!=0)

m=(b2c1-b1c2)/(a1b2-a2b1);

n=(a1c2-a2c1)/(a1b2-a2b1);

printf("%fx+%fy=%f\n%fx+%fy=%f\n",a1,b1,c1,a2,b2,c2);

printf("解为:\n x=%f\n y=%f\n",m,n);

}

实验二 顺序结构程序设计

一、实验目的

掌握顺序程序设计的基本思想和顺序程序设计的基本方法

二、实验要求

1 仔细阅读下列实验内容,并编写出相应的C语言源程序。

2 在VC运行环境下,编辑录入源程序。

3 调试运行源程序,并记录下调试运行过程中出现的所有错误及改正方法。

4 掌握如何根据出错信息查找语法错误。

5 掌握如何通过动态跟踪程序运行过程查找逻辑错误。

6 写出本次实验的实验报告。

三、实验内容

1.编程序实现:输入一个年份y,求出从公元1年1月1日到y年的1月1日,总共有多少天(提示:400年97闰)。

#include <stdioh>

void main()

{

int year,days;

printf("please enter a year:");

scanf("%d",&year);

days=365(year-1)+97((year-1)/400)+24(((year-1)%400)/100)+(((year-1)%400)%100)/4+1;

printf("公元1年1月1日到公元%d年1月1日有%d天。\n",year,days);

}

实验三 选择结构程序设计

一、 实验目的

掌握选择结构程序设计的一般方法及选择结构程序的调试方法。

二、实验要求

1 仔细阅读下列实验内容,并编写出相应的C语言源程序。

2 在VC运行环境下,编辑录入源程序。

3 调试运行源程序,并记录下调试运行过程中出现的所有错误及改正方法。

4 掌握如何根据出错信息查找语法错误。

5 掌握如何通过动态跟踪程序运行过程查找逻辑错误。

6 写出本次实验的实验报告。

三、实验内容

1.编程序实现:输入一个年份和月份,求出这个月的天数并输出。

#include <stdioh>

void main()

{

int year,month,n;

printf("please enter a date like 2010/4\n");

scanf("%d/%d",&year,&month);

switch (month)

{

case 1: n=31;break;

case 2: n=28;break;

case 3: n=31;break;

case 4: n=30;break;

case 5: n=31;break;

case 6: n=30;break;

case 7: n=31;break;

case 8: n=31;break;

case 9: n=30;break;

case 10: n=31;break;

case 11: n=30;break;

case 12: n=31;break;

default:break;

}

if(year%4==0&&year%100!=0||year%400==0&&month==2)

n=29;

printf("%d年%d月有%d天。、\n",year,month,n);

}

2.编程序实现:输入一个年份y,求出y年的1月1日是星期几(提示:公元1年1月1日是星期一)。

#include <stdioh>

void main()

{

int m,n=0,year,i;

printf("please enter a year");

scanf("%d",&year);

n=365(year-1)+97((year-1)/400)+24(((year-1)%400)/100)+(((year-1)%400)%100)/4+1;

printf("%d年1月1日是",year);

m=n%7;

switch (m)

{

case 0: printf("星期天\n");

case 1:printf("星期一\n");break;

case 2:printf("星期二\n");break;

case 3:printf("星期三\n");break;

case 4:printf("星期四\n");break;

case 5:printf("星期五\n");break;

case 6:printf("星期六\n");break;

default:break;

}

}

3.(拓展题,选做)编程序实现:输入任意一个日期的年、月、日的值,求出是星期几并输出。

#include <stdioh>

void main()

{

int year,month, day,n,i;

printf("please enter a date like 2010/4/16\n");

scanf("%d/%d/%d",&year,&month,&day);

n=365(year-1)+97((year-1)/400)+24(((year-1)%400)/100)+(((year-1)%400)%100)/4;

switch (month)

{

case 1: n+=day;break;

case 2: n+=day+31;break;

case 3: n+=day+59;break;

case 4: n+=day+90;break;

case 5: n+=day+120;break;

case 6: n+=day+151;break;

case 7: n+=day+181;break;

case 8: n+=day+212;break;

case 9: n+=day+243;break;

case 10: n+=day+274;break;

case 11: n+=day+304;break;

case 12: n+=day+344;break;

default:break;

}

if(year%4==0&&year%100!=0||year%400==0&&month>2)

n+=1;

n=n%7;

switch (n)

{

case 0: printf("星期天\n");

case 1:printf("星期一\n");break;

case 2:printf("星期二\n");break;

case 3:printf("星期三\n");break;

case 4:printf("星期四\n");break;

case 5:printf("星期五\n");break;

case 6:printf("星期六\n");break;

default:break;

}

}

 

实验四 循环程序综合应用

一、实验目的:

掌握循环结构程序设计的一般方法及循环结构程序的调试方法,能够综合运用顺序、选择和循环结构解决一般难度的实际应用问题。

二、实验要求:

1仔细阅读下列实验内容,并编写出相应的C语言源程序。

2在VC运行环境下,编辑录入源程序。

3调试运行源程序,并记录下调试运行过程中出现的所有错误及改正方法。

4掌握如何根据出错信息查找语法错误。

5掌握如何通过动态跟踪程序运行过程查找逻辑错误。

6写出本次实验的实验报告。

三、实验内容:

1.编程序实现如下功能:输入任意一个年份的值,按以下格式输出该年份一月份的公历日历。

要求用循环控制打印。

2011年日历

1月

日 一 二 三 四 五 六

1

2 3 4 5 6 7 8

9 10 11 12 13 14 15

16 17 18 19 20 21 22

23 24 25 26 27 28 29

30 31

#include <stdioh>

void main()

{

int year,days,i,m,k=0,j;

printf("please enter a year:");

scanf("%d",&year);

days=365(year-1)+97((year-1)/400)+24(((year-1)%400)/100)+(((year-1)%400)%

100)/4+1;

m=days%7;

printf("%d年日历\n一月\n",year);

printf(" 日 一 二 三 四 五 六\n");

for(i=1;i<=m;i++)

{

k++;

printf(" ");}

k=m;

for(j=1;j<=31;j++)

{

k++;

printf("%3d",j);

if(k%7==0)

printf("\n");}

printf("\n");

}

2.(拓展题,选做)编程序实现如下功能:输入任意一个年份的值,输出该年份全年的公历日历。#include <stdioh>

void main()

{

int year,days,i,m,n,k=0,j,day,month;

printf("please enter a year:");

scanf("%d",&year);

printf("%d年日历\n",year);

days=365(year-1)+97((year-1)/400)+24(((year-1)%400)/100)+(((year-1)%400)%100)/4+1;

for(month=1;month<=12;month++)

{

switch (month)

{

case 1: day=31;break;

case 2: day=28;break;

case 3: day=31;break;

case 4: day=30;break;

case 5: day=31;break;

case 6: day=30;break;

case 7: day=31;break;

case 8: day=31;break;

case 9: day=30;break;

case 10: day=31;break;

case 11: day=30;break;

case 12: day=31;break;

default:break;

}

if(year%4==0&&year%100!=0||year%400==0&&month==2)

n=29;

switch (month)

{

case 1: days+=0;break;

case 2: days+=31;break;

case 3: days+=59;break;

case 4: days+=90;break;

case 5: days+=120;break;

case 6: days+=151;break;

case 7: days+=181;break;

case 8: days+=212;break;

case 9: days+=243;break;

case 10: days+=274;break;

case 11: days+=304;break;

case 12: days+=334;break;

default:break;

}

if(year%4==0&&year%100!=0||year%400==0&&month>2)

days+=1;

m=days%7;

printf("%d月\n",month),

printf(" 日 一 二 三 四 五 六\n");

for(i=1;i<=m;i++){k++;

printf(" ");}

k=m;

for(j=1;j<=day;j++)

{

k++;

printf("%3d",j);

if(k%7==0)

printf("\n");}

printf("\n");

}

}

都是同学啊!

最后两题米看到答案,我的方法不大对,就不给你了。

编译不只是编译main函数,你工程里面所有的c文件里面的代码,只不过执行不到而已。不过没有执行到的函数一般会告警的,除非你把告警关了(选项里面有个告警级别,级别0就是关了)。连接程序只是把所有的目标程序安排适当的地址而已。

(1)略

(2)略

(3)

数据是被定义在数据段的,函数是被定义在代码段的

变量通过内存寻址方式来获取,比如mov ax,[1234]

函数是通过call指令来调用的,并通过ret指令返回

(4)

C的输入输出一般直接用函数解决

而汇编既可以通过调用系统的中断,也可以通过 *** 作硬件的方式来实现

比如键盘输入可以预先设置int 9中断,在其中直接读取键盘的端口

显示器输出可以通过直接写现存的方式实现,或者直接控制显卡

公共资源的共享其实就是把那些数据的内存地址让大家都知道呗

(5)

先把C的源码编译了,然后用反汇编软件(DEBUG或OllyDBG)反汇编

不过这种方法有点不是让人很愉快,因为高级语言生成的汇编指令非常多,常常会会让你找不到北

2017计算机二级msoffice题库及答案

一、选择题

1、在计算机内部用来传送、存储、加工处理的数据或指令都是以______形式进行的。

A、十进制码

B、二进制码

C、八进制码

D、十六进制码

答案:(B)

评析:在计算机内部用来传送、存储、加工处理的数据或指令都是以二进制码形式进行的。

2、磁盘上的磁道是______。

A、一组记录密度不同的同心圆

B、一组记录密度相同的同心圆

C、一条阿基米德螺旋线

D、二条阿基米德螺旋线

答案:(A)

评析:磁盘上的磁道是一组记录密度不同的同心圆。一个磁道大约有零点几毫米的宽度,数据就存储在这些磁道上。

3、下列关于世界上第一台电子计算机ENIAC的叙述中,______是不正确的。

A、ENIAC是1946年在美国诞生的

B、它主要采用电子管和继电器

C、它首次采用存储程序和程序控制使计算机自动工作

D、它主要用于d道计算

答案:(C)

评析:世界上第一台电子计算机ENIAC是1946年在美国诞生的,它主要采用电子管和继电器,它主要用于d道计算。

4、用高级程序设计语言编写的程序称为______。

A、源程序

B、应用程序

C、用户程序

D、实用程序

答案:(A)

评析:用高级程序设计语言编写的程序称为源程序,源程序不可直接运行。要在计算机上使用高级语言,必须先将该语言的编译或解释程序调入计算机内存,才能使用该高级语言。

5、二进制数 011111 转换为十进制整数是______。

A、64

B、63

C、32

D、31

答案:(D)

评析:

数制也称计数制,是指用同一组固定的字符和统一的规则来表示数值的方法。十进制(自然语言中)通常用0到9来表示,二进制(计算机中)用0和1表示,八进制用0到7表示,十六进制用0到F表示。

(1)十进制整数转换成二进制(八进制、十六进制),转换方法:用十进制余数除以二(八、十六)进制数,第一次得到的余数为最低有效位,最后一次得到的余数为最高有效位。

(2)二(八、十六)进制整数转换成十进制整数,转换方法:将二(八、十六)进制数按权展开,求累加和便可得到相应的十进制数。

(3)二进制与八进制或十六进制数之间的转换二进制与八进制之间的转换方法:3位二进制可转换为1位八进制,1位八进制数可以转换为3位二进制数。

二进制数与十六进制之间的转换方法:4位二进制可转换为1位十六进制数,1位十六进制数中转换为4位二进制数。

因此:(011111)B=12^4+12^3+12^2+12^1+12^0=31(D)。

6、将用高级程序语言编写的源程序翻译成目标程序的程序称______。

A、连接程序

B、编辑程序

C、编译程序

D、诊断维护程序

答案:(C)

评析:将用高级程序语言编写的`源程序翻译成目标程序的程序称编译程序。连接程序是一个将几个目标模块和库过程连接起来形成单一程序的应用。诊断程序是检测机器系统资源、定位故障范围的有用工具。

7、微型计算机的主机由CPU、______构成。

A、RAM

B、RAM、ROM和硬盘

C、RAM和ROM

D、硬盘和显示器

答案:(C)

评析:微型计算机的主机由CPU和内存储器构成。内存储器包括RAM和ROM。

8、十进制数 101 转换成二进制数是______。

A、01101001

B、01100101

C、01100111

D、01100110

答案:(B)

评析:

数制也称计数制,是指用同一组固定的字符和统一的规则来表示数值的方法。十进制(自然语言中)通常用0到9来表示,二进制(计算机中)用0和1表示,八进制用0到7表示,十六进制用0到F表示。

(1)十进制整数转换成二进制(八进制、十六进制),转换方法:用十进制余数除以二(八、十六)进制数,第一次得到的余数为最低有效位,最后一次得到的余数为最高有效位。

(2)二(八、十六)进制整数转换成十进制整数,转换方法:将二(八、十六)进制数按权展开,求累加和便可得到相应的十进制数。

(3)二进制与八进制或十六进制数之间的转换二进制与八进制之间的转换方法:3位二进制可转换为1位八进制,1位八进制数可以转换为3位二进制数。

二进制数与十六进制之间的转换方法:4位二进制可转换为1位十六进制数,1位十六进制数中转换为4位二进制数。

因此:101/2=50……1

50/2=25……0

25/2=12……1

12/2=6……0

6/2=3……0

3/2=1……1

1/2=0……1

所以转换后的二进制数为01100101。

9、下列既属于输入设备又属于输出设备的是______。

A、软盘片

B、CD-ROM

C、内存储器

D、软盘驱动器

答案:(D)

评析:软盘驱动器属于输入设备又属于输出设备,其它三个选项都属于存储器。

10、已知字符A的ASCII码是01000001B,字符D的ASCII码是______。

A、01000011B

B、01000100B

C、01000010B

D、01000111B

答案:(B)

评析:ASCII码本是二进制代码,而ASCII码表的排列顺序是十进制数,包括英文小写字母、英文大写字母、各种标点符号及专用符号、功能符等。字符D的ASCII码是01000001B+011(3)=01000100B。

二、 *** 作题

请在答题菜单下选择进入考生文件夹命令,并按照题目要求完成下面的 *** 作。

注意:以下的文件必须都保持在考生文件夹下

某出版社的编辑小刘手中有一篇有关财务软件应用的书稿“会计电算化节节高升docx”,打开该文档,按下列要求帮助小刘对书稿进行排版 *** 作并按原文件名进行保存:

1按下列要求进行页面设置:纸张大小16开,对称页边距,上边距25厘米、下边距2厘米,内侧边距25厘米、外侧边距2厘米,装订线1厘米,页脚距边界10厘米。

2书稿中包含三个级别的标题,分别用“(一级标题)”、“(二级标题)”、“(三级标题)”字样标出。按照下列要求对书稿应用样式、多级列表、并对样式格式进行相应修改。

;

1写代码。这是最基础的一步,即实现C语言的源文件(c,必需),和可能的头文件(h,非必需)。

2编译。将编写好的代码,通过编译工具,转换为目标文件。此步中,会对文件内部及包含的头文件进行语法语义的分析检查。如果出错,则必须返回到一步对代码进行修改,直到没有错误为止。

3链接。将目标文件链接成可执行文件。此步会对文件直接的关联进行检查。如果出错需要返回到1修改代码。直到没有错误。

4运行。这个是最后一步,也是C语言的最终目的。

5在运行结果与期望不符时,需要检查原因,修改代码,重新执行一二三直到程序没有问题。

(1)语言简洁、紧凑灵活。二十八个关键字、九种控制语句,程序形式自由,运算符丰富。三十四种运算符。

(2)数据类型丰富,具有现代语言的各种数据结构。

(3)C程序的主要结构是函数,是完全模块化和结构化的语言。

(4)允许直接访问物理地址,能进行位 *** 作,能实现汇编语言的大部分功能,可直接对硬件进行 *** 作。兼有高级和低级语言的特点。

(5)程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种 *** 作系统。

(6)目标代码质量高,程序执行效率高。只比汇编程序生成的目标代码效率低10%-20%。

(7)语法限制不太严格,程序设计自由度大。

我大概明白了你想问什么,你指的C语言程序应该就是用C语言编写的程序吧,如果是的话,那么此处的源程序就等价于你所说的C语言程序。

为什么要用源文件来称呼,因为你的程序在经过编译程序编译后会生成目标文件,这个文件才是计算机能识别的代码,最后还要经过连接,才能生成可执行文件,也就是windows下的exe文件。

呵呵,有点晕了吧。其实叫源文件,只是为了区别后面提到的几种文件,就跟人的名字一样,一个代号而已。

以上就是关于c语言中define的用法全部的内容,包括:c语言中define的用法、求山东理工大学C语言实验答案(在线等、求速度)、我用KEIL编译程序时,我的main主程序为空,然后我再加了一些c文件,为什么编译连接后CODE也会很大等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9649968.html

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

发表评论

登录后才能评论

评论列表(0条)

保存