2021寒假收假考核

第一部分 C语言和Python

1.请写出下面程序的输出结果。

#include <stdio.h>
int main(void) {
printf("%d\n", printf("Hello World!\n"));
return 0;
}

结果

Hello World! 13

考察
1.printf的是输出的长度!-》
补充
1.scanf的返回值是正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。
-》

2.请写出下面程序的输出结果。

#include <stdio.h>
int main(void) {
int nums[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
printf("%d\n", nums[1][-2]);
printf("%d\n", nums[-1][5]);
printf("%d\n", -nums[1][5]);
return 0;
}

结果

2 3 -9

考察

数组 + 指针

a[i]可表示二维数组中一维数组的首元素
a[i][j]可表示指定首元素向后移动j个位置

3.

CSV的中文全称为______________。CSV文件______(填写“是”或“不是”)纯
文本文件。
结果

逗号分隔符(字符分隔符)
注:英文全称为Comma-Separated Values。
是

考察
csv基本概念

4.

csv.reader()中参数delimiter的作用是____________________________。
结果

分隔符,默认为英文逗号。

5.

使用pd.read_csv()读取CSV文件,返回值类型为______________。
结果

数据框(或 DataFrame) 

6.

构建一个学生类,包含学生的姓名,年龄,三科的成绩(高数,线代,离散),总
分,该类同时含有输出学生按某科成绩的排序的方法。
下面给出一组示例,斜体字为从键盘输入的内容:
请输入学生数量:3
请输入姓名:Tom
请输入年龄:18
请输入高数成绩:95
请输入线代成绩:93
请输入离散成绩:94
请输入姓名:Jerry
请输入年龄:18
请输入高数成绩:93
请输入线代成绩:96
请输入离散成绩:89
请输入姓名:Spike
请输入年龄:19
请输入高数成绩:92
请输入线代成绩:99
请输入离散成绩:85
请输入需要比较的成绩:线代
线代 成绩排名为:
第1名:Spike
第2名:Jerry
第3名:Tom
请在矩形框中和横线上完善代码,使其能够实现上面的功能。

class Student():
    def __init__(________, n):    # n为学生数量
        ________.stu = {}
        for i in range(n):
            name = str(input('请输入姓名:'))
 			age = int(input('请输入年龄:'))
            score1 = int(input('请输入高数成绩:'))
            score2 = int(input('请输入线代成绩:'))
            score3 = int(input('请输入离散成绩:'))
    |———————————————————————————————————————————|  
	|											|	 			 
    |       									|
    |        									|
    |        									|
    |———————————————————————————————————————————|
            
    
    def sortScore(________, val):
        
        
        print(val, '成绩排名为:')
        for i in range(n):
            print(________________________________________________)


n = int(input('请输入学生数量:'))
a = Student(n)
sort_key = str(input('请输入需要比较的成绩:'))
a._________________________________________________________________

结果

class Student():
    def __init__(self, n):    # n为学生数量
        self.stu = {}
        for i in range(n):
            name = str(input('请输入姓名:'))
 			age = int(input('请输入年龄:'))
            score1 = int(input('请输入高数成绩:'))
            score2 = int(input('请输入线代成绩:'))
            score3 = int(input('请输入离散成绩:'))
    		self.stu[name] = []
    		self.stu[name].append(age)
    		self.stu[name].append({
    			'高数': score1,
    			'线代': score2,
    			'离散': score3
    			})
            self.stu[name][1]['总分'] = sum(self.stu[name][1].values())
    
    def sortScore(self, val):
        a = sorted(self.stu.items(),key=lambda item[1][1][val],reverse=true)
        print(val, '成绩排名为:')
        for i in range(n):
            print('第{0:d}名:{1:s}'.format(i+1,a[i][0]))


n = int(input('请输入学生数量:'))
a = Student(n)
sort_key = str(input('请输入需要比较的成绩:'))
a.sortScore(sort_key)

考察
-》

第二部分 数据结构与算法

1.

在循环队列中,当队列为空时,有frontrear;而当所有队列空间全占满时,
也有front
rear。为了区别这两种情况,规定循环队列最多只能有
MAXSIZE-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经
满了。因此,队列判空的条件是__________________,队列判满的条件是
。请简述循环队列的优点:__________
____________________________________________________________________。

结果

front==rear
front=(rear+1% MAXSIZE
有效解决了以顺序表形式存储的队列的“假溢出”问题。 

考察
% 保证即使rear已经在第2,3圈,与front的比较依然在同一圈

2.

对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复
杂度为______,在给定值为x的结点后插入一个新结点的时间复杂度为______。

O(1O(n)

考察
简单知识

3.

2010·考研真题 若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行,
但不允许连续三次进行退栈操作,则不可能得到的出栈序列是______。
A.d,c,e,b,f,a B.c,b,d,a,e,f C.b,c,a,e,f,d D.a,f,e,d,c,b

D

解析
若(a)表示出,[a]表示进

A.[a] [b] [c] [d] (c) [e] (b) [f] (f) (a)

4.

请判断一个单链表是否为回文链表。若链表为回文链表,函数返回true,否则,
返回false。链表的长度不超过50000。

语言:C
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode* next;
 * };
 */
bool isPalindrome(struct ListNode* head) {












}

解析

解法 1:数组+双指针

bool isPalindrome(struct ListNode* head)
{
	int n[50000];
	int len=0;
	while(head)
	{
		n[len++]=haed.val;
		head=head->next;
	}
	for(int i=0,j=len-1;i<j;i++,j--)//头尾比较
	{
		if(n[i]!=n[j])
		{
		return false;
		}
	}
	return true;
}

5.

给定pushed和popped两个序列,每个序列中的值都不重复,只有当它们可
能是在最初空栈上进行的推入push和弹出pop操作序列的结果时,返回true;
否则,返回false。
提示:
(1)0 <= pushed.length == popped.length <= 1000
(2)0 <= pushed[i], popped[i] < 1000
(3)pushed是popped的排列。
语言:C
在这里插入图片描述

bool validateStackSequences(int* pushed, int pushedSize,
int* popped, int poppedSize) {













}

解析

bool validateStackSequences(int* pushed,int pushedSize,int* popped,int poppedSize)
{
	int* stack=(int*)malloc((int) * pushedSize);//定义一个数组
	int stackSize=0;
	for(int i=0,j=0;i<pushedSize;i++)
	{
		stack[stackSize++]=pushed[i];
		while(stackSize && stack[stackSize-1]==popped[j])//不等于就跳过
		{
			j++;
			stackSize--;
		}return stackSize==0;
}

考点
栈的特点
思路是先进后出控制好i,j就ok

6.

实现一种算法,删除单向链表中间的node结点(即不是第一个或最后一个结
点),假定你只能访问该结点。
示例:
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f
语言:C

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode* next;
* };
 */
void deleteNode(struct ListNode* node) {







  
  
}

解析

void deleteNode(struct ListNode* node)
{
struct ListNode* p=node, *q=node->next;//*是指针运算符,*q为指针变量q所指向的存储单元中的内容。而指针变量q中一般只存放地址。
p.val=q.val;
p->next=q->next;
free(q);
}

注意
给定的是节点

7.XUPT_ACM新生寒假训练·第一周训练题

有N对双胞胎,他们的年龄分别是1,
2,3,……,N岁,他们手拉手排成一队到野外去玩,要经过一根独木桥,为了
安全起见,要求年龄大的和年龄小的排在一起,好让年龄大的保护年龄小的,然
后从头到尾,每个人报告自己的年龄,就得到了一个年龄的序列。比如有4对双
胞胎,他们报出来的年龄序列是:41312432。突然,他们中间最聪明的小明发现
了一个有趣的现象,原来,这个年龄序列有一个规律,两个1中间有1个数,两
个2中间有2个数,两个3中间有3个数,两个4中间有4个数。但是,如果是
2对双胞胎,那么无论他们怎么排年龄序列,都不能满足这个规律。
你的任务是,对于给定的N对双胞胎,是否有一个年龄序列,满足这一规律,如
果是,就输出Y,如果没有,输出N。
输入:共有若干行,每行一个正整数N<100000,表示双胞胎的数量;如果N=0,
表示结束。
输出:共有若干行,每行一个正整数,表示对应输入行是否有一个年龄序列,满
足这一规律,如果是,就输出Y,如果没有,输出N。
输入样例: 输出样例:
4 Y
2 N
1309 N
0
语言限制:C/C++/Python 3/Java
语言:__________
代码:
解析

#include<stdio.h>
int main(void)
{
	int n;
	while(scanf("%d",&n)==0)
	{
		if(n%4==0||n%4==3)
			printf("Y");
		else
			printf("N");
	} 
	return 0;
}

解析
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值