计算机考研自命题(6)

news2024/11/16 12:32:57

1、C语言–奇数求和

1、使用函数求奇数和:输入一批正整数(以零或负数为结束标志),求其中的奇数和。要求定义和调用函数 odd(n) 判断数的奇偶

性,当 n 为偶数时返回 0 ,否则返回 1 。试编写相应程序。

/*
解题思路:传入一个数字odd(n)判断 n 是奇数还是偶数,如果是奇数则进行求和
判断奇数是不是奇数 n%2 != 0 就是奇数
*/
# include <stdio.h>

// 判断元素奇偶性
int odd(int n){
	if(n%2==0){  // n是偶数 
		return 0;
	}else{
		return 1;  // n 是奇数 
	} 
} 

int main(){
	int i = 0,len = 0,num,sum = 0;
	int arr[999]; 
	printf("请输入数字:\n");
	scanf("%d",&num);
	while(num!=-1){
		arr[i] = num;
		len++;
		scanf("%d",&num);
		i++;
	}
	// 计算奇数和 
	for(i = 0;i<len;i++){
		if(odd(arr[i]) == 1){
			sum = sum+arr[i];
		}
	}
	
	printf("sum = %d\n",sum);
	return 0;
}

2、C语言–矩阵求和

2、矩阵运算:读入1 个正整数 n(1 ≤n≤6), 再读入n 阶方阵 a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。

副对角线为从矩阵的右上角至左下角的连线。试编写相应程序。

/*
解题思路:用二维数组构建一个方阵,然后去除副对角线、最后一行最后一列,求和 
i,j为数组下标
副对角线: i+j = n-1
最后一行: i = n-1
最后一列: j = n-1
*/

# include<stdio.h>
int main(){
	int arr[6][6];
	int n,i,j,sum = 0;
	scanf("%d",&n);
	printf("需要构成%d阶方阵\n",n); 
	printf("请输入元素值\n");
	// 数入方阵
	for(i = 0;i<n;i++){
		for(j = 0;j<n;j++){
			scanf("%d ",arr[i][j]);
		}
	} 
	
	// 去除副对角线、最后一行最后一列,求和 
	for(i = 0;i<n;i++){
		for(j = 0;j<n;j++){
			if(i!=n-1&&j!=n-1&&i+j!=n-1){
				sum = sum+arr[i][j];
			} 
		}
	} 
	printf("sum = %d\n",sum); 
	return 0;
} 

3、C语言-文件操作

3、将文件中的数据求和并写入文本文件尾: 文件Int_Data.dat 中存放了若干整数,将文件中所有数据相加, 并把累加和写入该文件

的最后。 试编写相应程序。

/*
解题思路:首先打开文件,利用fscanf()函数从文件中读入一个元素进行求和,feof()函数判断是否到达文件尾,然后将所有元素的和
用fprintf()函数从新写回文件中
*/

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

int main(void){
	
    int number, sum;
    sum = 0;
    FILE *fp1;
    fp1 = fopen("Int_Data.dat", "r+");
    if (fp1 == NULL) {
        printf("Open file error.\n");
        exit(0);
    }

    fscanf(fp1, "%d", &number);       // 从文件中读取一个数字 
    while (!feof(fp1)) {             // 是否读取到文件尾 
        sum += number;
        fscanf(fp1, "%d", &number);
    }
    
    fprintf(fp1, "%d\n", sum);		// 将文件中读取出来的数据和从新写入文件尾 
    fclose(fp1); 
    return 0;
    
}

4、C语言–寻找字符串

4、查找子串 : 输入两个字符串 s 和 t ,在字符串 s 中查找子串 t ,输出起始位置,若不存在,则输出 -1。要求自定义函

char*search(char *s,char *t)返回子串 t 的首地址,若未找到,则迟回NULL。试编写相应程序。

/*
解题思路:输入两个字符串,计算字符串的长度,如果子串 > 主串,那么毕竟失败,
如果子串 < 主串,则开始进行比较,将p指向主串s的首地址,将字串t中的每个字符串和p对比,如果找到一个相同字符则p和t同时向后移动,比较剩下的字符,如果相同的序列返回第一个地址
如果没有找到相同字符则将p向后移动一个,t从头开始,直到将整个s都查找完
*/

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

char* search(char*s,char*t)
{	
	int size_t=strlen(t),size_s=strlen(s),T,i,j;
	char *p=NULL;
	for(i=0;i<=(size_s-size_t);i++){
		p=s+i;
		T=1;
		for(j=0;j<size_t;j++){
			if(*p!=*(t+j)){
				T=0;
				break;
			}
			p++;
		}
		if(T==1)
			break;
	}
	if(T==0)
		return NULL;
	else
		return s+i;
}


