C语言经验技巧【一】(转载)
发信人: ahphone (幸福如猪|我还不如去睡觉长肉), 信区: C
标 题: C语言经验技巧【一】(zz)
发信站: 饮水思源 (2005年01月01日08:28:57 星期六), 站内信件
位运算&的运用
a&0xff 高8位清零,底8位保持原数
a&0xff00 高8位保持原数,底8位清零
单精度和双精度的有效位数
在Turbo C里
float 有效位数7位
double 有效位数16位 (由左至右)
奇怪的(i++)+(i++)+(i++)表达式
(i++)+(i++)+(i++)这条表达式运算原理是这样的,它们都把i先赋值,比如i是5那么这
个得数就是15了。这里补充说明一下,有可能对于某种编译器有不同的结果,这里以TC
为例。
scanf 加*的作用
sanf格式符%后面放一个*,表示在输入时跳过对应的输入项而不予读入
比如:
scanf("%*c"); 没有任何输入
scanf("%*c%%d,data"); 代表前一个不予读入,跟着%%是输出%,再输入整数类型data
do/while 循环语句
do
语句
while (条件) ; /*注意do/while循环语句结尾一定要加上分号;*/
还有就是do/while和其它编程语言的不同,它的条件不是直到真才退出,而是当真是才
退出。不过我们可以动些手脚,小技巧将它改为直到条件才退出,就是将条件改为逻辑
非
求位数
main()
{
long num=1234567,n;
n=(num%1000000)/100000; /* 求余数再除 */
printf("%d",n);
}
例:(num%1000000)/100000 求十万位
(num%1000)/100 求十位
经过上例引出如果想得到什么位的就余想求的数再除以该位数,不过数据类型一定为正
数。
求得扫描码
ESC 0x11b
UP 0x4800
DOWN 0x5000
LEFT 0x4b00
RIGHT 0x4d00
如果想知到键盘的数据码就要用到bioskey(0)
/****************************************************************/
bioskey函数
函数原型: int bioskey(int cmd);
函数功能:
利用函数bioskey可以实现三种功能,参数cmd为要实现的功能号,值只能为0、1、2,具
体含义如下:
0:在系统中有一个按键队列,所有的键盘按键都在这里排成队。该功能就是如果按键队
列中有按键,那么读取队列首位的按键,并返回按键值;否则等待键盘按键出现。( 其
中按键值的高字节为扫描码,低字节为ASCII码)
1:如果按键队列中没有按键,那么返回零,否则返回非零。
2:返回特殊按键Shift、Ctrl、Alt等键的按键状态。
/****************************************************************/
#include<stdio.h>
#include<bios.h>
int specialkey(int key[2]);
main()
{
int key[2]={0,0};
printf("扫描码 ASCⅡ码\n");
for(;;)
{
specialkey(key);
if(key[0]||key[1])
{
printf(" %d ",key[0]);
printf("%d \n",key[1]);
if(key[0]==1)exit(1);
}
}
}
specialkey(int key[2])
{
if(bioskey(1)){key[0]=0;key[1]=0;return;}
key[0]=key[1]=bioskey(0);
key[0]>>=8; /*高八位落到底八位*/
key[1]&=0xff; /*高八位清零 0xff00 这个是底八位清零 */
}
0xff = ff16 = 111111112
等待函数
delay(5000); /*参加单位微秒,这个函数通常都不精确*/
sleep(5); /*参加单位秒,比较精确*/
几个常用的循环
for(;;)
{
:
:
} /*没条件循环*/
while()
{
:
:
} /*没条件循环*/
while((c=getch())!='\n')
{
:
:
} /*这个是通常用来循环赋值给字符数组,直到回车才停止*/
while(*py!='\0')
printf("%c",*py++); /*同样也可以用pritnf("%s",py);
随机函数
#include <time.h>
randomize(); /*随机种子*/
random(10); /*值为十之内的数*/
另一种
#include <time.h>
srand();
rand()%10; /返回值为32767 ,通过取余运符号变为十之内的数*/
比如:
#define N 10 /*N 取1-32767范围内,可以相应的求出最高数值,N为10就得最高数为9
,N为6就最高数为5。
main()
{
int x;
srand(time(NULL));
x=rand()%N+1;
printf("the random number is :%d",x);
}
标 题: C语言经验技巧【一】(zz)
发信站: 饮水思源 (2005年01月01日08:28:57 星期六), 站内信件
位运算&的运用
a&0xff 高8位清零,底8位保持原数
a&0xff00 高8位保持原数,底8位清零
单精度和双精度的有效位数
在Turbo C里
float 有效位数7位
double 有效位数16位 (由左至右)
奇怪的(i++)+(i++)+(i++)表达式
(i++)+(i++)+(i++)这条表达式运算原理是这样的,它们都把i先赋值,比如i是5那么这
个得数就是15了。这里补充说明一下,有可能对于某种编译器有不同的结果,这里以TC
为例。
scanf 加*的作用
sanf格式符%后面放一个*,表示在输入时跳过对应的输入项而不予读入
比如:
scanf("%*c"); 没有任何输入
scanf("%*c%%d,data"); 代表前一个不予读入,跟着%%是输出%,再输入整数类型data
do/while 循环语句
do
语句
while (条件) ; /*注意do/while循环语句结尾一定要加上分号;*/
还有就是do/while和其它编程语言的不同,它的条件不是直到真才退出,而是当真是才
退出。不过我们可以动些手脚,小技巧将它改为直到条件才退出,就是将条件改为逻辑
非
求位数
main()
{
long num=1234567,n;
n=(num%1000000)/100000; /* 求余数再除 */
printf("%d",n);
}
例:(num%1000000)/100000 求十万位
(num%1000)/100 求十位
经过上例引出如果想得到什么位的就余想求的数再除以该位数,不过数据类型一定为正
数。
求得扫描码
ESC 0x11b
UP 0x4800
DOWN 0x5000
LEFT 0x4b00
RIGHT 0x4d00
如果想知到键盘的数据码就要用到bioskey(0)
/****************************************************************/
bioskey函数
函数原型: int bioskey(int cmd);
函数功能:
利用函数bioskey可以实现三种功能,参数cmd为要实现的功能号,值只能为0、1、2,具
体含义如下:
0:在系统中有一个按键队列,所有的键盘按键都在这里排成队。该功能就是如果按键队
列中有按键,那么读取队列首位的按键,并返回按键值;否则等待键盘按键出现。( 其
中按键值的高字节为扫描码,低字节为ASCII码)
1:如果按键队列中没有按键,那么返回零,否则返回非零。
2:返回特殊按键Shift、Ctrl、Alt等键的按键状态。
/****************************************************************/
#include<stdio.h>
#include<bios.h>
int specialkey(int key[2]);
main()
{
int key[2]={0,0};
printf("扫描码 ASCⅡ码\n");
for(;;)
{
specialkey(key);
if(key[0]||key[1])
{
printf(" %d ",key[0]);
printf("%d \n",key[1]);
if(key[0]==1)exit(1);
}
}
}
specialkey(int key[2])
{
if(bioskey(1)){key[0]=0;key[1]=0;return;}
key[0]=key[1]=bioskey(0);
key[0]>>=8; /*高八位落到底八位*/
key[1]&=0xff; /*高八位清零 0xff00 这个是底八位清零 */
}
0xff = ff16 = 111111112
等待函数
delay(5000); /*参加单位微秒,这个函数通常都不精确*/
sleep(5); /*参加单位秒,比较精确*/
几个常用的循环
for(;;)
{
:
:
} /*没条件循环*/
while()
{
:
:
} /*没条件循环*/
while((c=getch())!='\n')
{
:
:
} /*这个是通常用来循环赋值给字符数组,直到回车才停止*/
while(*py!='\0')
printf("%c",*py++); /*同样也可以用pritnf("%s",py);
随机函数
#include <time.h>
randomize(); /*随机种子*/
random(10); /*值为十之内的数*/
另一种
#include <time.h>
srand();
rand()%10; /返回值为32767 ,通过取余运符号变为十之内的数*/
比如:
#define N 10 /*N 取1-32767范围内,可以相应的求出最高数值,N为10就得最高数为9
,N为6就最高数为5。
main()
{
int x;
srand(time(NULL));
x=rand()%N+1;
printf("the random number is :%d",x);
}