C语言第三章:C语言和程序结构

来源:互联网 发布:杭州淘宝培训学校 编辑:程序博客网 时间:2024/05/16 12:10

➢ 表达式语句:由表达式末尾加上分号构成。
➢ 函数调用语句:由函数调用表达式加上分号构成。
➢ 空语句: ;
➢ 选择结构语句:if语句 switch语句
➢ 循环语句:for语句 while语句 do while语句
复合语句:用花括号{}将以上任意语句括起来构成一条复合语句。
C语言的程序结构
第一节: 选择结构
一、变量在使用的过程中易犯的错误
1)、变量为什么进行出初始化?因为会出现不确定的值
2)、初始化的一些值由你自己的实际情况区定。
二、程序的结构
1)、结构化程序是一个设计思想
2)、分类:顺序结构、分支结构、循环结构(do while ,while,for)
!!!!在这里增加一些关系表达式和逻辑表达式 的问题,以免出现不理解的地方:
特别要注意:C语言中是用非0表示逻辑真的,用0表示逻辑假的。
C语言有构造类型,没有逻辑类型。
关系运算符号:注意<=的写法,==和=的区别!(考试重点)
if只管后面一个语句,要管多个,请用大括号!
1)关系表达式:
a、表达式的数值只能为1(表示为真),或0(表示假)。
如 9>8这个关系表达式是真的,所以9>8这个表达式的数值就是1。
如 7<6这个关系表达式是假的,所以7<6这个表达式的数值就是0
句空语句会造成死循环。
二、do while 循环
1、格式:do{ 循环体 }while(条件);//直到型循环,先执行循环体,在进行判断。
2、do while注意点:注意{}和while后的分号‘;’
3、while是当型循环,do{}while();直到型循环
4、关于while循环和while循环的对比
1)、当循环控制条件第一次判断不为假的时候
while和do while循环体执行的次数相同、
2)、当循环控制条件第一次判断为假的时候
while执行次数是0次
do while 执行是1次
三、for循环 for(表达式1;表达式2;表达式3){语句}
1、不仅可以用于循环次数确定的情况而且可以用于循环次数不确定的情况。
2、 a、初始化语句只会被执行一次
b、当条件不满足的时候,循环结束
输出是有缓存区的。。
3、for循环的其他形式
3.1、省略格式
for(;i<5;i++)//省略表达式1
//省略表达式1 ,表达式3
for(;i<5;)
{
i++;//可以写在里面
}
//省略表达式1 ,表达式2,表达式3
for(;;)
{
if(i<5){
printf(“”);
i++;
}else{
break
;
}
}
注意:for()循环的一些格式注意运行的格式
4、for循环的嵌套 大部分用于打印图形
注意:外层控制行数,内层控制列数

简答题:三种循环结构中的条件是循环进行条件还是循环结束的条件?循环结构中break和continue语句的作用是什么?二者有何区别
答:break语句的用法
break通常用于循环语句和开关语句中,通常是结束当前的循环,break以后的语句也不执行了
continue ,结束本次循环,继续下次循环 可以用在循环,可以用来加速循环 。
continue可以加速循环
2) break 和 continue的差别
记忆方法:
break:是打破的意思,(破了整个循环)所以看见break就退出整个一层循环。
continue: 是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。

1)三种循环结构:
a)for() ; while(); do- while()三种。
b)for循环当中必须是两个分号,千万不要忘记。
c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。
d) do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错),do-while循环是至少执行一次循环。
3)嵌套循环
就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。
4) while((c=getchar())!=’\n’) 和
while(c=getchar() !=’\n’)的差别
先看a = 3 != 2 和 (a=3)!=2 的区别:
(!=号的级别高于=号 所以第一个先计算 3!=2) 第一个a的数值是得到的1;第二个a的数值是3。
考试注意点: 括号在这里的重要性。
5)每行输出五个的写法:
for(i=0;i<=100;i++)
{ printf(“%d”,i);
if((i+1)%5==0)printf(“\n”); 如果i是从1开始的话,就是if(i%5==0)printf(“\n”);
}
6)如何整除一个数: i%5==0表示整除5
I%2==0表示整除2,同时表示是偶数!
7)输入123,输出321逆序输出数据
int i=123;
while(i!=0)
{
printf(“%d”,i%10);
i=i/10;}
8)for只管后面一个语句:
int i=3;
for(i=3;i<6;i++):
printf(“#”): 请问最终打印几个#号?答案为一个!
9)不停的输入,直到输入# 停止输入! 不停的输入,直到输入停止输入!  
    while( (x=getchar())!=’ # ’ )                 while( (x=getchar())!=’
’ )
不停的输入,直到遇到?停止输入!
while( (x=getchar())!=’ ? ’) 解说:一定要注意这种给出了条件,然后如何去写的方法!
10)for循环和switch语句的和在一起考题!
思考题:

多次出现的考题:
int k=1 int k=1;
while(- -k); while(k- -);
printf(“%d”,k); printf(“%d”,k);
结果为0 结果为-1

三种死循环的方式:
while(1) { }
一些程序员更喜欢如下方案:
for(;;) { }
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的
基本原理。如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么。”这会给我留下一个坏印象。
第三个方案是用 goto
Loop:

goto Loop;

