PTA2023作业练习函数题(11-24)
PTA2023作业练习函数题(11-24)

PTA2023作业练习函数题(11-24)

6-11-02 求二维数组中的最大值

分数 10

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题要求实现一个函数,可计算二维数组中的最大值。

函数接口定义:

int  fun(int a[][N]);

其中 a 是用户传入的参数。函数须返回数组a中的最大值。

裁判测试程序样例:


#include <stdio.h>
#define M 3
#define N 4
int  fun(int a[][N]);

int main()
{
    int x[M][N],i,j,max;
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            scanf("%d",&x[i][j]);
    max=fun(x);
    printf("max=%d",max);
    return 0;
}
/* 请在这里填写答案 */

输入样例:

1 2 3 4 5 6 7 8 9 10 11 12

输出样例:

max=12
int  fun(int a[][N])
{
    int max=0,m=0,n=0;
    for (;m<M;m++)
    {
        for (;n<N;n++)
        {
            if (a[m][n]>max)
                max=a[m][n];
        }
        n=0;
    }
    return max;
}

6-12-02 统计每列最小元素

分数 15

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

找出二维数组每列中最小元素,并依次放入b所指一维数组中

函数接口定义:

void small(int a[][N],int b[]);

其中 b中存储 a 数组中的每列最小值。

裁判测试程序样例:

#include <stdio.h>
#define M 3
#define N 4

void small(int a[][N],int b[]);

