当前位置:首页 » 编程语言 » c语言cst
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言cst

发布时间: 2022-10-24 21:59:02

1. c语言实验报告心得

c语言实验心得:
1、只有频繁用到或对运算速度要求很高的变量才放到data区内,如for循环中的计数值。
2、其他不频繁调用到和对运算速度要求不高的变量都放到xdata区。
3、常量放到code区,如字库、修正系数。
4、逻辑标志变量可以定义到bdata中。
在51系列芯片中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。这样可以大大降低内存占用空间。定义方法是: bdata bit LedState;但位类型不能用在数组和结构体中。
5、data区内最好放局部变量。
因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同;
6、确保程序中没有未调用的函数。
在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil做得很愚蠢,但也没办法。
7、如果想节省data空间就必须用large模式。
将未定义内存位置的变量全放到xdata区。当然最好对所有变量都要指定内存类型。
8、使用指针时,要指定指针指向的内存类型。
在C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针p是指向data区,则应定义为: char data *p;。还可指定指针本身的存放内存类型,如:char data * xdata p;。其含义是指针p指向data区变量,而其本身存放在xdata区。

以前没搞过C51,大学时代跟单片机老师的时候也是捣鼓下汇编,现在重新搞单片机,因为手头资料不多,找到一些C51的程序,发现里面有这些关键字,不甚明了,没办法只好找了下,发现如下描述:

从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。与ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果。

在51系列中data,idata,xdata,pdata的区别

data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)

xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。

pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

三、有关单片机ALE引脚的问题

"单片机不访问外部锁存器时ALE端有正脉冲信号输出,此频率约为时钟振荡频率的1/6.每当访问

外部数据存储器是,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲."这句话是不是有毛

病.我觉得按这种说法,应该丢失3个ALE脉冲才对,我一直想不通是怎么回事,希望大虾们帮帮我.

小弟感激涕零.

答:

其他所有指令每6个机器周期发出一个ALE,而MOVX指令占用12个机器周期只发出一个ALE

四、如何将一个INT型数据转换成2个CHAR型数据?

经keil优化后,char1=int1/256,char2=int1%256或char1=int1>>8,char2=int1&0x00ff效率是一样的。

五、在KEIL C51上仿真完了,怎样生成HEX文件去烧写??

右键点项目中Target 1,选第二个,在OUTPUT中选中CREAT HEX

六、typedef 和 #define 有何不同??

typedef 和 #define 有何不同》》》 如

typedef unsigned char UCHAR ;

#define unsigned char UCHAR ;

typedef命名一个新的数据类型,但实际上这个新的数据类型是已经存在的,只不过是定义了

一个新的名字.

#define只是一个标号的定义.

你举的例子两者没有区别,但是#define还可以这样用

#define MAX 100

#define FUN(x) 100-(x)

#define LABEL

等等,这些情况下是不能用typedef定义的

七、请问如何设定KELC51的仿真工作频(时钟)

用右键点击左边的的target 1,然后在xtal一栏输入

八、不同模块怎样共享sbit变量,extern不行?

把SBIT定义单独放到一个.H中,每个模块都包含这个.h文件

九、C51中对于Px.x的访问必须自己定义吗?

是的。

如sbit P17 = 0x97;即可定义对P1.7的访问

十、SWITCH( )语句中表达式不可以是位变量对吗?

可以用位变量:

#include

#include

void main()

{

bit flag;

flag=0;

switch(flag)

{

case '0':{printf("0\n");break;}

case '1':{printf("1\n");break;}

default:break;

}

}

bit 变量只有两种状态,if 语句足够啦,!!!

十一、const常数声明占不占内存???

const 只是用来定义“常量”,所占用空间与你的定义有关,如:

const code cstStr[] = {"abc"};

占用代码空间;而如:

const char data cstStr[] = {"abc"};

当然占用内存空间。

另外,#define 之定义似乎不占用空间。

十二、philips的单片机P89C51RD+的扩展RAM在C51中如何使用?

试一试将auxr.1清0,然后在c语言中直接声明xdata类型的变量

