for回圈
在while回圈中列印1-10,代碼如下
int main()
{
int i = 1;//初始化
while(i <= 10)//判斷部分
{
printf("%d",i);
i++;//調整部分
}
return 0;
}
while回圈中的初始化部分與判斷部分和調整部分相離太遠,而在for回圈中語法如下:
語法
for(運算式1;運算式2;運算式3)
{
回圈陳述句;
}
運算式1為初始化部分;運算式2為條件判斷部分;運算式3為調整部分
for回圈在螢屏上列印1-10
int main()
{
int i=0;
for(i=1;i<=10;i++)
{ //初始化;判斷;調整
printf("%d",i);
}
return 0;
}
我們可以發現在while回圈中依然存在回圈的三個必須條件,但是由于風格的問題使得三個部分很可能偏離較遠,這樣查找修改就不夠集中和方便,所以,for回圈的風格更勝一籌, for回圈使用的頻率也最高,
for回圈中的break
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if(i==5)
break;
printf("%d",i);//1234
}
return 0;
}

break的作用與while回圈一樣,也是跳出整個回圈,
for回圈中的continue
int main()
{
int i=0;
for(i=1;i<=10;i++)
{
if(i==5)
continue;
printf("%d",i);//1234 678910
}
return 0;
}

在i=5時,continue,continue的作用跳過continue下面的陳述句,所以continue跳過了i=5時的列印,跳過后繼續i++,所以有了后面的列印,
對于寫for回圈的建議
1.不要在調整回圈體內修改回圈變數的值,防止回圈體失去控制
2.建議for陳述句的回圈控制變數的取值采用“前閉后開區間”寫法,
int i = 0;
//前閉后開的寫法
for(i=0; i<10; i++)
{}
//兩邊都是閉區間
for(i=0; i<=9; i++)
{}
int main()
{
int arr[10]={0};
int i=0;
for(i=0;i<10;i++)
{
printf("%d",arr[i]);
}
//兩邊都是閉區間
/*for(i=0;i<=9;i++)
{
printf("%d",arr[i]);
}*/
return 0;
}
一些for回圈的變種
判斷部分的省略 - 判斷部分恒為真
int main()
{
for(;;)
{
printf("haha");//陷入死回圈
}
return 0;
}
這是判斷部分恒為真,所以陷入死回圈
下面再看一個代碼
int main()
{
int i=0;
int j=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("haha\n");//9個haha
}
}
return 0;
}

上面嵌套回圈,當我們將i=0;j=0;初始化部分省略
int main()
{
int i=0;
int j=0;
for(;i<3;i++)
{
for(;j<3;j++)
{
printf("haha\n");//3個haha
}
}
return 0;
}

這里只執行了i=0時的三個haha,當i=1時,此時j=3,j不小于3,進不去回圈,以此類推,后面都進不去回圈
筆試題
請問回圈要回圈多少次?
int main()
{
int i=0;
int k=0;
for(i=0,k=0;k=0;i++,k++)
k++;
return 0;
}
答案是0次,注意判斷區域是賦值號,判斷為假,所以回圈進不去,
do……while回圈
do
回圈陳述句;
whlie(運算式);
do陳述句的特點
回圈至少執行一次,使用的場景有限,所以不是經常使用,
do while回圈列印1-10:
int main()
{
int i=1;
do
{
printf("%d ",i);
i++;
}while(i<=10);
}
do while回圈中的break和continue
int main()
{
int i=1;
do
{
if(i==5)
{
break;
}
printf("%d ",i);
i++;
}while(i<=10);
}
列印1 2 3 4,i==5時,break跳出回圈

int main()
{
int i=1;
do
{
if(i==5)
{
continue;
}
printf("%d ",i);
i++;
}while(i<=10);
}
continue跳過之后的陳述句,跳過了i++,所以列印了1 2 3 4 后陷入了死回圈

練習
1.計算n的階乘
//計算n的階乘
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int temp = 1;
for (int i = 1; i <= n; i++)
{
temp = temp * i;
}
printf("%d", temp);
return 0;
}
2.計算1!+……+10!
方法一:
//計算1!+……+10!
//方法一:
#include<stdio.h>
int main()
{
int n = 0;
int temp = 1;
int sum = 0;
for (n=1;n<=10; n++)
{
temp = 1;//計算n的階乘之前,把temp置為1
for (int i = 1; i <= n; i++)
{
temp = temp * i;
}
sum = sum + temp;
}
printf("%d", sum);
return 0;
}
方法二:
#include<stdio.h>
int main()
{
int temp = 1;
int sum = 0;
for (int n = 1; n <= 3; n++)
{
temp = temp * n;
//1*1 1*1*2 1*1*2*3//
sum = sum + temp;
}
printf("%d", sum);
return 0;
}
- 折半查找演算法
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;//要查找的數字
//在arr這個有序的陣列中查找k(7)的值
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] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下標為:%d\n", arr[mid]);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
-
撰寫代碼,演示多個字符從兩端移動,向中間匯聚,
#include<stdio.h> #include<windows.h> #include<string.h> int main() { char arr1[] = "welcome to bit!!!!!!"; char arr2[] = "####################"; int left = 0; int right = strlen(arr1) - 1; while (left <= right) { arr2[left] = arr1[left]; arr2[right] = arr1[right]; printf("%s\n",arr2); Sleep(1000);//睡眠一秒 system("cls");//清空螢屏 left++; right--; } return 0; } -
撰寫代碼實作,模擬用戶登錄情景,并且只能登錄三次,(只允許輸入三次密碼,如果密碼正確則提示登錄成功,如果三次均輸入錯誤,則退出程式,
#include<stdio.h> #include<string.h> int main() { int i = 0; //假設正確密碼"123456" char password[20] = { 0 }; for (i = 0; i < 3; i++) { printf("請輸入密碼:>"); scanf("%s", password); //if(password=="123456")//err-字串比較不能使用==,需要使用strcmp if (strcmp(password, "123456") == 0)//比較成功回傳0 { printf("登陸成功\n"); } else { printf("密碼錯誤,重新輸入!\n"); } } if (i == 3) { printf("三次密碼均錯誤,退出程式\n"); } return 0; }6.猜數字游戲
//猜數字游戲 //1.自動產生一個1-100之間的亂數 //2.猜數字 // a.猜對了,就恭喜你,游戲結束 // b.你猜錯了,會告訴你猜大了,還是猜小了,繼續猜,知道猜對 //3.游戲一個一直玩,除非退出游戲 #include<stdio.h> #include<time.h> void menu() { printf("***************************\n"); printf("******** 1.play *********\n"); printf("******** 0.exit *********\n"); printf("***************************\n"); } void game() { //猜數字游戲的實作 //1.生成亂數 //rand函式回傳了一個0-32767之間的數字 //一個時間對應一個時間戳 int ret = rand()%100+1;//%100的余數是0-99,然后+1,就是0-100 //printf("%d\n", ret); //2.猜數字 int guess = 0; while (1) { printf("請猜數字:>"); scanf("%d", &guess); if (guess < ret) { printf("猜小了\n"); } else if (guess > ret) { printf("猜大了\n"); } else { printf("恭喜你猜對了\n"); break; } } } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu();//列印選單 printf("請選擇:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戲\n"); break; default: printf("選擇錯誤,重新選擇"); break; } } while(input); return 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275874.html
標籤:其他
上一篇:金三銀四面經系列50講(七)-位元組跳動產品運營崗三輪面試
下一篇:演算法-連勝概率問題-如何上王者
