Printf(“max=%d\n”,c);只有一个“;”号,表示这所有的是一句,if内嵌套
Else
Printf(“max=%d\n”,c);另一句
Elseif(a
Printf(“max=%d\n”c);另一句
Else
Printf(“max=%d\n”,a);另一句
}
例2、x(x<1)
y=2x-1(1<=x<10)
3x-11(x>=10)
Main()
{
Intx,y;
Scanf(“%d”,&x);
If(x<1)
{
y=x;
printf(“x=%3d,y=x=%d\n”,x,y);“x=”,“y=x=”是输出字符,这是一句
}
Elseif(x<11)
{
Y=2*x-1;
Printf(“x=%3d,y=2x-1=%d\n”,x,y);
}另一句因为每个条件句有两条语句所以
Else要用{},同条件句一起作为一句语句
{
Y=3*x-11;
Printf(“x=%3d,y=3*x-11=%d\n”,x,y);
}另一句
}
#如果if与else的数目不一样,为实现程序设计的企图,可以加花括号来确定配对关系
如if()
{if()语句1}这时的else与第一个if配对,如果没有花括号,则与第二个
Else语句2if配对
3switch语句的应用
main()
{
Intc,s;
Floatp,w,d,f;
Scanf(“%f,%f,%d”,&p,&w,&s);
If(s>=300)
C=12;
Elseifc=s/250;
Switch(c)c是switch的表达式
{
Case0:
d=0;break;0,1等是switch的常量表达式
Case1:
d=2;break;
…………..
Case12:
d=15;break;switch的表达式要与case后面的常量表达式的数据
}类型及值是一样的
F=p*w*s*(1-d/100.0);
Printf(“weight=%15.4f”,f);
}#找出VB的选择结构框架及示例
3、循环结构
一、循环的控制goto语句
1、goto语句及goto语句构成的循环
goto语句为无条件转向语句,格式为goto语句标号;语句标号由字母、数字和下划线组成,其第一个字符必须为字母或下划线;如goto123(错),gotolabel_1(对)
2、作用:
与if语句一起构成循环
例:
求1+2+3+-----+100的和
Main()
{
IntI,sum=0;
I=1;
Loop:
if(i<=100)
{
Sum=sum+I;
I++;
Gotoloop;
}
Printf(“%d’,sum);
}
二、循环的控制while语句
结构(表达式)语句
当表达式为非0时,执行while语句中的内嵌套语句,表达式只能为关系表达式、逻辑表
达式,当表达式为常量表达式时,就进入死循环
例:
求1+2+3+-----+100的和
Main()main()
{{intsum=0,I;
IntI,sum=0;scanf(“%d”,&i);
I=1;while(i<=10)
While(i<=100){sum=sum+i
{
Sum=sum+I;i++}
I++;
}printf(“sum=%d”,sum);
Printf(“%d”,sum);}
}
三、循环的控制do--while语句
格式do/循环语句/while(表达式)
特点:
先执行一次指定的循环语句,然后判断是否符合要求去执行循环
例:
求1+2+3+-----+100的和
Main()main()
{{intsum=0,I;scanf(“%d”,&i);
IntI,sum=0;do{sum=sum+I;i++;}
I=1;while(i<=10);printf(“sum=%d”,sum);
Do
{}
Sum=sum+I;while与do---while循环的比较:
一般情况下,当处理同一问题时,
I++;并循环体部分是一样的,则结果相同,但如while后面的表达式
}一开始为假(0值)时,两种循环的结果是不同的,如上右边两
While(i<=100);例中输入1则两结果都是sum=55;如输入11,则while循环结果
Printf(“%d”,sum);是sum=0,而do---while循环结果是sum=11
}
四、for循环语句
①表达式形式:
for(表达式1;表达式2;表达式3;)它的执行过程:
a、先求解表达式1;b、求解表达式2,若其值为真,则执行for语句指定的内嵌套语句,然后执行下面的语句,若为假,则结束循环语句;c、求解表达式3,求解完后再回头(循环)去执行求解表达式2….
例剖析相当i=1;
For(i=1;i<=100;i++)while(i<=100)
Sum=sum+I;{sum=sum+I;i++;}
一般情况下,for语句可以改写成while语句;即:
表达式1;while(表达式2){语句;表达式3}
②for循环的表达式1、3可省,具体省略后的形式变化见课本P111-112
五、循环的嵌套
While()dofor(;;;)
{……{……{for(;;;)
While()do
{{……{
……}执行语句;
}while();}
}while();}
}执行语句;………
几种循环的比较见课本P114
Break语句和continue语句
Break语句用来从循环体中跳出循环体提前结束循环,接着执行下面的语句,但它不能用于循环语句和switch语句之外的任何其它语句
Continue语句用来结束本次循环,不是终止整个循环体
Continue的应用例子
Main()
{
Intn;
For(n=100;n<=200;n++)
{
If(n%3==0)当n能被3整除时执行continue语句,结束本次循环(即跳过
Continue;printf函数语句)只有当n不能被3整除时才能执行printf
Printf(“%d”,n);函数
}
}
For内嵌套实例
打印出以下图案
*main()
***{intI,j,k;
*****for(i=0;i<=3;i++)i控制输出行(上面的4行)
*******{for(j=0;j<=2-I;j++)此for{}号可省,因与前for没有;号,是同一句
*****printf(“”);输出*号前面的空格
***for(k=0;k<=2*I;k++)输出*号
*printf(“*”);输出完一行*号后换行
printf(“\n”);}
for(i=0;i<=2;i++)输出下面的3行*号
{for(j=0;j<=I;j++)此for{}号可省,因与前for没有;号,是同一句
Printf(““);输出*号前面的空格
For(k=0;k<=4-2*I;k++)
Printf(“*”);输出*号
Printf(“\n”);输出完一行*号后换行“
}
}
##for(.…)for(.…)效果等同情况:
因为第二个for没有并行语句,
for(.…){for(.…)因为第三个for都属于第二个for循环的执行
for(.…)for(.…)}语句,如果第二for有平行语句就不同了
例:
main()结果为:
*如去掉第二个for后
{intI,j,k;***的{};结果为:
For(i=0;i<=3;i++)*****
{for(j=0;j<=2-I;j++)****************
Printf(“”);
For(k=;k<=2*I;k++)可见两种情况结果不同,原因在于第二个
Printf(“*”);for后第二for有平行语句Printf(“”)
Printf(“\n”);}第三个for不属于第二个for循环的执行
}
例:
main()
{intI,j,k;结果:
去掉第二个for的{}结果是:
For(i=0;j<=3;i++)*
{for(k=0;k<=2*I;k++)***
Printf(“*”);*********************
Printf(“\n”);}*******
}
例:
main()
{inta,b;程序运行结果:
For(a=1;a<=3;a++)1*1=11*2=21*3=31*4=4
{for(b=1;b<=4;b++)2*1=22*2=42*3=62*4=8
Printf(%d*%d=%d,a,b,a*b);3*1=33*2=63*3=93*4=12
Printf(“\n”);}去掉第二个for运行结果是
}1*1=11*2=21*3=31*4=42*3=62*4=83*1=31*2=63*3=93*4=12
例:
main()main()
{Inta,b;{Inta,b;
For(a=1;a<=3;a++)For(a=1;a<=3;a++)
{for(b=1;b<=4;b++)for(b=1;b<=4;b++)
Printf(%d*%d=%d,a,b,a*b);}Printf(%d*%d=%d,a,b,a*b);
}}
运行结果一样是:
1*1=11*2=21*3=31*4=42*3=62*4=83*1=31*2=63*3=93*4=12
3、一维数组元素
一、小知识点
1数组里的元素下标是从零开始的,常量表达式中可以包含常量和符号常量,不能是变量
2可以只给一部分元素付值,如:
int[10]={1,2,3,4,5},而这只是给数组前五个元素付值
3如果想使一个数组中的全部元素付值为0,可以写:
int[10]={0,0,0,0,0,0,0,0,0,0}或写成a[10]={0}
4在对全部数组元素付初值时可以不指定数组长度如:
a[]={1,2,3,4,5},在定义数组后,如:
a[10]={1,2,3,4,5,6,7,8,9},从键盘上获取元素时可用scanf(“%d”,&a[i]),但不能写成scanf(“%d”,&a)或scanf(“%d”,&a[])或scanf(“%d”,a)
4、二维数组元素
①格式:
类型说明符数组名[常量表达式][常量表达式]
如:
float[3][4],float[5][10]定义a为3*4(3行4列),b为5*10(5行10列)的数组
A[0][0],A[0][1],A[0][2],A[0][3]
A[3][4]=A[1][0],A[1][1],A[1][2],A[1][3]
A[2][0],A[2][1],A[2][2],A[2][3]
②二维数组的付值:
I、分行付值:
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}
等同于int[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}1,0,0,0其值是对
II、可以对部分付值:
int[3][4]={{1},{5},{9}}等同于a[3][4]=5,0,0,0各行中的
9,0,0,0第一个元素
Inta[3][4]={{1},{5,6}},对第三行不付值,Inta[3][4]={{1},{},{5,6}}第二行不付值
III、对数组全部付值时可以省略行数的下标如:
a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}效果等同于a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}
IV、可以只对部分元素付值,而省略第一维的长度(行的下标),但应分行付值,如:
Inta[][4]={{0,0,3},{},{0,10},}效果等同第一行0,0,3,0第二行0,0,0,0第四行0,10,0,0
二维数组应应用用举例:
12314
将a=456的行与列互换成b=25
36
程序:
main()
{inta[2][3]={{1,2,3},{4,5,6}};
Intb[3][2],ij;
Printf(“arraya:
\n”);
For(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
{printf(“%5d”,a[i][j]);
B[j][i]=a[i][j]];}a[i][j]中的i与倒数第二行b[i][j]中的i不一定一样
Printf(“\n”);}式因为i是变量,其值是可变的,故i在程序中是不
Printf(“arrayb:
\n”);确定的
For(i=0;i<=2;i++)
{for(j=0;j<=1;j++)
Printf(“%5d”,b[i][j]);
Printf(“\n”);}
}
N-S图fori<=1前程序的N-S图fori<=2后段程序的N-S图
Forj<=2fori<=1
输出a[i][j]输出b[i][j]
并a[j][i]=a[i][j]
5、字符数组
1字符数组的定义:
基本与前面的整型数组定义相同,不同之处:
如果初值个数小于数组长度,只将这些字符付给数组中的前面那些元素,其余的元素定义为空字符。
2字符数组引用实例
输出一个钻石图形
程序:
main()
{chardiamond[][5]={{“’’,’’,’*’”},{“’’,’*’,’’,’*’”}{“’*’,’’,’’,’’,’*’”},{“’’,’*’,’’,’*’”,},{“’’,’’,’*’”}}
IntI,j;输出结果*
For(i=0;i<5;i++)**
{for(j=0;j<5;j++)**
Printf(“%c”,diamond[i][j]);**
Printf(“\n”);}*
}
##上程序第二个for是嵌套于第一个for里的;①如果一个字符串第10个字符为’\0’,则此字符串的有效长度为9,也就是说在遇到字符’\0’时,表示字符串结束,由它前面的字符组成字符串;②系统对字符串常量也会自动加一个’\0’作为结束符,所以会比实际多一个字符;③所以有了结束标志’\0’后,字符数组的长度就显得不那么重要了,只要数组长度大于字符串的实际长度就可④所以字符数组表示字符串时,可以如此定义:
char[]={“china”};⑤它的输出与数组不同,要:
printf(“%c”,a[i]),因为它输出的是字符数组名,不是数组元素,字符串的输出printf(“%s”,a);⑥字符数组的输入:
scanf(“%s”a),或scanf(“%c”a)它不用scanf(“%s”%a[i]),原因是scanf函数中的输入项是字符数组名,它应该在先前就已被定义,如:
scanf(“%d”,&str)是错误的,因scanf函数中的输入项是字符数组名时不用再加地址标识符&,因为在C语言中数组名代表该数组的起始地址
如:
C2000此数组若其名是C,占6个字节,程序中如果只写数组名C,
H2001,它就代表起始地址为2000,然后它会按第一个地址逐个输
I2002入或输出。
N2003
A2004
\02005字符串处理函数祥情见课本P135-138
6、函数
一、小知识点
1函数说明:
一个C程序---包含多个源程序;一个源程序----包含多个函数;(也可说一个程序包含多个函数)
2C程序的执行从main函数开始,即主函数,调用其它函数后,流程返回到main函数,在main函数中结束整个程序的运行,注意main函数是系统定义的
3函数间平等,可互相调用,但不能调用主函数(C中main函数)
二、函数种类
1从使用者角度看可分两种:
标准函数即库函数与用户自己定义的函数
2函数的形式看:
无参函数与有参函数
三、无参函数定义的一般形式无参函数
类型标识符函数名()例main()printfstar()
{{printfstar();{printf(“********”);}
声明部分printf_message();print_message()
语句printfstar();{printf(“howdoyou\ndo!
”);
}}}
说明:
无参函数一般不需要返回值,因此可以不写类型标识符
四、有参函数定义的一般形式例有参函数
类型标识符函数名(形式参数列表)main()max(intx,inty)
{{inta,b,c;{intz;
声明部分;scanf(“%d,%d”,&a,&b);z=x>y?
x:
y;
语句;c=max(a,b);a,b是实参return(z)
}printf(“maxis%d”,c);}}
#类型特别说明
1上例中没有函数定义,即intmax(intx,inty)前的int,原因在于C语言规定凡不加类型说明的函数,一律自动按整型处理
2定义函数时对函数值说明的类型一般应该和return语句中的表达