首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言經典編程練習四題:指針交換、數組查找、字符串排序、最大值定位

     編輯:C 語言問答

四道經典 C 語言練習題詳解與標準實現

題目 1:三變量循環右移 (指針實現)

將 x→y, y→z, z→x。

void rotate_right(int *a, int *b, int *c) {
    int t = *c;
    *c = *b;
    *b = *a;
    *a = t;
}

int main() {
    int x, y, z;
    scanf("%d%d%d", &x, &y, &z);
    printf("原值: %d %d %d\n", x, y, z);
    rotate_right(&x, &y, &z);
    printf("新值: %d %d %d\n", x, y, z);
    return 0;
}

題目 2:數組查找函數 search

// 返回下標,未找到返回 -1
int search(const int list[], int n, int x) {
    for (int i = 0; i < n; ++i)
        if (list[i] == x) return i;
    return -1;
}

int main() {
    int a[10], x;
    for (int i = 0; i < 10; ++i) scanf("%d", &a[i]);
    scanf("%d", &x);
    int pos = search(a, 10, x);
    printf("%d\n", pos);
    return 0;
}

題目 3:四字符串字典序排序 (指針數組 + qsort)

#include <stdlib.h>
#include <string.h>

int cmp_str(const void *a, const void *b) {
    return strcmp(*(const char**)a, *(const char**)b);
}

int main() {
    char *names[] = {"Changhua", "Liping", "Chenmei", "Gaofeng"};
    int n = 4;
    qsort(names, n, sizeof(char*), cmp_str);
    for (int i = 0; i < n; ++i) puts(names[i]);
    return 0;
}

輸出:Changhua, Chenmei, Gaofeng, Liping。

題目 4:findmax 返回最大值地址並輸出下標

// 返回最大值元素地址,通過 k 返回下標
int *findmax(int *s, int t, int *k) {
    int max_idx = 0;
    for (int i = 1; i < t; ++i)
        if (s[i] > s[max_idx]) max_idx = i;
    *k = max_idx;
    return &s[max_idx];
}

int main() {
    int a[10] = {12,23,34,45,56,67,78,89,11,22};
    int k; int *addr = findmax(a, 10, &k);
    printf("最大值:%d 下標:%d 地址:%p\n", a[k], k, (void*)addr);
    return 0;
}

核心考點總結

題目核心知識點易錯點
指針交換指針作函數參數修改實參、臨時變量交換傳值而非傳址、交換邏輯錯誤
數組查找線性查找、const 正確性、返回 -1 慣例越界、未處理未找到情況
字符串排序指針數組、qsort 比較函數、strcmp 返回值語義比較函數強轉錯誤、修改字符串常量
最大值定位遍歷記錄下標、返回地址、%p 格式輸出指針地址格式錯誤、未更新下標輸出參數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved