C實訓(三)

練習與注意事項:

1.while循環練習題

  • 7的倍數
int a = 7;
    while (a <= 100) {
        if (a % 7 == 0) {
            printf("%d是7的倍數\n",a);
        }
        a++;
    }
  • 個位為7的數
int b = 7;
    while (b <= 100) {
        if (b % 10 == 7) {
            printf("%d是個數為7的數\n",b);
        }
        b++;
    }
  • 十位為7的數
int c = 0;
    while (c <= 100) {
        if (c / 10 == 7) {
            printf("%d是十為7的數\n",c);
        }
        c++;
    }
  • 既不是7的倍數并且不包含7
int d = 0;
    while (d <= 100) {
        if (d % 7 != 0 && d % 10 != 7 && d / 10 != 7) {
            printf("%d既不是7的倍數并且不包含7\n",d);
        }
        d++;
    }

2.判斷一個數是幾位數(兩種方法)

  • 1??
int n = 0;
    int sum = 0;
    printf("請輸入任意一個數:");
    scanf("%d位",&n);
    while (n) {
        sum++;
        n /= 10;
    }
    printf("%d\n",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位數\n",count);
    printf("%d是%d位數\n",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<length
        printf("%d\n",numArr[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\n",sum);

7.復制一個數組,即兩個數組容量一樣,把其中一個數組中的元素復制到另外一個數組中

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\n",numArr2[i]);
        
    }

8.對存儲十個整型元素的數組隨機賦值(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\n",max);

9.生成兩個數組,每個數組都有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\n",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\n",max);
printf("最大值的下標為:%d\n",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\n",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",n[i]);
    }

13.字符串&字符數組

    char str1[] = {'a','b','c'}; //字符數組
    char str2[] = "abc"; //字符串
    char str3[] = {'a','b','c','\0'}; //字符串
    printf("%s\n",str3);
//strlen()計算字符串長度
    unsigned long len = strlen(str2);
    printf("字符串長度為:%lu\n",len);
//strcpy()字符串拷貝
    char str5[] = "haha";
    unsigned long len1 = strlen(str5);
    char str4[len1 + 1];
    strcpy(str4, str5);
    printf("拷貝結果是:%s\n",str4);
//strcat()字符串拼接
    char str6[20] = "ni";
    //unsigned long len2 = strlen(str6);
    char str7[] = "sha";
    strcat(str6, str7);
    printf("字符串拼接后是:%s\n",str6);
//strcmp()字符串比較
    char str8[] = "lala";
    char str9[] = "luelue";
    int result = strcmp(str8, str9);
    printf("較大的是:%d\n",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\n",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是閏年\n",year);
    } else {
        printf("%d不是閏年\n",year);
    }

2.已知abc+cba = 1333,其中a、b、c均為一位數,編程求出滿足條件的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\n",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\n",max);
    printf("最小值為:%d\n",min);
    printf("平均值為:%d\n",avr);
    printf("元素和為:%d\n",sum);

4.編寫一個程序,輸入兩個包含5個元素的數組,先將兩個數組升序排列,然后將這兩個數組合并成一個升序數組

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\n",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\n",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\n",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是閏年\n",year1);
            dayArr[2] = 29;
        }
    for (int i = 0; i < month - 1; i++) {
        day += dayArr[i];
    }
    printf("第%d\n天",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\n,最小值是:%d\n",max1,min1);
    printf("最大值所在位置的下標是:%d\n,最小值所在的下標是:%d\n",maxIndex,minIndex);

8.把 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(str1, str2);
    strcat(str1, str3);
    strcat(result, str1);
    printf("%s\n",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\n",str);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容