C语言-指针经典例题案例详解


#include <stdio.h>
#include <stdlib.h>
#include <string.h>	
#include <conio.h>
#include <ctype.h>
#include <math.h>
#include <time.h>
#define IO 996
#define N 10
#define input "%d,%d,%d,%d\n\n"

void product();
void sortReplication();
void sort();
void swap(int *,int);
void exchange();
void frequency();
int subString(char *,char *);

int main(int argc,char *argv[]){

//product();
//sortReplication();
//sort();
//exchange();
//frequency();

} 

void product(){
	//已知一个整形数组X[4],其元素值分别为3/10/4/20,使用指针求个数字元素的积。
	int x[]={3,10,4,20},i,product=1,*xp=&x[0];
	for(i=0;i<4;i++){
		product*=*(xp+i);//*xp+i
		//printf("%d\n",i);
		//printf("%d\n",*xp);
		//printf("%d\n",*xp+i);
		//printf("%d\n\n",product);
	}
	printf("%d\n\n",product);
}


void sortReplication(){

	//有四个字符串,实现将他们按照字符串中的字符个数从小到大排序,
	//再分别取出每个字符串的第三个字母形成一个新的字符串输出(若少于三个字符的输出*),
	//要求:利用字符串指针和指针数组完成。

	char *array[5]={"yangmufa","shuai","de","chaojishuai",}\
	,(*tem)=NULL,t[5]={NULL};
	int i=0,j=0,k=0;

	for(i=0;i<4;i++){//i<4-1表示从第一个开始到倒数第二个结束(4个数组)
		k=i;//记录小串
		for(j=0;j<4;j++){//表示从第二个开始到倒数第一个结束,每一次比上一次比较次数减一	
			if(strlen(array[k])>strlen(array[j])){
				k=j;//记录小串
			}
			if(i!=k){//交换
				tem=array[i];
				array[i]=array[k];
				array[k]=tem;
			}
		}	
	}
	//分别取出每个字符串的第三个字母形成一个新的字符串
	for(i=0;i<4;i++){
		puts(*(array+i));
		if(strlen(*(array+i))>2){
			//*(*(array+4)+i)=*(*(array+1)+2);
			//此方法不可取因为"String"是存在静态存储区的,这个地址中的值不能被修改。
			t[i]=*(*(array+i)+2);
		}else if(strlen(*(array+i))<3){
			t[i]='*';
		}
	}
	printf("\n新字符串:%s\n\n",t);
}


void sort(){

	//定义一个动态数组长度为n,用随机数给各数组元素赋值,
	//然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。

	int n,i,*array;
	printf("输入长度:");
	scanf_s("%d",&n);
	array=(int*)malloc(n*sizeof(int));//以N为基数动态反配N个int类型大小的内存
	srand((unsigned)time(NULL));//设置以时间为随机种子
	printf("随机数排序前:");
	for(i=0;i<n;i++){
		array[i]=rand();//获取以时间为种子得来的随机数后赋值给array
		printf(" %d ",array[i]);
	}
	printf("\n");
	swap(array,n);	
}
void swap(int * array,int lenth){
	int i=0,j=0,k=0,temp;
	printf("\n随机数排序后:");
	for(i;i<lenth;i++){
		k=i;
		for(j=0;j<lenth;j++){
			if(array[k]<array[j]){k=j;}
			if(k!=i){
				temp=array[k];
				array[k]=array[i];
				array[i]=temp;
			}
		}
	}
	for(i=0;i<lenth;i++){
		printf(" %d ",array[i]);
	}
	printf("\n\n");
}


