1. 在ubuntu下查看ASCII码表?
gec@ubuntu:~$ man ASCII(按’q’返回到终端下)
功能:ascii - ASCII character set encoded in octal, decimal, and hexadecimal
字符 转换为 八进制 十进制 十六进制
2. 如何查看ASCII码表?
Oct -> 八进制
Dec -> 十进制
Hex -> 十六进制
Char -> 字符
Oct Dec Hex Char
000 0 00 NULL '\0' -> (空白,什么都没有)
060 48 30 0
101 65 41 A
141 97 61 a
3. printf()函数输出格式?
%d -> 以十进制形式输出内容。
%o -> 以八进制形式输出内容。
%x -> 以十六进制形式输出内容。
%c -> 以字符形式输出内容。
%f -> 输出浮点型数据
%s -> 输出字符串
%p -> 输出指针地址
举例子:
#include
int main(int argc,char *argv[])
{
int a = 65;
char b = '0';
printf("a = %d\n",a); //65
printf("a = %o\n",a); //101
printf("a = %x\n",a); //41
printf("a = %c\n",a); //A
printf("b = %d\n",b); //48
printf("b = %o\n",b); //060
printf("b = %x\n",b); //30
printf("b = %c\n",b); //'0'
return 0;
}
结论: 其实字符类型数据也是整型数据。
所以在定义数组,为了更好的判断结束,可以定义char arr[] ,使用’\0’作为标志结束符
printf() -> 输出某段内存空间上值。
scanf() -> 从键盘中获取一些值,将这些值存放到某些内存空间上。
#include
int main(int argc,char *argv[])
{
int a;
scanf("%d",&a); -> 从键盘获取一个十进制数据,并存放在变量a对应的空间上
printf("a = %d\n",a); -> 将a变量对应的空间的数据输出
printf("&a = %p\n",&a); -> 将a变量的空间地址输出
return 0;
}
计算规则:从左到右依次计算,结果以最后一个表达式为准。
例子:
int a=1,b=5,c=10,d;
d = (a=a+b,c=b+c,a+c); a=1+5 -> 6 c=5+10 -> 15 6+15 -> 21
printf(“d = %d\n”,d);//21
练习1:
int a=1,b=2,c=3,d;
d = (a+b,b-=c,c+=c); //6
int a=1,b=2,c=3,d;
d = (c=a+3,b-=a,b++);//1 // b=1 先将b的值赋值给d,然后再自身+1
d = (c=a+3,b-=a,++b);//2
三目运算表达式形式:
表达式 ? 结果1 : 结果2;
如果表达式为真,则结果就是结果1。
如果表达式为假,则结果就是结果2。
例子1:
int a=1,b=2,c;
c = (a>b?a:b); -> 求出a与b之间的最大值。
例子2:
假设有以下表达式:“A ? i : j;”,请问以下哪个表达式与之等价? B
A. A == 0 ? i : j; -> 当A为真时,也就是说A是!0,!0是否等于0,肯定不是啦,所以结果j;
B. A!=0 ? i : j; -> 当A为真时,也就是说A是!0,!0肯定不等于0,肯定是啦,所以结果i;
C. A==1 ? i : j; -> 当A为真时,也就是说A是!0,!0是否等于1,不一定哦,所以不能100%确定结果。万 一:A=3.14
D. A!=1 ? i : j; -> 当A为真时,也就是说A是!0,!0肯定不等于1,不一定哦,所以不能100%确定结果。万一:A=1
将A为真带入
A -> 真 结果:i 非0即真
A -> 假 结果:j
例题:
2. 语句while(!E);中的表达式!E等价于(_B). E->真(非0) !E->假
A、E!=1 真 1 3.14
B、E== O 真(非0) 假
C、E == 1 真1 3.14
D、E != O 真(非0) 真
注意while(!E)用法:判断E是否为0如果为0则执行while下面的复合语句
控制流: 分支/循环。
分支: if else switch
循环: for while do-while
2)处理流程
判定条件 -> 真 -> 执行循环体中的所有表达式 -> 判定条件 -> 假 -> 跳出循环
3)死循环
死循环就是判定条件恒为真,无法通过判断判定条件为假来跳出循环。
while(1)
{
xxxx; -> 一直被执行
}
====================================================
4)省略{}的情况
while(1)
xxxx; -> 紧跟在while(1)语句的表达式就是循环体的内容。
yyyy; -> 不属于循环体的内容
等价于
while(1)
{
xxxx;
}
yyyy;
====================================================
while(1); -> 有分号,代表是有循环体,但是循环体中没有任何的内容 -> 空循环
xxxx;
yyyy;
等价于
while(1)
{
}
xxxx;
yyyy;
结论:
1**. 当循环体中表达式大于2个时,复合语句{}不能省略。
2. 当循环体中表达式只有1个时,则复合语句{}可以省略的!**
练习1: 实现无论输入多少个参数,都可以讲全部的参数打印出来(while循环)。
#include
int main(int argc,char *argv[])
{
int i=1;
while(i<argc)
{
printf("argv[%d]=%s\n",i,argv[i]);
i++;
}
return 0;
}
练习2: 从键盘中获取一个整型数据,存放到x中,并计算出1+2+3+4+5+…+x。
#include
int main(int argc,char *argv[])
{
int x,i=1,sum=0;
scanf("%d",&x);
while(i<=x)
{
sum+=i; //sum = sum + i
i++;
}
printf("sum = %d\n",sum);
return 0;
}
练习3: 完成while.docx
2. for循环
1)基本框架
for(初始化控制变量语句;判定条件;变量操作) -> 里面的语句不一定要填,可以空白。
{ -> 循环体
需要循环地执行的语句
}
(技巧)如果for中的初始值在上方被赋值,例如被scanf录入,则初始值可以省略不写**
2)处理流程 初始化后判断再执行
1
for(2;3;4)
{
5
}
6
1->2.初始化语句->3.判定条件->真->5.执行循环->4.变量操作->3.判定条件->假->6 (初始化语句只会执行一次)
3)死循环
for( ; ; ); 等价于 while(1);
等价于
for( ; ; ) 等价于 while(1)
{ {
} }
4)省略{}情况
for( ; ; )
xxx; ->属于循环体的内容
yyy; ->不属于循环体的内容
等价于
for( ; ; )
{
xxx;
}
yyy;
练习4:从键盘中获取一个整型数据,存放到x中,并计算出1+2+3+4+5+…+x。(for循环)
#include
int main(int argc,char *argv[])
{
int x,i,sum=0;
scanf("%d",&x);
for(i=1;i<=x;i++)
{
sum+=i;
}
printf("sum = %d\n",sum);
return 0;
}
练习5:完成for.docx
3. do-while循环
1)基本框架
do{ -> 循环体
}while(判定条件); -> 注意: 没有分号是语法出错。
2)处理流程
先执行一次循环体 -> 判定条件 -> 真 -> 执行循环体内容 -> 判定条件 -> 假 -> 跳出循环
3)死循环
do{
}while(1);
4)省略{}写法
do
xxxx;
while(1);
等价于
do{
xxxx;
}while(1);
do
xxxx;
yyyy; -> 编译出错: error: expected ‘while’ before ‘yyyy’
while(1);
结论: 当表达式只有一条时,则复合语句可以省略,如果大于1条表达式时,则必须添加{},否则编译出错。
while(1)
xxx;
yyy;
等价于
do
xxx;
while(1);
yyy;
练习6: 实现无论输入多少个参数,都可以将全部的参数打印出来(while循环)。
#include
int main(int argc,char *argv[])
{
int i = 0;
do{
printf("argv[%d]:%s\n",i,argv[i]);
i++;
}while(i<argc);
return 0;
}
练习7: 从键盘中获取一个整型数据,存放到x中,并计算出1+2+3+4+5+…+x。(do-while)
#include
int main(int argc,char *argv[])
{
int x,i=1,sum=0;
scanf("%d",&x);
do{
sum+=i;
i++;
}while(i<=x);
printf("sum = %d\n",sum);
return 0;
}
练习8: 完成dowhile.docx
4. if分支
用法一:if单独使用
1)基本框架
if(判定条件) -> 如果判定条件为真,则执行复合语句中的内容,否则就不执行复合语句中内容。
{ -> 复合语句
}
2)省略{}写法
if(判定条件)
xxxx; -> 如果条件为真,则执行xxxx,如果条件为假,就不执行xxxx;
yyyy; -> yyyy;不是if语句的响应范围,所以无论条件的真假,这个yyyy都会被执行。
等价于
if(判定条件)
{
xxxx;
}
yyyy;
===========================================
if(判定条件);
xxxx; -> 无论条件真假,都会执行xxxx和yyyy;
yyyy;
等价于
if(判定条件)
{
}
xxxx;
yyyy;
用法二:if与else配合使用
1)基本框架
if(判定条件) -> 如果判定条件为真,就执行复合语句1
{ -> 复合语句1
}
else{ -> 复合语句2 -> 不满足判定条件的任何情况,就会执行复合语句2
}
注意:复合语句1与复合语句2中肯定会有一个被执行。
2)省略{}情况
if(判定条件)
xxxx;
else
yyyy; -> 可以
if(判定条件1)
xxxx;
if(判定条件2)
yyyy;
else
zzzz; -> 可以
if(判定条件)
xxxx;
else
yyyy;
else -> 编译出错: error: ‘else’ without a previous ‘if’ else不能单独使用
zzzz;
用法三: 多种情况判定:else if
基本框架:
if(判定条件1) -> 如果判定条件1为真,则执行复合语句1
{ 复合语句1
}
else if(判定条件2) -> 如果判定条件1为假,则进行判断判定条件2,如果为真,则执行复合语句2
{ 复合语句2
}
else if(判定条件3) -> 如果判定条件2为假,则进行判断判定条件3,如果为真,则执行复合语句3
{ 复合语句3
}
else{ 复合语句4 -> 不满足以上的所有情况,就执行复合语句4
}
练习9: 分别使用以上三种办法,完成该题。
从键盘中获取一个数字
0~100 -> 打印small
101~200 -> 打印middle
201~300 -> 打印large
其他 -> 打印error
/*使用纯if做范围内的判断*/
#include
int main(int argc, char *argv[])
{
int num;
printf("please input a number: \n");
scanf("%d",&num);
if(num >= 0 && num <= 100)
{
printf("small\n");
}
if(num >= 101 && num <= 200)
{
printf("middle\n");
}
if(num >= 201 && num <= 300)
{
printf("large\n");
}
if(num > 300)
{
printf("error\n");
}
return 0;
}
/***在范围内做if嵌套,范围由大到小,但是要学会退出***/
#include
int main(int argc, char *argv[])
{
int num;
printf("please input a number: \n");
scanf("%d",&num);
if(num >= 0 && num <= 300)
{
if(num >= 0 && num <= 200)
{
if(num >= 0 && num <= 100)
{
printf("smalle\n");
return 0;
}
printf("middle\n");
return 0;
}
printf("large\n");
return 0;
}
else
{
printf("error\n");
}
return 0;
}
#include
int main(int argc, char *argv[])
{
int num;
printf("please input a number: \n");
scanf("%d",&num);
if(num >= 0 && num <= 100)
{
printf("small\n");
}
else if(num >= 101 && num <= 200)
{
printf("middle\n");
}
else if(num >= 201 && num <= 300)
{
printf("large\n");
}
else if(num > 300)
{
printf("error\n");
}
return 0;
}