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下面的就不继续执行了
*/