C语言经验技巧破解C语言.docx

上传人:b****5 文档编号:3261059 上传时间:2022-11-21 格式:DOCX 页数:11 大小:19.18KB
下载 相关 举报
C语言经验技巧破解C语言.docx_第1页
第1页 / 共11页
C语言经验技巧破解C语言.docx_第2页
第2页 / 共11页
C语言经验技巧破解C语言.docx_第3页
第3页 / 共11页
C语言经验技巧破解C语言.docx_第4页
第4页 / 共11页
C语言经验技巧破解C语言.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C语言经验技巧破解C语言.docx

《C语言经验技巧破解C语言.docx》由会员分享,可在线阅读,更多相关《C语言经验技巧破解C语言.docx(11页珍藏版)》请在冰豆网上搜索。

C语言经验技巧破解C语言.docx

C语言经验技巧破解C语言

C语言经验技巧

位运算&的运用

a&0xff高8位清零,底8位保持原数

a&0xff00高8位保持原数,底8位清零

单精度和双精度的有效位数

在TurboC里

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()

{

longnum=1234567,n;

n=(num%1000000)/100000;/*求余数再除*/

printf("%d",n);

}

例:

(num%1000000)/100000求十万位

(num%1000)/100求十位

经过上例引出如果想得到什么位的就余想求的数再除以该位数,不过数据类型一定为正

数。

 

求得扫描码

ESC0x11b

UP0x4800

DOWN0x5000

LEFT0x4b00

RIGHT0x4d00

如果想知到键盘的数据码就要用到bioskey(0)

/****************************************************************/

bioskey函数

函数原型:

intbioskey(intcmd);

函数功能:

利用函数bioskey可以实现三种功能,参数cmd为要实现的功能号,值只能为0、1、2,具

体含义如下:

0:

在系统中有一个按键队列,所有的键盘按键都在这里排成队。

该功能就是如果按键队

列中有按键,那么读取队列首位的按键,并返回按键值;否则等待键盘按键出现。

(其

中按键值的高字节为扫描码,低字节为ASCII码)

1:

如果按键队列中没有按键,那么返回零,否则返回非零。

2:

返回特殊按键Shift、Ctrl、Alt等键的按键状态。

/****************************************************************/

#include

#include

 

intspecialkey(intkey[2]);

 

main()

{

intkey[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(intkey[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

randomize();/*随机种子*/

random(10);/*值为十之内的数*/

 

另一种

#include

srand();

rand()%10;/返回值为32767,通过取余运符号变为十之内的数*/

比如:

#defineN10/*N取1-32767范围内,可以相应的求出最高数值,N为10就得最高数为9

,N为6就最高数为5。

main()

{

intx;

srand(time(NULL));

x=rand()%N+1;

printf("therandomnumberis:

%d",x);

}

 

scanf();和gets();字符输入函数的比较

scanf("%s",s);这个函数不可以输入有空格的字符串,因为输入空格就代表着输入另一

个格式变量了。

gets();这个函数就可以输入有空格的字符串,不过一次只可以输入单一个变量的值。

 

const的一个好用处(函数形参)

voiddeal(constint[][13],constchar*[]);

const的作用是不改变传入的实参数

 

几个常用输入字符函数的比较

getch(void)

c=getch();/*返回从键盘读入的字符,不显示出来*/

 

getche(void)

c=getche();/*返回从键盘读入的字符,显示出来*/

 

C语言里"%n"是什么意思

是储存Printf中前面的字符个数>

inti,j;

printf("Andywu%nGPAStudio%n",&i,&j);

printf("%d,%d",i,j);/*那么输出的就是6和9*/

 

通过bioskey

(1);来到实现不执行当前的命令而跳往下一条命令

#include

#include

#include

 

main()

{

intkey;

inti;

for(;;)

{

if(bioskey

(1)!

=0)/*就是这个函数的主要功能了*/

{

key=bioskey(0);

if((key&0x00ff))key=key&0xff;

}

 

gotoxy(40,30);

printf("%d",i++);

if(key==27)break;

}

gotoxy(50,40);

cputs("结束");

getch();

}

 

kbhit()函数的,用来判断当前是否按下键

 

while(!

kbhit())/*kbhit();*/

{

printf("%d",i);

delay(1000);

}

 

数组指针

int(*p)[4];

是定义一个指向四个元素的数组指针

main(){

{

inta[4];

int(*p)[4];

intcount;

p=a;

for(count=0;count<4;count++)

{

printf("%d",*(p+i));

}

}

 

指向数组的指针运算

inta[3][4];

*(a+2)+3?

è&a[0]+11同样也可以为下式:

*(a+2)+3?

è&a[0][0]+4*2+3

因为a[0]和a[0][0]都代表了首地址

 

扬声器发音

sound(n);/*n是一个过百位数的数,比如100、200之类的数到什么数没有我都不太清

楚了!

*/

delay(1000);/*声音时间长度也可以用sleep

(1)*/

nosound();/*关闭声音*/

 

调试后看结果的问题

一个网友的问题"用一些c的编译器编译程序,在执行时,弹出的ms-dos窗口对结果数据

显示的太快,我还什么都没看到呢,窗口就关了,怎么办呀?

"

其实可以用这个命令getch();来到停止当时的程序。

 

复合运算符的特别运算

a/=b+c

这些都是一定先求了左边的才运算这个复合运算。

 

特殊的按键(方向键等)

在C语言扫描码是所有键盘上的识别码,ASCII码也是键盘里的字母和数字。

但是就是有

些特殊的键盘表达不出来,通常我们编程常常就需要这些按键,就象方向键和HOME、END

,F1、F2……等之类的键。

可是我们就只知道ASCII码,其实有一个技巧可以得到它的扫

描码。

程序如下:

intkey;

key=bioskey(0);/*得到扫描码和ASCII高八位扫描码,低八位ASCII码*/

if(key&0x00ff)key=key&0x00ff;/*如果低八位有的话就证明这可以用ASCII表达

出来的*/

elsekey=key>>8;/*否非则是向下移动八位取得高八位的扫描码*/

 

动态伸请数组

我们定义一个数组常常是规定了其长度,如果定义得少就不够用,定义得多了就会浪费

空间,那么我们怎么来控制这种场面呢?

是有方法的,因为不是太直观所以都没有常用

int*ab;

ab=(int*)malloc(n*sizeof(int);/*n这里是变量,随自己输的*/

这样就生成了一个指向n个空间的新地址,赋给了ab,ab就为首地址,像我们平时用数组

一样的形式调用第几个元素

ab[0];/*这里是第一个元素*/

ab[1];/*第二个元素*/

其实当然也可以算指针的形式一样*(ab+0)和*(ab+1)一样来到调用。

更灵活的一点就是不用的空间可以随时给删除,用free()这个函数

free(ab);这里只是删除当前ab指向的那个空间,而不是全部删除,知道了这点我们就

可以利用循环等其它方法来批量删除或其它特别的用途,这完全要靠自己的想象力了。

 

神秘函数getpass();

#include

main()

{

char*password;

password=(char*)getpass("Pleaseinputthenumber");/*这里输入不能显示出屏幕

*/

printf("%s",password);

}

这个函数可以用来做密码保护功能

 

指针的类型和指针所指向的类型

通常我们都很容易搞错这两个概念,因为就看上去好像就是一样吗。

可是真正运用起来

就有很大的区别,就像下面的一个例子吧。

main()

{

i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1