c语言运行,运行结果4

C语言,最后运行结果是多少?_百度知道C语言中 表达式1?表达式2:表达式3。怎么算的 比如7?4:3 运行结果是4怎么来的 -4?4:3 也是4_百度知道【改错】C语言单片机的小计算器程序,运行无错,但无法是无法清屏,也无法显示计算结果 - 代码贴 - BCCN
#include&stdio.h&
#include&reg51.h&
#include&lcd.h&
#define GPIO_KEY P1
#include&stdio.h&
#include&stdlib.h&
#include&string.h&
#include&math.h&
#include&ctype.h&
//按键检测函数
unsigned char PuZh[]=&
ZHQ CRH HTK
unsigned char KeyValue;
//用来存放读取到的键值
unsigned char KeyState;
//用来存放按键状态
unsigned char Key;
void Delay10ms();
//延时50us
void Delay10(unsigned int c);
void KeyDown();
//检测按键函数
unsigned char h=0,wei=0;
unsigned char i=0;
unsigned char d=0;
char s[30],gg[5];
void KeyDown(void)
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
Delay10ms();
if(GPIO_KEY!=0x0f)
KeyState=1;
GPIO_KEY=0X0F;
Delay10ms();
switch(GPIO_KEY)
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
default: KeyValue=17; //检测出错回复17意思是把数码管全灭掉。
GPIO_KEY=0XF0;
Delay10ms();
switch(GPIO_KEY)
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
default: KeyValue=17;
switch(KeyValue)
case(0): Key=0x31;break;
case(1): Key=0x32;break;
case(2): Key=0x33;break;
case(3): Key=0x01;break;
case(4): Key=0x34;break;
case(5): Key=0x35;break;
case(6): Key=0x36;break;
case(7): Key=0x2a;break;
case(8): Key=0x37;break;
case(9): Key=0x38;break;
case(10): Key=0x39;break;
case(11): Key=0x2f;break;
case(12): Key=0x30;break;
case(13): Key=0x2b;break;
case(14): Key=0x2d;break;
case(15): Key=0x3d;break;
while((a&50)&&(GPIO_KEY!=0xf0))
//检测按键松手检测
Delay10ms();
/*******************************************************************************
* 函 数 名
: Delay10ms
* 函数功能
: 延时函数,延时10ms
*******************************************************************************/
void Delay10ms(void)
//误差 0us
unsigned char a,b,c;
for(c=1;c&0;c--)
for(b=38;b&0;b--)
for(a=130;a&0;a--);
void Delay10(unsigned int c)
//误差 0us
unsigned char a,b;
for(c;c&0;c--)
for(b=38;b&0;b--)
for(a=130;a&0;a--);
/*************************************/
int shuru(unsigned char s[])
//构建一个子函数,用以输入字符串
s[i++]=Key;
//将输入的字符串中的每一个字符存到字符型数组s中
while(s[i-1]!='=');
//单s[i-1]为等号时,结束循环
s[i]='\0';
//在s[i]处插入终止符
//返回字符的个数
/**************************************/
int numb(unsigned char s[])
//构建一个子函数,用以找出字符串中的数字
unsigned char r=0;
while(isdigit(s[i]))
//当输入的是数字时
r=r*10+s[i]-'0';
//将字符串中的数字找出
//返回被找出的数字
/**************************************/
void inumb()
//构建一个子函数, 讲一个数字安每一位分解成固定五位长度的数组
for(k=5;k&0;k--)
gg[k]=d%10;
LcdWriteCom(0x01);
for(k=16;k&0;k--)
LcdWriteData(gg[k]);
/*************************************/ //ERROR
char e[5]={'E','R','R','O','r'};
for(ii=0;ii&5;ii++)
{LcdWriteData(e[ii]);}
LcdWriteCom(0x01);
/*************************************/
void computer(char s[])
//构建一个子函数,用以进行计算
q=numb(s);
//找出字符串中的第一个数,并将它赋值给a
//找出字符串中的运算字符,并将它赋值给c
b=numb(s);
//找出字符串中的第二个数,并将它赋值给b
//判断运算字符是什么字符
case'+':d=q+b,inumb()
case'-':d=q-b,inumb()
case'*':d=q*b,inumb()
if(c=='/')
d=q/b;inumb();
/**************************************/
void sss()
if(wei&=16)
{LcdWriteCom(0x07);
LcdWriteCom(0x06);
KeyState=0;
LcdWriteCom(0x80+wei);
if(Key!=0x01)
LcdWriteData(Key);
{ LcdWriteCom(0x01);
/**************************************/
void main()
LcdInit();
KeyState=0;
for(o=0;o&16;o++)
LcdWriteData(PuZh[o]);
Delay10(100);
LcdWriteCom(0x01);
KeyDown();
if(KeyState)
if(Key==0x3d)
{inumb();break;}
computer(s);
#include&lcd.h&
/*******************************************************************************
* 函 数 名
: Lcd1602_Delay1ms
* 函数功能
: 延时函数,延时1ms
: 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/
void Lcd1602_Delay1ms(uint c)
//误差 0us
uchar a,b;
for (; c&0; c--)
for (b=199;b&0;b--)
for(a=1;a&0;a--);
/*******************************************************************************
* 函 数 名
: LcdWriteCom
* 函数功能
: 向LCD写入一个字节的命令
*******************************************************************************/
LCD1602_4PINS
//当没有定义这个LCD1602_4PINS时
void LcdWriteCom(uchar com)
//写入命令
LCD1602_E = 0;
LCD1602_RS = 0;
//选择发送命令
LCD1602_RW = 0;
//选择写入
LCD1602_DATAPINS = com;
//放入命令
Lcd1602_Delay1ms(1);
//等待数据稳定
LCD1602_E = 1;
//写入时序
Lcd1602_Delay1ms(5);
//保持时间
LCD1602_E = 0;
void LcdWriteCom(uchar com)
//写入命令
LCD1602_E = 0;
//使能清零
LCD1602_RS = 0;
//选择写入命令
LCD1602_RW = 0;
//选择写入
LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
// Lcd1602_Delay1ms(1);
LCD1602_DATAPINS = com && 4; //发送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
/*******************************************************************************
* 函 数 名
: LcdWriteData
* 函数功能
: 向LCD写入一个字节的数据
*******************************************************************************/
LCD1602_4PINS
void LcdWriteData(uchar dat)
//写入数据
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择输入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //写入数据
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
//写入时序
Lcd1602_Delay1ms(5);
//保持时间
LCD1602_E = 0;
void LcdWriteData(uchar dat)
//写入数据
LCD1602_E = 0;
//使能清零
LCD1602_RS = 1;
//选择写入数据
LCD1602_RW = 0;
//选择写入
LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat && 4; //写入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;
//写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
/*******************************************************************************
* 函 数 名
: LcdInit()
* 函数功能
: 初始化LCD屏
*******************************************************************************/
LCD1602_4PINS
void LcdInit()
//LCD初始化子程序
LcdWriteCom(0x38);
LcdWriteCom(0x0c);
//开显示不显示光标
LcdWriteCom(0x06);
//写一个指针加1
LcdWriteCom(0x01);
LcdWriteCom(0x80);
//设置数据指针起点
void LcdInit()
//LCD初始化子程序
LcdWriteCom(0x32);
//将8位总线转为4位总线
LcdWriteCom(0x28);
//在四位线下的初始化
LcdWriteCom(0x0c);
//开显示不显示光标
LcdWriteCom(0x06);
//写一个指针加1
LcdWriteCom(0x01);
LcdWriteCom(0x80);
//设置数据指针起点C语言文件的编译与执行的四个阶段并分别描述
原文出自【比特网】,转载请保留原文链接:&
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下:
  从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。
  编译过程
  编译过程又可以分成两个阶段:编译和会汇编。
  编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段:
  第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。如#include指令就是一个预处理指令,它把头文件的内容添加到.cpp文件中。这个在编译之前修改源文件的方式提供了很大的灵活性,以适应不同的计算机和操作系统环境的限制。一个环境需要的代码跟另一个环境所需的代码可能有所不同,因为可用的硬件或操作系统是不同的。在许多情况下,可以把用于不同环境的代码放在同一个文件中,再在预处理阶段修改代码,使之适应当前的环境。
  主要是以下几方面的处理:
  (1)宏定义指令,如 #define a b
  对于这种伪指令,预编译所要做的是将程序中的所有a用b替换,但作为字符串常量的
a则不被替换。还有 #undef,则将取消对某个宏的定义,使以后该串的出现不再被替换。
  (2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif等。
  这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉。
  (3) 头文件包含指令,如#include "FileName"或者#include
  在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。包含到c源程序中的头文件可以是系统提供的,这些头文件一般被放在
/usr/include目录下。在程序中#include它们要使用尖括号(&
&)。另外开发人员也可以定义自己的头文件,这些文件一般与c源程序放在同一目录下,此时在#include中要用双引号("")。
  (4)特殊符号,预编译程序可以识别一些特殊的符号。
  例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。
  预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。
  第二个阶段编译、优化阶段,经过预编译得到的输出文件中,只有常量;如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,},
+,-,*,\等等。
  编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
  优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。优化一部分是对中间代码的优化。这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。
  对于前一种优化,主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除,等等。
  后一种类型的优化同机器的硬件结构密切相关,最主要的是考虑是如何充分利用机器的各个硬件寄存器存放的有关变量的值,以减少对于内存的访问次数。另外,如何根据机器硬件执行指令的特点(如流水线、RISC、CISC、VLIW等)而对指令进行一些调整使目标代码比较短,执行的效率比较高,也是一个重要的研究课题。
  汇编实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成。通常一个目标文件中至少有两个段:
  代码段:该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。
  数据段:主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。
  UNIX环境下主要有三种类型的目标文件:
  (1)可重定位文件
  其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据。
  (2)共享的目标文件
  这种文件存放了适合于在两种上下文里链接的代码和数据。第一种是链接程序可把它与其它可重定位文件及共享的目标文件一起处理来创建另一个目标文件;第二种是动态链接程序将它与另一个可执行文件及其它的共享目标文件结合到一起,创建一个进程映象。
  (3)可执行文件
  它包含了一个可以被操作系统创建一个进程来执行之的文件。汇编程序生成的实际上是第一种类型的目标文件。对于后两种还需要其他的一些处理方能得到,这个就是链接程序的工作了。
  链接过程
  由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。
  例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。
  链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体。
  根据开发人员指定的同库函数的链接方式的不同,链接处理可分为两种:
  (1)静态链接
  在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。
  (2) 动态链接
  在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。
  对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。
  我们在linux使用的gcc编译器便是把以上的几个过程进行捆绑,使用户只使用一次命令就把编译工作完成,这的确方便了编译工作,但对于初学者了解编译过程就很不利了,下图便是gcc代理的编译过程:
  从上图可以看到:
  预编译
  将.c 文件转化成 .i文件
  使用的gcc命令是:gcc &E
  对应于预处理命令cpp
  将.c/.h文件转换成.s文件
  使用的gcc命令是:gcc &S
  对应于编译命令 cc &S
  将.s 文件转化成 .o文件
  使用的gcc 命令是:gcc &c
  对应于汇编命令是 as
  将.o文件转化成可执行程序
  使用的gcc 命令是: gcc
  对应于链接命令是 ld
  总结起来编译过程就上面的四个过程:预编译、编译、汇编、链接。Lia了解这四个过程中所做的工作,对我们理解头文件、库等的工作过程是有帮助的,而且清楚的了解编译链接过程还对我们在编程时定位错误,以及编程时尽量调动编译器的检测错误会有很大的帮助的。
原文出自【比特网】,转载请保留原文链接:&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。用VS2010运行C语言程序,运行结果闪一下就没了
[问题点数:20分,结帖人delandi]
用VS2010运行C语言程序,运行结果闪一下就没了
[问题点数:20分,结帖人delandi]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 mac终端运行c语言程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信