一维数组

//    1、返回数字n中的数字个数

    int n = 0;

    int a = 0;

    printf("输入:");

    scanf("%d" , &n);

    int count = 0;

   

    do {

        a = n / 10;

        count++;

        n = a;

    } while (a != 0);

    printf("%d" , count);

    

 

    

    

//    2、用for循环计算从1~n的和

    

    int s = 0;

    int n = 0;

    printf("输入:");

    scanf("%d" , &n);

    

    for (int i = 1; i <= n; i++) {

        s += i;

    }

    printf("s = %d" , s);

 

    

//    3、用for循环计算1~n的平方和

    

    int n = 0;

    int s = 0;

    printf("输入:");

    scanf("%d" , &n);

    

    for (int i = 1; i <= n; i++) {

        s += i * i;

    }

    printf("s = %d" , s);

 

//    4、用for循环计算一个整数n的阶乘

    int n = 0;

    int a = 1;

    printf("输入:");

    scanf("%d" , &n);

    for (int i = 1; i <= n; i++) {

        a *= i;

    }

    printf("%d" , a);

    

//    5、fanbonacci数列,打印输出,要求,每5个数占一行

  

    int a[20] = {1 , 1};

    for (int i = 0; i < 20; i++) {

        a[i + 2] = a[i] + a[i + 1];

        printf("%-4d " , a[i]);

        if ((i + 1) % 5 == 0) {

            printf("\n");

        }

    }

    

    

//    《第 04 讲:一维数组》

    //    1. (*)先调试,调试成功后抄写下列程序:

 

#define SIZE 10

    

    

    int a[SIZE] = {0},i= 0;

    for(i = 0; i < SIZE; i++){

        a[i] = i+10;

        printf("a[%d] = %d\n", i, a[i]);

    }

    

    

    

    //    2. (*)将第一题中的数组a反向输出。

 

#define SIZE 10

    

    int a[SIZE] = {0} , i = 0;

    for (i = SIZE - 1; i >= 0; i--) {

        a[i] = i + 9;

        printf("a[%d] = %d\n" , i , a[i]);

    }

    

    

    //    3. (*)对第一题中的数组进行求和操作,打印计算结果。

    

#define SIZE 10

    

    int sum = 0;

    int a[SIZE] = {0},i= 0;

    for(i = 0; i < SIZE; i++){

        a[i] = i+10;

        printf("a[%d] = %d\n", i, a[i]);

        sum += a[i];

    }

    printf("***********\n");

    printf("sum = %d" , sum);

    

    

    

    

    

    //    4. (**)计算第一题数组连减,打印计算结果。