int main(){
	char s[100];
	char t[100];
	char *p;
	printf("请输入主串:");
	scanf("%s", s);
	printf("请输入字串:");
	scanf("%s", t);
	p = search(s, t);
	if(p!=NULL){
		printf("匹配成功,起始位置为:%ld\n", p - s);	
	} else{
		printf("匹配失败!");
	}
	return  0;
}

5、程序填空

5、程序填空(注:<—>代表两个变量的数据交换)。

/*
第一趟将最小的元素放在r[1]中,最大的元素放在r[n]中,
第二趟将第二小的元素放在r[2]中,第二大的元素放在r[n-1]中
以此类推,直到所有序列递增有序
*/


void sort(SqList &r,int n) {
	i=1;
	while((1)______i<n-i-1______________) {
		min=max=1;
		for (j=i+1;(2)__j<n-i-1___ ;++j){
			if((3)__r[j].key<r[min].key___) min=j; 
			else if(r[j].key>r[max].key) 
				max=j;
		}
		if((4)____min != i___) 
			r[min] < ---- >r[j];
		if(max!=n-i+1){
			if ((5)___max == i___) 
				r[min] < ---- > r[n-i+1]; 
			else ((6)___r[max] < ---- > r[n-i+1]; ___);
		}
		i++;
	}
}

6、数据结构–共享栈

6、设有两个栈 s1、s2 都采用顺序栈方式,并共享一个存储区[0,……,maxsize-1],为了尽量利用空间,减少溢出的可能,可采

用栈顶相向、迎面增长的存储方式,试设计s1、s2有关入栈和出栈的操作算法。

/*
解题思路:
共享栈的性质是让两个顺序栈共享一个数组空间,
top[0] 表示 S1 ,top[1] 表示 S2

入栈操作:
当 S.top[1] - S.top[0] == 1时表示栈满
如果栈不满,则判断是在S1还是S2中插入元素,
如果是S1 则s.data[++s.top[0]] = x
如果是S2 则s.data[--s.top[1]] = x

出栈操作:
先判断是S1元素出栈还是S2元素出栈
如果是S1,判断栈是不是为空s.top[0] == -1,不为空进行元素出栈操作s.data[s.top[0]--]
如果是S2,判断栈是不是为空s.top[1] == maxsize,不为空进行出栈操作s.data[s.top[1]++]
*/

# include <stdio.h>
#define maxsize 100   //两个栈共享顺序存储空间所能达到的最多元素数,初识化为100
#define ElemType int       //假设元素类型为整型

typedef struct Stack{
    ElemType data[maxsize];    //栈空间
    int top[2];     //top为两个栈顶指针
}Stack;
Stack s;
//入栈操作
int push(int i,ElemType x){
    //入栈操作,i为栈号,i=0表示左边的s1栈,i=1表示右边的s2栈,x是入栈元素
    //入栈成功返回1,否则返回0
    if(i<0||i>1){
        printf("栈号输入不对");
        exit(0);
    }
    if(s.top[1]-s.top[0]==1){
        printf("栈已满\n");
        return 0;
    }
    switch(i){
        case 0 : s.data[++s.top[0]] = x;
            return 1; 
            break;
        case 1 : s.data[--s.top[1]] = x;
            return 1;
    }
}
//退栈操作
ElemType pop(int i){
    //退栈。i代表栈号,i=0时为s1栈,i=1时为s2栈
    //退栈成功返回退栈元素,否则返回-1
    if(i<0||i>1){
        printf("栈号输入错误\n");
        exit(0);
    }
    switch(i){
    case 0:
        if(s.top[0] == -1){
            printf("栈空\n");
            return -1;
        }
        else{
            return s.data[s.top[0]--];
        }
        break;
    case 1:
        if(s.top[1] == maxsize){
            printf("栈空\n");
            return -1;
        }
        else{
            return s.data[s.top[1]++];
        }
        break;
    }
}

7、数据结构–链表合并

7、假设有两个按元素值递增排序的线性表,均已单链表项式存储,请编写算法将这两个单链表合并为一个按元素值递减排序的

单链表,并要求利用远来两个单链表的结点存放归并后的单链表。

# include<stdio.h>

//单链表的定义
typedef struct LNode {
	ELemType data;
	LNode *next;
} LNode,*LinkList;

