複習c的循環控制(while();for();do)Xcode的調試方法,以及隨機數生成得一些問題,下面是實例和一些說明:
1、關於while與do while的細微區別:當控制條件爲0時,執行次數不一樣
2、break和continue
3、Xcode的調試:先加入斷點,lidb中可以用 po var輸出當前某變量的值
4、關於隨機數:
rand()無法真正的生成隨機數,因此可以使用下面兩種:
a、OC中可以使用
arc4random();
方法生成隨機數
b、根據time得出不同種子後生成隨機數
srand((unsigned)time(NULL));
5、今天的一些練習
// // main.m // C03 // // Created by 嚴誠 on 15/7/16. // Copyright (c) 2015年 嚴誠. All rights reserved. // #import <Foundation/Foundation.h> int count100(){ int i,result=0; for (i=0;i<100 ; i++) { result=result+i; } printf("%d",result); return 0; } void count13(){ int i,result=0; for (i=0;i<100;i++){ if (i%13==0) { result=result+i; } } printf("%d",result); } void print1to3(){ int i=1; for (i=1; i<4; i++) { printf("%d ",i); } } void print1to33(){ int i=1,j=1; for (j=1; j<4; j++){ for (i=1; i<4; i++) { printf("%d ",i); } printf("\n"); } } void print1to333(){ int i=1,j=1; for (j=1; j<4; j++){ for (i=1; i<=j; i++) { printf("%d ",i); } printf("\n"); } } void print1to3333(){ int i=1,j=1; for (j=1; j<4; j++){ for (i=1; i<=j; i++) { printf("%d ",i); printf("%d ",j); } printf("\n"); } } void printMultTable(){ int i=1,j=1; for (j=1; j<=9; j++){ for (i=1; i<=j; i++) { printf("%d*%d=%d ",i,j,i*j); } printf("\n"); } } void countNum(){ int count=0; int num; printf("輸入一個整數"); scanf("%d",&num); do{ num = num/10; count++; }while (num); printf("位數爲%d",count); } //1、打印1 - 100中不能被7整除又不包含7的數。 void print7(){ int i; for (i=1; i<=100; i++) { int j=i/10; int k=i%10; if (i%7!=0&&j!=7&&k!=7) { printf("%d ",i); } } } /*2、輸入兩個數,求最大公約數和最小公倍數。(最大公約數,最大可以對兩個整數約分的數字) // 任意取出一個數,減減。兩個數對當前數取模爲0,則是最大公約數。 提示:先找出最大公約數,兩個數的乘積除以最大公約數就是最小公倍數。*/ void divisor(){ int a,b; printf("輸入兩個數,逗號分隔"); scanf("%d,%d",&a,&b); int max,min; if(a>=b) { max=a; min=b; }else{ max=b; min=a; } int temp; while(min){ temp=max%min; max=min; min=temp; } min=a*b/max; printf("%d %d",max,min); } //3、隨機產生20個[10 , 100]的正整數,輸出這些數以及他們中的最大數 void print20(){ int a[19],temp; for (int i=0; i<=19; i++) { a[i]=(arc4random()%90)+10; } for (int i=0; i<=19; i++) { printf("%d ",a[i]); } printf("\n"); for(int j=0;j<=19;j++) { for (int i=0;i<20-j;i++) if (a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } } printf("%d ",a[19]); } //4、編程將所有“水仙花數”打印出來,並打印其總個數。 “水仙花數”是一個各個位立方之和等於該整數的三位數。 void shuixian(){ for (int i=100; i<1000; i++) { int a,b,c; a=i/100; b=i%100/10; c=i%10; if (a*a*a+b*b*b+c*c*c==i) { printf("%d %d %d %d\n",a,b,c,i); } } } // 5、使用循環打印三角形 //// * // ** // *** // **** // ***** void Tr(){ for (int i=1; i<=5; i++) { for (int j=1; j<=i; j++) { printf("*"); } printf("\n"); } } //6、編寫程序,找出用戶輸入的一串數中的最大數。程序需要提示用戶一個一個地輸入。當用戶輸入0或負數時,程序必須顯示出已輸入的最大非負數。 void test0(){ int a[100]; int temp,count=0; for (int i=0; ;i++ ) { printf("輸入一個數字"); scanf("%d",&a[i]); count++; if(a[i]<=0){ for(int j=0;j<=count;j++) { for (int i=0;i<count-j;i++) if (a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } }printf("%d",a[count]); } } } //7、求S(n) = a+aa+aaa+aaaa+...+aa..a之值,其中a是一個數字,n表示a的位數例如:2+22+222+2222+22222(此時n=5),n和a都從鍵盤輸入。 void suma(){ int a,n; int sum=0; printf("輸入兩個數,逗號分隔"); scanf("%d,%d",&a,&n); for (int i=1;i<=n ; i++) { sum+=sum*10+a; } printf("累加結果爲%d",sum); } //8、求1!+2!+3!+4!+..+20! void sumX(){ long int sum=1,result=0; for (int i=1;i<=20;i++) { sum=sum*i; result+=sum; } printf("%ld\n",result); } //9、一個球從100m高度自由落下,每次落地後反跳回原來高度的一半,再落下,再反彈。求它在第10次落地時,共經過多少米?第10次反彈多高? void hight(){ float hight=100,sum=100; for (int i=1; i<=10; i++) { hight=hight*0.5; sum=sum+hight*2; } sum-=hight*2; printf("%f %f\n",hight,sum); } //10、猴子吃桃問題。猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃一個。以後每天 早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,就只剩一個桃子了。求第一天共摘多少個桃子. void monkey(){ long int count=1; for (int n=2; n<=10;n++) { count=(count+1)*2; } printf("%ld",count); } int main(int argc, const char * argv[]) { @autoreleasepool { //count100(); //count13(); //print1to3(); //print1to33(); //print1to333(); //print1to3333(); //printMultTable(); //countNum(); //print7(); //divisor(); //print20(); //shuixian(); //Tr(); //test0(); //suma(); sumX(); hight(); //monkey(); } return 0; }