十三、BUG of Keil C51

程序中用如下语句:

const unsigned char strArr[] = {"数学"};

结果发现strArr[] 内容为 {0xCA,0xD1,0xA7},真奇怪!

凡是有0xfd,则会通通不见了,所以只能手工输入内码了,例如 uchar strArr[]=

{0xCA,0xfd,0xd1,0xa7}(用Ultraedit会很方便)。

十四、Keil C51中如何实现代码优化?

菜单Project下Option for target "Simulator"的C51.

看到Code optimization了吗?

十五、请教c的!和 ~ 符号有甚区别??

!是逻辑取反,~是按位取反。

十六、c51编程,读端口,还要不要先输出1?

我怎么看到有的要,有的不要,请高手给讲讲,到底咋回事?谢了

要输出1的,除非你能保证之前已经是1,而中间没有输出过其他值。

十七、当定时器1(T1)用于产生波特率时,P3^5还是否可以用作正常的I/O口呢?

p3.5完全可以当普通的io使用

十八、C51中 INT 转换为 2个CHAR?

各位高手:

C51中 INT 转换为 CHAR 如何转换诸如:

X = LOW(Z);

Y = HIGH(Z);

答:

x=(char)z;

y=(char)(z>>8);

十九、如果我想使2EH的第7位置1的话,用位操作可以吗?

现在对位操作指令我一些不太明白请各位多多指教:

如 SETB 07H 表示的是20H.7置1,对吗?(我在一本书上是这么看到的)

那么如果我想使2EH的第7位置1的话,象我举的这个例子怎么表示呢?谢谢!

SETB 77H

setb (2eh-20h)*8+7

20h-2fh每字节有8个可位操作(00h-7fh),其它RAM不可位直接操作

二十、char *addr=0xc000 和char xdata *addr=0xc000有何区别?

char *addr=0xc000;

char xdata *addr=0xc000;

除了在内存中占用的字节不同外,还有别的区别吗?

char *addr=0xc000; 是通用定义,指针变量 addr 可指向任何内存空间的值;

char xdata *addr=0xc000; 指定该指针变量只能指向 xdata 中的值;

后一种定义中该指针变量(addr)将少占用一个存储字节。

uchar xdata *addr=0xc000;指针指向外ram;

如果:data uchar xdata *addr=0xc000;指针指向外ram但指针本身存在于内ram(data)



以此类推可以idata uchar xdata *addr=0xc000;pdata uchar xdata *addr=0xc000;

data uchar idata *addr=0xa0;.........

二十一、while(p1_0)的执行时间?

假设,P1_0为单片机P1口的第一脚,请问,

while(P1_0)

{

P1_0=0;

}

while(!P1_0)

{

P1_0=1;

}

以上代码,在KEIL C中,需要多长时间,执行完。能具体说明while(P1_0)的执行时间吗?

仿真运行看看就知道了,

我仿真了试了一下,约14个周期

二十二、怎样编写C51的watchdog程序?

各位大虾,我用KEIL C51 编写了一个带外部开门狗的程序,可程序无法运行起来,经过查

找,发现程序在经过C51编译后,在MAIN()函数的前部增加了一端初始化程序,等到进入

主程序设置开门狗时,开门狗已经时间到,将我的程序复位了,请问我怎样才能修改这一端

初始花程序,使他一运行,就设置开门狗?

可以在startup.a51中加入看门狗刷新指令,当然用汇编,然后重新编译startup.a51

,将他和你的程序连接即可。新的startup.a51会自动代替系统默认的启动模块。

二十三、keil C51 怎样把修改的startup.a51 加到工程文件中

直接加入即可

注意不要改动?STACK,?C_START,?C_STARTUP等符号。startup.a51直接加入项目,不用修改也可。可在内面自己修改汇编的一些限制或堆栈指针。

二十四、关于波特率的设置

我在设定串口波特率时发现一个问题:在晶体震荡器为11.0592MHz时,若设9600BPS的话,

TH1=0XFD,TL1=0XFD,而要设19200BPS的话,TH1、TL1有否变化,如果没变,为什么?

