C语言之数组的基础练习题(指针变量做函数参数)

本文详细介绍了C语言中指针的各种应用场景,包括变量值交换、数值排序、数组操作及字符串处理等。通过具体代码示例,展示了如何利用指针进行高效的数据处理,适合初学者及进阶学习者。

1、交换两个变量的值:

#include <stdio.h>
void swap(int *a,int *b)
{
	int tmp;
	tmp=*a;
	*a=*b;
	*b=tmp;
	
}
void main()
{
	int x,y;
	int *p_x,*p_y;
	printf("请输入两个数:\n");
	scanf("%d",&x);
	scanf("%d",&y);
	p_x=&x;
	p_y=&y;
	swap(p_x,p_y);
	printf("x=%d\n",x);
	printf("y=%d\n",y);
}

2、将输入的数值从小到大进行排列输出:

#include<stdio.h>
void swap(int *p1, int *p2) 								/*自定义交换函数*/
{
    int temp;
    temp =  *p1;
    *p1 =  *p2;
    *p2 = temp;
}
void exchange(int *pt1, int *pt2, int *pt3) 						/*三个数由大到小排序*/
{
    if (*pt1 <  *pt2)
        swap(pt1, pt2); 								            /*调用swap函数*/
    if (*pt1 <  *pt3)
        swap(pt1, pt3);
    if (*pt2 <  *pt3)
        swap(pt2, pt3);
}
void main()
{
    int a, b, c,  *q1,  *q2,  *q3;
    puts("Please input three key numbers you want to rank:");
    scanf("%d,%d,%d", &a, &b, &c);
    q1 = &a; 							                        	/*将变量a地址赋给指针变量q1*/
    q2 = &b;
    q3 = &c;
    exchange(q1, q2, q3); 					                        /*调用exchange函数*/
    printf("\n%d,%d,%d\n", a, b, c);
}

3、将某银行一周的钱收纳汇总

#include<stdio.h>                   /*包含头文件*/
void SUM(int *p,int n)              /*自定义函数*/
{
	int i,sum=0;                    /*定义变量*/
	for(i=0;i<n;i++)                /*循环每个数*/
			sum=sum+*(p+i);         /*相加*/
		printf("面值的总数是:%d\n",sum);/*输出*/
}
int main()                      /*主函数main*/
{
	int *pointer,a[7],i;        /*定义变量*/
	pointer=a;
	printf("请输入实际的数值:\n");  /*提示*/
	for(i=0;i<7;i++)            /*输入一周的每天钱数*/
		scanf("%d",&a[i]);
	SUM(pointer,7);             /*调用SUM函数*/
    return 0;                   /*程序结束*/
}

4、使用指针实现冒泡排序

#include<stdio.h>
void order(int *p,int n)
{
	int i,t,j;
	for(i=0;i<n-1;i++)
		for(j=0;j<n-1-i;j++)
			if(*(p+j)>*(p+j+1)) 								/*判断相邻两个元素的大小*/
			{
				t=*(p+j);
				*(p+j)=*(p+j+1);
				*(p+j+1)=t; 								/*借助中间变量t进行值互换*/
			}
			printf("排序后的数组:");
			for(i=0;i<n;i++)
			{
				if(i%5==0) 								/*以每行5个元素的形式输出*/
					printf("\n");
				printf("%5d",*(p+i)); 						/*输出数组中排序后的元素*/
			}
			printf("\n");
}
void main()
{
	int a[20],i,n;
	printf("请输入数组元素的个数:\n");
	scanf("%d",&n); 										/*输入数组元素的个数*/
	printf("请输入各个元素:\n");
	for(i=0;i<n;i++)
		scanf("%d",a[i]); 									/*给数组元素赋初值*/
	order(a,n); 											/*调用order函数*/
}

5、按字母顺讯排序

#include <stdio.h>
#include <string.h>
sort(char *strings[], int n)									/*自定义排序函数*/
{
	char *temp;
	int i, j;
	for (i = 0; i < n; i++)
	{
		for (j = i + 1; j < n; j++)
		{
			if (strcmp(strings[i], strings[j]) > 0) 				/*比较两个字符串的大小*/
			{
				temp = strings[i];
				strings[i] = strings[j];
				strings[j] = temp; 						/*如果前面字符串比后面的大,则互换*/
			}
		}
	}
}
void main()
{
	int n = 12;
	int i;
	char **p; 											/*定义字符型指向指针的指针*/
	char *month[] =
	{
		"January", 
			"February", 
			"March", 
			"April", 
			"May", 
			"June", 
			"July", 
			"August", 
			"September", 
			"October", 
			"November", 
			"December" 
			
	};
	p = month;
	sort(p, n);											 /*调用排序函数*/
	printf("排序后的12月份如下:\n");
	for (i = 0; i < n; i++)
		printf("%s\n", month[i]); 							/*输出排序后的字符串*/
}

找出二维数组中每行最大的数值进行求和

#include<stdio.h>
#define N 4
void max(int (*a)[N],int m)								/*自定义min函数,求二维数组中每行最小元素*/
{
	int value,i,j,sum=0;
	for(i=0;i<m;i++)
	{
		value=*(*(a+i)); 							/*将每行中的首个元素赋给value*/
		for(j=0;j<N;j++)
			if(*(*(a+i)+j)>value) 						/*判断其他元素是否小于value的值*/
				value=*(*(a+i)+j);					/*把比value大的数重新赋给value*/
			printf("第%d行:最大数是:%d\n",i,value);
			sum=sum+value;
	}
	printf("\n");
	printf("每行中最大数相加之和是:%d\n",sum);
}
void main()
{
	int a[3][N],i,j;
	int (*p)[N];
	p=&a[0];
	printf("please input:\n");
	for(i=0;i<3;i++)
		for(j=0;j<N;j++)
			scanf("%d",&a[i][j]); 					/*给数组中的元素赋值*/
		max(p,3); 									/*调用min函数,指针变量作函数参数*/
}

7、求新入学班级新生的总人数

#include<stdio.h>
void SUM(int *p,int n) 							 
{
	int i,sum=0;
	for(i=0;i<n;i++)
			sum=sum+*(p+i);
		printf("新生总人数是:%d\n",sum);
}
int main()
{
	int *pointer,a[10],i;
	pointer=a; 									 
	printf(" 请输入每个班级人数:\n");	
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);
	SUM(pointer,10);  
    return 0;
}

8、判断两个数值的大小

#include <stdio.h>
void swap(int *x1,int *x2)
{
    int t;
    t=*x1;
    *x1=*x2;
    *x2=t;
}
void order(int *a,int *b)
{
    if(*a>*b)
    swap(a,b);
}
int main()
{
 int x,y;
 printf("输入值:\n");
 scanf("%d,%d",&x,&y);
 printf("x=%d,y=%d\n",x,y);
 order(&x,&y);
 printf("x=%d,y=%d\n",x,y);
 return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ctrl精

面试很多问题,积攒不容易

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

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

打赏作者

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

抵扣说明:

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

余额充值