1、循环语句可以让一组语句反复多次执行
2、for关键字可以用来编写循环
3、for循环里可以让一个变量依次代表一组数字,然后使用一组语句处理这个变量代表的每个数字
4、这个变量叫做循环变量
5、采用如下格式描述循环变量的变化过程
for(把开始数字赋值给循环变量; 用逻辑表达式表示循环变量在变化过程中和结束数字的关系; 循环变量每次变化的规律)
6、如果一个问题可以采用一组数字的变化过程描述并且这组数字之间符合某种规律就可以采用for循环解决这个问题
7、假设有如下的for循环(1,2,3,4代表一句程序)
for (1;2;3) {
4
}它会按照以下方式分组执行 [1,2][4,3,2][4,3,2]…[4,3,2]
第一组和其他组都不一样正常情况下for循环一定在两组之间结束 如果某一组最后编号为2的逻辑表达式结果为真就启动下一组,否则结束循环
8、如果循环语句正常结束则循环变量一定落在指定范围之外
for( I = 1; I <= 5; i++);正常结束的话最后I = 6
9、for循环有可能不执行大括号里面的语句
10、for循环小括号里的每部分都可以省略
11、如果省略小括号中间的逻辑表达式就表示逻辑表达式永远为真,这种循环不能正常结束,这种循环叫做死循环
12、for循环小括号里前后两部分可以是用逗号连接的多条语句
13、C99规范里允许在for循环的小括号里临时声明循环变量这种循环变量只能在循环里使用,循环结束之后就不存在了
14、可以在循环里使用break;语句立刻结束循环的执行,一旦执行了break;语句则循环里的一切语句都不再执行,包括循环变量也不再变化
15、使用break;语句结束循环后循环变量的数值一定在指定数字范围内
16、如果编写循环的时候不容易描述循环的结束条件就可以编写一个死循环,然后在循环里用break;语句结束它
17、可以在循环里使用continue;语句直接跳到循环大括号的末尾,中间的语句这次循环就不执行了
/*
* for语句练习
* */
#include <stdio.h>
void exercise_1();
void exercise_2();
void exercise_3();
void exercise_4();
void exercise_5();
void exercise_6();
void exercise_7();
void exercise_8();
void exercise_9();
int main()
{
// exercise_1();
// exercise_2();
// exercise_3();
// exercise_4();
// exercise_5();
// exercise_6();
// exercise_7();
//? exercise_8();
exercise_9();
return 0;
}
/*
* 5 4 3 2 1
* */
void exercise_1()
{
int i = 0;
for( i = 1; i < 6; i++ )
{
printf( "%d ",i );//在%d后面加空格,可以将空格输出
}
printf( "\n" );//在程序结束后再加\n可以分行
}
/*
* 543210
* 43210
* 3210
* 210
* 10
* 0
* */
void exercise_2()
{
int i = 0, j = 0;
for( j = 5; j >= 0; j-- )
{
for( i = j; i >= 0; i-- )
{
printf( "%d ",i );
}
printf( "\n" );
}
}
/*
* 54321
* 5432
* 543
* 54
* 5
* */
void exercise_3()
{
int i = 0;
for( i = 54321; i >= 5; i /= 10 )
{
printf( "%d\n", i );
}
}
/*
* 死循环
* 使用ctrl+c可以结束
* */
void exercise_4()
{
int i = 0;
for( i = 1; ; i++ )
printf( "%d\n", i );
}
/*
* for循环中可以用都好进行多个变量变化
* */
void exercise_5()
{
int i = 0, j = 0;
for( i = 1, j = 10; i <= 10, j >=0; i++, j-- )
printf( "%dX%d=%d\n", i, j, i * j );
}
/*
*现在有鸡和兔子共40个头
*有100只脚
*问各有几只
*/
void exercise_6()
{
int i = 0, j = 0;
for( i = 1; i < 40 ;i++ )
{
for( j = 1; j < 40 ;j++ )
{
if( 2 * i + 4 * j == 100 && i + j == 40)
{
printf( "鸡有%d只,兔子有%d只\n", i, j );
}
}
}
}
void exercise_7()
{
int i = 0;
for( i = 1; i <= 40; i++ )
{
if( 4 * i + 2 * ( 40 - i ) == 100 )
{
printf( "鸡有%d只,兔子有%d只\n",40 - i, i );
break;
}
}
}
void exercise_8()
{
int i = 0;
for( i = 1; i <= 5; i++ )
{
printf("%d\n", i);
if( i = 3 )
{
continue;
}
printf("%d\n", i);
}
}
/*
*输出和7无关的数
* */
void exercise_9()
{
int i = 0, j = 0;
printf( "请输入一个0-99的数字:");
scanf( "%d", &i );
printf( "和7无关的数有: \n" );
for( ; i < 100; i++ )
{
if( i % 10 == 7 )
{
continue;
}
if( i / 10 == 7 )
{
continue;
}
if( i % 7 == 0 )
{
continue;
}
printf( "%d ", i );
j++;
if ( j == 5 )
{
j = 0;
printf( "\n" );
}
}
printf( "\n" );
}
/*
* 多重循环
* */
#include <stdio.h>
/*
* 54321
* 5432
* 543
* 54
* 5
* */
void exercise_1()
{
int i = 0, j = 0;
for( i = 1; i <= 5; i++) { //代表行
for( j = 5; j >= i; j--) {
printf( "%d", j );
}
printf( "\n" );
}
}
/*
* 有3种面值的货币,1元,2元和5元的,组合为10的有哪些
* */
void exercise_2()
{
int i = 0, j = 0, z = 0;
printf( "组成10元的可能有:\n" );
for( i = 0; i <= 2; i++) {
printf( "%d\n", i );
for( j = 0; j <= 5; j++ ) { //这里的循环在经过一次后,i,j,z的值已经发生了改变,下次不会从0开始,所以多重循环里for里面的第一部份的赋初值不能省略
printf( "%d\n", j );
for( z = 0; z <= 10; z++ ) {
printf( "%d\n", z );
if( 5 * i + 2 * j + z == 10 ) {
printf( "%d张5元 %d张2元 %d张1元\n", i, j, z );
}
}
}
}
}
int main()
{
// exercise_1();
exercise_2();
return 0;
}
/*
* for循环练习
* */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
* 产生7个不同的1到36的随机数,并输出
* */
void exercise_1() {
int arr[7] = {0};//?数组非常大的时候赋初值得等很长时间
int i = 0;
srand( time(0) );
printf("产生一张彩票:\n");
for( i = 0; i < 7; i++ ) {
arr[i] = rand() % 36 + 1;
int j = 0;
for( j = 0; j < i; j++ ) {//判断是否有重复数字
if( arr[j] == arr[i] ) {
// i--;
break;
}
}
if( i != j ){ //产生了重复数字的话需要将数组下标减1,因为for循环是先加1后才进行大括号里的
i--;
}
}
for( i = 0; i < 7; i++ ) {
printf("%d ", arr[i]);
}
printf("\n");
}
/*
* 产生7个不同的1到36的随机数,并输出
* 第2种判断相同数字的方法
*/
void exercise_5() {
int arr[7] = {0};
int i = 0, tmp = 0, num = 0, cnt = 0;
srand(time(0));
do {
tmp = rand() % 36+1;
for( num = 0; num <= cnt - 1; num++) {
if( arr[num] == tmp) {//判断是否相同
break;
}
}
if( num == cnt ) {//新数字可以使用
arr[cnt] = tmp;
cnt++;
}
}while( cnt < 7 );
for( i = 0; i < 7; i++ ) {
printf("%d ", arr[i]);
}
printf("\n");
}
/*
* 产生7个不同的1到36的随机数,并输出,并判断中了几个数字
*/
void exercise_6() {
int arr[7] = {0};
int arr1[7] = {0};
int i = 0, tmp = 0, num = 0, cnt = 0,z = 0,h = 0;
srand(time(0));
do {
tmp = rand() % 36+1;
for( num = 0; num <= cnt - 1; num++) {
if( arr[num] == tmp) {//判断是否相同
break;
}
}
if( num == cnt ) {//新数字可以使用
arr[cnt] = tmp;
cnt++;
}
}while( cnt < 7 );
printf("请输入您购买的彩票号码:\n");
for( num = 0; num < 7; num++) {
scanf("%d", &i);
int j;
for( j = 0; j< num; j++) {
if( i == arr[j] ) {
z++;
for( ; h < z; h++ ) {
arr1[h] = arr[j];
}
}
}
}
if( z == 0 ) {
printf("很抱歉,本次您未中奖\n");
}
else{
printf("恭喜您有%d个数字中奖\n", z);
printf("中奖号码为:\n");
for( h = 0; h < z; h++) {
printf("%d\n", arr1[h]);
}
}
printf("本次彩票号码为:\n");
for( i = 0; i < 7; i++ ) {
printf("%d ", arr[i]);
}
printf("\n");
}
/*
*有36块砖,男人1次4块,女人一次3块,小孩1次2块,正好一次搬完,每个人都搬了* *,问几男几女几小孩。
*自己写的
* */
void exercise_2() {
int i = 0, j = 0, z = 0;
for( i = 1; i <= 36; i++ ) {
for ( j = 1; j <= 36; j++ ) {
for ( z = 1; z <= 36; z++ ) {
if( 4 * i + 3 * j + 2 * z == 36 ){
printf( "男人有%d个,女人有%d个,小孩有%d个\n", i, j, z );
}
}
}
}
}
/*
*有36块砖,男人1次4块,女人一次3块,小孩1次2块,正好一次搬完,每个人都搬了* *,问几男几女几小孩。
*老师写的
*运算量降低
* */
void exercise_3() {
int men, women, children;
for (men = 1; men <= 36 / 4; men++)//注意这里是从1开始的,保证了每个都有
for (women = 1; women <= (36 - men * 4) / 3; women++)
for(children = 1; children <= (36 - men * 4 - women * 3) / 2; children++)
if (36 == men * 4 + women * 3 + children * 2)
printf ("男:%d, 女:%d, 小孩: %d\n", men, women, children);
}
/*
* 打印1-200以内的所有质数
* 质数是指只能被1和自身整除的数。
* */
void exercise_4() {
int i;
for( i = 1; i <= 200; i++ ) { //一个一个数字判断
int j;
for ( j = 2; j < i; j++ ) { //让该数与每个数相与
if ( i % j == 0 )
break;
}
if ( j == i ) {
printf("%d是质数\n", i);
}
}
}
int main() {
// exercise_1();
// exercise_2();
// exercise_3();
// exercise_4();
// exercise_5();
// exercise_6();
return 0;
}