因为double型下的 1.2e0.5 ,e后面不能带有小数,只能是整数。
5. D
float y=0.0,a[]={2.0,4.0,6.0,8.0,10.0},*p
int i
p=&a[1]/**将a[1]的地址赋给P*/
for(i=0i<3i++) y+=*(p+i) /**从p开始将p,p+1,p+2地址的值
加起来*/
printf("%f\n",y)/*输出总合*/
理解了上述的程序段,那么可以知道
在循环中,i=0时,*p=4.0 ,y=4.0
i=1时,*p=6.0 ,y=10.0
i=2时,*p=8.0 ,y=18.0
因为是浮点形式输出,所以最终的结果是D
14.A
fopen的原型是:FILE *fopen(const char *filename,const char
*mode)
fclose的原型是:fclose(FILE *fp)
fprintf的原型是:int fprintf(FILE*stream, const
char*format[,argument]…)]
fread的原型是:int fread(void *buf,int size,int count,FILE
*stream)
参照上述函数原型,就可以得到A是对的。其他错的。
18. C
因为在循环条件中,首先定义i=1,但是在循环体中并没有对i进行操
作,那么i就一直保持不变=1,而只要i<3那么就进入循环,所以进入
循环的条件一直都是为真,所以就一直循环,变成死循环,无法进入p
rintf那条语句了。
20. B
int *p,a=10,b=1
p=&aa=*p+b
首先p是一个指针,p=&a这个是让p指向a,也就是说*p里面存的是a的
值10;a=*p+b这句就是进行加法运算,10+1=11赋给a,所以a的最终
结果就是11
21. D
这个函数的大意就是说,假设p存放的是最小的那个数的下标,从第0
个数开始跟后面的数进行比较,如果这个数比后面的数大,那么就把
后面的那个数的下标作为最小值的下标赋给p,然后继续进行比较,直
到全部比较结束。
25. A
int k=0
while(k=1) k++
k=1实际上就是1,也就是命题为真,所以不管怎么样进入循环体的条
件永远都成立,所以每次都可以进入循环,所以是死循环。
28.D
st(char *s)
{char *q=s/**将字符串s的首地址赋给指针q*/
while(*q!='\0') q++/**如果q地址的内容不是字符串结束符的话,
那就取下一个*/
return (q-s) /**返回q-s的值,这个是一个int类型,实际上就是
取这个字符串的长度*/
}
30.B
程序跑的
31.A
main()
{int i=0
while(1)
{ printf("*") /*打印一个* */
i++/*此时i=1*/
if(i<3) break /**因为i=1满足if条件,所以跳出循环体*/
}
printf("\n")
}
所以最终只打印了一个*
32. D
#include <stdio.h>
main(int argc,char *argv[])
{
while(--argc) /**只要参数的总数自减不为0,那么进入循环体*/
printf("%s",argv[argc])/**打印出第argc个参数*/
printf("\n")
}
因为argc=4,所以会进入循环体4次,--argc是先做判断再自减
33 A
^按位异或
<<左移
优先级,左移〉按位异或
按照这个规则去算就可以了
所以选择A
34. B
getchar()不能带参数。
把通讯做成命令,应答的帧形式,最好是帧长度固定。举个例子,
主机发送给从机的数据
帧头 命令 参数1 参数2 参数3 参数4 校验和 帧尾
从机回复的数据
回复帧头 应答命令 结果1 结果2 结果3 结果4 校验和 回复帧尾
在从机接收到帧头和命令后,并不进行处理,而是暂存起来,知道接收到帧尾,并接校验通过后,才真正执行。
假如从收到帧头起,一定的时间内,还没有收到完整的帧,或者帧校验失败,那么从机用特殊的格式回复。
当然,超时时间也可以不从帧头算,从上一个字节算也可以。
这样的帧结构就能保证通讯的正确性,一般来讲,帧越长,通讯效率越高,但是占用暂存空间越打,而且出错的可能越大,出错后付出的代价也越大,实时性也越差,而且帧长度超过一定值后,通讯效率也不会再明显增加。
帧越短,通讯效率越低,但是灵活。
像上面的例子,帧长度是8,通讯效率是62.5%。如果将帧长度改为16,通讯效率变为81.25%
下面是源代码:
直接拷贝就能够编译通过了。当然要把寄存器改了。只有几行需要改的哈:
#include "tot.h"
#define GOOD_PARSE 0
#define BADID_PARSE 1
#define BADLEN_PARSE 2
short parsed
char *pbuf
void tsip_input_proc(TSIPPKT *rpt,unsigned char inbyte)
void rpt_packet(TSIPPKT *rpt,int *obuf)
void tsip_input_proc(TSIPPKT *rpt,unsigned char inbyte)
{
switch(rpt->status)
{
case TSIP_PARSED_DLE_1:
switch(inbyte)
{
case 0:
case ETX: // illegal data
rpt->len=0
rpt->status=TSIP_PARSED_EMPTY
break
case DLE: // try normal message start again
rpt->len=0
rpt->status=TSIP_PARSED_DLE_1
break
default: // legal ID start message
rpt->len=0
rpt->status=TSIP_PARSED_DATA
rpt->codes=inbyte
break
}
break
case TSIP_PARSED_DATA:
switch(inbyte)
{
case DLE: // expect DLE or ETX next
rpt->status=TSIP_PARSED_DLE_2
break
default: // normal data byte
rpt->buf[rpt->len]=inbyte
rpt->len++
break
}
break
case TSIP_PARSED_DLE_2:
switch(inbyte)
{
case DLE: // normal data byte
rpt->buf[rpt->len]=inbyte
rpt->len++
rpt->status=TSIP_PARSED_DATA
break
case ETX: // end of message,return TURE here
rpt->status=TSIP_PARSED_FULL
break
default: // error:treat as TSIP_PARSED_DLE_1,start new report packet
rpt->codes=inbyte
rpt->len=0
rpt->status=TSIP_PARSED_DATA
break
}
break
case TSIP_PARSED_FULL:
case TSIP_PARSED_EMPTY:
default:
switch(inbyte)
{
case DLE: // normal message start
rpt->len=0
rpt->status=TSIP_PARSED_DLE_1
break
default: // error:ignore inbyte
rpt->len=0
rpt->status=TSIP_PARSED_EMPTY
break
}
break
}
if(rpt->len>MAX_RPTBUF) // error:start new report packet
{
rpt->status=TSIP_PARSED_EMPTY
rpt->len=0
}
}
//串口字符交换*******************************************************************/
int bGetShort(char *bp)
{
int outval
char *optr
optr=(char *)&outval
*optr=*bp<<8 &0xFF00
*optr=*(++bp) | *optr
return outval
}
//串口报文
int rpt_0x14(TSIPPKT *rpt,int output[1])
{
char *buf
buf=rpt->buf
if(rpt->len!=2)return 0
output[0]=bGetShort(&buf[0])
return 1
}
void rpt_packet(TSIPPKT *rpt,int *obuf)
{
parsed=GOOD_PARSE
switch(rpt->codes)
{
case 20:
rpt_0x14(rpt,obuf)
break
default:
parsed=BADID_PARSE
break
}
}
//发送
void send_cmd(TSIPPKT *cmd, void sendb(char))
{
char *cbuf, *cbufend
sendb (DLE)
sendb (cmd->codes)
cbufend = cmd->buf + cmd->len
for (cbuf = cmd->bufcbuf <cbufendcbuf++) {
if (*cbuf == DLE) sendb (DLE)
sendb (*cbuf)
}
sendb (DLE)
sendb (ETX)
}
void sendb(char outbyte)
{
//ScibRegs.SCITXBUF=outbyte
}
//字符交换
void bPutShort(unsigned int *in, char *out)
{
char *inptr
inptr=(char *)in
*out= (*inptr>>8) &0x00FF
*(++out) = *inptr &0x00FF
}
//命令
void cmd_0x0(TSIPPKT *cmd,SCICALOUT *out)
{
bPutShort(&(out->ve),&(cmd->buf[0]))
cmd->len = 2
cmd->codes =37
}
//串口使用中断方式接收,发送不采用中断
int input[MAX_RPTBUF]
void SCIRXD_ISR(void)
{
tsip_input_proc(&rpt,ScibRegs.SCIRXBUF.bit.RXDT)// analyse
if (rpt.status == TSIP_PARSED_FULL) // receive complete
{
rpt_packet(&rpt,input) // output reports
rpt.status=TSIP_PARSED_EMPTY // prepare for next
}
ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1 // Clear Overflow flag
ScibRegs.SCIFFRX.bit.RXFFINTCLR=1 // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|= PIEACK_GROUP9 // Issue PIE ack
}
//发送调用方式
// cmd_100x0(&cmd)
// send_cmd(&cmd,&sendb)
//发送调用方式
// cmd_100x0(&cmd)
// send_cmd(&cmd,&sendb)
上面的就是源代码。。记住把寄存器改了哦。无论是单片机还是上位机都可以用这个哈。