#define SIZE 10

    

    int sub = 0;

    int a[SIZE] = {0},i= 0;

    for(i = 0; i < SIZE; i++){

        a[i] = i+10;

        printf("a[%d] = %d\n", i, a[i]);

        sub -= a[i];

    }

    

    printf("sub = %d" , sub + a[0]);

    

    

    

    //    5. (**)随机产生 20 个 10~50 的正整数存放到数组中,并求数组中的所有元素最大值、最小值、平均值及各元素之和。

    

    int a[20] = {};

    int i = 0;

    int sum = 0;

    for (i = 0; i < 20; i++) {

        a[i] = arc4random() % 41 + 10;

        printf("%-3d" , a[i]);

    }

    for (i = 0; i < 19; i++) {

        for (int j = 0; j < 19 - i; j++) {

            

            if (a[j] < a[j + 1]) {

                int temp = a[j];

                a[j] = a[j + 1];

                a[j + 1] = temp;

            }

        }

    }

    printf("\n");

    for (i = 0; i < 20; i++) {

        printf("%-3d" , a[i]);

        sum += a[i];

    }

    printf("\n");

    printf("max = %d\n" , a[0]);

    printf("min = %d\n" , a[19]);

    printf("sum = %d\n" , sum);

    printf("average = %d\n" , sum / 20);

    

    

    

    //    6. 编写一个程序,输入两个包含 5 个元素的数组,先将两个数组升序排序,然 后将这两个数组合并成一个升序数组。

    char a[5] = {'i' , 'P' , 'h' , 'o' , 'n'};

    char b[5] = {'a' , 'n' , 'd' , 'r' , 'o'};

    char c[10] = {0};

    

    

    for (int i = 0; i < 4; i++) {

        for (int j = 0; j < 4 - i; j++) {

            

            if (a[j] > a[j + 1]) {

                int temp = a[j];

                a[j] = a[j + 1];

                a[j + 1] = temp;

            }

            if (b[j] > b[j + 1]) {

                int temp = a[j];

                a[j] = a[j + 1];

                a[j + 1] = temp;

            }

            

        }

    }

    for (int i = 0; i < 5; i++) {

        printf("%c " , a[i]);

    }

    printf("\n");

    for (int i = 0; i < 5; i++) {

        printf("%c " , b[i]);

    }

    printf("\n**********\n");

    for (int i = 0; i < 10; i++) {

        if (i < 5) {

            c[i] = a[i];

        } else {

            c[i] = b[i - 5];

        }

    }

    for (int i = 0; i < 10; i++) {

        printf("%c " , c[i]);

        

    }

    printf("\n**********\n");

    for (int i = 0; i < 9; i++) {

        for (int j = 0; j < 9 - i; j++) {

            

            if (c[j] > c[j + 1]) {

                

                int temp = c[j];

                c[j] = c[j + 1];

                c[j + 1] = temp;

            

            }

        }

    }

 

    for (int i = 0; i < 10; i++) {

        printf("%c " , c[i]);

    }

    

    

    

    

    

    

    

    

    //    7. (***)给定某年某月某日,输出其为这一年的第几天。

    

    int year = 0 , month = 0 , day = 0;

    int n = 0;

    int m[12] ={31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31};

    printf("输入:");

    scanf("%d-%d-%d" , &year , &month , &day);

    

    if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {

        m[1] = 29;

    } else{

        m[1] = 28;

    }

    

    if (month == 1) {

        printf("%d" , day);

    }else{

        for (int i = 0; i < month - 1; i++) {

            n += m[i];

        }

        n += day;

        printf("%d" , n);

    }

    

    

    

    

    

    //    8. (**)编写整型值数组排序程序(冒泡排序、选择排序、快速排序--升序)

    //冒泡法

    int a[] = {3,-9,32,77,63,-24,14,0,21,45};

    int a[] = {3 , -9 , 32 , 77 , 63 , -24 , 14 , 0 , 21 , 45};

    for (int i = 0; i < 9; i++) {

        for (int j = 0; j < 9 - i; j++) {

            if (a[j] > a[j + 1]) {

                int temp = a[j];

                a[j] = a[j + 1];

                a[j + 1] = temp;

            }

        }

    }

    for (int i = 0; i < 10; i++) {

        printf("%-4d" , a[i]);

    }

    选择法

    int a[] = {3 , -9 , 32 , 77 , 63 , -24 , 14 , 0 , 21 , 45};

    int k = 0;

    for (int i = 0; i < 9; i++) {

        k = i;

        for (int j = i + 1; j < 10; j++) {

            if (a[k] < a[j]) {

                k = j;

            }

        }

        if (i != k) {

            int temp = a[i];

            a[i] = a[k];

            a[k] = temp;

        }

    }

    for (int i = 0; i < 10; i++) {

        printf("%-4d" , a[i]);

    }

    

    

    

    

    //    9、(***)找出下列整型数组中最大和最小值及其所在位置 i。

   int a[] = {5,-9,32,77,64,-24,14,0,21,45};

    

    

    int max = 0 , min = 0 , m = 0 , n = 0;

    int a[] = {5 , -9 , 32 , 77 , 64 , -24 , 14 , 0 , 21 , 45};

    max = a[0];

    min = a[0];

    for (int i = 0; i < 10; i++) {

        if (max < a[i]) {

            max = a[i];

            m = i;

        }

        

        if (min > a[i]) {

            min = a[i];

            n = i;

        }

    }

    

    printf("max = %d 下标为%d\n" , max , m);

    printf("min = %d 下标为%d" , min , n);

    

    

    //    10、(*)把 str1, str2, str3 合并到 result 数组中。 char result[50] = {0};

    //    char str1[] = "Lanou ";

    //    char str2[] = "23_class ";

    //    char str3[] = " is niu best!"; 结果:“Lanou 23_class is niu best!”

    char result[50] = {0};

    char str1[] = "Lanou ";

    char str2[] = "23_class ";

    char str3[] = " is niu best!";

    

    strcat(result , str1);

    strcat(result , str2);

    strcat(result, str3);

    printf("%s" , result);

    

    

    

    //    11、(**)找出下面程序的错误:

    

        char string[10], str1[10];

        int i;

        for(i = 0; i < 10; i++){

            str1[i] = 'a';

        }

        strcpy(string, str1);// strcpy函数遇到 \0才会停止。

        printf("%s" , string);

 

    //    12、(**)下面这个程序执行后会有什么错误或者效果:

    

        unsigned char str[10], i; //unsigned char 255,超过会溢出

        for(i = 0; i < 256; i++){

            str[i] = i;     //str[i]越界

          

        }

    

    unsigned char str[10], i;

    for(i = 0; i < 11; i++){

        if (i == 10) {

            printf("^^^^^^^%c\n" , str[i]);//可以越界表示,不确定值

        } else {

            

            str[i] = i;

        }

    }

    printf("**********");

 

posted @ 2015-04-15 22:27  fengkuangIT  阅读(123)  评论(0)    收藏  举报