复习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;
}