Part 1:C語言實現打印菱形windows
如上圖所示,是使用C語言打印的一個菱形,小編這裏使用指針的方式來解決該問題(也可經過觀察規律實現)。數組
在解決該問題時,咱們一般分爲兩步來實現菱形的打印,第一步是打印菱形的上半部分,第二步是打印菱形的下半部分。函數
<1>打印菱形的上半部分編碼
問題分析:如圖所示,若是咱們將上半部分的每行當作一個一維數組,那麼第一行數組的內容除了中間位爲星號,其餘的都是空格,而後以後的每行都是在上一行的基礎上向兩端依次擴展一位,直到遍歷完整個數組。spa
實現:經過分析,咱們已經知道了上半部分是如何實現的,那麼具體該怎麼編碼實現呢?3d
首先,咱們須要定義一個一維數組,初始化該數組內部的所有元素爲空格;而後,定義兩個指針變量 start 和 end ,用於在每次的循環過程當中修改數組向兩端擴展的元素爲星號。細心的你確定已經發現了每行的星號都是奇數,所以在寫代碼的過程當中定義數組時,要注意定義爲奇數。因爲數組的下標是從0開始的,所以在開始的時候,咱們只須要給接收數組的指針加上數組長度的一半,使得指針指向數組中間位置。指針
在這裏,咱們須要清楚的是:因爲咱們是使用指針對數組的內存進行操做,所以每次向外擴展時,不只擴展的元素是星號,同時它們之間的元素(即上一行的元素)也是星號。
<2>打印菱形的下半部分
code
問題分析:與上半部分類似,下半部分能夠當作是對一個全是星號的數組,每次修改兩端的兩個星號。blog
實現:通過上半部分的操做,兩個指針變量 start 和 end 分別指向數組的首尾,所以在此處的實現上不須要定義新的指針變量。每次對兩頭的指針進行加1和減1操做,而後將其指向的目標的內容修改成空格便可。排序
#include <stdio.h> #include <windows.h> #define SIZE 11 void PrintDiamond(char *p1, int _len) { int index = _len / 2; char *start = p1 + index; char *end = p1 + index; //上三角 for (int i = 0; i <= index; i++){ *start = '*'; *end = '*'; int j = 0; for (; j < _len; j++){ printf("%c ", *(p1 + j)); } if (i != index){ start--, end++; } printf("\n"); printf("\n"); } //下三角 for (int i = 0; i < index; i++){ *start = ' '; *end = ' '; int j = 0; for (; j < _len; j++){ printf("%c ", *(p1 + j)); } start++, end--; printf("\n"); printf("\n"); } } int main() { char arr1[SIZE] = { ' ' }; //int len = sizeof(arr1) / sizeof(arr1[0]); PrintDiamond(arr1, SIZE); system("pause"); return 0; }
Part 2:數組奇偶排序
Question:調整數組使奇數所有都位於偶數前面
問題分析:首先,咱們須要定義一個數組 arr1,而後對數組內部的元素進行從新排列。這裏須要注意的是,是對原數組的從新排列,所以在操做結束以後,arr1 內部元素實現從新排列。
實現:根據上面的分析,小編在編寫函數實現功能的時候,先對現有的數組進行了一份拷貝,而後使用指針操做對 arr1 中的內容進行修改。
#include <stdio.h> #include <windows.h> #pragma warning(disable:4996) #define SIZE 10 void ArrCopy(int *p1, int *p2) { int i = 0; for (; i < SIZE; i++){ *p1 = *p2; p1++, p2++; } } void OddEven(int *p) { int arr2[SIZE] = { 0 }; ArrCopy(arr2, p); //保證原數組自身發生變化 int i = 0; //奇數放在數組前半部分 for (; i < SIZE / 2; i++){ *(p + i) = arr2[2 * i]; } //偶數放在數組後半部分 int j = 0; for (; i < SIZE; i++,j++){ *(p + i) = arr2[2 * j + 1]; } } int main() { int arr1[SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; OddEven(arr1); int i = 0; for (; i < SIZE; i++){ printf("%d ", arr1[i]); } system("pause"); return 0; }