一、写一个函数,可以逆序一个字符串的内容
1.代码实现:
方法一:
#include<stdio.h>
void reverse(char arr[], int sz)
{
char* ptr = arr;
char* p = arr + sz - 2;
while (ptr <p)
{
char tmp = *ptr;
*ptr = *p;
*p = tmp;
*ptr ++;
*p --;
}
}
int main()
{
char arr[] = { "a,b,c,d"};
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%s\n ", arr);
reverse(arr, sz);
printf("%s\n ", arr);
return 0;
}
方法二:
#include <stdio.h>
#include <string.h>
#include <windows.h>
void reverse(char* arr)
{
char* left = arr;
char* right = arr + strlen(arr) - 1;//strlen()是计算字符串长度的函数
while (left < right) {//交换最两边的值,向内递进
char temp = *left;//创建一个临时变量存放左边的值
*left = *right;
*right = temp;
left++, right--;
}
}
int main()
{
char arr[] = "a,b,c,d";//定义一个字符串
printf("Before:%s\n", arr);//逆置之前
reverse(arr);//将字符串逆序
printf("After :%s\n", arr);//逆置之后
system("pause");
return 0;
}
二、strlen的实现
1.代码实现:
#include<stdio.h>
#include<string.h>
void reverse(char* arr)
{
char* left = arr;
char* right = strlen(arr) + arr - 1;
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
*left++;
*right--;
}
}
int main()
{
char arr[] = { "a,b,c" };
printf("%s\n", arr);
reverse(arr);
printf("%s\n", arr);
return 0;
}
三、 调整数组使奇数全部都位于偶数前面。
1.题目要求:
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
2.代码实现:
void sort(int num[], int len)
{
for (int i = 0; i < len - 1; ++i)
{
for (int j = 0; j < len - i - 1; ++j)
{
if (num[j] % 2 == 0 && num[j + 1] % 2 != 0)
{
int tem = num[j];
num[j] = num[j + 1];
num[j + 1] = tem;
}
}
}
}
#include<stdio.h>
int main()
{
int num[] = { 3,7,8,4,5 };
sort(num, sizeof(num) / sizeof(int));
for (int i = 0; i < sizeof(num) / sizeof(int); ++i)
{
printf("%d", num[i]);
}
printf("\n");
return 0;
}
四、写一个函数打印arr数组的内容,不使用数组下标,使用指针。
1.题目要求:
arr是一个整形的一维数组
2.代码实现:
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = &arr;
for (int i = 0; i < 10; i++)
{
printf("%d ", *(p + i));
}
return 0;
}
五、实现一个对整形数组的冒泡排序
1.代码实现:
void bubble_sort(int arr[], int sz)
{
for (int i = 0; i < sz - 1; i++)
{
for (int j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tem = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tem;
}
}
}
}
int main()
{
int arr[] = { 5,0,2,3,1,6,4,7,8,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
for (int i = 0; i < sz; i++)
{
printf("%d", arr[i]);
}
return 0;
}
六、写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
1.代码实现:
#include <string.h>
#include <stdio.h>
void left_revolve(char* arr, int n, int len)
{
n = n % len;
int i = 0;
for (i = 0; i < n; i++)
{
char copy = arr[0];
int j = 0;
for (j = 0; j < len - 1; j++)
{
arr[j] = arr[j + 1];
}
arr[j] = copy;
}
}
void judge(char* arr1, char* arr2)
{
int ret = strcmp(arr1, arr2);
if (ret == 0)
{
printf("判断结果:相同\n");
}
else
{
printf("判断结果:不相同\n");
}
}
int main()
{
int n = 0;
char arr1[] = "ABCD";
char arr2[] = "CDAB";
printf("左旋前:%s\n", arr1);
printf("判断字符串:%s\n", arr2);
int len = strlen(arr1);
printf("左旋几个字符:");
scanf("%d", &n);
left_revolve(arr1, n, len);
printf("左旋后:%s\n", arr1);
judge(arr1, arr2);
return 0;
}
七、杨氏矩阵
1.题目要求:
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
2.代码实现:
void find(int arr[][4], int row, int col, int input)
{
int k = 0;
int z = col - 1;
int flag = 0;
while (k < row && z >= 0)
{
if (input < arr[k][z])
{
z--;
}
else if (input > arr[k][z])
{
k++;
}
else
{
printf("找到了,下标是arr[%d][%d]", k, z);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("找不到");
}
}
int main()
{
int arr[3][4] = { {1,2,3,4} ,{5,6,7,8},{6,7,8,9} };
int input = 0;
scanf("%d", &input);
find(arr, 3, 4, input);
return 0;
}
相信大家在做完这些题目后,已经对指针有了一个大概的认识,希望对大家有所帮助。