1_for
1. 初识for
/* 定义:某些代码会被重复执行 分类: 1. for *** 2. while 3. do....while */ /* 时间:2018.02.13 项目:1+2+3+4+......+100 目标:掌握 “for” 语句的执行流程 */ # include <stdio.h> int main (void) { int i; int sum = 0; for (i = 1; i <= 10; i++) sum = sum + i; printf( "sum=%d\n", sum ); return 0; } /* 思考:i<=10,功能和 “if” 语句相似,如果成立,执行 “ sum = sum + i ” 流程:step 1: i=1 i<=10 (成立) sum=0+1=1 i++ (i=2) step 2: i<=10 (成立) sum=1+2=3 i++ (i=3) …… step 10: i<=10 (成立) sum=sum+10 i++ (i=11) step 11: i<=11 (不成立) "for" 语句执行完毕 (循环结束) */
2. for 的3个使用例子
2.1 求解0-10的奇数之和
/* 时间:2018.02.13 目的:求解0-10的奇数之和 */ /* 自己写的程序,利用" i++ " */ /* # include <stdio.h> int main (void) { int i = 0; int sum = 0; for ( i; i<=4; i++ ) { sum = sum+(2*i+1); } printf ( "sum=%d\n",sum ); return 0; */ /* 课程的例子,利用 " i+=2 " */ # include <stdio.h> int main (void) { int i; int sum = 0; for (i=1; i<10; i+=2) { sum = sum+i; } printf ( "i=%d\n", i ); printf ( "sum=%d\n", sum ); return 0; } /* 结果: i=11 sum=25 */
2.2 求1-100内能被3整除的数之和
/* 时间:2018.02.20 目的:“ if ” 和 “ for ” 的嵌套使用 项目:求1-100内能被3整除的数之和 */ # include <stdio.h> int main (void) { int i; int sum = 0; int j; for ( i=3; i<=100; i++ ) { j = i%3; if ( j == 0 ) sum = sum + i; } printf ( "sum = %d\n", sum ); return 0; } /* 结果:sum = 1683 学习心得:在C中,等于的符号是“ == ”,符号“ = ”是赋值 */
2.3 求1-100的偶数之和,奇数之和,偶数的个数,偶数平均值
/* 时间:2018.02.20 正月初五 项目:1. 求1-100的偶数之和 2. 求1-100的奇数之和 3. 求1-100的偶数的个数 4. 求1-100的偶数平均值 */ # include <stdio.h> int main ( void ) { int i, j; int sum_e = 0; int sum_o = 0; int count_e = 0; float average_e; for (i=1; i<=100; ++i) // i = 1-100 { j = i % 2; if ( j == 0 ) // j = i % 2 如果为0,则 i 为偶数 { //sum_e = sum_e+i; // sum_even 偶数之和 sum_e += i; // sum_e = sum_e + i //count_e = count_e+1; // count_even 偶数的个数 //count_e += 1; ++count_e; //average_e = sum_e/count_e; // average_even 偶数的平均值 } else //sum_o = sum_o+i; // sum_odd 奇数之和 sum_o += i; } average_e = 1.0*sum_e/count_e; // average_even 偶数的平均值,sum_e 和 count_e 都是整型数据,1.0*sum_e 将sum_e的数据类型强制转换为浮点型 //average_e = (float)sum_e/count_e; // 上一句的另一种表达方式 printf ( "1. 偶数之和 sum_e = %d\n", sum_e ); printf ( "2. 奇数之和 sum_o = %d\n", sum_o ); printf ( "3. 偶数的个数 count_e = %d\n", count_e ); printf ( "4. 偶数平均值 average_e = %f\n", average_e ); return 0; } /* 结果: 1. 偶数之和 sum_e = 2550 2. 奇数之和 sum_o = 2500 3. 偶数的个数 count_e = 50 4. 偶数平均值 average_e = 51 心得: 求和、计数:都是通过 “for” 语句,逐个数相加、逐步加1实现 */
2_while
/* 时间:2018.03.07 目的:1. while的执行顺序 while (表达式) 语句 2. 与for的相互比较 求1+2+3+....100 3. 什么时候用 for?什么时候用 while? 没法说,用多了自然而然就知道了 */ /* 项目:用for求1+2+3+....100 */ /* # include<stdio.h> int main (void) { int i; int sum = 0; for (i=1; i<=100; ++i) { sum = sum + i; } printf("sum = %d\n", sum); return 0; } */ /* 项目:用while求1+2+3+....100 */ # include<stdio.h> int main (void) { int i = 1; int sum = 0; while (i<=100) { sum += i; ++i; } printf("sum = %d\n", sum); return 0; } /* 心得:“while” 是 “for” 语句的另一种表达方式,按照for的执行顺序写语句,关键while()括号里是判断的语句 */
3_do....while
/* 时间:2018.03.07 16:26 项目:求多个一元二次方程的解 */ #include<stdio.h> #include<math.h> int main() { double a,b,c; double delta; double x1,x2; char ch; do { printf("请输入一元二次方程的三个系数:\n"); printf("a = "); scanf("%lf", &a); printf("b = "); scanf("%lf", &b); printf("c = "); scanf("%lf", &c); delta = b*b-4*a*c; if (delta > 0) { x1 = (-b+sqrt(delta))/(2*a); x2 = (-b-sqrt(delta))/(2*a); printf ("有两个实数解:x1 = %lf x2 = %lf\n\n", x1,x2); } else if (delta == 0) { x1 = x2 = -b/(2*a); printf ("有唯一实数解:x1 = x2 = %lf\n\n", x1,x2); } else { printf ("无实数解\n\n"); } printf ("请问是否继续求解,如果是,请输入(y 或 Y),如果否,请输入(n 或 N)\n "); scanf (" %c", &ch); }while( ch == 'y' || ch =='Y' ); return 0; } /* 心得: 单个字符要用 '' 括起来,whlie ()括号里面是一个表达式 */
break
/* 时间:2018.03.07 项目:break两个用的地方:1.终止switch语句;2.终止循环 */ /*** 1.终止switch ***/ /* #include<stdio.h> int main() { int val; printf("请输入您要进入的楼层\n"); scanf("%d", &val); switch (val) { case 1: printf("1层开!\n"); break; case 2: printf("2层开!\n"); break; case 3: printf("3层开!\n"); break; default: printf("还没盖到这一层!\n"); break; } return 0; } /*** 2.终止循环 ***/ /* #include<stdio.h> int main() { int i; for (i=0; i<3; ++i) { if (3>2) break; printf("嘿嘿!\n"); } return 0; } */ /*** 2.终止循环(多个循环的情况)***/ #include<stdio.h> int main() { int i, j; for (i=0; i<3; ++i) { for (j=0; j<3; ++j) break; printf("在多层循环中,break只能终止离它最近的for语句!\n并非它之后的所有句子就不执行了!\n\n"); } return 0; } /* 心得: 在多层嵌套的循环或switch语句中,break语句只能终止离他最近的那层 */
continue
/* 时间:2018.03.07 19:12 */ #include<stdio.h> int main() { int i; for (i=0; i<3; ++i) { printf("A"); printf("B\n\n"); //continue; //执行结果:AB AB AB //break; // 执行结果:AB printf("C"); printf("D"); } return 0; } /*** 另一个例子 ***/ /* # include <stdio.h> int main(void) { int i; int j ; char ch ; printf("用户输入一个十进制的数\n"); scanf("%d", &i); printf("i = %d\n", i); while ( ( ch=getchar() ) != '\n' ) //作用是:上一句用户输入非法时的处理。getchar() 意思是等待用户从键盘输入字符 continue; printf("用户再输入一个十进制的数\n"); scanf("%d", &j); printf("j = %d\n", j); getchar(); return 0; } /* 心得: 1.continue用于循环 2.continue,继续的是循环命令,继续的是++i操作,相当于一种着急完成工作的心情,continue下面的就不继续执行了 */