C语言: 指针初阶的练习题目

本文介绍了如何在C语言中逆序字符串、使用strlen函数、调整数组顺序、实现冒泡排序以及涉及指针操作的函数,如不使用数组下标遍历数组和判断字符串旋转。这些内容有助于提升对基础编程概念的理解。
摘要由CSDN通过智能技术生成

一、写一个函数,可以逆序一个字符串的内容

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;
}

​

 

 

相信大家在做完这些题目后,已经对指针有了一个大概的认识,希望对大家有所帮助。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值