[编程笔记]第四章 流程控制

  1 1.流程控制? 【是我们学习C语言的第一个重点】   ***
  2     1). 什么是流程控制
  3         程序代码执行的顺序。
  4     2). 流程控制的分类
  5         【顺序执行】 —— 正常情况        
  6         【选择执行】 —— 
  7             定义: 某些代码可能执行,也可能不执行,
  8                 有选择地执行某些代码
  9             分类:if switch
 10             if
 11                 1. if最简单的用法
 12                 格式:
 13                    if(表达式)
 14                         语句 ;
 15                 功能:
 16                     如果表达式为真,则执行语句 ;
 17                     如果表达式为假,则不执行 ;
 18 
 19                     #include<stdio.h>
 20                     int main(void)
 21                     {
 22                         int x = 10 ;
 23                         if (x>8)
 24                             printf("x = %d",x) ;
 25                         return 0 ;
 26                     }
 27 
 28                 2. if的范围问题
 29                     if(表达式)
 30                         语句A ;
 31                         语句B ;
 32                     解释:if默认只能控制语句A的执行或不执行
 33                     而无法控制语句B的执行或不执行 
 34                     换言之,语句B一定会执行
 35 
 36                     if(表达式)
 37                     {
 38                         语句A ;
 39                         语句B ;
 40                     }
 41                     //此时if可以控制语句A和语句B
 42                     由此可见,if默认只能控制一个语句的执行或不执行
 43                     如果想控制多个语句的执行或不执行就必须用{}括起来。
 44                 //实例
 45                     #include<stdio.h>
 46                     int main(void)
 47                     {
 48                         if (3>2)
 49                             printf("AAAA\n") ;
 50                             printf("BBBB\n") ; //BBBB仍然输出
 51                             return 0 ;
 52                     }
 53 
 54                 3. if..else..的用法
 55                 格式:
 56                     if(表达式)
 57                         语句A ;
 58                     else
 59                         语句B;
 60 
 61                  #include<stdio.h>
 62                     int main(void)
 63                     {
 64                         int i,j ;
 65                         scanf("%d %d",&i,&j) ;
 66                         if(i > j)
 67                             printf("i大于j\n") ;
 68                         else
 69                             printf("i小于j\n") ;
 70                         return 0 ;
 71                     }
 72 
 73                 4. if..else if...else的用法
 74                 格式:
 75                     if(表达式1)
 76                         语句A ;
 77                     else if(表达式2)
 78                         语句B ;
 79                     else if(表达式3)
 80                         语句C ;
 81                     else
 82                         语句D ;
 83 
 84                     解释:若表达式1成立,执行语句A ;
 85                          若1不成立,2成立,执行B ;
 86                          若1,2不成立,3成立,执行C ;
 87                          若1,2,3,都不成立,执行D ;
 88             //
 89                 #include<stdio.h>
 90                 int main(void)
 91                 {
 92                     double delta = 3 ;
 93                     if(delta > 0)
 94                         printf("有两个解") ;
 95                     else if(delta == 0)
 96                         printf("有一个唯一解") ;
 97                     else
 98                         printf("无解") ;
 99 
100                 }
101 /*
102                 5. C语言对真假的处理
103                     非零是真,零就是假
104 */
105                 6. 程序实例
106                 //if举例 —— 求分数的等级
107                     #include <stdio.h>
108                     int main(void)
109                     {
110                         float score ; //score 分数
111                         printf("请输入你的考试成绩:") ;
112                         scanf("%f",&score) ;
113 
114                         if (score > 100)
115                             printf("这是做梦\n") ;
116                         else if (score >= 90 && score <= 100)
117                             printf("优秀!\n") ;
118                         else if (score >= 80 && score <= 90)
119                             printf("良好! \n") ;
120                         else if (score >= 60 && score <= 80)
121                             printf("及格! \n") ;
122                         else if (score >= 0 && score <= 60)
123                             printf("不及格!继续努力!\n") ;
124                         else
125                             printf("输入成绩过低!") ; 
126 
127                         return 0;        
128                     }
129                 //互换两个数字
130                     #include<stdio.h>
131                     int main(void)
132                     {   
133                         int k ;
134                         int i = 3 ; //i = 5 ,j = 5
135                         int j = 5 ; //i = 5 ,j = 5 
136                         k = j ;
137                         i = j ;
138                         j = k ;
139                         
140                         printf("i = %d,j = %d\n",i,j) ;
141                         
142                         return 0 ;
143                     }
144                 //三个数排序
145                     #include <stdio.h>
146                     int main(void)
147                     {
148                         int a , b , c ;
149                         int t ;
150                         printf("请输入三个整数,中间以空格分隔");
151                         scanf("%d %d %d",&a,&b,&c) ;
152                         if (a < b)
153                         {
154                             t = a ;
155                             a = b ;
156                             b = t ;
157                         }  
158                         if (b < c)
159                         {
160                             t = b ;
161                             b = c ;
162                             c = t ;
163                         }
164                         if(a < c)
165                         {
166                             t = a ;
167                             a = c ;
168                             c = t ;
169                         }
170                     //编写代码,完成a是最大值,b是中间值,c是最小值
171                         printf("%d %d %d\n",a,b,c) ;
172 
173                         return 0 ;
174                     }
175 
176                 7. if的常见问题解析
177                     1.空语句的问题:if (3 > 2) ;
178                         等价于 if (3 > 2)
179                                 ;
180 
181                         #include <stdio.h>
182                         int main(void)
183                         {
184                             if (1 > 2) ;//";"本行语句结束,跳转下一条
185                                 printf("AAAA\n") ;
186                             printf("BBBB\n") ;
187                         
188                         return 0 ;
189                         }
190 
191                     2.if..else问题 
192                     if(表达式1) //if后不能加;,否则else后出错
193                         A ;
194                     else 
195                         B ;
196 
197                     3.if..else if问题
198                     if (表达式1)
199                         A ;
200                     else if (表达式2)
201                         B ;
202                     else if (表达式3) 
203                         C ;
204                     else 
205                         D ;
206                 //实例
207                     #include<stdio.h>
208                     int main(void)
209                     {
210                         if (3 > 2)
211                             printf("AAAA\n") ;
212                         else if (3 > 1)
213                             printf("BBBB\n") ;
214                         else 
215                             printf("CCCC\n") ;
216 
217                     return 0 ;
218                     }
219                                        
220                     4.if (表达式1)
221                         A ;
222                       else if (表达式2)
223                         B ;
224                       else if (表达式3) 
225                         C ;
226                     //这样写不会出错,但是逻辑上有漏洞
227                     5.if (表达式1)                                                                                                                                                                                                                                  
228                              A ;
229                       else if (表达式2)
230                             B ;
231                       else if (表达式3) 
232                             C ;
233                       else (表达式4) 
234                             D ;
235                     ///这样写是不对的正确的写法是
236                     //要么去掉(表达式4) ;
237                     //要么去掉,else后面加if ;
238                     //else(表达式4) ;语法上正确,但逻辑出错
239                     
240 
241             switch
242                 用的很少,后面再讲
243 
244         【循环执行】
245             定义:某些代码会被重复执行
246 
247             分类:forwhiledo..while 
248            
249             for
250                 1. 格式:for(1 ; 2 ; 3)
251                         4 ;
252                     5 ;
253 
254                 2. 执行的流程【重点】
255                 【单个for循环的使用】
256                     /*执行顺序:先执行1,判断2是否成立    
257                         2成立,执行循环,先执行4再执行3
258                             3执行结束,标志着循环一次结束
259                         2不成立,终止循环                       */
260                     
261                     //实例                                
262                         #include<stdio.h>
263                         int main(void)
264                         {
265                             int i ;
266                             for(i=1; i<=10; ++i)
267                                 sum = sum + i ;
268                             printf("sum = %d\n",sum) ;
269                             return 0 ;
270                         }
271                     /*执行流程:
272                         1) i = 1 ; 1 <= 4 ;
273                                 sum = 1; i= 2 ;
274                         2) i = 2 ; 2 <= 4 ;
275                                 sum = 3 ; i = 3 ;
276                         3) i = 3 ; 3 <= 4 ;
277                                 sum = 6 ; i = 4
278                         4) i = 4 ; 4 <= 4 ;
279                                 sum = 10 ; i = 10 ;
280                         print("sum  = %d\n",sum) ;   */
281                 
282 
283                     forif 的嵌套使用
284                     //例1
285                         #include <stdio.h>
286                         int main(void)
287                         {
288                             int i ;
289 
290                             for (i=5; i<4; ++i)
291                             {
292                                 printf("AAAA\n") ;
293                                 printf("BBBB\n") ;
294 
295                                 return 0 ;
296                             }
297                         }
298 
299                     //例2 求1到100之间所有的能被3整除的数字之和
300                         #include<stdio.h>
301                         int main(void)
302                         {
303                             int i ;
304                             int sum = 0 ;
305 
306                             for (i=3; i<=100; ++i)
307                             {
308                                 if (i%3==0) //如果i能够被3整除
309                                     sum = sum + i ;
310                                 printf("sum = %d\n",sum) ;
311                             }
312 
313                             return 0 ;
314                         }
315                     
316                 
317                 
318                 
319                     //例1 —— 求1到100之间的奇数之和
320                         #include <stdio.h>
321                         int main(void)
322                         {
323                             int i ;
324                             int sum = 0 ;
325 
326                             for (i=1; i<101; ++i)
327                             {
328                                 if (i%2==1)
329                                     sum += i ; //sum = sum + i ;
330                             }
331                             printf("sum = %d\n",sum) ;
332                             return 0 ;
333                         }
334 
335                     //例2 —— 求1到100之间的奇数的个数
336                         #include <stdio.h>
337                         int main(void)
338                         {
339                             int i ;
340                             int cnt = 0 ; //个数一般用cnt表示
341 
342                             for (i=1; i<101; ++i)
343                             {
344                                 if (i%2==1)
345                                     ++cnt ;
346                             }
347                             printf("cnt = %d\n",cnt) ;
348 
349                             return 0 ;
350                         }
351 
352 
353                     //例3 —— 求1到100之间的奇数的平均值
354                         #include <stdio.h>
355                         int main(void)
356                         {
357                             int i ;
358                             int sum = 0 ;
359                             int cnt = 0 ;
360                             float avg ; //average 缩写
361 
362                             for (i=1; i<101; ++i)
363                             {
364                                 if (i%2==1)
365                                     {
366                                         sum += 1 ;
367                                         ++cnt ;
368                                     }
369                             }
370                             avg = 1.0*sum / cnt ; //1.0默认是double类型
371 
372                             printf("sum = %d\n",sum) ;
373                             printf("cnt = %d\n",cnt) ;
374                             printf("avg = %f\n",avg) ;
375 
376                             return 0 ;
377                         }
378 
379                     //例4 —— 求1到100之间的奇数之和,
380                     再求1到100之间的偶数之和
381 
382                         #include <stdio.h>
383                         int main(void)
384                         {
385                             int i ;
386                             int sum1 = 0 ; //奇数和
387                             int sum2 = 0 ; //偶数和
388 
389                             for (i=1; i<101; ++i)
390                             {
391                                 if (i%2==1)
392                                 {
393                                     sum1 += i ;
394                                 }
395                                 else
396                                 {
397                                     sum2 += i ;
398                                 }
399                             }
400                             printf("sum1 = %d\n",sum1) ;
401                             printf("sum2 = %d\n",sum2) ;
402                         
403                             return 0 ;
404                         }
405 
406 
407                 
408                 【多个for循环的嵌套使用】**
409                     1.结构1
410                         for (1 ; 2 ; 3) //1
411                             for (4 ; 5 ; 6) //2
412                                 A ;  //3
413                                 B ;  //4
414                             /*整体是两个语句,1 2 3是一个语句
415                             4 是一个语句  */ 
416                         /*执行顺序:
417                         1 -> 2 -> 4 -> 5 -> A -> 6 -> 3   */
418 
419                     2.结构2
420                         for (1 ; 2 ; 3) 
421                                 for (4 ; 5 ; 6)
422                                 {
423                                     A ;
424                                     B ;
425                                 }    //整体是一个语句
426 
427                     3.结构3
428                         for (7 ; 8 ; 9)
429                             for (1 ; 2 ; 3)
430                             {
431                                 A ;
432                                 B ;
433                                 for (4 ; 5 ; 6)
434                                     C ;
435                             }  //整体是一个语句
436 
437                 3. 范围问题
438                 4. 举例
439                     1+2+3+...+100
440                     1+1/2+1/3+...+1/100
441 
442                     //例2 1+1/2+1/3+...+1/100
443                             #include<stdio.h>
444                             int main(void)
445                             {
446                                 int i ;
447                                 float sum ;
448 
449                                 for (i=1; i<=100; ++i)
450                                 {
451                                     sum = sum + 1/i ; //error
452                                     sum = sum + 1 / (float)(i)  //ture
453                                     //sum = sum + (float)(1/i) ;是错的
454                                     //更简单的写法是 sum = sum + 1.0/i ;
455                                 }
456                                 printf("sum = %d\n",sum) ;
457 
458                                 return 0 ;
459                             }
460                     //总结:强制类型转化对初学者很重要
461 
462                     //强制类型转化
463                     格式: (数据类型)(表达式)
464                     功能: 把表达式的值强制转化为前面所执行的数据类型
465                     例子: (int)(4.5+2.2) 最终值是 6
466                         (float)(5) 最终值是 5.000000
467 
468                     //浮点数的存错所带来的问题
469              floatdouble 都不能保证可以把所有的实数都准确的
470              保存在计算机中
471                         例子:float i = 99.9 ;
472                             printf("%f\n",i) ;
473                         最终在Vc++6.0中的输出结果是:99.900002
474                        因为浮点数无法准确存储,所以就衍生出来两个编程问题;
475                         有一个浮点型变量x,如果判断x的值是否为零
476                             if (|x-0.000001|<=0.000001)
477                                 是零
478                             else
479                                 不是零
480 
481                         为什么循环中更新的变量不能定义成浮点型
482 
483                 //实例
484                     #include<stdio.h>
485                     int main(void)
486                     {
487                         float i ;
488                         float sum = 0 ;
489 
490                         for (i=1; i<=100; ++i)
491                         {
492                             sum = sum + 1/i ;
493                         }
494                         printf("sum = %f\n",sum) ;
495 
496                         return 0 ;
497                     }
498             
499             while
500                 1.执行问题
501                     格式:
502                         while (表达式)
503                             语句 ;
504                 2. 与for的相互比较
505                     for与while可以相互转换
506                         for (1 ; 2 ; 3)
507                             A ;
508                         等价于 
509                         1 ;
510                         while (2)
511                         {
512                             A ;
513                             3 ;
514                         }
515                     //while和for可以相互转换
516                     //但for的逻辑性更强,更不容易出错,推荐多使用for
517                 3. 举例
518                     从键盘输入一个数字,如果该数字是回文数
519                     则返回yes,否则返回no 
520                 4. 什么时候使用while和for
521                     无法具体说明情况,用多了自然就能感受到。
522 
523 
524             do..while
525                 格式:
526                     do 
527                     {
528                         ....
529                     }while(表达式) ;
530                 do...while并不等价于for,当然也不等价于while
531                 //主要用于人机交互
532 
533             breakcontinue 
534                 break535                     break 如果用于循环是用来终止循环的
536                     break 如果用于 switch,则是用于终止 switch
537                     break 不能直接用于 if,除非 if 属于循环内部的一个子句。
538                 //例1:
539                 for (i=0; i<3; ++i)
540                 {
541                     if (3 > 2)
542                         break ;
543                         //break虽然是if内部的语句,但break终止
544                         //的却是外部for的循环
545                     printf("嘿嘿!\n") ;
546                 }
547                 /*在多层循环中,break只能终止最里面包裹它的那个循环*/
548                 //例2:
549                 for (i=0; i<3; ++i)
550                     {
551                         for (j=1; j<4; ++j)
552                             break ;
553                         //break只能种植距离它最近的循环
554                         printf("同志们好\n") ;
555                     }
556                 //在多层switch嵌套中,break只能终止距离它最近的switch
557             //例3
558                 int x=1,y=0,a=0,b=0 ;
559                 switch(x) // 第一个switch
560                 {
561                 case 1 : 
562                         switch(y) // 第二个switch 
563                         {
564                         case 0 :
565                            a++ ;
566                          break ; // 终止的是第二个switch
567                         case 1 :
568                            b++ ;
569                          break ;
570                         }
571                         b = 100 ;
572                         break ; // 终止的是第一个switch
573                 case 2 :
574                    a++ ;
575                    b++ ;
576                  break ;
577                 }
578                 printf("%d %d\n",a,b) ; //26行
579 
580             continue
581                 功能:用于跳过本次循环余下的语句
582                       转去判断是否需要执行下次循环
583                     例子:
584                     1.
585                         for (1; 2; 3)
586                         {
587                             A ;
588                             B ;
589                             continue ; 
590                         //如果执行该语句,则执行后,C和D不会被执行
591                             C ;
592                             D ;
593                         }
594                     2.
595                         while (表达式)
596                         {
597                             A ;
598                             B ;
599                             continue ;
600                         //如果执行该语句,则执行完该语句后,
601                         //会执行表达式,C和D都会被跳过去,C和D不执行
602                             C ;
603                             D ;
604                         }
605                         
606             2. 流程控制的重要性
607                 1.随着c语言发展,流程控制可被其他语言继承
608                 C-> C++ -> java /C#
609                 2.流程控制体现了软件工程的思想
610                 3.看懂一个程序的前提是学会流程控制
611                 

猜你喜欢

转载自www.cnblogs.com/lx17746071609/p/10216232.html