如果变了,又为什么?(因为我看书上俩个是一样的),希望大家点拨。

答:

当电源控制寄存器(PCON)第BIT7(SMOD)为1时波特率加倍。

TH1和TL1的值不变.

二十五、如何在C中声明保留这部分RAM区不被C使用?

我不知道在C源程序中怎么控制这个,但在汇编程序中加入下面一段就行:

DSEG AT 20H

AA: DS 10

这样C51就不会占用20H--29H了

或者在c51里这样定义:

uchar data asm_buff[10] _at_ 0x20;

二十六、问浮点运算问题

我在用C51时发现它对传递浮点参数的个数有限制,请问:

1)参数是以全局变量的形式传递的,请问以全局变量的形式传递的参数也有限制吗?

2)这种传递浮点参数的限制有多少呢?

3)float*float的结果是float类型还是double类型?能否直接赋值给float类型的变量?

答:

由于KEIL C51的参数传递是通过R0-R7来传递的,所以会有限制。

不过KEIL提供了一个编译参数,可以支持更多参数的传递。具体

的内容见KEIL的PDF文档。

我建议你把多个要传递的参数定义到指针或结构体中去,传递参

数通过指针或结构进行,这样好一些。

第3个问题回答是YES,你自己试试不就知道了。

二十七、如何在某一个地址定义ram

用_at_ 命令,这样可以定位灵活一点的地址

uchar xdata dis_buff[16] _at_ 0x6020 ;//定位RAM

将dis_buff[16]定位在0x6020开始的16个字节

二十八、keil c中,用什么函数可以得到奇偶校验位?

例如32位数据,将四个字节相互异或后检查P即可,若耽心P被改变,可用内嵌汇编。

#include

unsigned char parity(unsigned char x){

x^=x;

if(P)return(1);

else return(0);

}

unsigned char parity2(unsigned int x){

#pragma asm

mov a,r7

xrl ar6,a

#pragma endasm

if(P)return(1);

else return(0);

}

2. C++&c语言高手帮忙

#include<iostream>
#include<cstdlib>

using namespace std;
int main(int argc,char* argv[])
{
int n,m,max=0,maxindex,k,beginindex,*action;

cout<<"请输入n,k:";
cin>>n;
cin>>k;
action=new int[n];
cout<<"请输入"<<n<<"个eggache值"<<endl;
for(int i=0;i<n;i++)
{
cin>>action[i];
}
for(int i=0;i<n;i++)
{
m=1;
beginindex=i;
for(int j=i+1;j<n;j++)
{
if(abs(action[j])-abs(action[j-1])>k)
{
break;
}
m++;
}
if(m>max)
{
max=m;
maxindex=beginindex;
}
}
cout<<"max="<<max<<endl;
for(int i=maxindex;i<maxindex+max;i++)
{
cout<<action[i]<<" ";
}
cout<<endl;
delete [] action;
system("PAUSE");
return EXIT_SUCCESS;
}

3. C语言大作业.