/*

解题思路:假设A,B带有头指针,定义pa,pb指针分别指向A,B的下一个结点,
在定义一个r指针,指向 pa/pb的下一个结点,防止断链
把从新排序的结点存放到A中,
运用头插法,先将A,B中较小的元素插入A中,实现整体按元素值递减有序;
因为A,B链表中的结点个数不一样,
所以当A中的结点数更少时 ,将B中的元素依次加入A中
反之,则将A中的元素依次加入C中
*/
LinkList Merge(LNode &A,LNode &B) {
	LNode *pa = A->next;
	LNode *pb = B->next;
	LNode *r;     		// 标记指针,防止断链,指向 pa/pb的下一个结点
	A->next == NULL;    // 将原来的A链表置空,用来存储从新组合的链表 C

	while(pa&&pb) {   //
		if(pa->data <= pb->data) { // 运用头插法将大的元素率先加入C链表中
			r = pa->next;
			pa->next = A->next;
			A->next = pa;
			pa = r;
		} else {
			r = pb->next;
			pb->next = A->next;
			A->next = pb;
			pb = r;
		}
	}
	if(pa) {
		pb = pa;
	}
	while(pb) {
		r = pb->next;
		pb->next = A->next;
		A->next = pb;
		pb = r;
	}
	free(B);
}

8、数据结构–二叉树

8、假设一个仅包含二元运算符的算术表达式以链表形式存储在二叉树BT中,写出计算该算术表达式值的算法

/*
解题思路:利用递归思想
利用二叉树的后续遍历进行改造
先计算出左子树的值,然后再算出右子树的值,最后再根据根节点的符号求出最终值
树的结构体中添加运算符和运算值
*/


typedef struct BiNode{
    int data;   // 数值
    int value;	// 运算值
    char opt;	// 操作符
    struct BiNode *lchild,*rchild;		// 左右子树
}*BiTree,BiNode;

//对二叉链表树中的结点计算
int Calculate(BiTree Bt){    
	int val_l, val_r;        
	if(Bt!=NULL){
		val_l = Calculate(Bt->lchild);    //递归计算左、右子树
		val_r = Calculate(Bt->rchild);
		switch(Bt->opt){        //根据根节点的字符将左右子结果计算为当前这一层子树的结果
			case'+':
				Bt->value = val_l + val_r;
				break;
			case'-':
				Bt->value = val_l - val_r;
				break;
			case'*':
				Bt->value = val_l * val_r;
				break;
			case'/':
				Bt->value = val_l / val_r;
				break;
			default:
				break;
		}
	}
	return Bt->value;
}

9、数据结构–图

9、已知一个无向图,要分别用 Prim 和 Kruskal 算法生成最小树(假设以①为起点,试画出构造过程)。

10、数据结构–森林转二叉树

10、森林转二叉树
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1125323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov7改进优化之蒸馏(二)

续yolov7改进优化之蒸馏&#xff08;一&#xff09;-CSDN博客 上一篇已经基本写出来yolov7/v5蒸馏的整个过程&#xff0c;不过要真的训起来我们还需要进行一些修改。 Model修改 蒸馏需要对teacher和student网络的特征层进行loss计算&#xff0c;因此我们forward时要能够返回需…

Lua入门使用与基础语法

文章目录 目的基础说明开发环境基础语法注释数据类型变量流程控制函数 总结 目的 Lua是一种非常小巧的脚本语言&#xff0c;基于C构建并且完全开源&#xff0c;可以方便的嵌入到各种项目中&#xff0c;当然也可以单独使用。Lua经常被用在很多非脚本语言的项目中&#xff0c;用…

组件通信$refs | $parent |$root

父组件传值子组件用Props 子组件传值父组件用$emit 父组件直接还可以直接取子组件的值用$refs 父组件直接从子子组件中获取值$refs 不建议使用会增加组件之间的耦合度&#xff0c;一般用于第三方插件的封装 ref如果绑定在dom节点上&#xff0c;拿到的就是原生dom节点。 ref如…

【智能家居】

面向Apple developer学习&#xff1a;AirPlay | Apple Developer Documentation Airplay AirPlay允许人们将媒体内容从iOS、ipad、macOS和tvOS设备无线传输到支持AirPlay的Apple TV、HomePod以及电视和扬声器上。 网页链接的最佳实践 首选系统提供的媒体播放器。内置的媒体播…

VRPTW(MATLAB):蜘蛛蜂优化算法SWO求解带时间窗的车辆路径问题VRPTW(提供参考文献及MATLAB代码)

一、VRPTW简介 带时间窗的车辆路径问题(Vehicle Routing Problem with Time Windows, VRPTW)是车辆路径问题(VRP)的一种拓展类型。VRPTW一般指具有容量约束的车辆在客户指定的时间内提供配送或取货服务&#xff0c;在物流领域应用广泛&#xff0c;具有重要的实际意义。VRPTW常…

IPD集成产品开发TR技术评审详解

