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

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

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


6-1 鸡兔同笼问题

《孙子算经》记载:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”

函数原型

int ChickenRabbit(int *chicken, int *rabbit, int head, int foot);

说明:head 和 foot 为头和脚的数量,chicken 和 rabbit 为指示鸡和兔数量的指针。若问题有解,则将鸡和兔的数量保存到 chicken 和 rabbit 所指示的变量中,函数值为 1(真);否则不改变 chicken 和 rabbit 所指示的变量,函数值为 0(假)。

裁判程序

#include <stdio.h>
int ChickenRabbit(int *chicken, int *rabbit, int head, int foot);
int main()
{
    int h, f, c, r;
    scanf("%d%d", &h, &f);
    if (ChickenRabbit(&c, &r, h, f))
    {
        printf("%d %d\n", c, r);
    }
    else
    {
        puts("None");
    }
    return 0;
}
/* 你的提交代码将被嵌在这里 */

输入样例1

35 94

输出样例1

23 12

输入样例2

30 71

输出样例2

None

int ChickenRabbit(int *chicken, int *rabbit, int head, int foot)
{
  for(int i=0;i<=head;i++)
  {
    int j=head-i;
    if(i*2+j*4==foot)
    {
      *chicken=i;
      *rabbit=j;
      return 1;
    }
  }
  return 0;
}//简单判断即可

6-2 冒泡排序

输入n(1<=n<=10)个整数,将它们从小到大排序后输出,要求编写函数bubble()实现冒泡排序算法。

函数接口定义:

void bubble (int a[ ], int n);

其中 a为数组,n为数据个数。

裁判测试程序样例:

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

输入样例:

8

7 3 66 3 -5 22 -77 2

输出样例:

-77 -5 2 3 3 7 22 66

void bubble (int a[ ], int n)
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-i-1;j++)
        {
            if(a[j]>a[j+1])
            {
                int t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
            }
        }
    }
}

6-3 字符串反正序连接

先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。

函数接口定义:

void fun (char *s, char *t);

其中s和 t 都是用户传入的参数。函数先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。

裁判测试程序样例:

#include <stdio.h>
void fun (char *s, char *t);
int main()
{ char s[100], t[100];
scanf("%s", s);
fun(s, t);
printf("%s\n", t);
return 0;
}
/* 请在这里填写答案 */

输入样例:

abcd

输出样例:

dcbaabcd

void fun (char *s, char *t)
{
    int j=0;
    //计算长度
    int l=0;
    while(s[l]!='\0')
    l++;
    for(int i=l-1;i>=0;i--)
    {
        t[j]=s[i];
        j++;
    }
    int p=j;
    for(int i=0;i<l;i++)
    {
        t[p]=s[i];
        p++;
    }
    t[p]='\0';
}

6-4 计算最长的字符串长度

本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。

函数接口定义:

int max_len( char *s[], int n );

其中n个字符串存储在s[]中,函数max_len应返回其中最长字符串的长度。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 10
#define MAXS 20
int max_len( char *s[], int n );
int main()
{
    int i, n;
    char *string[MAXN] = {NULL};
    scanf("%d", &n);
    for(i = 0; i < n; i++) {
        string[i] = (char *)malloc(sizeof(char)*MAXS);
        scanf("%s", string[i]);
    }
    printf("%d\n", max_len(string, n));
    return 0;
}
/* 你的代码将被嵌在这里 */

输入样例:

4

blue

yellow

red

green

输出样例:

6

6-5 查找星期

本题要求实现函数,可以根据下表查找到星期,返回对应的序号。

序号 星期

0 Sunday

1 Monday

2 Tuesday

3 Wednesday

4 Thursday

5 Friday

6 Saturday

函数接口定义:

int getindex( char *s );

