C語言100題集合022-查找成績不及格的學生

2020-11-13 Johngo學長

系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。

喜歡的同學記得點讚、轉發、收藏哦~

後續C語言經典100例將會以pdf和代碼的形式發放到公眾號

歡迎關注:計算廣告生態 即時查收

1 題目

函數:search()

功能:查找成績不及格的學生

描述:有 4 名學生的成績,找出至少有一科不及格的學生,並將成績列表輸出(規定60以下為不及格)

目標:重點理解 int (*p)[N] 的使用方法



2 思路

int*p[5] 和 int(*p)[5] 的區別

  • int *p[5],首先它是一個數組,它的大小是5,p裡面存放的數據都是類型是int *,也就是整型指針。 所以它叫指針數組。
  • int (*p)[5],首先p是一個指針,指向大小為5的數組,因此這叫數組指針。通常用在二維數組的操作上注意指針的類型,從 int(*p)[5] 可以看到, p 的類型不是int *, 而是 int(*)[5],p 被定義為指向一維數組的指針變量,裡面有 5 個元素,因此,p 的基類型是一維數組,長度為 20 字節。*(p+2)+3, 括號中的 2 是指的以 p 的基類型(一維整型數組)的長度為單位的,即,p 每增加 1,地址就增加 20 個字節(5 個元素,每個元素4個字節)。而 *(p+2)+3 括號外的數字 3,不是以 p 的基類型的長度為單位的,而是一維數組的下一個位置
  • 先看一個簡單的引例

#include <stdio.h> void search(float (*p)[4], int n) { printf("序號為 %d 的學生的成績:\n", n); for (int i = 0; i < 4; ++i) { printf("%5.2f ", *(*(p+n)+i)); }}int main(int argc, char const *argv[]) { float score[3][4]={{60,75,82,91},{75,81,91,90},{51,65,78,84}}; search(score, 2); // 計算得出序號為 2 的學生的成績 getchar();}~~~~~~~~~~~操作結果~~~~~~~~~~~~$ gcc ex022-1.c -o demo./yaojianguodeMacBook-Pro:C語言100題集合代碼 yaojianguo$ ./demo序號為 2 的學生的成績:51.00 65.00 78.00 84.00

3 代碼

#include <stdio.h> #include <stdlib.h>#define N 5/**函數:search()功能:查找成績不及格的學生描述:有 4 名學生的成績,找出至少有一科不及格的學生,並將成績列表輸出(規定60以下為不及格)**/int * search(int (*p)[N]) { int * pt = *(p+1); for (int i = 0; i < 4; ++i) {  if (*(*(p+0)+i) < 60) {   // 這塊可以寫成*(*p+i) < 60,也就是平常看到了*(*(p+m)+n))來取到二維數組中列向的值   pt = *p;  } } return pt;}int main(int argc, char const *argv[]) { int * p; int score[][N]={{60,75,82,91},{75,81,91,90},{51,65,78,84},{65,72,78,72},{75,70,98,92}};  // 四個學生的成績 for (int i = 0; i < N; ++i) {  p = search(score+i);  if (p==*(score+i)) {   printf("成績不及格學生的成績分別是:\n");   for (int j = 0; j < 4; ++j) {    printf("%d ", *(p+j));   }     } } getchar();}

示例結果:

$ gcc ex022.c -o demo$ ./demo成績不及格學生的成績分別是:51 65 78 84


--END--

喜歡本文的同學記得點讚、轉發、收藏~

更多內容,歡迎大家關注我們的公眾號:計算廣告生態

後續C語言經典100例將會以pdf和代碼的形式發放到公眾號

同時也帶來更多系列文章以及乾貨❤️!