int main()
{
    int i,j,x[M][N],y[N];
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            scanf("%d",&x[i][j]);
    small(x,y);
    for(i=0;i<N;i++)
        printf("%d ",y[i]);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

1 2 3 4
5 6 1 9
9 5 2 3

输出样例:

1 2 1 3 
void small(int a[][N],int b[])
{
    int i=0,min=0,j=0,l=0;
    for (;i<N;i++)
    {
        min=a[0][i];
        for (j=0;j<M;j++)
        {
            if (a[j][i]<min)
                min=a[j][i];
        }
        b[l]=min;
        l++;
    }
}

6-13 判回文

分数 10

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题要求实现一个函数,判断字符串是否是回文。如果是则返回1,否则返回0。

函数接口定义:

int isecho(char a[]);

返回值为1,表示是回文;返回值为0,表示不是回文。

裁判测试程序样例:

#include <stdio.h>
#define N 100

int isecho(char a[]);

int main()
{
    char a[N];
    int k;
    scanf("%s",a);
    k=isecho(a);
    if(k)
        printf("%s yes",a);
    else
        printf("%s no",a);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

1234321

输出样例:

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

1234321 yes
int isecho(char a[])
{
    int i,n;
    for (n=0;;)
    {
        if (a[n]!='\0')
            n++;
        else break;
    }
    for (i=0;i<n/2;i++)
    {
        if (a[i]!=a[n-1-i])
            break;
    }
    if (i==n/2) 
        return 1;
    else return 0;
}

6-14 二维数组变一维数组

分数 10

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

将一M行N列的二维字符数组按列优先顺序存储到一个字符串中。例如,若二维数组中数据为:
W W W W
S S S S
H H H H
则字符串中内容应是WSHWSHWSHWSH。

函数接口定义:

void  move(char a[][N],char b[]);

裁判测试程序样例:

#include <stdio.h>
#define M 3
#define N 4

void  move(char a[][N],char b[]);


int main()
{
    int i,j;
    char x[M][N],y[M*N+1];
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            scanf("%c",&x[i][j]);
    move(x,y);
    printf("%s",y);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

WWWWSSSSHHHH

输出样例:

WSHWSHWSHWSH
void  move(char a[][N],char b[])
{
    int m,n,i=0;
    for (n=0;n<N;n++)
        for (m=0;m<M;m++)
        {
            b[i]=a[m][n];
            i++;
        }
}

6-15 简单表达式求值

分数 15

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题要求实现两个整数的运算,运算符仅有四种:+、-、* 、/ ,但是以字符串的形式输入表达式。注意这里的除数结果是整数,即5/4=1。

函数接口定义:

int cal( char *a );

其中 a是用户传入的参数,此处为表达式,表达式。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>

int cal( char *s );

int main()
{

    char a[100];
    int res;
    scanf("%s",a);
    
    res=cal(a);
    
    printf("%d",res);

    return 0;

}

/* 请在这里填写答案 */

输入样例:

123+12=

输出样例:

135
int cal( char *a )
{
    int n,i=0,j=0,p;           // P是运算符
    for (n=0;a[n]>='0'&&a[n]<='9';n++)
        i=i*10+a[n]-48;
    p=n;
    for (n=n+1;a[n]>='0'&&a[n]<='9';n++)
        j=j*10+a[n]-48;
    if (a[p]=='+')
        return i+j;
    if (a[p]=='-')
        return i-j;
    if (a[p]=='*')
        return i*j;
    if (a[p]=='/')
        return i/j;
}

6-16 字符串移位

分数 15

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题要求实现一个函数,字符串由字符和 * 号组成,要求除头部与尾部的 * 号外,删除字符串中其他 * 号。如 * * * ab * CDd * * * ef * * ,则函数执行结果为* * * abCDdef * * 。

函数接口定义:

void move(char a[]);

裁判测试程序样例:

#include <stdio.h>
#define N 100

void move(char a[]);

int main()
{
    char a[N];
    scanf("%s",a);
    move(a);
    printf("%s",a);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

***ab*CDd***ef** 

输出样例:

***abCDdef**
void move(char a[])
{
    int i,j=0,m;
    char b[100];
    for (i=0;a[i]!='\0';i++)
    {
        if (a[i]=='*')
        {
            b[j]=a[i];
            j++;
        }
        else break;
    }
    for (;a[i]!='\0';i++)
    {
       if (a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z')
       {
           b[j]=a[i];
           j++;
           m=i;
       }
    }
    for (m=m+1;a[m]!='\0';m++)
    {
        if (a[m]=='*')
        {
            b[j]=a[m];
            j++;
        }
        else break;
    }
    for (i=0;i<j;i++)
        a[i]=b[i];
    a[i]='\0';
}

6-17 字符串删除

分数 10

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题要求实现一个函数,删除字符串ASCII值为奇数的字符。

函数接口定义:

void del(char a[]);

裁判测试程序样例:

#include <stdio.h>
#define N 100

void del(char a[]);

int main()
{
    char a[N];
    scanf("%s",a);
    del(a);
    printf("%s",a);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

abcdefg

输出样例:

bdf
void del(char a[])
{
    int i,n,b[N],j;
    n=sizeof(a);
    for (i=0,j=0;i<n;i++)
    {
        if (a[i]%2==0)
        {
            b[j]=a[i];
            j++;
        }
    }
    
    for (i=0;i<j;i++)
    {
        a[i]=b[i];
    }
    a[j]='\0';
}

6-18 统计单词个数

分数 15

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题要求实现一个函数,可统计字符串有几个单词。注意这里的单词不依赖于任何语言,单词的认定以空格分隔开的即为单词,而且单词间的空格可以有多个。
例如x^2 = 6,则该函数应该返回3,分别对应x^2,= 和6三个单词。

函数接口定义:

int total(char s[]);

函数返回单词个数。

裁判测试程序样例:

#include <stdio.h>
#define N 100

int total(char s[]);

int main()
{
    char a[N];
    int k;
    gets(a);
    k=total(a);
    printf("%d",k);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

i am a student

输出样例:

4
int total (char s[])
{
    int k,i,j,x=0;
    k=strlen(s);
    for (i=0,j=1;i<k;i++)
    {
        if(x==0)
        {
            if(s[i]==' ')
            {
                while(s[i]==' ')
                {
                    i++;
                }
            }
            x++;
        }
        for(;i<k;i++)
        {
            if(s[i]==' ')
            {
                while(s[i]==' ')
                {
                    i++;
                }
                j++;
            }
        }
    }
    if(s[i-2]==' ') j--;
    return j;
}

6-19 求结构体平均成绩

分数 10

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题要求实现一个函数,可统计结构体中成绩项的平均成绩。

结构体由两项组成:学号和成绩。

函数接口定义:

double avg(RECORD x[],int n);

其中 n 是结构体数组的元素个数。

裁判测试程序样例:

#include <stdio.h>
#define N 20
typedef struct
{
    char no[10];
    double score;
}RECORD;

double avg(RECORD x[],int n);

int main()
{
    RECORD a[N];
    int n,i;
    double av;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%s%lf",a[i].no,&a[i].score);
    av=avg(a,n);
    printf("%f",av);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

5
1001 1
1002 2
1003 3
1004 4
1005 5

输出样例:

3.000000
double avg(RECORD x[],int n)
{
    double sum=0;
    int i;
    for (i=0;i<n;i++)
        sum+=x[i].score;
    sum/=n;
    return sum;
}

6-20 阶乘计算升级版

分数 20

全屏浏览题目

切换布局

作者 陈越

单位 浙江大学

本题要求实现一个打印非负整数阶乘的函数。

函数接口定义:

void Print_Factorial ( const int N );

其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

裁判测试程序样例:

#include <stdio.h>

void Print_Factorial ( const int N );

int main()
{
    int N;
    
    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

15

输出样例:

1307674368000
int a[100];

void Print_Factorial ( const int N )
{
    long long int sum;
    int i,j=0;
    if (N<0)
        printf ("Invalid input");
    if (N==0)
        printf ("1");
    if (N>0)
	{
		int a[3000]={0};
        a[0]=1;
        int i,j,k;
        int m,n;
        for (i=2;i<=N;i++)
        {
            n=0;
            for (j=0;j<3000;j++)
            {
                m=a[j]*i+n;
                a[j]=m%10;
                n=m/10;
            }
        }
        for (i=2999;i>=0;i--)
            if (a[i]!=0)
                break;
        for (j=i;j>=0;j--)
            printf ("%d",a[j]);
	}
}

6-21 长整数转化成16进制字符串

分数 15

全屏浏览题目

切换布局

作者 张泳

单位 浙大城市学院

本题要求实现一个将长整数转化成16进制字符串的简单函数。

函数接口定义:

void f( long int x, char *p );

其中x是待转化的十进制长整数,p指向某个字符数组的首元素。函数f的功能是把转换所得的16进制字符串写入p所指向的数组。16进制的A~F为大写字母。

裁判测试程序样例:

#include <stdio.h>
#define MAXN 10

void f( long int x, char *p );

int main()
{
    long int x;
    char s[MAXN] = "";
    
    scanf("%ld", &x);
    f(x, s);
    printf("%s\n", s);
    
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

123456789

输出样例1:

75BCD15

输入样例2:

-125

输出样例2:

-7D
void f( long int x, char *p )
{
    int a,b=0,i=0;
    char q[MAXN];
    if (x<0)
    {
        p[b]='-';
        b++;
		x=-1*x;
    }
    //if (x==0)
      //  p[b]='0';
    while (x>0)
    {
        a=x%16;
        switch (a)
        {
        	case 0: q[i]='0';break;
        	case 1: q[i]='1';break;
        	case 2: q[i]='2';break;
        	case 3: q[i]='3';break;
        	case 4: q[i]='4';break;
        	case 5: q[i]='5';break;
        	case 6: q[i]='6';break;
        	case 7: q[i]='7';break;
        	case 8: q[i]='8';break;
        	case 9: q[i]='9';break;
        	case 10: q[i]='A';break;
        	case 11: q[i]='B';break;
        	case 12: q[i]='C';break;
        	case 13: q[i]='D';break;
        	case 14: q[i]='E';break;
        	case 15: q[i]='F';break;
		}
        i++;
        x/=16;
    }
    if (strlen(q)==0)
        p[b]='0';
    else for (;i>=0;b++)
        {
        	p[b]=q[i-1];
        	i--;
		}
}

6-22 顺序表的插入

分数 15

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题实现在有序顺序表中插入一个元素仍然保持其有序状态。

函数接口定义:

void insert(int a[],int *n,int x);

其中 a 是有序顺序表, *n 是数组中元素的个数。 x 是待插入的元素,将x插入后保持顺序表中的元素仍然有序。

裁判测试程序样例:

#include <stdio.h>
#define N 10

void insert(int a[],int *n,int x);

int main()
{
    int a[N],n,i,x;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&x);
    insert(a,&n,x);
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

5
1 2 3 4 6 
8

输出样例:

1 2 3 4 6 8 
void insert(int a[],int *n,int x)
{
    int i;
    i=*n;
	for (;i>0;i--)
    {
    	a[i]=a[i-1];
    	if (x>a[i-1])
    		{
    			a[i]=x;
    			break;
			}
	}
    if (x<a[0])  a[0]=x;
	*n=*n+1;
}

6-23 顺序表的删除

分数 15

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题实现在顺序表中删除一个元素。

函数接口定义:

int del(int a[],int *n,int x);

其中 a 是顺序表, *n 是数组中元素的个数。 x 是待删除的元素。返回值为1时表示删除成功,0表示表中无x元素

裁判测试程序样例:

#include <stdio.h>
#define N 10

int del(int a[],int *n,int x);

int main()
{
    int a[N],n,i,x,flag;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&x);
    flag=del(a,&n,x);
    if(flag)
    {
        for(i=0;i<n;i++)
            printf("%d ",a[i]);
    }
    else
        printf("no %d",x);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

5
3 1 8 5 6
8

输出样例:

3 1 5 6 
int del(int a[],int *n,int x)
{
    int i;
    for (i=0;i<*n;i++)
    {
        if (a[i]==x)
        {
            for (;i<*n-1;i++)
                a[i]=a[i+1];
            *n=*n-1;
            return 1;
        }
    }
    return 0;
}

6-24 构造有序顺序表

分数 15

全屏浏览题目

切换布局

作者 唐艳琴

单位 中国人民解放军陆军工程大学

本题实现构造有序顺序表。从键盘输入n(不超过10)个元素并输出表中元素。

函数接口定义:

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

其中 a 是顺序表, n 需构造的元素个数(无序数据)。process函数将此n个无序数据有序存放在数组a中。

裁判测试程序样例:

#include <stdio.h>
#define N 10

void process(int a[],int n);    //数据在此处输入

int main()
{
    int a[N],n,i;
    scanf("%d",&n);
    process(a,n);
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

5
4 1 2 5 3

输出样例:

1 2 3 4 5 
void process(int a[],int n)
{
    int i,j;
    
    for (i=0;i<n;i++)
        scanf ("%d ",&a[i]);
    for (i=0;i<n;)
    {
        for (j=0;j<n-1;j++)
        {
            if (a[j]>a[j+1])
                change (&a[j],&a[j+1]);
        }
        n--;
    }
}
int change (int *x,int *y)
{
    int i;
    i=*x;
    *x=*y;
    *y=i;
	return 0;
}

PTA2023作业练习函数题(1-10)

一条评论

  1. Pingback:PTA2023作业练习函数题(1-10) – 热眶

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注