1 / 61

主 讲:薄瑜 电 话 : 15233055176 email : cyyby2010@163

C 语言程序设计. 主 讲:薄瑜 电 话 : 15233055176 email : cyyby2010@163.com. 内容提要. 第 1 章 C 语言概述. 第 2 章 C 语言基本知识. 第 3 章 运算符和表达式. 第 4 章 顺序和选择结构程序设计. 第 5 章 循环结构程序设计. 第 6 章 函数. 第 7 章 数组. 第 8 章 指针. 第 9 章 结构体等构造数据类型. 第 10 章 文件. 4.1 结构化程序设计 4.2 语句与分程序 4.3 顺序结构程序设计

afram
Download Presentation

主 讲:薄瑜 电 话 : 15233055176 email : cyyby2010@163

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C语言程序设计 主 讲:薄瑜 电 话:15233055176 email:cyyby2010@163.com

  2. 内容提要 第1章 C语言概述 第2章 C语言基本知识 第3章 运算符和表达式 第4章 顺序和选择结构程序设计 第5章 循环结构程序设计 第6章 函数 第7章 数组 第8章 指针 第9章 结构体等构造数据类型 第10章 文件

  3. 4.1结构化程序设计 4.2语句与分程序 4.3顺序结构程序设计 4.4选择结构程序设计 4.5 switch语句 4.6条件运算符 4.7程序举例 第4章 顺序和选择结构程序设计

  4. 题1: • #include “stdio.h” • void main(){  • float x=2.0,y;  if(x<0.0) y=0.0;  else if(x<10.0) y=1.0/x;  else y=1.0;   printf(“%f\n”,y);  }  

  5. 题2: • #include “stdio.h” • void main(){  • int p,a=5;  if(p=a!=0)   printf(“%d\n”,p);  else printf(“%d\n”,p+2);  } 

  6. 题3: • #include“stdio.h” • void main(){ • intx=1,a=0,b=0;switch(x) • {case0:b++;case1:a++;case2:a++;b++; } printf(“a=%d,b=%d\n”,a,b);}

  7. 题4: • #include“stdio.h” • void main(){  • int x=1,y=0,a=0,b=0; switch(x)   { • case 1:switch(y)   {  • case 0:a++; break; case 1:b++; break;   } case 2:a++;b++; break;   }   printf("%d %d\n",a,b); } 

  8. 题5: • #include“stdio.h” • void main(){  • int p=30; • printf(“%d\n”,(p/3>0?p/10:p%3)); • }

  9. 5.1 问题的提出与程序示例 5.2 while语句 5.3 do…while语句 5.4 for语句 5.5 多重循环 5.6 break语句的用法 5.7continue语句 5.8 控制循环的实用方法 第5章 循环结构程序设计 9/44

  10. §5.1 问题的提出与程序示例 问题如下: A.在屏幕上输出整数1-20,每两个整数中间空一个空格。 B.计算1+2+3+…+n的值,n由用户输入。 解题方法1:

  11. §5.1 问题的提出与程序示例 具体程序如下 • 方法2 分析: • 输出1 • 输出2 • 输出20 • 输出i . . . 11/44

  12. §5.1 问题的提出与程序示例 分析问题B: sum=0 sum=sum+1 sum=sum+2 sum=sum+n sum=sum+i • 使用一个初值为0的存储单元(这个存储单元叫做累加器),从加1开始,每次加1个比前一次大1的整数,重复n次。 . . . • 将i的值累加到sum(累加器)中,并将循环变量i的值增1。 和的 新值 和的 当前值 求和项 当前值 12/44

  13. §5.1 问题的提出与程序示例 具体程序如下: 0=>sum 1=>i 输入n i<=n sum+i=>sum i增1 输出sum • N-S结构图 13/44

  14. §5.2 while语句 5.2.1while语句的语法和流程图。 (1)while语句的语法如下: while(表达式) 语句; (2)while语句的流程图 假 表达式 表达式为真 真 语句 语句 (a)传统流程图 (b)N-S流程图

  15. §5.2 while语句 5.2.1while语句的语法和流程图。 (3)while语句的功能 首先计算表达式的值,如果表达式的值非0,执行语句,并再次计算表达式的值,此过程重复执行,直到表达式的值为0,循环结束。重复执行的语句称为循环体。 例:k=1;s=0; while(k<=100){s=s+k;k=k+2;} 循环控制变量 循环控制表达式 循环体 15/44

  16. §5.2 while语句 5.2.1while语句的语法和流程图。 (4)最常见的循环语句(通过计数控制循环的执行次数) i=1; while(i<=20) { printf(“%d ”,i); i++; } /*循环前的初始赋值*/ /*i小于等于20时,进行循环*/ /*循环体开始,输出i*/ /*i值增1,返回循环开始再次判断条件*/ /*循环体结束*/ 16/44

  17. §5.2 while语句 • 读程序: • #include "stdio.h" • void main() • { • int k,t,n ; • printf("enter n:\n"); • scanf("%d",n); • k=1;t=1; • while(k<=n) • { • t*=k; • k++; • } • printf("%d \n“,t ); • } ,s=0 s+=t; ,s ,%d

  18. §5.2 while语句 5.2.1while语句的语法和流程图。 (5)使用用户输入的特殊的值来结束循环 18/44

  19. §5.2 while语句 运行结果: 可执行程序与用户交流的字符是回车。 回车 19/44

  20. §5.2 while语句 修改循环语句: (上机运行,查看输出结果) 第一种改法: while((c=getchar( ))!=‘$’) putchar(c); 第二种改法: while(putchar(getchar( ))!=‘$’); 回车 20/44

  21. §5.2 while语句 5.2.2使用while语句要注意的问题。 (1)循环次数的控制要正确。 (2)循环体包含一个以上的语句时,一定要用花括号括起来。 (3)在循环体内要有使循环趋向于结束的语句,否则可能引起无限循环。 (4)循环体可以为空。 21/44

  22. §5.3 do...while语句 5.3.1 do…while语句的语法和流程图 do…语句的语法格式如下: do { 语句; }while(表达式); do...while语句的功能:执行“语句”,计算表达式的值,如果表达式的值非0,继续执行语句,直到表达式的值为0,循环结束。

  23. §5.3 do...while语句 do...while语句的流程图: 语句 语句 假 表达式 A 表达式为真 真 (a)传统流程图 (b)N-S流程图 23/44

  24. §5.3 do...while语句 5.3.2 使用do…while语句解决问题 [例5.9]求“1+2+3+…+n”的问题。 [例5.10]分析下面程序的执行结果。 #include "stdio.h" void main() { char c; printf("\nplease input a string ended with $:"); do { c=getchar( ); putchar(c); }while(c!='$'); } 24/44

  25. §5.3 do...while语句 • [例5.11]分析下面程序的执行结果。 #include "stdio.h" void main() { int sum=0,i=0,score; printf("\nplease input a string ended with -1:"); do { scanf("%d",&score); sum=sum+score; i++; }while(score!=-1); printf("aver=%lf\n",1.0*sum/i); } 1 2 -1

  26. §5.3 do...while语句 5.3.3 使用do…while要注意的问题: (1)为了避免编译系统把do…while语句的while当作while语句的开始,do…while循环体中的语句即使只有一句话,也需要采用分程序结构。 (2)do…while语句是先执行循环体,再判断表达式,因此有些程序不能用do…while语句编写。 26/44

  27. #include "stdio.h" void main( ) { char c; int c_char=0,c_num=0,c_other=0; printf("please input a string end with #:\n"); c=getchar( ); while(c!='#') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') c_char++; else if(c>='0'&&c<='9') c_num++; else c_other++; c=getchar( ); } printf("char:%d\nnum:%d\nother:%d\n",c_char,c_num,c_other); } #123ert$%^#

  28. #include "stdio.h" void main() { char c; int c_char=0,c_num=0,c_other=0; printf("please input a string end with #:\n"); c=getchar(); do { if(c>='a'&&c<='z'||c>='A'&&c<='Z') c_char++; else if(c>='0'&&c<='9') c_num++; else c_other++; c=getchar( ); } while(c!='#'); printf("char:%d\nnum:%d\nother:%d\n",c_char,c_num,c_other); } #123ert$%^#

  29. §5.4 for 语句 5.4.1 for语句的语法和流程图 5.4.2 使用for语句解决问题 5.4.3 使用for语句时需要注意的问题 29/44

  30. §5.4 for语句 for语句的语法是 for(表达式1;表达式2;表达式3) 语句; 计算表达式1 假 判表达式2 真 语句 计算表达式3 计算表达式1 判表达式2 语句 计算表达式3 下一条语句 N-S结构图

  31. §5.4 for语句 • for语句的功能: (1)计算表达式1; (2)计算表达式2,判断表达式2是否为“真”,若为真,执行循环体中的语句,然后,计算表达式3;跳转到第(2)步执行。若为假,结束循环,转到for语句下面的一个语句。 • 注意:1.表达式1是在进入循环之前求解(相当于循环变量赋初值)。 2.表达式3相当于循环体的一部分。 31/44

  32. §5.4 for语句 5.4.2 使用for语句解决问题: [例5.12] 用for解决“在屏幕上输出1-20”的问题 32/44

  33. §5.4 for语句 5.4.2 使用for语句解决问题: [例5.13] 用for解决“1+2+3+…+n”的问题 33/44

  34. §5.4 for语句 • 5.4.2 for语句的其它形式: ;不能带走 表达式1; 表达式1; while(表达式2) { 语句; 表达式3; } for( ;;) 语句; 表达式3 表达式1 表达式2 { 表达式3; }

  35. §5.4 for语句 5.4.3 使用for语句要注意的问题: (1)for语句写起来很灵活,表达式1、表达式2、表达式3都可以省略,但是即使三个表达式都省略了,两个“;”也不可省略。 (2)在表达式1和表达式3中,可以使用逗号运算符把执行语句并列在一起,并且循环体可以为空。 35/44

  36. §5.4 for语句 • 5.4.3 使用for语句要注意的问题: (3)表达式2除了可以是关系表达式外还可以是数值表达式或字符表达式。 例1:for(s=0,k=1;k-3;k++) s=s+k; 例2:for( ;(c=getchar( ))!='\n';putchar(c));

  37. §5.5 多重循环 多重循环:也叫做循环的嵌套,就是在一个循环体内包含了另一个循环体。 例如:编写程序在一行内输出整数1-20,并连续输出五行。 解题思路:把一行内输出整数1-20的工作重复五次。 使用逐步求精的方法来实现上题,先画出程序的流程图。

  38. §5.5 多重循环 程序的流程图(N-S结构图)如下。 i=1 i=1 i<=5 i<=5 j=1 在一行内输出1-20 j<=20 输出j i增1 j增1 输出换行 i增1 38/44

  39. §5.5 多重循环 具体程序如下。 39/44

  40. §5.5 多重循环 运行结果如下。 40/44

  41. §5.5 多重循环 注意:1.嵌套的循环控制变量不能相同。 2.内循环变化快,外循环变化慢。 例:for(i=1;i<9;i++) for(j=1;j<=i;j++) printf("%d*%d=%d",i,j,i*j); printf("\n"); 3.正确确定循环体。 4.循环控制变量与求解问题挂钩。 41/44

  42. break语句不但可以用于switch语句,也可以用于循环语句。break语句不但可以用于switch语句,也可以用于循环语句。 break语句的语法格式为:break; break语句在循环体中的功能是:终止最内层的循环。从包含它的最内层循环语句(while、do…while、for)中退出,执行包含它的循环体外的下一条语句。 §5.6 break语句的用法

  43. §5.6 break语句的用法 #include "stdio.h" void main() { int i,j; for(i=3;i<=100;i++) { for(j=2;j<=i-1;j++) if(i%j==0) break; if(i==j) printf("%4d",i); } printf("\n"); }

  44. 5.7.1continue语句的用法 continue语句的语法格式为: continue; continue语句的功能:使包含它的最内层循环立即开始下一轮循环。 §5.7 continue 语句

  45. §5.7 continue 语句 #include "stdio.h" void main() { int i,j,s=0; printf("please enter 10 int:"); for(i=0;i<10;i++) { scanf("%d",&j); if(j<0) continue; s=s+j; } printf("sum is %d",s); }

  46. 5.7.2break与continue的区别 都可以用在循环体中,但要注意其区别: (1)在循环体中使用break是使内层循环立即停止循环,执行循环体外的下一条语句,而continue是使本次循环停止执行,执行下一次循环。 (2)break语句可用在switch语句中,continue语句则不能。 §5.7 continue 语句 46/44

  47. §5.7 continue 语句 #include "stdio.h" void main() { int i=0; while(i<=9) { i++; if(i==5) break; printf("%d\n",i); } } #include "stdio.h" void main() { int i=0; while(i<=9) { i++; if(i==5) continue; printf("%d\n",i); } }

  48. 控制循环的方法大致可以分为以下几种: 计数循环 哨兵循环 计数哨兵循环 询问循环 输入验证循环 查找循环 延时循环 §5.8 控制循环的实用方法 48/44

  49. 5.8.1 计数循环和哨兵循环 (1)计数循环 注意正确设置计数器的初值、终值及步长。 计数器(?) 初值(?)终值(?)步长(?) §5.8 控制循环的实用方法 for(i=99,sum=0;i>=1;i=i-2) sum=sum+i; 计数循环 49/44

  50. 5.8.1 计数循环和哨兵循环 计数循环的N-S结构图如下: §5.8 控制循环的实用方法 为计数器赋初值 计数器小于(或大于)终值 需要重复做的工作 计数器按步长增值 50/44

More Related