内蒙古大学892程序设计与数据结构-2021年真题(回忆版)解析(C语言版)

这篇文章提供了内蒙古大学892课程近年来的程序设计与数据结构考试的C语言版真题解析,包括程序设计问题如偶数判断、十六进制转十进制、字符串比较、反置数计算、螺旋矩阵打印、矩阵乘方等,以及数据结构相关题目,如堆排序、拓扑排序、平衡二叉树等算法的应用。
摘要由CSDN通过智能技术生成

系列文章目录

内蒙古大学892程序设计与数据结构-2022年真题(回忆版)解析(C语言版)
内蒙古大学892程序设计与数据结构-2021年真题(回忆版)解析(C语言版)
内蒙古大学892程序设计与数据结构-2020年真题(回忆版)解析(C语言版)
内蒙古大学892程序设计与数据结构-2019年真题解析(C语言版)
内蒙古大学892程序设计与数据结构-2018年真题解析(C语言版)
内蒙古大学892程序设计与数据结构-2017年真题解析(C语言版)
内蒙古大学892程序设计与数据结构-2016年真题解析(C语言版)


内蒙古大学892程序设计与数据结构-2021年真题(回忆版)解析(C语言版)

一、程序设计(本大题9小题,每小题10分,共90分),程序设计语言可选用C、C++或Java。

1、能被2整除的数称为偶数,不能被2整除的数称为奇数,请编写程序输出300至500之间可以被3和7整除的偶数。

#include<stdio.h>
void main()
{
	for(int i=300;i<500;i++)
		if(i%3==0&&i%7==0&&i%2==0)
			printf("%d\n",i);
}

2、编程从键盘输入一个不超过8位的十六进制整数,将他转换为正的10进制数后输出。

#include<stdio.h>
#include<math.h>
#include<string.h>
void main()
{
	char str[20];
	int num=0,len;
	gets(str);
	len=strlen(str)-1;
	for(int i=0;len>=0;i++,len--)
	{
		if(str[len]>='0'&&str[len]<='9')
			num+=(str[len]-'0')*pow(16,i);
		else 
			num+=(10+str[len]-'a')*pow(16,i);
	}
	printf("%d",num);
}

3、编程实现对键盘输入的俩个字符串str1和str2的字符序列比较 (字符串都不含空格且长度在100以内),若s1和s2相同,输出0,若他们不相等,则指出其第一个不同字符的ASCII码的差值,如果str1>str2,则差值为正,如果str1<str2则差值为负。

#include<stdio.h>
#include<string.h>
void main()
{
	char str1[100],str2[100];
	unsigned int i=0;
	gets(str1);
	gets(str2);
	while(i<=strlen(str1)&&i<=strlen(str2))
	{
		if(str1[i]=='\0'&&str2[i]=='\0')
		{
			printf("0");
			break;
		}
		else if(str1[i]-str2[i]==0)
			i++;
		else
		{
			printf("%d",str1[i]-str2[i]);
			break;
		}
	}
}

4、一个整数的“反置数”指的是该整数的每一位数字的顺序颠倒过来所得到的另一个整数。比如说1245的反置数是5421,而1200的反置数是21,请编写一个程序,输入俩个整数然后计算这俩个数的反置数之和sum,然后再求sum的反置数然后打印。

#include <stdio.h>
int reverse(int a)
{
	int num=0;
	while(a!=0)
	{
		num=num*10+a%10;
		a/=10;
	}
	return num;
}
void main()
{
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d\n",reverse(reverse(a)+reverse(b)));
}

5、打印螺旋矩阵

#include<stdio.h>
void Arr(int arr[][3],int r,int c)
{
	int up=0,down=r-1,left=0,right=c-1;  //定义矩阵边界
	while(1)
	{
		for(int i=left;i<=right;i++)
			printf("%d ",arr[up][i]);
		if(++up>down)
			break;
		for(int i=up;i<=down;i++)
			printf("%d ",arr[i][right]);
		if(--right<left)
			break;
		for(int i=right;i>=left;i--)
			printf("%d ",arr[down][i]);
		if(--down<up)
			break;
		for(int i=down;i>=up;i--)
			printf("%d ",arr[i][left]);
		if(++left>right)
			break;
	}
}
void main()
{
	int arr[3][3]={1,2,3,8,9,4,7,6,5};
	Arr(arr,3,3);
}

6、矩阵的n次幂,输入两个数,一个代表矩阵的阶数一个代表幂数,然后输入矩阵,输出矩阵的n次幂。

#include <stdio.h>
#define N 20
void main()
{
	int a[N][N],b[N][N],t[N][N];
	int i,j,c,count,n,m;
	scanf("%d %d",&n,&m);
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
			b[i][j]=a[i][j];
		}
	}
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			t[i][j]=0;
	while(m!=1)
	{
		for(i=0;i<n;i++)
			for(j=0;j<n;j++)
			{
				count=0;
				for(c=0;c<n;c++)
					count=count+a[i][c]*b[c][j];
				t[i][j]=count;
			}
		for(i=0;i<n;i++)
			for (j = 0; j < n; j++)
				a[i][j] = t[i][j];
		m--;
	}
	for(i=0;i<n;i++)
	{
		for (j=0;j<n;j++)
			printf("%d\t",a[i][j]);
		printf("\n");
	}
}

7、字符串ASCII 求和 给定一个字符串,求这个字符串的ASCII 和。

#include<stdio.h>
void main()
{
	char str[10];
	int sum=0;
	gets(str);
	for(int i=0;str[i]!='\0';i++)
		sum+=(int)str[i];
	printf("%d",sum);
}

8、输入不定个日期(MMDDYYYY)找出其中距离今天最远的三个日期(输入日期个数大于3)。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
	int date;
	int diff;
}Date;
int compare(const void* a, const void* b)
{
    return ((Date*)b)->diff-((Date*)a)->diff;
}
void main()
{
	Date dates[100];
    int n;
    scanf("%d",&n);
    for(int i=0; i<n;i++)
	{
        int month,day,year;
        scanf("%2d%2d%4d",&month,&day,&year);
        dates[i].date=year*10000+month*100+day;
        dates[i].diff=abs(dates[i].date-20201225);
    }
    qsort(dates,n,sizeof(Date),compare);
    for (int i = 0; i < 3; i++)
	{
        int year=dates[i].date/10000;
        int month=dates[i].date/100%100;
        int day=dates[i].date%100;
        printf("%02d%02d%04d\n",month,day,year);
    }
}

9、文件流读取文件内的数字(数字之间以空格和回车分割),n次操作,每次输出第k个大小的数。


二、数据结构 (本大题6小题,每小题10分,共60分)

1、给定n个节点求层数和最少有多少个节点。
2、堆排序调整子树。
3、拓扑排序求所有路径。
4、平衡二叉树调整。
5、归并排序给出每轮排序的结果。
6、设计算法实现二叉树交换左右子树。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_考不上研究生不改名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值