【C/PTA】指针专项练习(一)

简介: 【C/PTA】指针专项练习(一)

本文结合PTA专项练习带领读者掌握指针,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。


6-1 删除字符串中数字字符

删除一个字符串中的所有数字字符。

函数接口定义:

void delnum(char *s);

其中 s 是用户传入的参数。 函数的功能是删除指针 s 所指的字符串中的所有数字字符。

裁判测试程序样例:

#include "stdio.h"
void delnum(char *s);
int main ()
{ char item[80];
gets(item);
 delnum(item);
 printf("%s\n",item);
 return 0;
}
/* 请在这里填写答案 */

输入样例:

a0bc+d496df

输出样例:

abc+ddf

void delnum(char *s)
{
    int i=0,j=0;
    while(s[i]!='\0')
    {//删除难以处理,那就转换思路,筛选不为数字的字符
        if(s[i]<'0'||s[i]>'9')
        {
            s[j]=s[i];
            j++;
        }
            i++;
    }
    s[j]='\0';
}

6-2 找最大值及其下标

在一维整型数组中找出其中最大的数及其下标。

函数接口定义:

int fun(int *a,int *b,int n);

其中形参a 、b、n 都是用户传入的参数。函数fun的功能是在指针a所指向的一维数组中找出其中最大的数及其下标,下标存到指针b所指的变量里,函数返回最大值。

裁判测试程序样例:

#include<stdio.h>
#define N 10
int fun(int *a,int *b,int n);
int main()
{ int a[N],i,max,p=0;
for(i=0;i<N;i++) scanf("%d",&a[i]);
 max=fun(a,&p,N);
 printf("max=%d,position=%d\n",max,p);
 return 0;
}
/* 请在这里填写答案 */

输入样例:

2 1 5 4 8 4 5 8 9 1

输出样例:

max=9,position=8

int fun(int *a,int *b,int n)
{
  int max1=a[0];
  for(int i=0;i<n;i++)
  {
    if(max1<a[i])
    {
      max1=a[i];
      *b=i;
    }
  }
  return max1;
}

6-3 求两数平方根之和

函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。

函数接口定义:

double fun (double *a, double *b);

其中 a 和 b 是用户传入的参数。函数求 a 指针和 b 指针所指的两个数的平方根之和,并返回和。

裁判测试程序样例:

#include<stdio.h>
#include <math.h> 
double fun (double *a, double *b); 
int main ( )
{ double a, b, y;
scanf ("%lf%lf", &a, &b );
 y=fun(&a, &b); printf ("y=%.2f\n", y );
return 0;
}
/* 请在这里填写答案 */

输入样例:

12 20

输出样例:

y=7.94

double fun (double *a, double *b)
{
  double t1=sqrt(*a);
  double t2=sqrt(*b);
  return t1+t2;
}

6-4 求一组数中的最大值、最小值和平均值

编写函数,求一组数中的最大值、最小值和平均值。

函数接口定义:

float fun(int a[],int n,int *max,int *min);

其中 a、n、max 和 min 都是用户传入的参数。函数求a数组中n个元素的最大值、最小值和平均值。最大值和最小值分别通过max 和 min带回,函数返回平均值 。

裁判测试程序样例:

#include <stdio.h>
float fun(int a[],int n,int *max,int *min);
int main()
{
int x[10],i,m,n;
float p;
for(i=0;i<10;i++)
  scanf("%d",&x[i]);
p=fun(x,10,&m,&n);
printf("max=%d,min=%d,average=%.2f\n",m,n,p);
return 0;
}
/* 请在这里填写答案 */

输入样例:

2 5 4 8 6 9 1 3 7 0

输出样例:

max=9,min=0,average=4.50

float fun(int a[],int n,int *max,int *min)
{
  *max=*min=a[0];float sum=0;
  for(int i=0;i<n;i++)
  {
    if(*max<a[i])
    {
      *max=a[i];
    }
    if(*min>a[i])
    {
      *min=a[i];
    }
    sum+=a[i];
  }
  return sum/n;
}

6-5 两个4位正整数的后两位互换

将输入的任意两个4位正整数的后两位互换,例如输入1234和5678,交换之后输出1278和5634。

函数接口定义:

void fun(int *p,int *q);

其中p和 q 是用户传入的参数。函数将指针p所指整数与指针q所指的整数的后两位互换。

裁判测试程序样例:

void fun(int *p,int *q);
 int main()
 {int a,b;
  scanf("%d%d",&a,&b);
  fun(&a,&b);
  printf("%5d%5d\n",a,b);
  return 0;
 }
/* 请在这里填写答案 */

输入样例:

1234 5678

输出样例:

1278 5634

void fun(int *p,int *q)
{
  int a1=*p/100*100;
  int b1=*q/100*100;
  int a2=*p%100;
  int b2=*q%100;
  *p=a1+b2;
  *q=b1+a2;
}

6-6 判断回文字符串

本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。

函数接口定义:

bool palindrome( char *s );

函数palindrome判断输入字符串char *s是否为回文。若是则返回true,否则返回false。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>
#define MAXN 20
typedef enum {false, true} bool;
bool palindrome( char *s );
int main()
{
    char s[MAXN];
    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);
    return 0;
}
/* 你的代码将被嵌在这里 */

输入样例1:

thisistrueurtsisiht

输出样例1:

Yes

thisistrueurtsisiht

输入样例2:

thisisnottrue

输出样例2:

No

thisisnottrue

bool palindrome( char *s )
{
  int right=strlen(s)-1;//因为存在'\\0' 所以减一
  for(int left=0;left<=right;left++)
  {
    if(s[left]!=s[right])
    {
      return false;
    }
    right--;
  }
  return true;
}

7-1 求矩阵每行元素的和

本题要求编写程序,使用指针方式求一个给定的m×n矩阵各行元素之和。

输入格式:

输入第一行给出两个正整数m和n(1≤m,n≤6),再输入m行数据,每行n个整数,每个整数之间用空格分隔。

输出格式:

输出m个整数,每行1个数。

输入样例:

2 3

1 2 3

4 5 6

输出样例:

6

15

#include <stdio.h>
int main()
{
  int m,n;scanf("%d%d",&m,&n);int a[m][n];
  for(int i=0;i<m;i++)
  for(int j=0;j<n;j++)
  scanf("%d",&a[i][j]);
  int b[m]={0};
  for(int i=0;i<m;i++)
  {
    for(int j=0;j<n;j++)
    {
      b[i]+=a[i][j];
    }
    printf("%d\n",b[i]);
  }
}
目录
相关文章
|
7月前
C进阶:指针的练习(1)
C进阶:指针的练习(1)
|
C++
关于指针,你不可以错过的练习(c/c++)
关于指针,你不可以错过的练习(c/c++)
62 0
|
7月前
|
C语言
C语言指针——练习
C语言指针——练习
|
6月前
|
C++
指针习题练习
指针习题练习
26 0
|
7月前
指针应用基础练习
指针应用基础练习
42 0
|
7月前
|
存储 人工智能
指针的应用练习(数组与指针的关系)
指针的应用练习(数组与指针的关系)
46 0
|
C语言 C++
【C语言进阶】 指针强化练习(二)
【C语言进阶】 指针强化练习(二)
65 0
|
7月前
|
存储 搜索推荐
【C/PTA】指针专项练习(二)
【C/PTA】指针专项练习(二)
157 0