C语言 函数和指针章节相关例题实现

1.有一个字符串,内有若干个字符,今输入一个字符,要求程序将字符串中该字符删去。用外部函数实现。注明:要用工程实现,跨文件调用外部函数。

main.c(文件1)
#include <stdio.h>
#include <stdlib.h>
int main() 
{
	extern void enter_string(char str[]);
	extern void delete_string(char str[],char ch);
	extern void printf_string(char str[]); 
	char c,str[80];
	enter_string(str);
	printf("输入一个要删除的字符:");
	scanf("%c",&c);
	delete_string(str,c);
	printf("输出字符串:");
	printf_string(str);
	return 0;
}
file1.c(文件2)
void enter_string(char str[80])
{
	printf("输入字符串:");
	gets(str);
}
file2.c(文件3)
void delete_string(char str[],char ch)
{
	int i,j;
	for(i=j=0;str[i]!='\0';i++)
	{
		if(str[i]!=ch)
		  str[j++]=str[i];
	}
	str[j]='\0';
}
file3.c(文件4)
void printf_string(char str[])
{
	printf("%s\n",str);
}

2.写一个函数,使给定的一个3x3的二维数组转置,即行列转换。

#include<stdio.h>
#define N 3
int a[N][N];
void convert(int a[][3])
{
	int i,j,t;
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			t=a[i][j];
			a[i][j]=a[j][i];
			a[j][i]=t;
		}
	}	
}
int main()
{
	int i,j;
	printf("输入9个数:");
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	printf("输出3x3的二维数组:\n");
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			printf("%4d",a[i][j]);
		}
		printf("\n");
	}
	convert(a);
	printf("输出行列转换后的二维数组:\n");	
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			printf("%4d",a[i][j]);
		}
		printf("\n");
	}
	return 0;
} 

3.输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用封装调用函数实现。要求形参、实参必须为指针类型。

#include<stdio.h>
void swap(int *n,int *m)
{
	int temp;
	if(*n<*m)
	{
		temp=*n;
		*n=*m;
		*m=temp;
	}
}
void exchange(int *i,int *j,int *k)
{
	if(*i<*j) swap(i,j);
	if(*i<*k) swap(i,k);
	if(*j<*k) swap(j,k);
}
int main()
{
	int a,b,c,*p1,*p2,*p3;
	printf("输入三个整数:");
	scanf("%d %d %d",&a,&b,&c);
	p1=&a;p2=&b;p3=&c;
	exchange(p1,p2,p3);
	printf("由大到小输出:%d %d %d",a,b,c);
	return 0;
}

4.将数组a中n(可以动态输入也可以写死)个整数按相反顺序存放。要求不能引入新的数组。用数组名或者指针变量做实参。

#include<stdio.h>
void inv(int *a,int m)
{
	int *p,*q,temp;
	p=a;
	q=a+m-1;
	while(p<q)
	{
		temp=*p;
		*p=*q;
		*q=temp;
		p++;
		q--;
	}
}
int main()
{
	int j;
	printf("输入几个整数:");
	scanf("%d",&j);
	int a[j],*p;
	printf("输入%d个整数:",j);
	for(int i=0;i<5;i++)
	{
		scanf("%d",&a[i]);
	}
	int n=sizeof(a)/sizeof(a[0]);
	p=a;
	inv(p,n);
	printf("相反顺序:");
	for(int i=0;i<n;i++)
	{
		printf("%d ",a[i]);
	}
	return 0;
} 

5.用指针方法对10个整数按由大到小顺序排序。封装排序函数,函数的形参必须是指针。实参可以是数组名也可是指针变量。

#include<stdio.h>
void sort(int *p,int n)
{
	int i,j,t,k;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(*(p+j)>*(p+k)) k=j;
		}
		if(k!=i) 
    	{
		  	t=*(p+i);
		  	*(p+i)=*(p+k);
		  	*(p+k)=t;
	    }
    }
}
int main()
{
	int i,*p,a[10];
	p=a;
	printf("输入10个整数:");
	for(i=0;i<10;i++)
	{
		scanf("%d",p+i);
	}
	p=a;
	sort(p,10);
	printf("输出由大到小的10个整数:");
	for(p=a,i=0;i<10;i++)
	{
		printf("%d ",*(p+i));
	}
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值