c语言程序(5):循环结构程序设计
Merry Christmas
循环结构程序设计
导读
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
/*
循环结构:
1.基本循环语句
while循环
do_while循环
for循环
1.1 所有的的循环,都是满足条件循环
1.2 while循环
while(条件)
{
循环体;
}
1.3 kbhit() :监测键盘是否按键,
1.4
do
{
循环体;
}while(count<3);
1.5 for循环
for(表达式1;表达式2;表达式3)
{
语句4;
}
执行过程: 1 2 4 3 2 4 3
表达式1:写循环变量的初始化
表达式2:循环条件
表达式3:循环条件的改变
2.跳转语句
break;
continue;
goto;
3.循环的作用
3.1 处理重复或者具有规律的事情
3.2 递推的数学问题
3.3 控制交互的循环
*/
int main()
{
//描述一个鼓掌的过程
//次数去控制循环的次数
int count = 0;
while (count<3)
{
printf("啪啪啪!\n");
count++;//改变条件变量
}
count = 0;
while (count++<3)
printf("啪啪啪!\n");
//count++;//改变条件变量
do //无论条件成立与否都会执行一次
{
printf("无论条件成立与否,都会执行一次!\n");
} while (0);
count = 0;
do
{
printf("啪啪啪!\n");
} while (count++ < 3); //注意点后面一定要有 “ ; ”
printf("for循环:\n");
for (int i = 0; i < 3; i++)
{
printf("啪啪啪!\n");
}
//printf("i=%d\n", i); 未定义的变量的,i作用于只在循环中有效
printf("缺省:\n");
count = 0;
for (; count < 3; ) //表达式可以缺省,但是 “ ; ” 必须写
{
printf("啪啪啪!\n");
count++;
}
////按键暂停功能的实现
//while (1)
//{
//printf("唱歌中!....\n");
//if (_kbhit ( )) // 包含头文件 #include<conio.h> ;监视键盘,按键暂停
//{
////system("pause");
//int userKey = _getch();
//if (userKey == ' ')
//{
//while (_getch() != ' ');//第一次按键是空格,只有但第二次用户输入的是空格时,才会暂停。
//}
//}
//}
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
/*
break; --->跳出整条复合语句 ,即跳出一条循环
conitnue;
一般都是结合选择结构使用 ,结束当前循环,开启下次循环。
goto:一般描述逻辑尽量不适用,原来操作函数的函数的状态可以用-->在同一个函数中跳转
当标签在上面的的时候, 需要 “ ; ”去做间隔
*/
int main()
{
//1.break跳出switch语句
//2.break 在循环中只跳出一层循环
CODE:
;
int count = 0;
while (1)
{
printf("我在鼓掌!\n");
count++;
if (count == 3)
break;
}
printf("我退出无限循环\n");
goto CODE;
count = 0;
while (1)
{
printf("我在鼓掌!\n");
count++;
if (count == 3)
goto NEXT;
}
NEXT:
printf("我退出无限循环\n");
//count = 0;
//while (1)
//{
//count++;
//if (count == 3)
//continue;//提高效率
//printf("第 %d 次 鼓掌!\n",count);
//
//}
system("pause");
return 0;
}
//循环的基本使用:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
//3.1 处理重复或者具有规律的事情
//3.1.1 处理重复-->逆序操作
printf("逆序操作!\n");
int num = 1234567;
while (num)
{
printf("%d", num % 10);
num /= 10;//递推--->循环 递归--->函数里面
}
printf("\n");
//3.2 递推的数学问题
//求和,求阶乘
int sum = 0;
for (int i = 0; i <= 100; i++)
{
sum += i;
}
printf("求和:%d\n", sum);
//求1/2+1/3+....1/n;
int x;
scanf("%d", &x);
float result = 0;
for (int i = 2; i <= x; i++) //++运算符只能用在整数里面,小数里面没有++运算符。
{
result += 1.0 / i; //描述有规律的事物一定要注意类型问题
}
printf("%.4f\n", result);
//3.3 控制交互的循环
while (1)
{
printf("0.退出\n1.xxx\n2.ooo\n");//游戏菜单
int choice = 0;
scanf("%d", &choice);
switch (choice)
{
case 0:
printf("正常退出!");
system("pause");
//exit(0)
break;
case 1:
break;
case 2:
break;
}
if (choice == 0)
{
break;
}
system("pause");
system("cls");
}
printf("循环外面!\n");
system("pause");
return 0;
}
//循环嵌套的含义:
#include <stdio.h>
#include <stdlib.h>
/*
任何循环之间都可以嵌套
代表的是一种类似于乘法的一种规律描述
或者是一种具有表格特性的规律的描述
习惯于用外层循环描述行的变化 内层循环描述列的变化
*/
int main()
{
int count = 10;
for (int i = 0; i < count; i++)//外循环
{
for (int j = 'A'; j < 'A'+10; j++) //内循环
{
printf("%d%C\t", i, j);//i每是一个数,j都要循环10次,所以j共循环100次。
}
printf("\n");
}
/*
行: 列
***** 1 5个* 6-1
**** 2 4 6-2
***3 3 6-3
**4 2 6-4
*5 1 6-5
6-i
*/
for (int i = 1; i <= 5; i++)
{
for (int j = 6 - i; j >= 1; j--)
{
printf("*");
}
printf("\n");
}
/*
1111*11
111***23
11*****35
1******* 47
********* 59
2*i-1 //简单的方法,套公式
*/
for (int i = 1; i <= 5; i++)
{
for (int j = 5 - i; j >= 1; j--)
{
printf(" ");
}
for (int k = 1 ; k <= 2*i-1 ; k++)
{
printf("*");
}
printf("\n");
}
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
//1.求最大公约数和最小公倍数
//9 6 能够同时用两个整数去整除的最大整数就是 :最大公约数
//最大公约数:辗转相除法
//9 6 最大公约数:3
//能被两数整除最小整数:最小公倍数 :18
//数学特性:最小公倍数=两数之积/最大公约数
int firstNum, secondNum,temp;
scanf("%d%d", &firstNum, &secondNum);
int sum = firstNum*secondNum;//准备一点
//1.求最大值:
if (firstNum < secondNum)
{
//交换a和b的值--->杯子倒水
temp = firstNum;
firstNum = secondNum;
secondNum = temp;
}
//前提是对于欧几里得了解(辗转相除法)
while (firstNum%secondNum != 0)
{
/*
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
*/
temp = secondNum; //占用存储最小的值,防止改变
secondNum = firstNum%secondNum; //第二次除数要是余数
firstNum = temp; //第二的被除数是不是第一次的最小值
}
printf("最大公约数是:%d\n", secondNum);
printf("最小公倍数:%d\n", sum / secondNum);
//求素数: 素数-->除了被1和自身整除的数
int num = 0;
scanf("%d", &num);
//标记法
int flag = 0;
for (int i = 2; i < num; i++)
{
if (num%i == 0)
{
flag = 1;
break;
}
}
if (1==flag) //非零表示真,0表示假
{
printf("该数不是素数!\n");
}
else
{
printf("该数是素数!\n");
}
int flag = 0;
if ("来一个人")
{
if ("他上了女厕所")
{
flag = 1;
}
}
if (flag == 1)
{
printf("女的!\n");
}
else
{
printf("汉子!\n");
}
system("pause");
return 0;
}
我知道你在看哟
新浪微博:@秀米XIUMI