【PTA】20 - 分流考试真题(已完结)

目录

一、判断题

二、选择题

三、函数题

6-1 统计个位数字

6-2 求整数数组中的最大值 

★6-3 整理奇偶数增强篇 - 双指针

6-4 统计字符串中数字字符的个数

6-5 求n×n方阵主副对角线元素之和

6-6 十进制转换二进制

6-7 在带头结点的单链表表尾处插入一个新元素 - 数据结构

四、编程题

★7-1 找鞍点

7-2 找出总分最高的学生 - 结构体

7-3 求数列之和[A]


一、判断题

1-1  十进制数 2019 对应的二进制表示为 0111 1100 0011。     ( )

应该是0111 1110 0011

 1-2  从信息的输入输出角度来说,磁盘驱动器和磁带机既可以看作输入设备,又可以看作输出设备                                                                                          ( T ) 

1-3  #include <stdio.h>是一条编译预处理命令 。                 ( T

1-4  宏定义不存在类型问题,宏名无类型,它的参数也无类型。         ( T )

1-5  一个数组是由连续的一块内存单元组成的,指针变量就是这块连续内存单元的首地址。                   ( F )

 1-6  在使用结构指针时,->被称为指向运算符。                ( T )

1-7  C 程序中的注释相当于空白字符。                 ( T )

1-8  如果数据规模为n,冒泡排序的时间复杂度是O(n2)。                 ( T )

