·循环
-while循环
-break跳出循环,永久终止循环
-continue 终止本次循环,不再执行后面的语句,直接回到while的入口判断
-EOF end of file,文件结束标志 = -1
-getchar()接收字符
-putchar()打印字符
-while((ch=getchar())!=EOF)
{
语句
}
-for循环
for(exp1;exp2;exp3)
{
循环语句
}
exp1:初始化
exp2:判断
exp3:调整
-for循环和while循环中的continue的区别
-for循环中的一些建议
1.不可在for循环体内修改循环变量,防止for循环失去控制
2.建议for语句的循环控制变量的取值采用“前闭后开”区间的写法
e.g. for(i=0;i<10;i++)
// 10次循环
// 10次打印
// 10个元素
-for循环中初始化、判断、调整都可以省略,但是不能随便省略以免造成错误
·do…while循环
初始化
do
循环
while(判断)
·从左至右检索查找算法
适用于所有数组,但效率较低
·折半查找算法/二分查找算法
适用于有序数列中某元素的查找,具有高效性
·==不能判断两个字符串是否相等
需要用strcmp()函数,strcmp函数输出结果为0则两个字符串相等
·分支与循环练习
1.计算n!
//计算n的阶乘
#include<stdio.h>
int main(void)
{
int m = 1;
int i = 0;
int n = 0;
printf("请输入一个数n,计算n的阶乘\n");
printf("n= ");
scanf("%d", &n);
for ( i = 1; i <=n; i++)
{
m = m * i;
}
printf("n的阶乘为%d\n", m);
return 0;
}
2.计算1!+2!+...=10!
////计算1!+2!+3!+...=10! (优化前)
//#include<stdio.h>
//int main(void)
//{
// int i = 0;
// int m = 1;
// int n = 0;
// int sum = 0;
// for (n = 1; n <= 10; n++)
// {
// int m = 1;
// for (i = 1; i <= n; i++)
// {
// m = m * i;
// } //计算n的阶乘
// sum = sum + m;
// }
// printf("%d", sum);
// return 0;
//}
//计算1!+2!+3!+...=10! (优化后)
#include<stdio.h>
int main(void)
{
int ret = 1;
int n = 1;
int sum = 0;
for ( n = 1; n<=10;n++)
{
ret = ret * n;
sum = sum + ret;
}
printf("%d", sum);
return 0;
}
3.数组中的元素查找
#define _CRT_SECURE_NO_WARNINGS 1
//在一个有序数组中查找某个元素n
//#include<stdio.h>
//int main(void)
//{
// int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建有序数组
// int sz = (sizeof(arr) / sizeof(arr[0]));//计算元素个数
// int i = 0;
// int n = 0;
// printf("请输入一个要查找的元素 n= ");
// scanf("%d", &n);
// for ( i = 0; i < sz; i++)//从左至右查找
// {
// if (n ==arr[i])
// {
// printf("找到了,该元素下标为%d\n", i);
// break;
// }
// }
// if(i==sz)
// printf("无法找到该元素");
// return 0;
//}
//用二分查找算法查找一个有序数组中的某个元素n
#include<stdio.h>
int main(void)
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建有序数组
int n = 0;//创建要查找的元素n
printf("请输入要查找的元素 n=");
scanf("%d", &n);
int sz = (sizeof(arr) / sizeof(arr[0]));//计算元素个数
int left = 0;
int right = sz-1;
while (left <= right)//进行折半
{
int mid = (left + right) / 2;
if (arr[mid] > n)
{
right = mid - 1;
}
else if (arr[mid] < n)
{
left = mid + 1;
}
else
{
printf("找到了,该元素下标为%d", mid);
break;
}
}
if (left > right)
printf("无法找到该元素");
return 0;
}
4.以字符自两端向中间靠拢的效果打印一串字符
//以字符向两端靠拢的效果打印一串字符
#include<stdio.h>
#include<string.h>
#include<Windows.h>
#include<stdlib.h>
int main(void)
{
char arr1[] = "Welcome to China!";
char arr2[] = "#################";
int left = 0;
//int right = sizeof(arr1) / sizeof(arr1[0]) - 2;
int right = strlen(arr1)-1;
while (left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right]; //字符的挪用(赋值)
printf("%s\n", arr2);
Sleep(700);
system("cls");//执行系统命令的一个函数
left++;
right--;
}
printf("Welcome to China!");
return 0;
}
5.模拟用户登录界面
//模拟用户登录界面,该用户有3次密码输入机会
#include<stdio.h>
#include<string.h>
int main(void)
{
int i = 0;
char password[20] = "123456";//设置正确密码
for ( i = 0; i < 3; i++)
{
printf("请输入密码>:");
scanf("%s", &password);//输入密码
if (strcmp(password, "123456") == 0)//判断密码是否正确,strcmp函数
{
printf("登陆成功");
break;
}
else
{
printf("密码错误\n");
}
}
if (i == 3)
{
printf("验证失败,退出程序");
}
return 0;
}
·辗转相除法
-辗转相除法求两个数的最大公约数
核心原理:
被除数 / 除数 =商······余数
A B C D
GCD(A,B)=GCD(B,D)
·判断一个年份是闰年的条件
1.能被4整除且不能被100整除
2.能被400整除
·素数判断的规则
1.试除法
在2到i-1之间进行试除
-若一个数i不是素数,
则i=a*b,a、b为整数,且a、b中至少有一个数<=根号i (i !=1)
-偶数不可能是素数
-奇数模2为1,偶数模2为0
·产生随机数:
·时间戳
当前计算机的时间减去计算机的起始时间(1970.1.1,0时0分0秒)
-rand()产生随机数的函数
-srand()设置随机数种子的函数
-在调用rand()函数之前使用srand()函数来完成产生随机数的功能
-t_time time()
数据类型 随机数
·goto语句
-一次跳出多层循环
-system执行系统命令
-shutdown -s -t time 设置时间关机
-shutdown -a 取消关机
-cls 清屏
·用分支和循环写出猜数字游戏
//猜数字游戏
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<Windows.h>
void menu()
{
printf("**---------------------------**\n");
printf("**---- 1.play --- 0.exit ----**\n");
printf("**---------------------------**\n");
}
void game()
{
int guess = 0;
int ret = 0;
ret = rand() % 100 + 1;
while (1)
{
printf("请输入一个数>:");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜对了\n");
Sleep(3000);
system("cls");
break;
}
}
}
int main(void)
{
srand((unsigned int)time(NULL));//设置随机数种子
int input = 0;
do
{
menu();
printf("请选择>:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
Sleep(1000);
system("cls");
break;
}
} while (input);
return 0;
}