C実訓(三)

13026 ワード

練習と注意事項:
1.whileサイクル練習問題
  • 7の倍数
  • int a = 7;
        while (a <= 100) {
            if (a % 7 == 0) {
                printf("%d 7   
    ",a); } a++; }
  • ビット7の数
  • int b = 7;
        while (b <= 100) {
            if (b % 10 == 7) {
                printf("%d    7  
    ",b); } b++; }
  • 10桁が7の数
  • int c = 0;
        while (c <= 100) {
            if (c / 10 == 7) {
                printf("%d   7  
    ",c); } c++; }
  • は7の倍数ではなく、7
  • を含まない.
    int d = 0;
        while (d <= 100) {
            if (d % 7 != 0 && d % 10 != 7 && d / 10 != 7) {
                printf("%d   7        7
    ",d); } d++; }

    2.1つの数が何桁であるかを判断する(2つの方法)
  • 1️⃣
  • int n = 0;
        int sum = 0;
        printf("        :");
        scanf("%d ",&n);
        while (n) {
            sum++;
            n /= 10;
        }
        printf("%d
    ",sum);
  • 2️⃣
  • int num = 0;
        printf("      :");
        scanf("%d",&num);
        num = abs(num);
        int count = 1;
        int temp = num;
        while ((num /= 10) > 0) {
            count++;
        }
        //printf("%d  
    ",count); printf("%d %d
    ",temp,count);

    3.回顧:判定質量数
    int num = 13;
        BOOL flag = YES;
        for (int i = 1; i <= 100; i++) {
            if (num % i == 0 && num != 1 && num != i) {
                flag = NO;
                break;
            }
        }
        if (flag) {
            printf("shi");
        } else {
            printf("bushi");
        }
    

    4.配列
          1:
          int arr[5] = {1,2,3,4,5};
          2:(  5        ,        0)
          int arr1[5] = {1,2,3};
          3:(             ,          ,     )
          int arr2[];
          4:(            )
          int arr3[] = {1,2,3,4,5};
          int a1 = arr1[3];
        //        
    

    5.配列の遍歴
    int numArr[] = {10, 20, 30, 40, 50};
        for (int i = 0; i < 5; i++) { //i<=length-1 i

    6.20個の要素を有する整数配列を定義し、各要素の値範囲は30-70の間であり、配列要素の和を求める
    int arr[20] = {};
        int sum = 0;
        for (int i = 0; i < 20; i++) {
            arr[i] = arc4random() % (70 - 30 + 1) + 30;
            sum+=arr[i];
            
        }
        printf("%d
    ",sum);

    7.1つの配列、すなわち2つの配列の容量をコピーし、そのうちの1つの配列の要素を別の配列にコピーする
    int numArr[20];
        int numArr2[20];
        for (int i = 0; i < 20; i++) {
            numArr2[i] = numArr[i];
        }
        for (int i = 0; i < 20; i++) {
            printf("%d
    ",numArr2[i]); }

    8.10個の整数要素を格納する配列に対してランダムに値を割り当て(20-30)、最大値とすべての要素と
    int arr[10];
        int max = 0;
        int sum = 0;
        for (int i = 0; i < 10; i++) {
            arr[i] = arc4random() % (30 - 20 + 1) + 20;
            max = max > arr[i] ? max : arr[i];
            sum += arr[i];
            
        }
        printf("max=%d
    ",max);

    9.2つの配列を生成し、各配列には10個の要素があり、要素の値範囲は20-40の間であり、配列は対応する要素を加算し、別の配列に配置する.
    int arr1[10];
        int arr2[10];
        int arr3[10];
        for (int i = 0; i < 10; i++) {
            arr1[i] = arc4random() % (40 - 20 + 1) + 20;
            arr2[i] = arr1[i];
            arr3[i] = arr1[i] + arr2[i];
            printf("%d
    ",arr3[i]); }

    10.整数配列の長さ20、乱数範囲35-90、配列内の最大要素の値とそれに対応する下付き文字を見つける
    int array[20];
        int max = 0;
        int maxIndex = 0;
        for (int i = 0; i < 20; i++) {
            array[i] = arc4random() % (90 - 35 + 1) + 35;
            //max = max > array[i] ? max : array[i];
            if (max < array[i]) {
                max = array[i];
                maxIndex = i;  // i  
            }
        }
    printf("    :%d
    ",max); printf(" :%d
    ",maxIndex);

    11.発泡ソート法(一)
    //   length-1 
        int numbers[] = {6, 2, 8, 3, 9, 7};
        BOOL flag = YES; 
        for (int j = 0; j < 6 - 1 && flag == YES; j++) {
            flag = NO;
            for (int i = 0; i < 6 - 1 - j; i++) { //6-1          
                if (numbers[i] > numbers[i + 1]) {
                    int temp = numbers[i + 1];
                    numbers[i + 1] = numbers[i];
                    numbers[i] = temp;
                    flag = YES;
                }
            }
        }
        
        //    
        for (int i = 0; i < 6; i++) {
            printf("%d
    ",numbers[i]); }

    12.発泡ソート法(二)
        int n[] = {124,76,78,35,9,21,76,12};
        //sizeof        
        int count = sizeof(n) / sizeof(n[0]);
        BOOL f = YES;
        for (int j = 0; j < count - 1 && f == YES; j++) {
            f = NO;
            for (int i = 0; i < count - 1 - j; i++) {
                if (n[i] > n[i + 1]) {
                    int t = n[i + 1];
                    n[i + 1] = n[i];
                    n[i] = t;
                    f = YES;
                }
            }
        }
        
        for (int i = 0; i < count; i++) {
            printf("%d
    ",n[i]); }

    13.文字列&文字配列
        char str1[] = {'a','b','c'}; //    
        char str2[] = "abc"; //   
        char str3[] = {'a','b','c','\0'}; //   
        printf("%s
    ",str3);
    //strlen()       
        unsigned long len = strlen(str2);
        printf("      :%lu
    ",len);
    //strcpy()     
        char str5[] = "haha";
        unsigned long len1 = strlen(str5);
        char str4[len1 + 1];
        strcpy(str4, str5);
        printf("     :%s
    ",str4);
    //strcat()     
        char str6[20] = "ni";
        //unsigned long len2 = strlen(str6);
        char str7[] = "sha";
        strcat(str6, str7);
        printf("       :%s
    ",str6);
    //strcmp()     
        char str8[] = "lala";
        char str9[] = "luelue";
        int result = strcmp(str8, str9);
        printf("    :%d
    ",result);

    14.検索文字列のスペース数:たとえば、「I love iOS」
    char string[] = "I love iOS";
        int count = 0;
        int kongge = 0;
        while (string[count] != '\0') {
            if (' ' == string[count]) {
                kongge++;
            }
            count++;
        }
        printf("   :%d
    ",kongge);

    知識点:
    1.配列
    1️⃣  :
                    ,            。
                 。
    2️⃣  :
               [     ] = { 1, 2...};
          :
               [    ];
      int arges = [10];
    3️⃣     :
             :    +   
    4️⃣    :           。
    5️⃣       ,      。
    6️⃣               。
    7️⃣             。
    8️⃣                 ,   ,            。
    9️⃣        :
      int array[] = {};    int array[2] = {1, 2, 3};
           ,        ,           ,               。
    

    2.泡立ちソート
    1️⃣     ,                       。
    2️⃣               。
    3️⃣                     。
    4️⃣          ,        ,          。
    

    3.文字配列を操作する関数:
    1️⃣'\0'               。
    2️⃣              :
        strlen()         
        strcpy()       
        strcat()       
        strcmp()       
    3️⃣                    1,          ’\0’,     ,                   ‘\0’            。
    4️⃣ printf      ,    %s。
    

    ジョブ:
    1.ランダムに年を入力し、その年が閏年かどうかを判断します.閏年の場合、出力年は閏年であり、そうでない場合、出力年は閏年ではありません.閏年の条件を満たす:
  • は400で除去できる.(2000年が閏年、1900年が閏年ではないなど).
  • は4で割り切れるが、100で割り切れるわけではない.(2004年は閏年、2010年は閏年ではない).
  • int year = 0;
        printf("       :");
        scanf("%d",&year);
        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
            printf("%d   
    ",year); } else { printf("%d
    ",year); }

    2.abc+cba=1333が知られており、ここでa、b、cはいずれも1桁であり、プログラミングは条件を満たすa、b、cのすべての組合せを求める.
    for (int a = 1; a < 10; a++) {
            for (int b = 0; b < 10; b++) {
                for (int c = 1; c < 10; c++) {
                    if ((a * 100 + b * 10 + c * 1) + (c * 100 + b * 10 + a * 1 == 1333)) {
                        printf("%d,%d,%d
    ",a,b,c); } } } }

    3.ランダムに発生した20個の10~50の正の整数を配列に格納し、配列中の最大値、最小値、平均値及び各要素の和を求める
        int num[20];
        int max = 0;
        int min = 0;
        int avr = 0;
        int sum = 0;
        for (int i = 0; i < 20 - 1; i++) {
            num[i] = arc4random() % (50 - 10 + 1) + 10;
            max = max > num[i] ? max : num[i];
            min = min < num[i] ? min : num[i];
            avr = num[i]/20;
            sum+=num[i];
        }
        printf("    :%d
    ",max); printf(" :%d
    ",min); printf(" :%d
    ",avr); printf(" :%d
    ",sum);

    4.プログラムを作成し、5つの要素を含む2つの配列を入力します.まず、2つの配列を昇順に並べてから、この2つの配列を1つの昇順配列に結合します.
    int arr1[] = {1, 5, 8, 14, 7};
        int arr2[] = {3, 6, 34, 29, 4};
        int arr3[11] = {};
        BOOL flag = YES;
        for (int j = 0; j < 5 - 1; j++) {
            flag = NO;
            for (int i = 0; i < 5 - 1 - j; i++) {
                if (arr1[i] > arr1[i + 1]) {
                    int temp = arr1[i + 1];
                    arr1[i + 1] = arr1[i];
                    arr1[i] = temp;
                    flag = YES;
                }
            }
        }
        for (int i = 0; i < 5; i++) {
            printf("   :%d
    ",arr1[i]); } for (int j = 0; j < 5 - 1; j++) { flag = NO; for (int i = 0; i < 5 - 1 - j; i++) { if (arr2[i] > arr2[i + 1]) { int temp = arr2[i + 1]; arr2[i + 1] = arr2[i]; arr2[i] = temp; flag = YES; } } } for (int i = 0; i < 5; i++) { printf(" :%d
    ",arr2[i]); } for (int i = 0; i < 5; i++) { arr3[i] = arr1[i]; arr3[i] = arr2[i - 5]; } for (int j = 0; j < 10 - 1; j++) { flag = NO; for (int i = 0; i < 10 - 1 - j; i++) { if (arr3[i] > arr3[i + 1]) { int temp = arr3[i + 1]; arr3[i + 1] = arr3[i]; arr3[i] = temp; flag = YES; } } } for (int i = 0; i < 10; i++) { printf(" :%d
    ",arr3[i]); }

    5.ある年ある月ある日を与え、その年の何日目として出力する
        int dayArr[] = {31, 28, 31, 28, 31, 30, 31, 31, 29, 31, 30, 31}; //          
        int year1 = 0;
        int month = 0;
        int day = 0;
        printf("       :");
            scanf("%d",&year);
            if ((year1 % 400 == 0) || (year1 % 4 == 0 && year1 % 100 != 0)) {
                printf("%d   
    ",year1); dayArr[2] = 29; } for (int i = 0; i < month - 1; i++) { day += dayArr[i]; } printf(" %d
    ",day + month);

    6.整数配列並べ替えプログラムの作成(バブル並べ替え-昇順)
        int array[] = {2,56,97,23,17,7,45};
        BOOL f = YES;
        for (int j = 0; j < 7 - 1; j++) {
            f = NO;
            for (int i = 0; i < 7 - 1 - j; i++) {
                if (array[i] < array[i + 1]) {
                    int temp = array[i + 1];
                    array[i + 1] = array[i];
                    array[i] = temp;
                    f = YES;
                }
            }
        }
        
        for (int i = 0; i < 7; i++) {
            printf("%d",array[i]);
        }
    

    7.次の整数配列の最大値と最小値とその位置の下付きi int a[]={5,-9,32,77,64,-24,14,0,21,45}を探し出す.
        int a[] = {5, -9, 32, 77, 64, -24, 14, 0, 21, 45};
        int max1 = 0;
        int min1 = 0;
        int maxIndex = 0;
        int minIndex = 0;
        for (int i = 0; i < 10 - 1; i++) {
            if (max1 < a[i]) {
                max1 = a[i];
                maxIndex = i;
            }
            
        }
        
        for (int i = 0; i < 10 - 1; i++) {
            if (min1 > a[i]) {
                min1 = a[i];
                minIndex = i;
            }
        }
        printf("    :%d
    , :%d
    ",max1,min1); printf(" :%d
    , :%d
    ",maxIndex,minIndex);

    8.str 1,str 2,str 3を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(str1, str2);
        strcat(str1, str3);
        strcat(result, str1);
        printf("%s
    ",result);

    9.文字列に0~9の数字を削除
    char str[] = "a34sf5slvjxz2g";
      int count = 0;
      int index = 0;  //    
      while (str[count] != '\0') {
          if ('0' <= str[count] && str[count] <= '9') {
              count++;
              continue; //      
          }
          str[index] = str[count];
          index++;
          count++;
      }
      str[index] = '\0';
      printf("%s
    ",str);