IOS階段學習第四天筆記(迴圈),ios第四天
IOS學習(C語言)知識點整理筆記
一、分支結構
1、分支結構分為單分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 兩種
2、單分支 if運算式成立則執行{ }裡的語句;雙分支 if運算式不成立 則執行else{ }裡面的語句
3、字串的輸出系統會從數組地址一直列印到字元 ‘\0’為止,如果沒有正確初始化,可能會列印出數組外的資訊
4、如果分支結構裡面只有一條執行語句可省略外面的大括弧{} .
二、開關語句
1、語句結構 :switch (參數) case 常量: 執行語句;break;default: 執行語句;break; case 後面必須是常量且不能重複
2、無特殊情況每個case後面必須加上break 不然會造成 case穿透 執行
3、default 一般建議保留 用於處理所有case不滿足的條件
三、迴圈結構
1、迴圈:即在滿足運算式條件的時候反覆執行語句組 ;迴圈必須有允出準則否則就是死迴圈。
2、迴圈類型:for( 初始化語句1; 條件判斷語句2; 語句3){ 執行語句} ;while(條件陳述式){執行語句};do{ 執行語句}while(條件陳述式);
3、迴圈體中 continue 表示跳過當前條件內容執行下次迴圈 break表示結束整個迴圈
4、do while 第一次迴圈的時候,先執行語句後做判斷,至少執行一次。
5、while 與 do while 在迴圈之前必須先初始化 ,for 迴圈自身已經包含初始化語句。
四、goto 跳躍陳述式
1、goto 表示無條件跳轉到一個標籤,盡量避免使用 ,缺點:使代碼目錄不清晰,破壞層次感
2、goto 執行個體:
//goto 實現1~100求和
1 int main(){ 3 int sum = 0; 5 int i = 1;7 ADD:9 sum +=i;11 i++;13 if(i<=100){15 goto ADD;//跳到標籤號所在行,往下執行17 }19 printf("sum=%d\n",sum);21 return 0;23 }
五、迴圈練習題
1、計算當前輸入字元中數字、大/小字母、其他字元 個數
實現代碼:
1 int main(){ 3 int sz=0,xz=0,dz=0,qt=0; 5 char ch; 7 while ((ch=getchar())!='\n') { 9 if(ch>='0'&&ch<='9')11 sz++;13 else if(ch>='a'&&ch<='z')15 xz++;17 else if (ch>='A'&&ch<='Z')19 dz++;21 else23 qt++;25 }27 printf("共輸入了%d個數字字元\n",sz);29 printf("共輸入了%d個小寫字母字元\n",xz);31 printf("共輸入了%d個大寫字母字元\n",dz);33 printf("共輸入了%d個其他字元\n",dz);35 return 0;37 }
2、輸出九九乘法表
1*1=1,
2*1=2,2*2=4
3*1……
實現代碼:
1 int main(){ 3 for (int i=1; i<=9; i++) { 5 for (int j=1; j<=i; j++) {7 printf("%dx%d=%d\t\t",i,j,i*j); }11 printf("\n");13 }15 return 0; 17 }
3、輸出1~100的所有質數 (質數:即除1以外只能被1和它本身整除的數)
實現代碼:
1 int main(){ 3 for (int i=1; i<=100; i++) { 5 for (int j=1; j<=i; j++) { 7 if(j==1)9 continue;11 if(i%j==0)13 {15 if(i!=j)17 {19 //printf("%d不是質數\n",i);21 break;23 }25 else27 {29 printf("%d是質數\n",i);31 break;33 }35 }37 }39 }41 return 0;43 }
4、一球從 100 米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10 次落地時,共經過多少米
實現代碼:
1 int main(){ 3 float hight=100,num=10,sumh=0; 5 for (int i=1; i<=num; i++) { 7 sumh+=hight; 9 hight/=2;11 printf("第%d次回落(%.1f)米\n",i,hight);13 }15 printf("總共經過(%.1f)米",sumh);19 return 0;21 }
5、使用輾轉相除求兩個數的最大公約數
實現代碼:
1 int main(){ 3 //(28,35)=(35,28)=(28,7)=0 5 int m,n,temp,rst; 7 printf("請輸入兩個數字:\n"); 9 scanf("%d %d",&m,&n);11 while(m%n!=0){13 if(m%n==m)15 {17 temp=m;19 m=n;21 n=temp;23 rst=m%n;25 printf("m=%d,n=%d\n",m,n);27 }else {29 rst=m%n;31 m=n;33 n=rst;35 printf("m=%d,n=%d\n",m,n);37 }39 }40 printf("%d",n);41 return 0;42 }
6、將一個正整數分解質因數。例如:輸入90,列印出90=2*3*3*5
實現代碼:
1 int main(){ 2 int v; 3 scanf("%d",&v); 4 printf("%d=",v); 5 for (int i=2; i<=v; i++) { 6 while (v%i==0) { 7 if(i<v) 8 printf("%d*",i); 9 else10 printf("%d",i);11 v/=i;12 }13 }14 return 0;15 }
7、流程式控制制(for求階乘的和 )輸入n(int類型),列印1!+2!+3!+4!+5!+....+n!的值
實現代碼:
1 int main(){ 2 //例如 5的階乘和=1*1 +2*2 +3*3*3+ 4*4*4*4 +5*5*5*5*5 3 int n,temp=0,sum=0; 4 scanf(“%d”,&n); 5 for (int i=1; i<=n; i++) { 6 temp=1; 7 for (int j=1; j<=i; j++) { 8 temp*=i; 9 }10 sum+=temp;11 }12 printf("sum=%d",sum); 13 return 0; 14 }
8、整數逆序輸出, 例如輸入一個整數12345,輸出54321
實現代碼:
1 int main(){ 2 int a; 3 scanf("%d",&a); 4 while(a/10!=0){ 5 printf("%d ",a%10); 6 a/=10; 7 } 8 printf("%d ",a%10); 9 return 0;10 }
9、流程式控制制(for迴圈)輸出字母三角形 輸入一個大寫字母,如F輸出:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
實現代碼 :
1 int main(){ 2 char ch='A'; 3 for (int i=0; i<='F'-ch; i++) { 4 for (int n='F'-ch-i; n>0; n--) { 5 printf(" "); 6 } 7 for (int j=0; j<=i; j++) { 8 printf("%c",ch+j); 9 }10 for (int m=i;m>0 ;m-- ) {11 printf("%c",ch+m-1);12 }13 printf("\n");14 }15 return 0;16 }
10、流程式控制制(for迴圈),輸出字母序列比如輸入:F
輸出:
FEDCBA
EDCBAB
DCBABC
CBABCD
BABCDE
ABCDEF
實現代碼:
1 int main(){ 2 char sh,nsh,bsh; 3 printf("請輸入一個字元:"); 4 scanf("%c",&sh); 5 bsh=sh; 6 int len=sh-'A'; 7 for (int i=0; i<=len; i++) { 8 sh=bsh-i; 9 //nsh=bsh-len+1;10 for (int j=1; j<=i; j++) {11 printf(" ");12 }13 for (int n=i; n<=len; n++) {14 printf("%c", sh--);15 }16 nsh=sh+2;17 for (int m=0; m<i; m++) {18 printf("%c", nsh++);19 }20 printf("\n");21 }22 return 0;23 }
11、 輸入一個日期年月日, 計算這一天是一年中的第幾天(考慮閏年)
實現代碼:
1 int main(){ 2 int year,month,day,total=0; 3 scanf("%d%d%d",&year,&month,&day); 4 if (year<=0) 5 printf("請輸入正確年份。"); 6 for (int i=1; i<month; i++) { 7 switch (i) { 8 case 1: 9 case 3:10 case 5:11 case 7:12 case 8:13 case 10:14 case 12:15 total+=31;16 break;17 case 4:18 case 6:19 case 9:20 case 11:21 total+=30;22 break;23 case 2:24 if ((!(year%4)&&year%100)||!(year%400)) 25 total+=29;26 else27 total+=28;28 break;29 }30 }31 total+=day;32 printf("%d年的第%d天",year,total);33 return 0;34 }
12、猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
實現代碼:
int main(){ //分析: 第十天 1 第九天:4 第八天:10 第七天:22 int sum=1,i,index=10; for(i=1;i<=9;i++) { printf("第%d天有桃%d個\n",index,sum); sum=(sum+1)*2; index--; } printf("猴子共摘了%d個桃子。\n",sum); return 0; }