NEFU锐格实验三[指针与数组]

推荐:NEFU大一下C语言锐格实验与作业参考程序目录

NEFU锐格实验三[指针与数组]

扯犊子

恭喜来到指针的世界呵呵,有一说一我也不咋会(主要不清楚写出来的符不符合教学和考试要求),因为ACM训练的时候都用全局变量的来着(所以你们考试要是指针实在整不来就用全局变量吧)
不过全局变量和指针又不是上下级关系学了一个另外一个就不用了,所以还是好好学吧。

为了锻炼指针运用能力,我就尽量不用全局变量写一下,但是吧,有种奇怪的感觉:我不清楚题目希望我哪里运用一下指针hh。

知识点

题目知识点
5872指针实现交换/排序
5875指针实现数组的输入和数据过滤
5873指针实现输入数据过滤
5876指针代替字符串数组下标
5877指针实现插入排序
5878指针代替二维数组下标
5879指针实现字符串截取

题目

5872

#include <stdio.h>
#include <stdlib.h>
void swap(int *a,int *b)
{
    int tmp;
	tmp=*a;
	*a=*b;
	*b=tmp;
}
int main()
{
   int a,b,c;
   int *p1,*p2,*p3;
   
   while(scanf("%d%d%d",&a,&b,&c)!=EOF)
   {
   	   p1=&a;p2=&b;p3=&c;
	   if(a>b)swap(p1,p2);
	   if(a>c)swap(p1,p3);
	   if(b>c)swap(p2,p3);
	   printf("%d %d %d\n",a,b,c);
   }
	return 0;
}

5875

#include <stdio.h>
#include <stdlib.h>
#define N 105

void solve(int *p,int n,int x)
{
    for(int i=0;i<n;i++)
		if(*(p+i)>=x)printf("%d ",*(p+i));
	printf("\n");
}
int main()
{
	int array[N];
	int n,x;
	int *p=array;
	while(scanf("%d %d",&n,&x)!=EOF)
	{
		for(int i=0;i<n;i++)scanf("%d",p+i);
		solve(p,n,x);
	}
	return 0;
}

5873

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 105

bool check(int *p,int min,int max)
{
    if(*p>=min&&*p<=max)return 1;
	return 0;
}
int main()
{
	int input;
	int n,min,max;
	int *p=&input;
	while(scanf("%d %d %d",&n,&min,&max)!=EOF)
	{
		bool flag=1;
		for(int i=0;i<n;i++)
		{
			scanf("%d",p);
			if(check(p,min,max))
			{
				printf("1 %d\n",*p);
				flag=0;
				break;
			}
		}
		if(flag)printf("0 %d\n",input);//这里可以知道input和*p是等效的,当然这么写是为帮助各位熟悉指针,也可以只用一个
	}
	return 0;
}

5876

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 105

int main()
{
    char str[N];
	while(scanf("%s",str)!=EOF)
	{
		int num=0;
		bool f=0;//标记正负 
		char *p=str;//字符串数组首地址
		while(*p!='\0')
		{
			if(*p>='0'&&*p<='9')num=num*10+*p-'0';
			else if(*p=='-')f=1;
			else break;//遇到其他字符跳出
			++p;
		}
		num=f?(-num):num;
		printf("%d\n",num);
	}
	return 0;
}

5877

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 105

int main()
{
	double array[N];
	double x; 
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		scanf("%lf",&x);
		for(int i=0;i<n;i++)scanf("%lf",&array[i]);
		double *p=array;
		int i;//定义在for外面方便标记 
		for(i=0;i<n;i++)
		{
			if(*(p+i)<x)printf("%.2lf ",*(p+i));
			else
			{
				printf("%.2lf ",x);
				break;
			}
		}
		for(;i<n;i++)printf("%.2lf ",*(p+i)); 
		printf("\n");
	}
	return 0;
}

5878

这个比较难,建议查阅资料了解一下行指针和列指针

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 15

void solve(double a[][N],int n,int m)
{
    double (*p)[N]=&a[0];//行指针,指向第0行
	double ans=0;
	int x,y;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(*(*(p+i)+j)>ans)//*(*(p+i)+j)表示第i行j列元素
			{
				ans=*(*(p+i)+j); 
				x=i;y=j;
			}
		}
	}
	printf("%.2lf %d %d\n",ans,x+1,y+1);
}
int main()
{
	double a[N][N];
	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
				scanf("%lf",&a[i][j]);	
		solve(a,n,m);
	}
	return 0;
}

5879

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#define N 105

void solve(char str[],char ans[],int n,int m)
{
	char *p=str;
	char *q=ans;
	for(int i=n-1;i<m;i++)
	{
		*q=*(p+i);
		++q;
	}
}
int main()
{
	int n,m;
	char str[N];
	char ans[N];
	while(scanf(" %s %d %d",str,&n,&m)!=EOF)
	{
		memset(ans,0,sizeof ans);//清空ans
		solve(str,ans,n,m);
		printf("%s\n",ans);
	}
	return 0;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>