3)if语句
else是与最接近的if且没有else的相组合的。
4)条件表达式:
表达式1?
表达式2:
表达式3
注意是当非0时候是表达式2的数值,当为0是就是表达式2的数值。
考试口诀:
真前假后。
5)switch语句:
a)一定要注意有break和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。
b)switch只可以和break一起用,不可以和continue用。
第四章
1)三种循环结构:
a)for();while();do-while()三种。
b)for循环当中必须是两个分号,千万不要忘记。
c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。
d)do-while()循环的最后一个while();的分号一定不能够丢。
(当心上机改错)
2)break和continue的差别
记忆方法:
break:
是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。
continue:
是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。
3)嵌套循环
就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。
4)while((c=getchar())!
=’\n’)和while(c=getchar()!
=’\n’)的差别
先看a=3!
=2和(a=3)!
=2的区别:
(!
=号的级别高于=号所以第一个先计算3!
=2)第一个a的数值是得到的1;第二个a的数值是3。
考试注意点:
括号在这里的重要性。
第五章
函数:
是具有一定功能的一个程序块;
1)函数的参数,返回数值(示意图):
main()
{
inta=5,b=6,c;
c=add(a,b);
printf(“%d”,c);
}
调用函数
a,b是实参
整个函数得到一个数值就是
Add函数的返回数值。
intadd(intx,inty)
{
intz;
z=x+y;
returnz;
}
被调用函数
x,y是形式参数
函数返回数值是整型
z就是这个add函数计算后得到的结果,就是函数返回给主程序的返回数值。
程序是在从上往下顺序执行,当碰到了函数add后,把a,b的数值穿给调用函数,程序暂时中断等待返回数值。
当得到了返回数值后,再顺序的往下执行
2)一定要注意参数之间的传递
实参和形参之间传数值,和传地址的差别。
(考试的重点)
传数值的话,形参的变化不会改变实参的变化。
传地址的话,形参的变化就会有可能改变实参的变化。
3)函数声明的考查:
一定要有:
函数名,函数的返回类型,函数的参数类型。
不一定要有:
形参的名称。
第六章
指针变量的本质是用来放地址,而一般的变量是放数值的。
int*p中*p和p的差别:
*p可以当做变量来用;*的作用是取后面地址p里面的数值
p是当作地址来使用。
*p++和(*p)++的之间的差别:
改错题目中很重要
*p++是地址会变化。
(*p)++是数值会要变化。
三名主义:
(考试的重点)
数组名:
表示第一个元素的地址。
数组名不可以自加,他是地址常量名。
(考了很多次)
函数名:
表示该函数的入口地址。
字符串常量名:
表示第一个字符的地址。
第七章
1一维数组的重要概念:
对a[10]这个数组的讨论。
1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。
2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。
3、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。
对a[3][3]的讨论。
1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。
2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。
3、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。
4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。
5、注意a和a[0]、a[1]、a[2]是不同的,它们的基类型是不同的。
前者是一行元素,后三者是一列元素。
二维数组做题目的技巧:
如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。
步骤一:
把他们写成:
第一列 第二列 第三列
a[0]à 1 2 3->第一行
a[1]à4 5 6 —>第二行
a[2]à7 8 9 ->第三行
步骤二:
这样作题目间很简单:
*(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是1。
*(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。
那么这里就是a[1][2]元素,所以是6。
一定记住:
只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。
数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写
inta[]={1,2}合法。
inta[][4]={2,3,4}合法。
但inta[4][]={2,3,4}非法。
二维数组中的行指针
inta[1][2];
其中a现在就是一个行指针,a+1跳一行数组元素。
搭配(*)p[2]指针
a[0],a[1]现在就是一个列指针。
a[0]+1跳一个数组元素。
搭配*p[2]指针数组使用
还有记住脱衣服法则:
a[2]变成*(a+2)a[2][3]变成*(a+2)[3]再可以变成*(*(a+2)+3)
这个思想很重要!
C语言中流程控制语句(if,switch,for,while,do-while,continue,break,return)
计算机语言感觉都差不多。
。
。
所谓大同小异。
。
。
今天阿凯就来谈谈C中的流程控制。
。
。
。
条件语句
在TurboC2.0中条件语句的一般形式为:
if(表达式)
语句1;
else
语句2;
上述结构表示:
如果表达式的值为非0(TURE)即真,则执行语句1,执行完语句1从语句2后开始继续向下执行;如果表达式的值为0(FALSE)即假,则跳过语句1而执行语句2。
注意:
1.条件执行语句中"else语句2;"部分是选择项,可以缺省,此时条件语句变成:
if(表达式)
语句1;
表示若表达式的值为非0则执行语句1,否则跳过语句1继续执行。
2.如果语句1或语句2有多于一条语句要执行时,必须使用"{"和"}"把这些语句包括在其中,此时条件语句形式为:
if(表达式)
{
语句体1;
}
else
{
语句体2;
}
3.条件语句可以嵌套,这种情况经常碰到,但条件嵌套语句容易出错,其原因主要是不知道哪个if对应哪else。
例如:
if(x>20||x<-10)
if(y<=100&&y>x)
printf("Good");
else
printf("Bad");
对于上述情况,TurboC2.0规定:
else语句与最近的一个if语句匹配,上例中的else与if(y<=100&&y>x)相匹配。
为了使else与if(x>20||x<-10)相匹配,必须用花括号。
如下所示:
if(x>20||x<-10)
{
if(y<=100&&y>x)
printf("Good");
}
else
printf("Bad");
4.可用阶梯式if-else-if结构。
阶梯式结构的一般形式为:
if(表达式1)
语句1;
elseif(表达式2)
语句2;
elseif(表达式3)
语句3;
.
.
else
语句n;
这种结构是从上到下逐个对条件进行判断,一旦发现条件满点足就执行与它有关的语句,并跳过其它剩余阶梯;若没有一个条件满足,则执行最后一个else语句n。
最后这个else常起着"缺省条件"的作用。
同样,如果每一个条件中有多于一条语句要执行时,必须使用"{"和"}"把这些语句包括在其中。
switch语句
在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套if-else-fi语句来实现,但if-else-if语句使用不方便,并且容易出错。
对这种情况,TurboC2.0提供了一个开关语句。
开关语句格式为:
switch(变量)
{
case常量1:
语句1或空;
case常量2:
语句2或空;
.
.
case常量n;
语句n或空;
default:
语句n+1或空;
}
执行switch开关语句时,将变量逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default后面的语句。
注意:
1.switch中变量可以是数值,也可以是字符。
2.可以省略一些case和default。
3.每个case或default后的语句可以是语句体,但不需要使用"{"和"}"括起来。
下例的switch中变量为整数型。
main()
{
inttest;
for(test=0;test<=10;test++)
{
switch(test)/*变量为整型数的开关语句*/
{
case1:
printf("%d\n",test);
break;/*退出开关语句*/
case2:
printf("%d\n",test);
break;
case3:
printf("%d\n",test);
break;
default:
puts("Error");
break;
}
}
}
下例的switch中变量为字符型。
#include
main()
{
charc;
while(c!
=27)/*循环直到按Esc键结束*/
{
c=getch();/*从键盘不回显接收一个字符*/
switch(c)
{
case'A':
/*接收的字符为'A'*/
putchar(c);
break;/*退出开关语句*/
case'B':
putchar(c);
break;
default:
/*接收的字符非'A'和'B'*/
puts("Error");
break;
}
}
}
for循环
for循环是开界的。
它的一般形式为:
for(<初始化>;<条件表过式>;<增量>)
语句;
(1)初始化总是一个赋值语句,它用来给循环控制变量赋初值;
(2)条件表达式是一个关系表达式,它决定什么时候退出循环;
(3)增量定义循环控制变量每循环一次后按什么方式变化。
这三个部分之间用";"分开。
例如:
for(i=1;i<=10;i++)
语句;
上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。
再重新判断,直到条件为假,即i>10时,结束循环。
注意:
1.for循环中语句可以为语句体,但要用"{"和"}"将参加循环的语句括起来。
2.for循环中的"初始化"、"条件表达式"和"增量"都是选择项,即可以缺省,但";"不能缺省。
省略了初始化,表示不对循环控制变量赋初值。
省略了条件表达式,则不做其它处理时便成为死循环。
省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。
3.for循环可以有多层嵌套。
例16:
main()
{
inti,j,k;
printf("ijk\n");
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
printf(%d%d%d\n",i,j,k);
}
while循环与do-while循环
while循环的一般形式为:
while(条件)
语句;
while循环表示当条件为真时,便执行语句。
直到条件为假才结束循环。
并继续执行循环程序外的后续语句.
例17:
#include
main()
{
charc;
c='\0';/*初始化c*/
while(c!
='\X0D')/*回车结束循环*/
c=getche();/*带回显的从键盘接收字符*/
}
上例中,while循环是以检查c是否为回车符开始,因其事先被初始化为空,所以条件为真,进入循环等待键盘输入字符;一旦输入回车,则c='\X0D',条件为假,循环便告结束。
与for循环一样,while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。
注意:
1.在while循环体内也允许空语句。
例如:
while((c=getche())!
='\X0D');
这个循环直到键入回车为止。
2.可以有多层循环嵌套。
3.语句可以是语句体,此时必须用"{"和"}"括起来。
例18:
#include
main()
{
charc,fname[13];
FILE*fp;/*定义文件指针*/
printf("Filename:
");/*提示输入文件名*/
scanf("%s",fname);/*等待输入文件名*/
fp=fopen(fname,"r");/*打开文件只读*/
while((c=fgetc(fp)!
=EOF)/*读取一个字符并判断是否到文件结束*/
putchar(c);/*文件未结束时显示该字符*/
}
do-while循环
do-while循环的一般格式为:
do
语句;
while(条件);
这个循环与while循环的不同在于:
它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。
因此,do-while循环至少要执行一次循环语句。
同样当有许多语句参加循环时,要用"{"和"}"把它们括起来。
continue语句
continue语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。
continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。
main()
{
charc;
while(c!
=0X0D)/*不是回车符则循环*/
{
c=getch();
if(c==0X1B)
continue;/*若按Esc键不输出便进行下次循环*/
printf("%c\n",c);
}
}
break语句
break语句通常用在循环语句和开关语句中。
当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。
当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。
即满足条件时便跳出循环。
main()
{
inti=0;
charc;
while
(1)/*设置循环*/
{
c='\0';/*变量赋初值*/
while(c!
=13&&c!
=27)/*键盘接收字符直到按回车或Esc键*/
{
c=getch();
printf("%c\n",c);
}
if(c==27)
break;/*判断若按Esc键则退出循环*/
i++;
printf("TheNo.is%d\n",i);
}
printf("Theend");
}
注意:
1.break语句对if-else的条件语句不起作用。
2.在多层循环中,一个break语句只向外跳一层。
return语句
return语句的一般格式为:
return表达式;
函数的返回值是由函数体中的return语句实现返回的。
return语句一般放在函数体的最后,用于结束函数的执行,返回调用函数。
若它带有表达式(此表达式可以用一对小括号括起来),系统会将它转化为在函数头中定义的类型。
因而要求表达式的类型与定义中的函数值类型一致。
若一个不带表达式的return语句放在函数的最后,则可省略。
一个函数中可以有多个return语句,但只能有一个return语句起作用。
首先,我们在桌面创建个新文件夹然后打开,在上面找到-工具T-文件夹选项O-查看把隐藏已知文件类型的扩展名前面的勾去掉.然后我们开始制作.在桌面建立个记事本,然后把下面代码复制进去onerrorresum