void exchange(){

	//输入N个整数,将其中最小的数与第一个数对换,将自重最大的数与与最大的数交换。

	int array[8],i,j,k,temp=0,max=0,min=0;
	srand((unsigned)time(NULL));//设置时间种子
	printf("随机数:");
	for(i=0;i<8;i++){
		array[i]=rand();//获取以时间为种子得来的随机数后赋值给array
		printf(" %d ",array[i]);	
	}

	printf("\n交换后:");
	max=array[0];
	min=array[0];
	for(i=0;i<8-1;i++){
		if(max<array[i]){
			max=array[i];
		}//求出最大元素
		if(min>array[i]){
			min=array[i];
		}//求出最小元素
	}
	array[0]=min;//将其中最小的数与第一个数对换,
	array[7]=max;//将其中最大的数与与最大的数交换。
	for(i=0;i<8;i++){
		printf(" %d ",array[i]);
	}
		for(i=0;i<8;i++){
		k=i;
		for(j=0;j<8;j++){
			if(array[k]<array[j]){k=j;}
			if(k!=i){
				temp=array[k];
				array[k]=array[i];
				array[i]=temp;
			}
		}
	}
	printf("\n排序后:");
	for(i=0;i<8;i++){
		printf(" %d ",array[i]);
	}
	printf("\nmax:%d\nmin:%d\n",max,min);
}



void frequency(){

	//计算字符串中子串出现的次数,要求用一个subString函数实现,
	//参数为指向字符串和子字符串的指针,返回次数。

	char array[]={"yangmufchaojiwudidashuaigeyangmufachaojishuai"},\
		SubString[]={"chaoji"};
	printf("字符串:");
	puts(SubString);
	printf("在字符串:");
	puts(array);
	printf("中出现了: ");
	printf(" %d 次\n",subString(array,SubString));

}
int subString(char *a,char *s){

	int i=0,j=0,count=0,alen=strlen(a),slen=strlen(s);
	while(i<alen){
		if(a[i]==s[j]){
			//如果子串第j个元素和母串的第i个元素相等则都继续指向下一个元素进行比较
			i++;
			j++;
		}else{
			//如果子串和母串出现不匹配则母串回到挡轮比较之前,子串归零
			i=i-j+1;
			j=0;
		}
		if(j==slen){
			//如果出现子串到最后一个元素均与母串相等的情况则出现次数加一,子串归零继续下一轮比较。
			count++;
			j=0;
		}
	}
	return count;
}

Result:

product();


sortReplication();


sort();


exchange();


frequency();

 

/*---------------------
作者:灭世奶神
本文链接:https://blog.csdn.net/qq_36823679/article/details/99550343

版权声明:
      本文为博主原创文章,转载请附上源文链接!

 如果觉得我的论文对您有用,您的请评论点赞与
 合理优质的转发也将是鼓励支持我继续创作的动力!
---------------------*/

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言是一种广泛应用于系统编程和嵌入式开发的高级编程语言。函数指针C语言中的一个重要概念,它可以指向函数,并且可以通过函数指针来调用函数。快速排序算法是一种常用的排序算法,它的核心思想是通过分治的策略将一个大问题分解为多个小问题,并通过递归的方式解决这些小问题。 下面是C语言中使用函数指针实现快速排序算法的示例代码: ```c #include <stdio.h> // 交换两个元素的值 void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } // 快速排序的分区函数 int partition(int arr[], int low, int high) { int pivot = arr[high]; // 选取最后一个元素作为基准 int i = (low - 1); // 定义一个指针,用于指向小于基准的元素 for (int j = low; j <= high - 1; j++) { if (arr[j] < pivot) { i++; swap(&arr[i], &arr[j]); } } swap(&arr[i + 1], &arr[high]); return (i + 1); } // 快速排序函数 void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); // 将数组分区,并获取分区点的位置 quickSort(arr, low, pi - 1); // 对分区点左边的子数组进行快速排序 quickSort(arr, pi + 1, high); // 对分区点右边的子数组进行快速排序 } } // 打印数组元素 void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int arr[] = {10, 7, 8, 9, 1, 5}; int n = sizeof(arr) / sizeof(arr[0]); printf("原始数组:"); printArray(arr, n); quickSort(arr, 0, n - 1); printf("排序后的数组:"); printArray(arr, n); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小马达

你的鼓励将是我创作的最大动力o

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值