第01章B C语言基础程序结构
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
说明: for循环中的三个表达式都可以省略,如果表达式2 省略,则表示表达式2值恒为1 循环体如果是多条语句,需要用{}构成一条语句
for 循环举例说明:
– – – – – – – – – –
//执行i=0 //判断i<10值,值为1 //执行cout<<i<<“,”;输出0, //执行i++,i变为1 //再次判断i<10的值,仍为1 //再次输出1 //以此类推,继续输出2,3,4,5,6,7,8,9, //执行i++,i变为10 //再次判断i<10的值,值为0 //终止循环,开始执行后面的语句
程序结构
主要内容
变量存储类型 判断结构 循环结构 函数结构 变量作用域
if
语句
if (表达式) 语句; 当表达式值为非零时,执行语句,否则语句不 执行 例:a=0;
– if(a==0)b=2; – if(a=0)b=2;//写成if(0=a)b=2可避免误写 – if(a++)b=2; – if(++a)b=2;
while循环
格式: while ( 表达式 ) 循环体语句; 执行步骤: – Ⅰ.判断表达式的值,为零,执行Ⅳ,否则执行Ⅱ – Ⅱ.执行循环体语句 – Ⅲ.转到Ⅰ – Ⅳ. 终止循环,开始执行程序中循环体语句后面的语句 如果循环体语句为多条语句,则必须用{}构造成一条复合语句 如果while中的表达式值永远为非零值,执行时,程序就会在一直 执行循环语句,无法执行结束,这称为”死循环” 在执行程序时,出现死机现象,可能是程序内出现了”死循环”, 可以按ctrl+break强行终止,或关闭此应用程序的进程
参数传递-地址传递
#include <iostream.h> void f(int *b){ (*b)++; cout<<"*b="<<*b<<endl; } void main() { int a=1; f(&a); cout<<"a="<<a<<endl; }
Baidu Nhomakorabea
参数传递-引用传递(选学)
void main() { int n,m; double c; printf("输入n m:\n"); scanf("%d%d",&n,&m); c=fun(n)/(fun(m)*fun(n-m));/*调用函数*/ printf("%lf",c); } double fun(int n){/*函数定义*/ int i; double l=1; if(n<2)return 1; else for(i=2;i<=n;i++)l*=i; return l; }
while循环举例
问题:输入一行字符(即遇到’\n’截止),统计并 输出大写字母的个数
– #include "stdio.h" – void main(){ – char c; – int count=0; – while((c=getchar())!='\n') – if(c>='A' && c<='Z')count++; – printf("%d\n",count); –}
break语句
break语句的功能是终止循环,开始执行后面的语 句,常用来提前终止循环以节约时间 举例:输入一个整数,判断是否是素数
– – – – – – – – – #include "iostream.h" void main(){ int i,n,flag=1;//是素数标记 cin>>n; for(i=2;i<=sqrt(n);i++){ if(n%i==0){flag=0;break;}//break用来提前结束循环,节约时间 } } //思考一下,如果去掉if语句后的{}会出现什么现象
SWITCH语句格式
格式:
– – – – – – switch (整形 整形表达式 ) 整形 { case <常量表达式> :语句;[….break;] case <常量表达式> :语句;[….break;] …… default : }
说明:
– switch后的括号中为整形表达式,否则将产生语法错误 – case 后为整形或字符型常量,如’A’,0,1等 – case 条件只决定程序入口,只要没遇到break语句会一直执行到整个switch语句结 束,所以break语句经常会出现在每个选项中 – default不是必须的,当case后的选项都不满足时,执行default后的内容 – 注意case 后的空格,不要写成case0形式 – 注意不要在switch( )后写上”;”
if else示例
if(a>0) if(b>0)cout<<“a>0,b>0”; else cout<<“a>0,b<=0”; else if((b>0)cout<<“a<=0,b>0”; else cout<<“a<=0,b<=0”; 上面代码可改为不嵌套的if语句,原则上嵌套的层次越少, 可读性越强。 if(a>0&&b>0)cout<<“a>0,b>0”; if(a>0&&b<=0) cout<<“a>0,b<=0”; if((a<=0&&b>0)cout<<“a<=0,b>0”; if(a<=0&&b<=0) cout<<“a<=0,b<=0”;
循环嵌套
当一个循环出现在另一个循环内部时,就出现了循环嵌套,内层循环就 变成外层循环中的一条语句,对于外层循环的每次循环,内层循环都要 循环一个周期 举例:
– #include "iostream.h" – void main(){ – int i,j; – for(i=0;i<5;i++){ – cout<<" i="<<i<<endl; – for(j=0;j<10;j++) – cout<<"j="<<j<<endl; – cout<<"********\n"; – } – }
选择结构举例-4
问题:用switch完 成输入成绩 s(0~120), 输出
– 优(s>=90) (s>=90) – 良(80<=s<90) – 中(70<=s<80) – 及格(60<=s<70) – 不及格(s<60)
//观察改正错误 #include "iostream.h" void main(){ int s; cin>>s; switch(s/10){ case 12: case 11: case 10: case 9:cout<<"优"; case 8:cout<<"良"; case 7:cout<<"中"; case 6:cout<<"及格"; default:cout<<"不及格"; } cout<<endl; }
if else语句
格式:
– if ( 表达式 ) 语句1; – else 语句2;
else 语句不能单独使用,必须跟在if语句后 如果表达式值非零,执行语句1,否则执行语 句2 当语句1或语句2为多条语句时,必须用{}构 成符合语句 书写时要采用缩进结构 if和if else 都可以嵌套使用
头文件的产生
头文件的产生
参数传递-数值传递
#include <iostream.h> void f(int b){ b++; cout<<"b="<<b<<endl; } void main() { int a=1; f(a); cout<<"a="<<a<<endl; }
continue语句
continue语句只能用在 循环内部 执行continue语句会跳 过循环体内continue后 continue 的语句,继续循环
continue示例
} //示例1 #include "iostream.h" void main(){ int i,j=0; for(i=0;i<10;i++){ cout<<"A:"<<i<<","<<j<<endl; if(i%2==0)continue; j++; cout<<"B:"<<i<<","<<j<<endl; }
do 循环
格式:do 循环体语句 while ( 表达式 ); 注意,如循环体语句为多条语句,则需要用{} 构造成复合语句 执行步骤
– Ⅰ.执行循环体语句 – Ⅱ.判断表达式值,为0转到Ⅲ,否则转到Ⅰ – Ⅲ.结束循环,开始执行后面的语句
do 循环为先做后判断,因此循环体至少能执 行一次
do 循环举例
#include <iostream.h> void f(int &b){ b++; cout<<"b="<<b<<endl; } void main() { int a=1; f(a); cout<<"a="<<a<<endl; }
参数传递举例
#include "stdio.h" void fun(int *b){ int t=5; printf("1th b=%d\n",*b); *b=t; /*给*b(变量a)赋值*/ printf("2th b=%d\n",*b); } void main(){ m1: int a=2; m2: fun(&a); m3: printf("3th a=%d\n",a); } #include "stdio.h" void fun(int *b){ int t=5; printf("1th b=%d\n",*b); b=&t; /*给变量b赋值t的地址*/ printf("2th b=%d\n",*b); } void main(){ m1: int a=2; m2: fun(&a); m3: printf("3th a=%d\n",a); }
//示例2 #include "iostream.h" void main(){ int i=0,j=0; do{ i++; cout<<"A:"<<i<<","<<j<<endl; if(i%3==0)continue; j++; cout<<"B:"<<i<<","<<j<<endl; }while(i<10); }
goto语句
goto语句直接对应低级语言的跳转语句,非常灵活, 效率较高,含义是程序转到指定的地址继续执行,但 是无规则地跳转,会使程序变的难以理解,从而无法 维护,因此并不提倡大家使用此语句 goto语句结构: goto :
– goto 语句标号 – …… – 语句标号:
语句标号是一个标志符加一个”:”
问题:输入一行字母(即遇到’\n’截止),统计并输出输入 字母的个数(不包括’\n’)
– – – – – – – – – – – #include "stdio.h" void main(){ char c; int count=0; do{ c=getchar(); count++; }while(c!='\n'); printf("%d\n",count); } //注意输出结果是错的,因为把’\n’算在内了,应该输出count-1
函数的定义
函数定义格式:
– – – [返回值类型] 函数名(形式参数表){ 函数体 } 类型说明符省略时,相当于整形 函数中声明的参数称为形式参数,调用时代入的值称为实际参数 形式参数表可以为空,但是两侧的( )不能省略 函数用return 语句返回值,返回值类型必须与函数头声明的返回类型一致 没有返回值时,类型应声明成void,这种情况下,可以没有return语句或用空return 函数必须先声明后使用,如果函数说明出现在调用之后时,要先用函数头说明 float area(float radius) { float a; a=3.14*radius*radius; return a; }
说明:
– – – – – –
函数举例:
– – – – –
函数声明在调用函数后时
#include "stdio.h"
double fun(int n);/*函数的定义出现在调用者之后时,函数必须在调 函数的定义出现在调用者之后时, 函数的定义出现在调用者之后时 用者前预声明,函数的原型声明,还可以写作 还可以写作double (int 任意变量名 任意变量名) 用者前预声明,函数的原型声明 还可以写作 即形参名可以不一致, 或double fun(int )即形参名可以不一致,或省略 即形参名可以不一致 或省略*/
for循环
格式:
– for ( [表达式1] ; [表达式2] ; [表达式3] ) 循环体语句;
执行过程: – Ⅰ.执行表达式1(不管循环多少次,表达式1只执行一次) – Ⅱ.判断表达式2的值,为0转到Ⅵ,否则转到Ⅲ – Ⅲ.执行循环体语句 – Ⅳ.执行表达式3 – Ⅴ.转到Ⅱ – Ⅵ.退出循环,开始执行下一条语句