b、考试最容易错的:就是int x=1,y=0,z=2;                          x<y<z是真还是假?带入为1<0<2,从数学的角度出发肯定是错的,但是如果是C语言那么就是正确的!因为要1<0为假得到0,表达式就变成了0<2那么运算结果就是1,称为了真的了!   c、等号和赋值的区别!一定记住“=”就是赋值,“= =”才是等号。虽然很多人可以背诵,但我依然要大家一定好好记住,否则,做错了,我一定会强烈的鄙视你!2)逻辑表达式:   核心:表达式的数值只能为1(表示为真),或0(表示假)。a)  共有&&   ||   ! 三种逻辑运算符号。b)  !>&&>||  优先的级别。c)  注意短路现象。考试比较喜欢考到。 d)  表示 x 小于0大于10的方法。0<x<10是不行的(一定记住)。是先计算0<x 得到的结果为1或则0;再用0,或110比较得到的总是真(为1)。所以一定要用 (0<x)&&(x<10)表示比0大比10小。三、if()分支结构    1)、if 的几种形式:             a、if(关系表达式){}            b、if(表达式){}else{}  //表达式为真执行if{} ,否则执行else{}            c、if(){}else{}的嵌套问题            d、if(){}  if() {}    2)、if语句的高级使用方法        if()        {}else if(){}else if(){}else{}    3if语句的注意点        a、if(条件)可以直接写分号“;” ,其实if什么作用也没有b、如果if之后的代码块,只有一句话,则可以省略大括号            if(a>4printf(“条件成立我就执行,我是唯一的”);        c、永真式,永假式                if1){}//永真式。。大括号的内容永远执行                if0){}//永假式,不执行        d、if语句结合return语句                if()return  0;//任一函数中如果没有大括号,return之后的语句不会执行        5if作用域的问题        if(a==3){    int  num=10;}//出了if就不会有值    6、省略大括号的分析,开发中写if就要写上它对应的大括号    7、随机数的函数:头文件 1)、#include <stdlib.h>  int number=arc4random_uniform (n); //n是一个正整数 2)、#include <stdlib.h>  int number=arc4random%10;//就是一个0-9的整数经典考题:结合上面四种if语句题型做题,答错了,请自行了断!预备,开始!int  a=1,b=0if(!a)b++;else if(a= =0if(a)b+=2else b+=3;请问b的值是多少?如果没有看懂题目,你千万不要自行了断,这样看得懂不会做的人才会有理由的活着。 正确的是b为3int  a=1,b=0if(!a)b++;    是假的不执行else if(a= =0)    是假的执行if(a)b+=2; 属于else if的嵌套if语句,不执行。else b+=3if-else-if语句没有一个正确的,就执行else的语句!4)三目运算符:     表达式1 ?表达式2 :表达式3a、考试口诀:真前假后。   b、注意是当表达式1的数值是非0时,才采用表达式2的数值做为整个运算结果,当表达式1的数值为0时,就用表达式3的数值做为整个的结果。   c、int a=1,b=2,c=3,d=4,e=5;k=a>b?c:d>e?d:e;求k的数值时多少?  答案为5四、switch语句的基本格式1switch开关语句:  结构形式:switch (){                    case 常量表达式:break;case 常量:break;default : 语句;}2、什么是case穿透  答:某个case语句执行完成后,并没有结束,而直接向下执行其他的case语句,这种现象称为case穿透。3、如何防止case穿透   答:使用break关键字退出switch4default: 如果不放在最后面,那么它放在前面就要加break,不然就会出现穿透问题,比如说:defaultprintf();  case  1: 出现问题 **ifswitch的转换,有的时间可以转,但是有一定的限制1)  分支比较多的而且无法穷尽或进行大量的列举最好用if2)  如果分支不是很多,但是使用if代码量大可以使用switch3)  一般的情况就是ifswitch的嵌套使用if是判断为主,switch是以选择为主,以实际情况为主哦5switch的使用注意事项1)、switch(表达式)的类型:必须是整型或者可以转换为整型的值一定注意不可以是浮点型 float double a、  可以是一个整型的变量b、  可以放一个整型常量c、  可以放一个返回值是整型的表达式,也可以是赋值表达式d、  还可以放可以转换为int类型的表达式,‘a’ 也就是字符6case语句的后面可以有多行语句,可以加括号也可以省略括号,break是结束switch语句,中断的意思。看情况加break7case语句的注意事项     case 语句格式:case 常量表达式:  空格和冒号不可以省略1case 10break//必须加空格    2、可以是常量    3default 语句的位置可以任意放,但是注意break的使用    4case的穿透同样的适用于default    5、如果default语句放到最后可以不加break    6、如果不放在最后一定要加上break7case语句后面不能是实数(小数)    8case默认的第一句话默认不能定义变量,如果第一句话非要定义,应该加上大括号;第二句是可以放变量的定义的。    9、编译器的bug ,这是一个Xcode的问题,自己注意作业题:0、使用ifswitch分别实现小于 60是E级, >60 > 70 是D级。。。。第二节  循环结构一 、while循环1、  循环结构的条件:循环控制条件、循环体,结束循环语句(让循环成为假);2while循环的格式while(条件){    循环体语句;    结束循环的语句://一般是值得变化}3、  做循环题的方法:可以使用printf输出变化的值。还是进行debug调试也可以看出变量变化的值。4while循环的陷进-------→死循环5while的使用情况6、  随机数的问题: arc4random_unform(n-m+1)+m   生成m-n范围的随机数  如  10-50之内 arc4random_unform(41)+107、  当一个变量与一个常量进行== !=的时候 ,通常把常量写在前面,while3==num){}8、  如果while只有一句话的话可以省略大括号。While语
1 0