void bubbleSort(int a[])
{
    for(int i=0;i<a.length-1;i++) //控制比较轮次,一共 n-1 趟
        for(int j=0;j<a.length-1-i;j++) //控制两个挨着的元素进行比较
            if(a[j] > a[j+1])
            {
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
}

1-9  Non recursive programs are generally faster than equivalent recursive programs. However, recursive programs are in general much simpler and easier to understand. 

( T )

 非递归程序通常比等效的递归程序快。 然而,递归程序通常要简单得多,也更容易理解。 

1-10   In most restaurants, we follow one principle called "First come, first served". This principle can be implemented by a stack.                ( F )

在大多数餐馆,我们都遵循一个叫做“先到先得”的原则。这个原理可以通过堆栈来实现。

错 栈是先进后出

二、选择题

2-1  下列各种进制的数中最小的数是                        ( D

A.二进制数(11010111)B

B.八进制数(332)O

C.十六进制数(8B)H

D.十进制数(130)D

全部转化为10进制

 A  215    B 218  C 139  D 130

2-2  常说一台微机的内存容量为2G,指的是( A

A.2G字节

B.2G比特

C.2G字长

D.2G字

 2-3   ______不是操作系统关心的主要问题.                ( D )

 A.管理计算机裸机

B.设计,提供用户程序与计算机硬件系统的界面

C.管理计算机系统资源

D.高级程序设计语言的编译器  

2-4  内存中每个基本单位,都被赋予一个唯一的序号,称为______         ( A )

A.地址

B.字节

C.字段

D.容量

2-5  数字字符"8"ASCII码的十进制是56,那么数字字符"1"ASCII码的十进制是___D___

A.54

B.58

C.60

D.49

 2-6  以下关于线性表的叙述中正确的是        ( D )

A.每个元素都有一个前趋和后继元素

B.线性表中至少有一个元素

C.线性表中元素的排列次序必须是由小到大或由大到小

D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个前趋和后继元素

2-7  在单链表中,将 s 所指新结点插入到 p 所指结点之后,其语句应该为 ▁▁B▁▁▁

A.p->next = s; s->next = p->next;

B.s->next = p->next; p->next = s;

C.s->next = p->next; p->next = s->next;

D.p->next = s->next; s->next = p->next;

2-8  已知二维数组 A 行优先方式存储,每个元素占用 1 个存储单元。若元素 A[0][0] 的存储地址是 100A[3][3] 的存储地址是 220,则元素 A[5][5] 的存储地址是:        ( B

A.295

B.300

C.301

D.306 

 按行优先  设每行有n个元素 由A[0][0]和A[3][3]的存储地址可知A[3][3]是二维数组A中的第121个元素  则n×3+4=121 (4是0 1 2 3)则n=39  则A[5][5]=5×39+5+100=300 (5是0 1 2 3 4)

2-9  Given the popping sequence of a stack as { 1, 2, 3, 4, 5, 6 }. Among the following, the impossible pushing sequence is:                                ( D )

A.3 2 1 6 5 4

B.6 5 1 2 3 4

C.6 5 4 1 2 3

D.4 6 5 1 3 2

2-10   The following list is a series of operations for a stack:                ( C

  • push 1
  • push 2
  • push 3
  • pop
  • pop
  • push 4
  • push 5
  • pop
  • push 6
  • push 7
  • pop
  • pop
  • pop
  • push 8
  • pop
  • push 9
  • pop
  • pop

Which is the correct pop-up sequence?

A.1 2 3 4 5 6 7 8 9

B.9 8 7 6 5 4 3 2 1

C.3 2 5 7 6 4 8 9 1

D.3 2 5 7 4 6 9 8 1

2-11  队列的“先进先出特性是指( D ) 。

A.最早插入队列中的元素总是最后被删除

B.当同时进行插入、删除操作时,总是插入操作优先

C.每当有删除操作时,总是要先做一次插入操作

D.每次从队列中删除的总是最早插入的元素

2-12   微型计算机采用总线结构连接CPU.内存和外设,总线由三部分组成,它包括__C___

A.控制总线.地址总线和运算总线

B.地址总线.逻辑总线和信号总线

C.数据总线.地址总线和控制总线

D.数据总线.传输总线和通信总线 

2-13   摩尔定律是指___C____。

 A.芯片集成晶体管的能力每年增长一倍,其计算能力也增长一倍

B.芯片集成晶体管的能力每两年增长一倍,其计算能力也增长一倍

C.芯片集成晶体管的能力每18个月增长一倍,其计算能力也增长一倍

D.芯片集成晶体管的能力每6个月增长一倍,其计算能力也增长一倍  

2-14  算法的时间复杂度取决于( A 

A.问题的规模

B.计算环境

C.程序的执行时间

D.计算机cpu

2-15  将十六进制数586转换成16位的二进制数,应该是___C__。

A.0000 0101 1000 0110

B.0110 1000 0101 0000

C.0101 1000 0110 0000

D.0000 0110 1000 0101 

 0101 1000 0110 0000 (每一位8 4 2 1法)

2-16  哪一种语言被称为低级语言?        ( B

A.C++

B.汇编语言

C.Java

D.Python

2-17  第一代电子计算机采用的电子元器件是( B 

A.晶体管

B.电子管

C.集成电路

D.大规模集成电路

1.代采用电子管

2.代采用晶体管

3.代采用中小规模集成电路

4.代采用超大规模集成电路

 2-18   对算法的正确描述是__D__。

A.解决一个问题只有一种算法

B.对于所有问题都能找到实际可行的算法

C.算法包含语句越少,算法越先进

D.解决一个问题可以有多种算法 

2-19   最近我国研制成功的具有自己知识产权的微处理器的名称是( C )。

A.奔芯

B.长城芯

C.龙芯

D.新芯  

2-20  微型计算机的性能主要取决于( )。

A.内存

B.主板

C.中央处理器

D.硬盘

三、函数题

6-1 统计个位数字

本题要求实现一个函数,可统计任一整数中某个位数出现的次数。例如-21252中,2出现了3次,则该函数应该返回3。

函数接口定义:

int Count_Digit ( const int N, const int D );

其中ND都是用户传入的参数。N的值不超过int的范围;D是[0, 9]区间内的个位数。函数须返回ND出现的次数。

裁判测试程序样例:

#include <stdio.h> 

int Count_Digit ( const int N, const int D ); 

int main() 
{ 
    int N, D; 
    scanf("%d %d", &N, &D); 
    printf("%d\n", Count_Digit(N, D)); 
    return 0; 
} 

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

输入样例:

-21252 2

输出样例:

3
int Count_Digit ( const int N, const int D )
{
    int x,cnt=0;
    int n=N; //这里替换是因为 上面是const int 即N是不能改变的量
    if(n<0) n*=-1;  //这里负数要变成正数
    do
    {
        x=n%10;
        if(x==D) cnt++;
        n/=10;
    }while(n);  //这里用do while 是为了包含N=0 D=0的情况
    
    return cnt;
}

6-2 求整数数组中的最大值 

用指针作函数参数,求一维整数数组中的最大元素。

函数接口定义:

int findMax(int *p,int n);

p为指向数组的指针,n 为数组元素个数。函数值为数组元素的最大值。

裁判测试程序样例:

#include <stdio.h>

void ArrayRead(int *p,int n)  //向数组中输入数据
{
    for(int i=0;i<n;i++)
        scanf("%d",&p[i]);
}

/* 你编写的函数放在这里   */

int main()
{
    int n;
    scanf("%d",&n); //输入数组元素个数
    int a[n];       //声明一个具有n个元素的数组a
    ArrayRead(a,n); //给数a组输入数据
    printf("Max = %d\n",findMax(a,n));
    return 0;
}

输入样例:

10
27 58 41 25 28 98 16 65 87 62

输出样例:

Max = 98
int findMax(int *p,int n) //这个指针p指向主函数传来的a数组
{
    int max=p[0];

    for(int i=1;i<n;i++)
        if(max<p[i]) 
            max=p[i];
    
    return max;
}

6-3 整理奇偶数增强篇 - 双指针

本题要求实现一个函数,将数组中的奇数元素排在前半段,偶数排在后半段。

此方法采用从前往后找偶数,再从后往前找奇数的方法,找到后两者交换。

1234765经过函数整理后变成1537462。其中25进行了交换,47进行了交换。

函数接口定义:

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

其中 n 为数据元素个数。

裁判测试程序样例:

#include <stdio.h>
#define N 20

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

int main()
{
    int a[N],i,n;
    scanf("%d",&n);

    for(i=0;i<n;i++)
        scanf("%d",&a[i]);

    oddeven(a,n);

    for(i=0;i<n;i++)
        printf("%d ",a[i]);

    return 0;
}

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

输入样例:

7
1 2 3 4 7 6 5

输出样例:

1 5 3 7 4 6 2
void oddeven(int a[],int n)
{
    int t,l=0,r=n-1;  //l是左指针 r是右指针
    while(l<r)
    {
        while(a[l]%2!=0) l++; //遇到偶数停止
        while(a[r]%2==0) r--; //遇到奇数停止
        if(l<r)
        {
            t=a[l];
            a[l]=a[r];
            a[r]=t;
        }
    }
}

6-4 统计字符串中数字字符的个数

编写函数,统计字符串中数字字符的个数。字符串的长度不超过1000。函数的接口定义如下:

函数接口定义:

int DigitalStatistics(char *p);

p是指向字符串的指针。函数的返回值是统计结果。

裁判测试程序样例:

#include <stdio.h>
#include <string.h>  

/* 你编写的函数放在这里 */  

int main()
{
    char str[10001];
    gets(str);
    printf("Digital = %d\n",DigitalStatistics(str));
    return 0;
}


输入样例:

123tygxui70xA

输出样例:

Digital = 5
int DigitalStatistics(char *p)
{
    int digital=0;
    for(int i=0;p[i]!='\0';i++)
    {
        if(p[i]>='0'&&p[i]<='9')
            digital++;
    }
    return digital;
}

6-5 求n×n方阵主副对角线元素之和

给定一个n×n的方阵(1⩽n⩽10),本题要求计算该方阵主对角线和副对角线所有元素之和。主对角线为从方阵的左上角至右下角的连线,副对角线为从方阵的右上到左下角的连线。

要求:

编写函数按照题意计算元素之和。

函数接口定义:

int sumMatrix(int (*a)[N],int n);  

指针a指向了一个10×10的方阵,n为a指向的矩阵的阶数

裁判测试程序样例:

#include<stdio.h>
#define N 10
void createMatrix(int (*a)[N],int n)
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
}

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

int main()
{
    int a[N][N];
    createMatrix(a);
    printf("%d\n",sumMatrix(a));
    return 0;
}

输入格式:

在第一行给出方阵的阶数n,随后给出n行数,每行n个数,表示方阵中的元素。

输出格式:

输出求和结果

输入样例:

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

输出样例:

110
int sumMatrix(int (*a)[N],int n)
{
    int sum=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            if(i==j||i+j==n-1)
                sum+=a[i][j];
        }
    return sum;
}

6-6 十进制转换二进制

本题要求实现一个函数,将非负整数n转换为二进制后输出。

函数接口定义:

void dectobin( int n );

裁判测试程序样例:

#include <stdio.h>

void dectobin( int n );

int main()
{
    int n;
    
    scanf("%d", &n);
    dectobin(n);
    
    return 0;
}

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

输入样例:

10

输出样例:

1010
void dectobin( int n )
{
    int sum=0,t=1;
    while(n)
    {
        sum+=n%2*t;
        t*=10;
        n/=2;
    }
    printf("%d",sum);
}

6-7 在带头结点的单链表表尾处插入一个新元素 - 数据结构

本题要求实现一个函数,在带头结点的单链表表尾处插入一个新元素e。

函数接口定义:

void insert ( LinkList L,ElemType e);

L是单链表的头指针,e是插入的数据元素。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>

typedef int ElemType;

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

LinkList Create();
void print(LinkList L);
void insert ( LinkList L,ElemType e);

int main()
{
        int e;
        LinkList L = Create();
        print(L);
        printf("\n");
        scanf("%d",&e);
        insert(L,e);
        print(L);
        return 0;
}

LinkList Create()
{
    LinkList L,p,s;
    ElemType e;
    L = (LinkList)malloc(sizeof(LNode));
    p=L;
    scanf("%d",&e);
    while(e!=-1)
    {
        s = (LinkList)malloc(sizeof(LNode));
        s->data=e;
        p->next = s;
        p=s;
        scanf("%d",&e);
    }
    p->next=NULL;
    return L;
}

void print(LinkList L)
{
    LinkList p;
    p=L->next;
    while (p)
    {
        printf("%d ", p->data);
        p =p->next;
    }
}

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

输入样例:

1 2 3 4 5 6 -1 100

输出样例:

1 2 3 4 5 6
1 2 3 4 5 6 100
void insert ( LinkList L,ElemType e)
{
      LinkList p,q;
      q = (LinkList)malloc(sizeof(LNode));
      q->data = e;
      q->next = NULL;
      p = L;
      while(p ->next!= NULL)
          p = p->next;
      p->next = q;
}

四、编程题

★7-1 找鞍点

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:

输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

输出样例1:

2 1

输入样例2:

2
1 7
4 1

输出样例2:

NONE
#include <stdio.h>
int main()
{
    int i,j,k,n,a[100][100];
    scanf("%d",&n);
    for(i=0;i<n;i++)
       for(j=0;j<n;j++)
         scanf("%d",&a[i][j]);
     
    for(i=0;i<n;i++)
      for(j=0;j<n;j++)
      {   
          int max=a[i][j],min=a[i][j];
          for(k=0;k<n;k++)
          {
              if(max<a[i][k]) max=a[i][k];
              if(min>a[k][j]) min=a[k][j];
          }
          
          if(max==a[i][j]&&min==a[i][j])
          {
              printf("%d %d",i,j);
              return 0;
          }
      }
    printf("NONE");
}

7-2 找出总分最高的学生 - 结构体

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。

输入格式:

输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。

输出格式:

在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。

输入样例:

5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75

输出样例:

zhangfeng 10001 258
#include <stdio.h>

struct student
{
    char sn[10];
    char name[20];
    int s1,s2,s3;
    int sum;
};

int main()
{
    struct student stu[100];
    int N,i;
    scanf("%d",&N);
    
    for(i=0;i<N;i++)
    {
        stu[i].sum=0;
        scanf("%s %s %d %d %d",&stu[i].sn,&stu[i].name,&stu[i].s1,&stu[i].s2,&stu[i].s3);
        stu[i].sum = stu[i].s1+stu[i].s2+stu[i].s3;
    }
    
    int max=stu[0].sum;
    int k=0;
    
    for(i=1;i<N;i++)
    {
        if(max<stu[i].sum)
        {   
            max=stu[i].sum;
            k=i;
        }
    }
    printf("%s %s %d",stu[k].name,stu[k].sn,stu[k].sum);
}

7-3 求数列之和[A]

给定一个数字A (1⩽A⩽9)以及一个非负整数N (0⩽N⩽15),编程计算sum=A+AA+AAA+⋯+AA⋯A(N个A), 例如当A=2,N=3时,S=2+22+222=246。

输入格式:

在一行内输入数字A与非负整数N。数与数之间用空格间隔。

输出格式:

按照S = xxx的格式输出其N项之和S的值。

输入样例:

2  3

输出样例:

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

S = 246
#include <stdio.h>
#include <math.h>

int main()
{
    int N,A;
    double sum=0,S=0;
    scanf("%d %d",&A,&N);
    
    for(int i=0;i<N;i++)
    {
        sum+=A*pow(10,i);
        S+=sum;
    }
    printf("S = %.0f",S);
    
}

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值