输入十名顾客的信息到结构体数组中,最后统计这十名中购买商品总额最大的顾客,将他的信息打印输出。
//并按照下列各式把信息存入到customer.txt中:
//0001 Kate 5 822.8
//0002 Jame 7 2761.9
//2011.1.11 11:37
#include<stdio.h>
#include<math.h>
#define CST_NUM 10//宏定义客户数目
struct customer
{
int num;
char name[20];
int amount;
float value;
}cst[CST_NUM];//定义结构体customer,并声明结构体数组cst[CST_NUM].
void printline(void);
void sort_cst(struct customer[],int);
void print_cst(struct customer[],int);
void main(void)
{
FILE *f1;//声明文件指针
int h=sin(0);//为编译器装载float类型
int i;
for(i=0;i<CST_NUM;i++)//从键盘读取客户信息
{
printline();
printf("请输入第%d名顾客的编号",i+1);
scanf("%d",&cst[i].num);
putchar('\n');
fflush(stdin);//清流
printf("请输入第%d名顾客的姓名",i+1);
scanf("%s",cst[i].name);
putchar('\n');
fflush(stdin);//清流
printf("请输入第%d名顾客的商品数量",i+1);
scanf("%d",&cst[i].amount);
putchar('\n');
printf("请输入第%d名顾客的商品总额",i+1);
scanf("%f",&cst[i].value);
putchar('\n');
fflush(stdin);//清流
}
sort_cst(cst,CST_NUM);//客户信息排序
print_cst(cst,CST_NUM);//将客户信息输出至屏幕
f1=fopen("customer.txt","w");//打开文件
fprintf(f1,"客户编号 客户姓名 商品数量 商品总额\n");
for(i=0;i<CST_NUM;i++)
{
fprintf(f1,"%5d%12s%10d%10.1f\n",cst[i].num,cst[i].name,cst[i].amount,cst[i].value);//存入客户信息

}
fclose(f1);//关闭文件
getch();
}
void sort_cst(struct customer cst[],int cst_num)//自定义函数:客户信息排序
{
int i,j;
struct customer temp;
for(i=0;i<cst_num;i++)
{
for(j=0;j<cst_num;j++)
{
if(cst[i].value>cst[j].value)
{
temp=cst[i];
cst[i]=cst[j];
cst[j]=temp;
}
} }
}
void print_cst(struct customer cst[],int cst_num)//自定义函数:客户信息显示
{
int i;
printline();
printf("客户编号 客户姓名 商品数量 商品总额\n");
for(i=0;i<cst_num;i++)
{
printf("%5d",cst[i].num);
printf("%12s",cst[i].name);
printf("%10d",cst[i].amount);
printf("%10.1f\n",cst[i].value);
}
printline();
}
void printline(void)//自定义函数:画线
{
int i;
printf("\n");
for(i=0;i<50;i++)
{
printf("_");
}
printf("\n");
}

4. c语言求解释

两个的<<表示按位操作,就是一个二进制数把每一位都往左移动。
如果它是int型的,普通电脑上一般就是4字节,就是32个bit,就是:
00000000 00000000 00000000 00000001
然后如果r=2那么1<<r就变成了:
00000000 00000000 00000000 00000100
&表示按位与,而&&表示“并且”或者“同时成立”
按位与可以理解为每一位做乘法
如果rst是4的话,那么就是
00000000 00000000 00000000 00000100
那么它与
00000000 00000000 00000000 00000100
按位相乘,结果还是
00000000 00000000 00000000 00000100

如果是
00000000 00000000 00000000 00000100

11111111 11111111 11111111 11111111
按位相乘,结果还是
00000000 00000000 00000000 00000100
因为零和零相乘是零

于是当rst的右边第r+1位是1时,或者cst的右边第c+1位是1的时候,就返回false
否则返回true

5. 跪求大神帮忙写一个c语言程序,要求是实现两个离散数字信号的加减乘除。

数字存储示波器获取的是固定时间间隔(窗口)Y轴信号幅值,两个信号的相加减完成信号的叠加功能,但两个信号的乘除的物理意义又是什么呢?

6. 可以作为C语言标识符的是

A, void ,define 是关键字,不能作为标识符,C,横线开头的不能作为标识符,下划线开头的可以,D,数字开头的不能作为标识符,总结:以字母和下滑线开头的可以作为标识符

7. C语言使用指定函数去除重复串

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*把结果存到第三个字串*/
void PartString(char *Str1,char *Str2,char *Str3)
{
char *s=Str1,*p=Str3;
int len1=strlen(Str1),len2=strlen(Str2);
int n;

for(s=Str1;s<Str1+len1-len2;)
{
if(strncmp(s,Str2,len2))
{
*p++=*s++;
}
else
{
s+=len2;
}
}
for(;s<Str1+len1;)
{
*p++=*s++;
}
*p='\0';
}

