ios--c DAY_5

来源:互联网 发布:电信的网络尖兵限制了 编辑:程序博客网 时间:2024/05/22 15:41
//
//  main.m
//  LessonFive
//
//  Created by lanou3g on 15/8/3.
//  Copyright (c) 2015年 lanou.3g.com. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
 
    //2分钟敲冒泡和冒泡优化
    int a[5]={5,4,87,12,1};
    int temp=0;
    for (int i=0; i<5; i++) {
        for (int j=0; j<5-i-1; j++) {
            if (a[j]>a[j+1]) {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
    for (int i=0; i<5; i++) {
        printf("%d\t",a[i]);
    }
    
    printf("\n");
    int a1[5]={5,3,1,7,8};
    BOOL flag=NO;
    for (int i=0; i<5; i++) {
        flag=NO;//一定要注意这里的赋值,对后面的影响很大。
        for (int j=0; j<5-i-1; j++) {
            if (a1[j]>a1[j+1]) {
                temp=a1[j];
                a1[j]=a1[j+1];
                a1[j+1]=temp;
                flag=YES;
            }
        }
        if (flag==NO) {
            printf("第%d趟就不用交换了.\n",i);
            break;
        }
    }
    for (int i=0; i<5; i++) {
        printf("%d\t",a1[i]);
    }
    printf("\n");
     
    //第五节正课正式开始
    char charYuejie1[3]="abc";
    //越界,'\0'没有地方存储
    printf("字符串越界输出:%s\n",charYuejie1);
    
    char charYuejie2[4]="abc";
    printf("字符串常规输出:%s\n",charYuejie2);
   
    char charArray[3]={'a','b','c'};
    printf("字符数组用%%s输出:%s\n",charArray);
    //%s是字符串的专用,其中'\0'是字符串的结束标志
    //而字符数组末尾没有'\0'
    
    for (int i=0; i<3; i++) {
        printf("字符数组常规输出:%c\t",charArray[i]);
    }
    printf("\n");
    
    //同学的早分享----选择排序
    int chooseSort[4]={12,45,23,2};
    int min=45,pos=0;
    for (int i=0; i<4; i++) {//第一趟
        for (int j=i+1; j<4; j++) {
            if (chooseSort[i]>chooseSort[j]) {//把i对应的值和i之后的值进行比较
                pos=j;//pos记录最小值的位置,用于后面交换
            }
        }
        min=chooseSort[pos];
        chooseSort[i]=min;
    }
    printf("排序后:\t");
    for (int i=0; i<4; i++) {
        printf("%d\t",chooseSort[i]);
    }
    printf("\n");
    
    //二维数组的本质:就是数组的数组
    //为了更好的理解二维数组,通常把二维数组写成行和列的排列形式。
    //m 行 n 列 空间大小就是m*n
    //m个一维数组 n代表一维数组中有n个元素 ----通常称为数学上的矩阵
    //定义二维数组 : 类型修饰符 数组名[常量表达式1][常量表达式2] = {值1,值2...};
    //其中,值1表示一维数组,00,01
    //形式2 : {{},{},{}...}
    //可以省略行数,列数不能省略.
    //每一行或列不够补0并补齐。
    
    //定义一个3行5列的数组,最好不要用下面的定义方式,使用形式2
    int doubleArray[3][5]={23,12,34,22,11,45,22,11,23,25,13,9};
    for (int i=0; i<3; i++) {
        for (int j=0; j<5; j++) {
            printf("%d\t",doubleArray[i][j]);
        }
        printf("\n");
    }
    //
    char classrates[3][5]={{'f','g','h'},{'i','j','k'},{'l'}};
    for(int i=0;i<3;i++){
        for (int j=0; j<5; j++) {
            printf("%c\t",classrates[i][j]);
        }
        printf("\n");
    }
    //省略行数,这是不可取的,不要用
    int a11[][3]={1,2,3};
     
    //访问二维数组元素 :
    //1、必须指定两个下标;
    //2、不要越界.
    int arr[2][3]={1,2,3,4,5,6};
    printf("%d\n",arr[0][2]);
    arr[1][1]=12;
    printf("%d\n",arr[1][1]);
    for (int i=0; i<2; i++) {
        for (int j=0; j<3; j++) {
            printf("%d\t",arr[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    
    //将一个二维数组的行列交换
    int aChange0[2][3]={7,6,3,2,8,5};
    int aChange[3][2]={0};
    for (int i=0; i<3; i++) {
        for (int j=0; j<2; j++) {
            aChange[i][j]=aChange0[j][i];
            printf("%d\t",aChange[i][j]);
        }
        printf("\n");
    }

    //
    int afindNumber[3][4]={0};
    int max=0;
    for (int i=0; i<3; i++) {
        for (int j=0; j<4; j++) {
            afindNumber[i][j]=arc4random()%(20-5+1)+5;
            printf("%d\t",afindNumber[i][j]);
        }
        printf("\n");
    }
    for (int i=0; i<3; i++) {
        for (int j=0; j<4; j++) {
            if (afindNumber[i][j]>max) {
                max=afindNumber[i][j];
            }
        }
    }
    printf("最大值:%d\t其位置是\t",max);
    for (int i=0; i<3; i++) {
        for (int j=0; j<4; j++) {
            if (max==afindNumber[i][j]) {
                printf("第%d行第%d列\t",i,j);
            }
        }
    }
    printf("\n");
    
    //练习,定义一个3行4列的数组,找出最小值,并打印,并打印其位置。
    int minOfArray=20;
    for (int i=0; i<3; i++) {
        for (int j=0; j<4; j++) {
            if (afindNumber[i][j]<minOfArray ) {
                minOfArray=afindNumber[i][j];
            }
        }
    }
    printf("最小值:%d,其位置\t",minOfArray);
    for (int i=0; i<3; i++) {
        for (int j=0; j<4; j++) {
            if (minOfArray==afindNumber[i][j]) {
                printf("第%d行第%d列\t",i,j);
            }
        }
    }
    
    
    //字符串数组 : 数组元素是 字符串 ,是一个二维数组。因为字符串本身也是一维数组,
    //定义一个字符串数组
    char doubleChar[5][10]={"hello,","how","are","you","?"};
    //访问成员
    printf("用%%s访问第一维数组也即是单个的字符串:\t");
    for (int i=0; i<5; i++) {
        printf("%s ",doubleChar[i]);//%s访问字符串
    }
    //访问某一组的字符串 :数组名[第一维下标]
    printf("\n");
    //取单个字符 :数组名[第一维下标][第二维下标]
    printf("用%%c访问单个字符:%c\n",doubleChar[0][2]);
    for (int i=0; i<5; i++) {
        for (int j=0; j<10; j++) {
            printf("%c ",doubleChar[i][j]);
        }
    }
    printf("\n");
    
    //定义一个字符串数组,元素为前后左右的元素,将每个名字的首字母改为大写
    
    char names_ofMyClassmates[4][20]={"zhongbohan","xingjiahe","wangjianye"};
    printf("改写前:\t");
    for (int i=0; i<3; i++) {
        printf("%s\t",names_ofMyClassmates[i]);
    }
    printf("\n");
    //为什么不能在这写i<4,是因为字符串后面有一个'\0',最后会输出一个0-32的值所对应的字符
    for(int i=0;i<3;i++){
        names_ofMyClassmates[i][0]-=32;
    }
    printf("改写后:\t");
    for (int i=0; i<4; i++) {
        printf("%s\t",names_ofMyClassmates[i]);
    }
    printf("\n");
    
    //长度最长的
    int length=10;
    int length_names[3]={0};
    for (int i=0; i<3; i++) {
        length_names[i]=(int)strlen(names_ofMyClassmates[i]);
        if (length<length_names) {
            length=length_names[i];
            printf("最长的名字:%s\n",names_ofMyClassmates[i]);
            break;
        }
    }
    int temp_namesLength=0;
    for (int i=0; i<3; i++) {
        length_names[i]=(int)strlen(names_ofMyClassmates[i]);
    }
    for (int i=0; i<3; i++) {
        for (int j=0; j<3-i-1; j++) {
            if (length_names[j]>length_names[j+1]) {
                temp_namesLength=length_names[j];
                length_names[j]=length_names[j+1];
                length_names[j+1]=temp_namesLength;
            }
        }
    }
    printf("名字长度排序:\t");
    for (int i=0; i<3; i++) {
        for(int j=0;j<3;j++){
        if ((int)strlen(names_ofMyClassmates[j])==length_names[i]) {
            printf("%s\t",names_ofMyClassmates[j]);
        }
        }
        //当出现相同长度的字符串时,避免重复输出一样的字符串
        if (length_names[i]==length_names[i+1]) {
            break;
        }
    }
    printf("\n");
    
    char names_temp[1][1]={0};
    for (int i=0; i<3; i++) {
        if (strcmp(names_ofMyClassmates[i], names_ofMyClassmates[i+1])>0) {
            if (strcmp(names_ofMyClassmates[i], names_ofMyClassmates[i+2])) {
                strcpy(names_temp, names_ofMyClassmates[i]);
            }else{
                strcpy(names_temp, names_ofMyClassmates[i+2]);
            }
        }else{
            if (strcpy(names_ofMyClassmates[i+1], names_ofMyClassmates[i+2])) {
                strcpy(names_temp, names_ofMyClassmates[i+1]);
            }else{
                strcpy(names_temp, names_ofMyClassmates[i+2]);
            }
        }
    }
    for (int i=0; i<3; i++) {
        printf("%s\t",names_ofMyClassmates[i]);
    }
    printf("ASCII码最大的名字:%s\n",names_temp);
    
    printf("用冒泡比较字符串大小:\t");
    for (int i=0; i<3; i++) {
        for (int j=0;j<3-i-1 ;j++) {
            if (strcmp(names_ofMyClassmates[j], names_ofMyClassmates[j+1])>0) {
                strcpy(names_temp, names_ofMyClassmates[j]);
                strcpy(names_ofMyClassmates[j], names_ofMyClassmates[j+1]);
                strcpy(names_ofMyClassmates[j+1], names_temp);
            }
        }
    }
    for (int i=0; i<3; i++) {
        printf("%s\t",names_ofMyClassmates[i]);
    }
    printf("\n");

    
    //scanf("%s",namesAroud); 以空格或者回车结束读取。空格或回车会遗留在缓冲区中。【不能直接输入空格】
    //gets(namesAroud);  从标准输入设备读取字符串----缺点:不限制读取长度
    
 
    char NamesAround[3][20]={0};
    printf("请输入你周边人名字:\n");
    for (int i=0; i<3; i++) {
        //gets读取直接从键盘buffer中读取,不管什么样形式的输入
//        scanf("%s",&NamesAround[i]);
         //输入名字的时候,姓和名分开,再输入中需要读取到空格用"%[^\n]",感觉好高大上
        scanf("%[^\n]",NamesAround[i]);
        //输入 :
        //z bh 回车
        //w jy 回车
        //x jh 回车
        //scanf("%[^\n]\n",NamesAround[i]);这样写的话会让你输入四遍,我也不知道为什么。
        getchar();
//        gets(NamesAround[i]);
    }
    printf("输出姓和名分开的名字:\n");
    for (int i=0; i<3; i++) {
        printf("%s\n",NamesAround[i]);
    }
//    printf("输入三个字符,并且");
//    char namesAroud[3]={0};
//    for (int i=0; i<3; i++) {
//        scanf("%[^\n]",namesAroud);
//        getchar();
//    }
//    for (int i=0; i<3; i++) {
//        printf("%c\t",namesAroud[i]);
//    }
   
    //定义一个字符串数组,里面有6个字符串,每个字符串长度为20,从键盘输入
    char stringArray[6][20]={0};
    for (int i=0; i<6; i++) {
        //数组名和指针变量名  遇到scanf  不需要&这个,为什么,因为数组名和指针变量名本身就是地址
        scanf("%[^\n]",stringArray[i]);
        getchar();
    }
    for (int i=0; i<6; i++) {
        printf("%s\t",stringArray[i]);
    }
    printf("\n");

    //多维数组
    //定义一个三维数组 类型修饰符 数组名[层][行][列] ;
    int aSanWei[2][3][4]={0};
    printf("输入几层几行几列的三维空间:\n");
    for (int i=0; i<2; i++) {
        for (int j=0; j<3; j++) {
            for (int k=0; k<4; k++) {
                printf("k\t");
            }
            printf("\n");
        }
        printf("\n");
    }
    //访问多维数组    数组名[层的下标数][行的下标数][列的下标数];
    //多维数组访问元素个数 :各个维数个数的积
    //占用内存 :元素个数*单个元素所占空间
    //sizeof()返回一个对象或者类型所占的内存字节数
    //sizeof(对象)  sizeof(类型)
    printf("%lu\n",sizeof(aSanWei)/sizeof(int));
    //字符数组是一维数组  --->字符串
    //字符串数组是二维数组
    //有scanf控制输入时,后面最好跟一个getchar(),以防万一
   
    return 0;
}


0 0
原创粉丝点击