[C] 纯文本查看 复制代码 main(){
int c = 0x20;
char a;
while(c < 0x80)
{
if(c!= 0x20 && c%16 == 0)
{
printf("\n");
}
if(!(c%16))
{
printf("%x0H: ",c/16);
}
printf("%c",c++);
}
printf("\nPlease input num: ");
scanf("%c",&a);
printf("a is %c\n",a);
if('A' <= a && a<= 'Z') /*千万不要写成('a'<= c <= 'z')*/
{
/* a += 0x20; */
c = c | 0x20;
}
else
{
if('a' <= a && a <= 'z') /*千万不要写成('a'<= c <= 'z')*/
{
/* a -= 0x20; */
c = c & 0xdf;
}
}
printf("a is new %c",a);
}
这是C语言的逻辑('a'<= c && c <= 'z')这是数学逻辑('a'<= c <= 'z');不要想当然的用数学逻辑让编译器执行,编译器不认;下次一定注意;
A 0x41: 0100-0001
a 0x61: 0110-0001
相差0x20;
布尔运算:(按位操作 0 < - > 1)
或运算(|):只要有一个为1,结果为1;
x | z == 1
0 1 == 1
1 0 == 1
c = c | 0x20;
与运算(&):只要有一个为0,结果为0;
x & z == 0
1 0 == 0
0 1 == 0
c = c & 0xdf;
取反(~):
char a = 0x64;
a = ~a;
异或运算(^):
0 1 //1
1 0
0 0 //0
1 1
相同的0;不同得1;
A 0X64
B 0X32
A ^ B
0110-0100 A
0011-0010 B
-------------
0101-0110 C
0011-0010 B
-------------
0110-0100 A
A^B得到结果c;那么A、B、C三者之间任意两个数异或都会得到第三个数;
======================================================================
main()
{
char i = 0;
char * str = "Hello,Nisy!";
for(; i < 10;i++ )
printf("%X",*(str + i));
printf("\n%s",str);
}
把"Hello,Nisy!"存储在*str内存里面;printf("%x",*(str + i));打印的时候%x是小写就出入小写,反之亦然;
-----------------------
main()
{
int i;
char a[15]; /*现申请15个字节*/
for(i = 0; i < 15 ;i++)
{
a[i] = 'a'; /*把这15个字节都赋值为a*/
}
for(i = 0; i < 15 ;i++)
{
printf("%c",a[i]); /*把这15个为a字节的数据打印出来*/
}
printf("\n");
scanf("%10s",a); /*scanf("%s");%s之间必须要设定长度*/
printf("%s\n",a); /*%s为字符串*/
for(i = 0; i < 15 ;i++)
{
printf("%2X",a[i]); /*输入数据后,把输入的数据按16进制输出;疑问:%x和%2x之间的关系?*/
}
printf("\n");
i = 0;
while(a[i] != 0) /*测试一下是否字符串是以0结果的,遇到0停止打印*/
{
printf("%c",a[i]);
i++;
}
}
结论:%s输出字符串,在内存中字符串是以0结果的;
=============================================================================
封装函数:
void showstr(char * str)
{
int i=0;
while(str[i])
{
printf("%c",str[i]);
i++;
}
printf("\n");
}
main()
{
int i;
char str[20];
for(i = 0; i < 20; i++)
{
str[i] = 'a';
}
scanf("%10s",str);
showstr(str);
for(i = 0; i < 20; i++)
{
if(str[i] >= 'A'&& str[i] <= 'z')
{
str[i] |= 0x20;
}
}
showstr(str);
}
把
int i=0;
while(str[i])
{
printf("%c",str[i]);
i++;
}
printf("\n");
这段重复的代码封装成一个函数,在调用的时候直接写showstr(str);就可以不需要再重新打一遍代码;
---------------------------------------
用goto解释for()循环:
main()
{
int i;
/* for(i = 0 ; i < 10 ; i++)
{
printf("%d",i);
} */
i = 0;
/* while(i < 10) */
while_start: /*先在定义开始的标号*/
if(i < 10) /*判断条件是否满足*/
goto while_ok; /*如果满足条件就跳到while_ok;这句执行*/
else
goto while_end; /*否则就跳到while_end;这句执行*/
{
while_ok: /*while_ok;的代码*/
printf("%d",i);
i++;
goto while_start; /*执行完后跳到while_start;这里*/
}
while_end: /*结束*/
i = i + 1;
mark:
i = 1 + 2;
printf("\n");
}
--------------
程序中 每一个函数 都需要在main()外部申请一些空间来实现函数的调用和返回;
每一个函数 都需要以下的空间长度:
参数的空间;
函数的返回地址;
第九课最后还拆解了上面的封装函数;(未写)
|