/*直接在字串1中剔除字串2*/
char* PartoutString(char *Str1,char *Str2)
{
char *s=Str1,buffer[30],*p=buffer;
int len1=strlen(Str1),len2=strlen(Str2);
int n;

for(s=Str1;s<Str1+len1-len2;)
{
if(strncmp(s,Str2,len2))
{
*p++=*s++;
}
else
{
s+=len2;
}
}
for(;s<Str1+len1;)
{
*p++=*s++;
}
*p='\0';

strcpy(Str1,buffer);
return Str1;
}

int main(void)
{
char Str[]="ABCDEFAABCFGH";
char SubStr[]="ABC";
char PartStr[30];

printf("%s\n",Str);
printf("%s\n",SubStr);

PartString(Str,SubStr,PartStr);
printf("%s\n",PartStr);

printf("\n");
PartoutString(Str,SubStr);
printf("%s\n",PartStr);

system("pause");
return 0;
}

8. c语言编的汇款系统

搂主写这个程序干吗?
这个汇款系统有什么意义!
除了计算出你所交的汇费以外,貌似没有别的用途。

9. 帮助编写一个c语言程序 微型命令解释程序

一般地可以从标准输入中读取字符串

然后通过正则表达式或者手工匹配对字符串进行解析

首先解析指令

然后再解析指令的参数

最后根据指令和参数再通过相应操作系统提供的api来完成相关任务


下面是一个简单的c语言例子

解析的操作在各平台都是一样的

我这里以linux平台为基础做一个例子(该程序是可移植的)


首先定义命令操作的一些接口头文件(fos.h)

#ifndef_FOS_H
#define_FOS_H

#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dirent.h>
#include<sys/types.h>
#include<errno.h>
#include<sys/stat.h>

#defineBUF2048
#defineMAX_PATH512

voidshow_dir(void);

int_file(char*from,char*to,mode_tmode);

int(char*file,char*old_path,char*to,mode_tmode,
uid_tuid,gid_tgid);

int_dir(char*old_path,char*to);

intremove_file(char*filename);

intremove_dir(char*filename);

#endif


然后实现各接口(fos.c)

#include"fos.h"

#defineJMP((strcmp(dir->d_name,".")==0)||(strcmp(dir->d_name,"..")==0))

voidshow_dir(void)
{
DIR*dirp;
structdirent*dir;

dirp=opendir(".");
if(dirp==NULL)
return;

while((dir=readdir(dirp))!=NULL)
printf("%s ",dir->d_name);

closedir(dirp);
}

int_file(char*from,char*to,mode_tmode)
{
intin,out;
charbuf[BUF];
size_tn;

if((in=open(from,O_RDONLY))==-1)
return-1;

if((out=open(to,O_CREAT|O_WRONLY,mode))==-1)
{
close(in);
return-1;
}

while((n=read(in,buf,sizeof(buf)))>0)
write(out,buf,n);

close(in);
close(out);

if(n==-1)
return-1;

return0;
}

int(char*file,char*old_path,char*to,mode_tmode,
uid_tuid,gid_tgid)
{
intin,out;
charbuf[BUF];
size_tn;

if((in=open(file,O_RDONLY))==-1)
return-1;
if(chdir(to)==-1)
{
close(in);
return-1;
}

if((out=open(file,O_CREAT|O_WRONLY,mode))==-1)
{
close(in);
return-1;
}
chown(file,uid,gid);

while((n=read(in,buf,sizeof(buf)))>0)
write(out,buf,n);

close(in);
close(out);
if(n==-1)
return-1;

if(chdir(old_path)==-1)
return-1;

return0;
}

int_dir(char*old_path,char*to)
{
DIR*dirp;
structdirent*dir;
charbuf[MAX_PATH];
structstatmode;
char*current;
charnew_path[MAX_PATH];

if((dirp=opendir(old_path))==NULL)
return-1;
if(chdir(old_path)==-1)
{
closedir(dirp);
return-1;
}
if((current=getcwd(NULL,0))==NULL)
{
closedir(dirp);
return-1;
}

while((dir=readdir(dirp))!=NULL)
{
if(JMP)
continue;

if(stat(dir->d_name,&mode)==-1)
{
perror(dir->d_name);
continue;
}

if(S_ISDIR(mode.st_mode))
{
if(chdir(to)==-1)
continue;
if(mkdir(dir->d_name,mode.st_mode)==-1)
continue;
chown(dir->d_name,mode.st_uid,mode.st_gid);
if(chdir(current)==-1)
continue;
snprintf(new_path,sizeof(new_path),"%s/%s",to,dir->d_name);
if(_dir(dir->d_name,new_path)==-1)
continue;
}
else
{
if((dir->d_name,current,to,mode.st_mode,mode.st_uid,mode.st_gid)==-1)
continue;
}
}

free(current);
closedir(dirp);
if(chdir("..")==-1)
return-1;

return0;
}