相關焦點

  • C語言100題集合020-用指針函數輸出學生成績
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收;);}示例結果:$ gcc ex020.c -o demo$ .
  • C語言100題集合-ex001
    題目:將一個數字字符串轉換為一個整數(不得調用C語言: 輸入:字符串 -1234 輸出:整數 -1234C語言100題集合-ex0012 思路long fun(char *p) { int r = 0;  //數字個數 long res = 0L; // 轉化後的數字 int pos = 1;  // 位數*10 *100&
  • c語言學生成績管理系統源碼
    ; /*學號*/char name[15];  /*姓名*/int cgrade;     /*C語言成績*/int mgrade;     /*數學成績*/int egrade;     
  • C語言100題集合021-用指針函數輸出學生成績相同元素指針
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收函數:find()功能:用指針函數輸出學生成績尋找相同元素的指針
  • C語言100題集合010-刪除字符串中所有的空格
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收100題集合-ex0102 思路
  • C語言100題集合015-使用指針的指針輸出字符串
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收100題集合015-使用指針的指針輸出字符串
  • C語言100題集合012-指向結構體變量的指針
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收\t%c\n", s->sex); printf("Age.\t%d\n", s->age); printf("Score.
  • C語言100題集合014-指向結構體變量的指針
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收3 代碼#include <stdio.h> #include <stdlib.h>#define N 10/**函數:max_min()功能:找出數列中的最大值和最小值描述:使用指針查找數列中的最大值和最小值
  • C語言100題集合026-使用指針交換兩個數組中的最大值
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收nbsp;for (int j = 0; j < N; ++j) {  printf("%d ", *(b+j)); }}示例結果:$ gcc ex026.c&
  • 排序集合和二分查找
    排序集合和二分查找1.有序集合二分查找(也稱折半查找)是非常重要和常見的查找算法,在平衡樹和排序集合中應用較多。使用二分查找是有前提條件的,首先要保證集合時一個排序集合,只有在排序集合中才能使用二分查找。
  • 最新四年級數學期中測試卷,不及格學生居多,題難?
    經過一份期中試卷的檢測,發現班級裡數字不及格的學生居多,這是為何呢?難道是因為題目太難?先來看看一位同學的答題情況吧:整個試卷的題量比較大,一共6頁。這位小同學第9小題出現了錯誤,正確的做法應該是:8699.2萬,因為題目當中並沒有要求取近似值,所以,像這位同學寫成了8699萬,就是錯誤的,後面還有2000,也就是0.2萬,這部分不應該省略掉,而應該以小數的方式寫出來才對!第五大題是計算題。
  • C語言100題集合011-使用指針實現整數逆序排序
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收;*q2, *q3);}示例結果:$ gcc ex011.c -o demo$ .
  • C語言100題集合025-使用指針插入元素
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收 < N+1; ++i) {  printf("%d ", a[i]); } printf("\n"); return 0;}示例結果:$ gcc ex025.c&
  • C語言100題集合013-指向結構體變量的指針
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收nbsp;< a+10; ++p) { // 指針指向進行數組內容列印  printf("數組中的內容:\n%d\n", *p); } return 0;}示例結果:$ gcc ex013.c&
  • C語言100題集合023-使用指針實現冒泡排序
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收nbsp;j < n; ++j) {  printf("%d ", *(a+j)); } printf("\n"); getchar();}示例結果:$ gcc ex023.c&
  • C語言100題集合017-使用指針連接兩個字符串
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收:%s\n", str2); connect(str1, str2, conn); printf("連接後的字符串是:\n"); printf("%s\n", conn);}示例結果:$ gcc ex017.c&
  • 為什麼考試成績要60分才算及格,而不是50分或70分呢?看完漲知識
    讀書的時候,最常見的就是考試了,每次考試成績一出來,成績好的學生很少抱怨什麼,反而成績比較差的學生顯得比較暴躁。有些考了59分的同學更是一臉痛苦和著急,不停地查看試卷,看看老師有沒有算錯分或者改錯題,甚至抱怨為什麼不是50分就算及格。
  • C語言100題集合019-實現輸入一個星期中對應的第幾天
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收\n", *(week+w-1)); return 0;}示例結果:$ gcc ex019.c -o demo$ .
  • C語言100題集合027-二維數組的經典案例,非常重要
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收;%d\n", a[1][1], *(*(a+1)+1)); // 1 行 1 列的值,1 行 1 列的值    getchar();}示例結果:$ gcc ex027.c&
  • C語言100題集合024-輸入月份號並輸出英文月份名
    系列文章《C語言經典100例》持續創作中,歡迎大家的關注和支持。喜歡的同學記得點讚、轉發、收藏哦~後續C語言經典100例將會以pdf和代碼的形式發放到公眾號歡迎關注:計算廣告生態 即時查收nbsp;scanf("%d", &m); printf("本月是:"); printf("%s\n", *(p+m-1)); getchar(); return 0;}示例結果:$ gcc ex024.c&