C语言基础课教师笔记2 -ASCII码-标准库IO函数-逗号运算符-三目运算-控制语句while-for-do while-分支语句if-else


一. ASCII码


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’作为标志结束符

二. 标准C库IO函数

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下面的复合语句

五. C语言的控制流。

控制流: 分支/循环。
分支: if else switch
循环: for while do-while

  1. while循环
    1)基本框架
    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;
}

你可能感兴趣的:(C语言基础,C语言)