intremove_file(char*filename)
{
structstatbuf;

if(stat(filename,&buf)==-1)
return-1;

if(S_ISDIR(buf.st_mode))
remove_dir(filename);
else
returnremove(filename);
}

intremove_dir(char*filename)
{
DIR*dirp;
structdirent*dir;
structstatbuf;

if(rmdir(filename)!=-1)
return0;

if((dirp=opendir(filename))==NULL)
return-1;

chdir(filename);
while((dir=readdir(dirp))!=NULL)
{
if(JMP)
continue;

stat(dir->d_name,&buf);

if(S_ISDIR(buf.st_mode))
remove_dir(dir->d_name);
else
remove(dir->d_name);
}

closedir(dirp);
chdir("..");
rmdir(filename);

return0;
}

接着我们就可以读入数据并解析命令行了

#include"fos.h"

#defineSHOW_DIR0
#defineCOPY_FILE1
#defineDELETE_FILE2
#defineSHOW_STR3
#defineEXIT4
#defineERROR-1

#defineTEST_CMD(c,n,s,f)
{
if(strncmp(cmd,c,n)==0)
{
cmd+=n;
while(*cmd!=''&&*cmd)
++cmd;
if(*cmd=='')
{
while(*cmd=='')
++cmd;
snprintf(args,512,"%s",cmd);
returns;
}
if(f)
returns;
}
}

intparse_cmd(char*cmd,char*args)
{
TEST_CMD("cdir",4,SHOW_DIR,1);
TEST_CMD("c",5,COPY_FILE,0);
TEST_CMD("cerase",6,DELETE_FILE,0);
TEST_CMD("Cdis",4,SHOW_STR,0);
TEST_CMD("Cend",4,EXIT,1);

returnERROR;
}

intmain(intargc,char**argv)
{
charcmd[1024];
charargs[512];
char*p;
structstatbuf;
size_tn;

while(1)
{
//memset(cmd,0,sizeof(cmd));

printf(">");
fflush(stdout);
n=read(STDIN_FILENO,cmd,sizeof(cmd)-1);
cmd[n-1]='';
//fread(cmd,sizeof(cmd)-1,1,stdin);

switch(parse_cmd(cmd,args))
{
caseSHOW_DIR:
show_dir();
break;

caseCOPY_FILE:
p=strtok(args,"");
stat(p,&buf);
if(S_ISDIR(buf.st_mode))
_dir(p,strtok(NULL,""));
else
_file(p,strtok(NULL,""),buf.st_mode);
break;

caseDELETE_FILE:
remove_file(args);
break;

caseSHOW_STR:
printf("%s ",args);
break;

caseEXIT:
gotoend;
break;

default:
printf("错误的指令! ");
}
}

end:
printf("退出... ");

return0;
}

这里我没有使用正则表达式来完成解析的工作

事实上我们也可以使用正则表达式来进行命令的解析

上面的例子只是一个简单的例子

要做到更加完善则需要添加更多的代码

但对于微型命令解析来说,基本的步骤和方法就是这样了

10. 谁能帮我设计一个使用C语言库函数的简单程序

#include <stdio.h>
#include <string.h>
void main()
{
char a[] = "hello";
char b[100];
memset(b, 0, sizeof(b));
strcpy(b, a);
strcat(b, "world!");
printf("%s\n", b);
}
5个函数,memset,sizeof,strcpy,strcat,printf,个个常用。