函数getindex应返回字符串s序号。如果传入的参数s不是一个代表星期的字符串,则返回-1。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>
#define MAXS 80
int getindex( char *s );
int main()
{
    int n;
    char s[MAXS];
    scanf("%s", s);
    n = getindex(s);
    if ( n==-1 ) printf("wrong input!\n");
    else printf("%d\n", n);
    return 0;
}
/* 你的代码将被嵌在这里 */

输入样例1:

Tuesday

输出样例1:

2

输入样例2:

today

输出样例2:

wrong input!

int getindex( char *s )
{
    if(strcmp(s,"Sunday")==0)
        return 0;
    if(strcmp(s,"Monday")==0)
        return 1;
    if(strcmp(s,"Tuesday")==0)
        return 2;
    if(strcmp(s,"Wednesday")==0)
        return 3;    
    if(strcmp(s,"Thursday")==0)
        return 4;    
    if(strcmp(s,"Friday")==0)
        return 5;    
    if(strcmp(s,"Saturday")==0)
        return 6;
    return -1;
}

7-1 C程序设计 实验5-7 数组指针作函数参数

数组指针作函数参数

输入m个学生(最多30人)n门课程(最多5门)的成绩,然后计算并打印每个学生各门课的总分和平均分。其中,m和n的值由用户从键盘输入。

输入格式:

输入顺序如下:

学生个数m 课程数n
学生1课程1分数 学生1课程2分数 ... 学生1课程n分数
学生2课程1分数 学生2课程2分数 ... 学生2课程n分数
...
学生m课程1分数 学生m课程2分数 ... 学生m课程n分数

输出格式:

每个学生总分(整数) 平均分(实数,保留1位小数)

输入样例:

在这里给出一组输入。例如:

2 3

61 62 70

75 82 90

输出样例:

在这里给出相应的输出。例如:

193 64.3

247 82.3

#include <stdio.h>
int main()
{
  int m,n;scanf("%d%d",&m,&n);int a[n];
  for(int i=0;i<m;i++)
  {
    double sum=0;
    double aver;
    for(int j=0;j<n;j++)
    {
      scanf("%d",&a[j]);
      sum+=a[j];
    }
    aver=sum/n;
    printf("%.0f %.1f\n",sum,aver);
  }
}

7-2 查找奥运五环色的位置

奥运五环的5种颜色的英文单词按一定顺序排列{“red”, “blue”, “yellow”, “green”, “black” },定义指针数组并初始化,输入任意一个颜色的英文单词,从已有颜色中查找并输出该颜色的位置值,若没有找到,则输出"Not Found"。

输入格式:

输入一个代表颜色的单词。

输出格式:

输出单词对应的位置值,如果未找到,输出Not Found。

输入样例:

yellow

输出样例:

3

#include <stdio.h>
#include <string.h>
int main()
{
  char* colors[]={"red","blue","yellow","green","black"};
  char color[100];
  int flag=-1;
  scanf("%s",color);
  for(int i=0;i<5;i++)
  {
    if(strcmp(color,colors[i])==0)
    {
      flag=i;
      break;
    }
  }
  if(flag!=-1)
  printf("%d",flag+1);
  else
  printf("Not Found");
}
目录
相关文章
|
2月前
C进阶:指针的练习(1)
C进阶:指针的练习(1)
|
9月前
|
C++
关于指针,你不可以错过的练习(c/c++)
关于指针,你不可以错过的练习(c/c++)
49 0
|
2月前
|
C语言
C语言指针——练习
C语言指针——练习
|
6天前
|
C++
指针习题练习
指针习题练习
7 0
|
2月前
指针应用基础练习
指针应用基础练习
20 0
|
2月前
|
存储 人工智能
指针的应用练习(数组与指针的关系)
指针的应用练习(数组与指针的关系)
25 0
|
11月前
|
C语言 C++
【C语言进阶】 指针强化练习(二)
【C语言进阶】 指针强化练习(二)
40 0
|
2月前
【C/PTA】指针专项练习(一)
【C/PTA】指针专项练习(一)
61 0