IPD&#xff08;Integrated Product Development&#xff09;集成产品开发是一种跨部门协同的、利用先进技术和管理方法来快速推出新产品并满足客户需求的开发模式。华为利用IPD也非常出名。在IPD集成产品开发的过程中&#xff0c;TR&#xff08;Technical Review&#xff09;技…

【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 刷题篇 一、只出现一次的数字1.1 题目描述1…

1024程序员节特辑 | 深度解析C/C++内存管理(建议收藏!!)

1024程序员节特辑 | 深度解析C/C内存管理&#xff08;建议收藏&#xff01;&#xff01;&#xff09; 一、C/C内存分布1.1 相关例题 二、 C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free2.1 相关面试题 三、C内存管理方式3.1 new/delete操作内置类型3.2 new和…

通过字符设备驱动的分步实现编写LED驱动,另外实现特备文件和设备的绑定

头文件.h文件 #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct {unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; } gpio_t; #define PHY_LED1_ADDR 0X50006000 #define PHY_LED2_ADDR 0X5000700…

程序员网上接单盛行,到底该怎样选择一个好用不坑的接单平台?

现在&#xff0c;选择在网上接单的程序员是越来越多了&#xff0c;与此同时&#xff0c;网上接单的平台也是越来越多了&#xff0c;五花八门的平台&#xff0c;哪个最靠谱&#xff1f;哪个资源丰富一些&#xff1f; 这些问题是不是也让你犹豫了呢&#xff1f;不用担心&#xf…

红队打靶:Misdirection打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现与端口扫描 第二步&#xff1a;Web渗透&#xff08;80端口&#xff0c;战术放弃&#xff09; 第三步&#xff1a;Web渗透&#xff08;8080端口&#xff09; 第四步&#xff1a;sudo bash提权 第五步&#xff1a;/etc/passwd利…

Qt程序的发布和打包,任何电脑都可以安装

## 1. Qt程序的发布 当Qt程序编写完成通过IDE编译就可以得到对应的可执行程序,这个可执行程序在本地运行是完全没有问题的(因为在本地有Qt环境,程序运行过程中可以加载到相关的动态库),但是如果我们想把这个Qt程序给到其他小伙伴使用可能就会出问题了,原因如下: 对方电…

Leetcode刷题详解——二分查找

1. 题目链接&#xff1a;704. 二分查找 2. 题目描述&#xff1a; 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1…

【线程本地变量ThreadLocal】—— 每天一点小知识

&#x1f4a7; 线程本地变量 T h r e a d L o c a l \color{#FF1493}{线程本地变量ThreadLocal} 线程本地变量ThreadLocal&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433;…

ES挂载不上怎么处理?

全文搜索 EelasticSearch安装 Docker安装 docker run -d --name es7 -e ES_JAVA_POTS"-Xms256m -Xmx256m" -e "discovery.typesingle-node" -v /home/206/es7/data/:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.14.0 …

CANoe-使用IG Ethernet Packet Builder实现IP包分片的若干问题

在文章《CANoe-Ethernet IG和Ethernet Packet Builder的使用和区别》中,我们讲过Packet Builder可以组装多种类型的以太网报文: 当我们想组装一条icmpv4 echo request报文,payload只有1个字节的数据FF时,选择ICMPv4 Packet,创建一条ICMPv4报文,把payload改为1个字节: 然…

【类和对象之构造方法】

文章目录 用构造方法初始化对象格式&#xff1a;public类名特性 快捷键生成构造方法访问修饰限定符总结 用构造方法初始化对象 格式&#xff1a;public类名 注意区分成员方法和构造方法 两者都是在类当中但是成员方法的格式是public返回值方法名参数成员方法有参数&#xff…

Java中整数基础知识

原文链接 Java中整数基础知识 最近做了一道题&#xff0c;非常有意思&#xff0c;题本身很简单&#xff0c;但涉及到整数的最大值以及最小值&#xff0c;当写测试用例的时候&#xff0c;却犯了一个错误&#xff0c;发现最小整数并不是0xFFFFFFFF&#xff0c;我们来仔细看一下。…

网络协议--UDP:用户数据报协议

11.1 引言 UDP是一个简单的面向数据报的运输层协议&#xff1a;进程的每个输出操作都正好产生一个UDP数据报&#xff0c;并组装成一份待发送的IP数据报。这与面向流字符的协议不同&#xff0c;如TCP&#xff0c;应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联…

Citrix XenDesktop云桌面单点登录XenApp虚拟应用小技巧

哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。 “ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利……(每天更新不间断,福利不见不散)” 第1章 前言 实现XenDesktop的桌面打开XenApp发布的应用…