0
点赞
收藏
分享

微信扫一扫

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


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

文章目录

  • ​​NEFU锐格实验三[指针与数组]​​
  • ​​扯犊子​​
  • ​​知识点​​
  • ​​题目​​
  • ​​5872​​
  • ​​5875​​
  • ​​5873​​
  • ​​5876​​
  • ​​5877​​
  • ​​5878​​
  • ​​5879​​

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


举报

相关推荐

0 条评论