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 分类:for、while、do..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 for 和 if 的嵌套使用 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 float 和 double 都不能保证可以把所有的实数都准确的 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 break 和 continue 534 break : 535 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
今日推荐
周排行