1.while循环
//打印1到10
#include<stdio.h>
int main(){
int i = 1; // i => index
while(i<=10){ //循环条件 成立执行循环体
printf("%d\n",i);
i++;}
return 0;
}
while语句中的break和continue
#include<stdio.h>
//continue演示
int main(){
//买了五个包子
int num = 1;
while(num <= 5){
if(num ==3){
printf("有虫子!!!\n");
num++;
continue;
}
printf("正在吃第 %d 个包子\n",num);
num++;
}
return 0;
}
如果遇到continue就会直接结束这次循环,先进入下次循环(先判定循环条件)。
#include<stdio.h>
//break演示
int main(){
int num = 1;
while(num <= 5){
if(num == 3){
printf("有半个虫子!!!\n");
break;
}
printf("正在吃第 %d 个包子\n",num);
num++;
}
return 0;
}
如果遇到break,循环直接结束。
#include<stdio.h>
int main(){
char ch = '\0';
while((ch = getchar()) ! = EOF){
// getchar从键盘上读取一个字符 赋值给ch
//EOF=> end of file文件结束标记~
if(ch<'0' || ch > '9')
continue;
putchar(ch); //一次打印一个
}
return 0;
}
2.for循环
for和while本质上是等价的,任何你使用while实现的逻辑一定可以写成for。
语法
for(cond1;cond2;cond3)
循环语句;
cond1=>初始化部分
cond2=>条件判断部分
cond3=>调整部分
//for循环示例 打印1-10
#include<stdio.h>
int main(){
for(int i = 1; i <= 10; i++){
printf("%d\n",i);
}
return 0;
}
//把循环的三个要素,集中在一起放置了
//不会漏了哪个要素
for的执行过程
1.执行表达式1,创建变量i,并进行 i=1 的初始化。
2.执行表达式2 ,判断循环条件是否成立。(是不是为真/非0)
a)条件成立 执行循环体。
b)不成立 直接结束循环体。
3.当循环结束之后,执行表达式3,更新I的值。
4.再次执行表达式2,后面就一次循环执行了。
continue 和break也能搭配for来使用。
//continu示例
#include<stdio.h>
int main(){
for(int i = 1; i <= 5 ; i++){
if(i == 3){
printf("吃到一个虫子!\n");
continue;
}
printf("吃 %d 个包子\n",i);
}
return 0;
}
//break示例
#include<stdio.h>
int main(){
for(int i = 1; i <= 5; i++){
if(i == 3){
printf("吃到半个虫子!!!\n");
break;
}
printf("正在吃 %d 个包子\n",i);
}
return 0;
}
**注意: 大多数区间,都是采用前闭后开的方式来表示的 **
//for循环变种
int i = 1;//作用于不同
for(;;){
if(i > 10){
break;
}
printf("%d\n",i);
i++;
}
练习题:
//循环会执行几次
#include<stdio.h>
int main(){
int i = 0;
int k = 0;
for(i = 0 , k = 0; k = 0; i++,k++){
printf("hha\n");
k++;
}
return 0;
}
因为中间条件k = 0 为赋值语句 ,所以一次都不会执行。
3.do while循环
while和for是最常见的循环,do while循环比较少见
语法
do
循环语句;
while(表达式);
示例:
//打印1到10
#include<stdio.h>
int main(){
int i = 1;
do{
printf("%d\n",i);
i++;
}
while(i <= 10);
return 0;
}
练习题:
- 计算 n的阶乘。
- 计算 1!+2!+3!+……+10!
- .在一个有序数组中查找具体的某个数字n。 编写int binsearch(int x, int v[], int n); 功能:在v[0] <=v[1]<=v[2]<= ….<=v[n-1]的数组中查找x.
- 编写代码,演示多个字符从两端移动,向中间汇聚。
- 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序
答案:
1.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(){
int n = 1 ;
printf("请输入一个整数\n");
scanf("%d",&n);
int result = 1;
for(int i = 1 ;i <= n; i++){
result = result * i;
}
printf("结果为%d\n",result);
return 0;
}
#include<stdio.h>
int main(){
//表示最终的阶乘求和结果
int sum = 0;
for(int i = 1; i <= 10; i++){
//在这个循环里头进行相加操作.
int factor = 1;//表示i的阶乘的值
for(int j = 1; j <= 10 ; j++){
//通过这个循环求i!
factor *= j;
}
//经过上面的循环 就把i!求出来了,放到factor变量中
sum += factor;
}
printf("sum = %d\n",sum);
return 0;
}
#include<stdio.h>
int factor(int n){ //用于求n的阶乘
int result = 1;
for(int i = 1 ; i <= 10 ; i++){
result *= i ;
}
return result;
}
int main(){
int sum = 0;
for (int i = 1; i <= 10; i++){
sum += factor(i) ;
}
printf("sum =%d\n",sum); return 0;
}
(ctrl+鼠标左键,跳转到某个函数/变量的定义,alt+<-,就可以回来了)
#include<stdio.h>
int main(){
// 查找变量在数组的位置
int num = 0;
printf("请输入要查找的数字:");
scanf("%d",&num);
int i = 0
int arr[] = {1, 2, 3, 4, 5, 6, 7};
for(;i < 7; i++){
if(num == arr[i]){
printf("该num所处的下标是:%d\n",i);
break;
}
}
if( i>=7 ){
printf("找不到了");
}
return 0;
}
二分查找法// 有序数组 重要!!!
#include<stdio.h>
int main(){
int num = 0;
printf("请输入要查找的数字:\n");
scanf("%d",&num);
int arr[] = {1, 2, 3, 4, 5, 6, 7};
//待查找区间就是[left,right]
int left = 0;
int right = 6;
//只要待查找区间不是空区间,就是继续循环查找
while(left <= right){
//确定中间元素的下标
int mid = (left + right) / 2;
//c中整数除以整数等于整数 5/2=2
if(num < arr[mid]){
//继续往左侧区间查找,
right = mid - 1;
}
else if(num > arr[mid]){
//继续往右侧区间查找
left = mid + 1;
}
else{
printf("找到了!num的下标就是:%d\n",mid);
break;
}
}
if(left > right){
printf("没找到元素!");
}
return 0;
}
有\0才能称为一个字符串
C语言中字符串以’\0’结尾
#include<stdio.h>
#include<string.h>
#include<Windows.h>
int main(){
char str1[] = "hello world";
char str2[] = "###########";
//每次循环都让str2修改
int left = 0;
int right = strlen(str1) - 1;
while(left <= right){
str2[left] = str1[left];
str2[right] = str1[right];
left++;
right--;
system("cls");//每次打印完一次清屏一次
printf("%s\n",str2);
Sleep(500);//让程序休眠500ms
}
return 0 ;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <string.h>
int main(){
int i = 0 ;
for(; i < 3 ; i++){
printf("请输入密码:");
char password[1024] = { 0 };
//scanf 输入的是整数或者浮点数,需要&
//如果是字符串,不需要&
scanf("%s",password);
//C中 不能使用 == 比较两个字符串内容相等
if(strcmp(password ,"1234")== 0){
printf("密码正确!\n");
break;
}
else{
printf("密码错误\n");
}
}
if(i >= 3){
printf("您已错误三次,程序直接退出!\n");
}
return 0;
}
4.goto语句
goto语句表示“无条件跳转”,遇到goto就直接跳转到对应的位置的代码。
goto非常不建议使用!!!会对代码的可读性可维护性造成毁灭的打击!!
//关机小程序~
//程序一运行提示10min之后关机。
//输入指定指令取消关机
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(){
system("shutdown -s -t 600");
AGAIN:
printf("您的电脑将在1min之后关机,输入 我是猪 取消关机:\n");
char input[1024] = { 0 };
scanf("%s",input);
if(strcmp(input , "我是猪") == 0){
system("shutdown -a");
printf("真乖~关机取消了");
}else{
goto AGAIN;//Again 是一个标签
}
return 0;
}