2015年-2017年 计算机技术专业 程序设计题(算法题)实战_c语言程序设计数据结构程序设计分析
文章目录
- 2015
- 1.C语言算法设计部分
- 2.数据结构算法设计部分
- 2016
- 1.C语言算法设计部分
- 2.数据结构算法设计部分
- 2017年
- 1. C语言算法设计部分
- 2.数据结构算法设计部分
2015
1.C语言算法设计部分

int total(int n)
{if(n==1) return 1;return total(n-1)+n+1;
}
//主函数测试代码已省略
2.输入某天的年月日,计算该天为当年的第几天。例如输入:1998,9,25;
输出:9月25日是1998年的第268天(提示闰年第判别方法为能被4整除却不能被100整除,或能被400整除的年份是闰年)。要求使用下面的结构体:
struct Data{int year; int month; int day};
int Func(int month,int day)
{int sum=0;switch (month-1) {case 11:sum+=30 ;case 10:sum+=31 ;case 9:sum+=30 ;case 8:sum+=31 ;case 7:sum+=31 ;case 6:sum+=30 ;case 5:sum+=31 ;case 4:sum+=30 ;case 3:sum+=31 ;case 2:sum+=28 ;case 1:sum+=31 ;}return sum+day;
}int main()
{struct Data data={1998,9,25}; //初始化结构体int num=0; //记录一共有多少天num=Func(data.month, data.day);// 判断是否是闰年,如果是则统计的天数+1,如果不是则直接结束if(data.year%4==0&&data.year%100!=0)num+1;printf("%d月%d日是%d年的第%d天\n",data.month,data.day,data.year,num);
}

3.请编写一个程序,将一字符串的第K个字符开始的全部字符赋值成为另一个字符串,要求:
(1)将复制过程单独写成一个函数,并用指针完成;
(2)在主函数中输入字符串和K的值,并在主函数中输出复制结果
void copy(char *str1,char *str2,int k)
{while(k--)str1++;str1--;//保证从第k位置开始while(*str2!='\0'){*str1=*str2;str1++;str2++;}*str1='\0';}int main()
{char str1[]={"month"};char str2[]={"day"};copy(str1, str2, 4);puts(str1);}

2.数据结构算法设计部分

1.
算法基本思想:遍历一遍单链表,定义两个指针一个pre指向当前结点的前一个结点,定义一个cur指针,指向当前结点,首先判断一下前两个结点的关系,明确是升序还是将序,然后开始遍历比较,不成立,直接返回,或者一直成立,直到遍历完。
代码省略,就是遍历单链表
算法基本思想:该问题的关键在于每层,所以,算法的基本思想在于二叉树的层序遍历,辅以队列这种数据结构,重点在于处理每一层,每次计算当前队列的长度,确定,每一层的长度,一次处理一层
代码省略,多次考察
3.设计算法,求出无项连通图中距离顶点V0的最短路径长度为K的所有节点
#define INF -1 // 表示尚未访问的节点
void BFS_K(ALGraph G,VertexType v,VertexType K)
{int visit[MASVETEX]; //初始化访问数组for(int i=0;i<MASVETEX;i++)visit[i]=INF;SqQueue Q;Queue_Init(Q);Queue_En(Q, v);visit[v]=0; //顶点0到顶点0的距离为0while (!Queue_Empty(Q)) { //假设队列不为空,开始循环Queue_De(Q, v); //从队列中弹出表头,此时弹出的元素存放在v中if (visit[v] > K) break; //加快操作,以后的循环是没有意义的ArcNode *p=G.vertices[v].firstArc;while(p!=NULL){if(visit[p->adjvex]==INF) //没有被访问过{visit[p->adjvex]=visit[v]+1; //更新visit数组Queue_En(Q, p->adjvex); //将该元素加入队列中}p=p->nextArc;}}for(VertexType i=1;i<=G.vexnum;i++){if(visit[i]==K){printf("%d ",i);}}}
2016
1.C语言算法设计部分

思路如下:
第1项是 1 有一个数
第二项是23 有两个数
第三项是 3=456 有三个数
外层一个大循环从1到n,内层循环 大循环i的次数,最开始初始化一个1,每次上++它
代码略
2.某歌咏比赛中,有8个评委对20位选手进行评分,选手按1-20号进行编号,每个评委给出1-10的分数,在统计分数时要除去一个最低分和最高分,计算出其他评委给出分数的平均分作为选手的最后得分。编写程序实现以下功能:评委输入,按评分输出得分最高的三位选手的编号和分数,要求程序执行时间最短。
思路梳理:
因为要求程序执行时间最少,所以不能通过先找第一大,再找第二大,再找第三大这么循环,而是,每拿出一个选手,看看它是否是第一大,是,就依次下移,将原先的第三大挤出,以此类推,然后判断是不是第二大
3.编写程序,查找给定字符在字符串中首次出现的位置。要求:不使用有关字符串处理的库函数;
(1)主函数中键盘输入字符以及查找的字符,调用子函数;
(2)子函数完成查找任务,如果字符串中包含所查找的字符,则返回该字符串首次出现的位置,否则返回0
int first_str(char *p,char c)
{int index=1;while(*p!='\0'){if(*p==c) return index;p++;index++;}return 0;
}#define MASIZE 100
int main()
{char str[MASIZE];scanf("%s",str); //输入字符串char c;while (getchar() != '\n');scanf("%c",&c);int index=first_str(str, c);if(index!=0){printf("出现的位置为:%d\n",index);}else{printf("查找失败\n");}
}

值得积累的点:关于getchar清除缓冲区的问题
在C语言中,while (getchar() != ‘\n’); 这行代码通常用于清除输入缓冲区(input buffer)中直到下一个换行符(newline character,\n)的所有字符。这里,getchar() 是一个标准输入函数,用于从标准输入(通常是键盘)读取下一个可用的字符,并返回这个字符作为 int 类型(实际上返回的是字符的ASCII码值,但可以通过类型转换或字符比较来直接使用)。
当您使用 scanf(“%s”, str); 读取一个字符串时,scanf 会在遇到空格、制表符或换行符时停止读取。然而,换行符(用户按下回车键时产生的)仍然会留在输入缓冲区中。紧接着,当您尝试使用 scanf(“%c”, &c); 读取一个字符时,scanf 会立即从输入缓冲区中读取下一个字符,这通常是之前留在那里的换行符。
2.数据结构算法设计部分

问题1和问题2:已经出现多次了
问题3:
问题分析:本质上就是一个非连通图的遍历,将每个顶点都以它们为起始节点遍历一遍,用DFS即可实现
int visit[MaxSize]={0};void DFS_G(ALGraph G,VertexType v)
{visit[v]=1; //当前v点被访问printf("%d ",v);ArcNode *p=G.vertices[v].firstArc; //找到该点连接的第一个结点while(p!=NULL){VertexType next=p->adjvex;if(visit[next]==0)DFS_G(G, next);p=p->nextArc;}
}int traverse_G(ALGraph G)
{int sum=0;for(int i=1;i<=G.vexnum;i++){if(visit[i]==0){DFS_G(G,i);sum++;printf("\n");}}return sum; //返回连通分量的个数
}

2017年
1. C语言算法设计部分

第一题:
void printfMultiTable()
{for(int i=1;i<=9;i++){for(int j=1;j<=i;j++){printf("%d*%d=%d ",i,j,i*j);}printf("\n"); }
}

第二题:
思路为:判断回文,通过取余将每个数存储到数组中,然后双指针判断是否为回文数。
完数电判断就是按照定义,找到每个因子加和计算即可。
不存在既是回文数又是完数的数,这道题emm,代码略
第三题:
新颖的点在于要求了动态链表存储学生成绩
struct Student
{int studentID; //学号float score;struct Student *next;
};void init_student(int ID,float score,struct Student *&head)
{struct Student *p=(struct Student *)malloc(sizeof(struct Student)); //定义一个新结点p->studentID=ID;p->score=score;p->next=head->next;head->next=p;
}void function_num(struct Student *head) //统计结果
{struct Student *p=head->next;int s60=0;int s70=0;int s80=0;int s90=0;while(p!=NULL){if(p->score>=90&&p->score<=100){s90++;}else if(p->score>=80){s80++;}else if(p->score>=70){s70++;}else{s60++;}p=p->next;}printf("90-100分段有%d人\n",s90);printf("80-89分段有%d人\n",s80);printf("70-79分段有%d人\n",s70);printf("60-69分段有%d人\n",s60);}
int main()
{struct Student *head=NULL;head=(struct Student *)malloc(sizeof(struct Student)); //头指针的初始化while(1){int ID;float score;scanf("%d",&ID);if(ID==0) break;scanf("%f",&score);init_student(ID, score, head); }function_num(head);
}

2.数据结构算法设计部分

问题1:略
问题2:
回顾:
结点的度:指该结点的分支个数,如结点A的度为2
树的度:指树中最大的结点度数,如该树的度为3
//统计一个结点的左孩子连同左孩子的右孩子的最大数量
int getDegree(CSTree T)
{if(T==NULL) return 0;else{int maxDegree=0;int degree=0; //根节点的度for(CSTNode *pchild=T->fristChild;pchild!=NULL;pchild=pchild->nextSibling) {degree++; //for循环执行4次,degree最终为4int subdegree=getDegree(pchild); //subdergg本质还是degree是子函数返回的degreeif(subdegree>maxDegree)maxDegree=subdegree;}return degree>maxDegree?degree:maxDegree;}
}
问题三:
//邻接表的插入操作(头插法)
void insert(VertexType v,VertexType w,ALGraph &rG)
{ArcNode *p=(ArcNode *)malloc(sizeof(ArcNode));p->adjvex=w;p->nextArc=rG.vertices[v].firstArc;rG.vertices[v].firstArc=p;
}void reverse(ALGraph &G,ALGraph &rG)
{// 第一步,将G的头结点,赋给rG的头结点for(int i=1;i<=G.vexnum;i++){rG.vertices[i].data=G.vertices[i].data;rG.vertices[i].firstArc=NULL;}//第二步 将v,w以w,v形式插入到rg中,以分配新的存储空间的形式插入for(int i=1;i<=G.vexnum;i++){ArcNode *p=G.vertices[i].firstArc;VertexType v=G.vertices[i].data;while(p!=NULL){VertexType w=p->adjvex;insert(w,v,rG);p=p->nextArc;}}//第三步,将点的数量,弧的数量赋值给rGrG.vexnum=G.vexnum;rG.arcnum=G.arcnum;}
相关文章:
2015年-2017年 计算机技术专业 程序设计题(算法题)实战_c语言程序设计数据结构程序设计分析
文章目录 20151.C语言算法设计部分2.数据结构算法设计部分 20161.C语言算法设计部分2.数据结构算法设计部分 2017年1. C语言算法设计部分2.数据结构算法设计部分 2015 1.C语言算法设计部分 int total(int n) {if(n1) return 1;return total(n-1)n1; } //主函数测试代码已省略…...
个人用计算理论导引笔记(待补充)
文章目录 一、正则语言预备知识确定性有穷自动机(DFA)设计DFA正则运算 非确定性有穷自动机(NFA,含有 ε \varepsilon ε,下一个状态可以有若干种选择(包括0种))正则表达式定义计算优…...
2024年诺贝尔物理学奖揭晓:AI背后的“造梦者”是谁?
想象一下,你早上醒来,智能音箱为你播放天气和新闻,中午你用手机刷视频,精准的推荐内容简直和你心有灵犀,晚上回家,自动驾驶汽车安全地把你送回家。这一切看似理所当然,背后却有一双无形的手推动…...
2024年AI 制作PPT新宠儿,3款神器集锦,让你的演示与众不同
咱们今儿聊聊最近超火的AI做PPT的工具。这年头,谁不想省事儿,少熬夜加班,多享受享受生活啊?所以,AI开始帮咱们搞定做PPT这种费时的活儿,我自然得好好研究研究。今天,我就给大家详细说说三款很火…...
CLion和Qt 联合开发环境配置教程(Windows和Linux版)
需要安装的工具CLion 和Qt CLion下载链接 :https://www.jetbrains.com.cn/clion/ 这个软件属于直接默认安装就行,很简单,不多做介绍了 Qt:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ window 直接点exe Linux 先c…...
Qt记录使用QtAwesome
Qt记录使用QtAwesome 基本使用 基本使用 pro文件添加 CONFIG fontAwesomeFree include(QtAwesome/QtAwesome.pri) //实例化QtAwesome fa::QtAwesome* awesome new fa::QtAwesome(this); awesome->initFontAwesome();//设置外置适应 图标ICON的颜色color QVariantMap opt…...
ES6新增promise(异步编程新解决方案)如何封装ajax?
1.什么是异步? 异步是指从程序在运行过程中可以先执行其他操作。 2.什么是promise? Promise 是 ES6 引入的异步编程的新解决方案。语法上 Promise 是一个构造函数,用来封装异步 操作并可以获取其成功或失败的结果; 3.promise成功…...
Kubernetes--深入理解Service与CoreDNS
文章目录 Service功能Service 的常见使用场景 Service的模式iptablesIPVS Service类型ClusterIPNodePortLoadBalancerExternalName Service的工作机制EndpointEndpoint 与 Service 的关系Endpoint 的工作原理命令操作 CoreDNSCoreDNS 的配置CoreDNS 的典型插件Corefile 示例Cor…...
AI大模型:开启智能革命新纪元
1.AI大模型技术:智能革命的新引擎 自2022年11月30日OpenAI推出ChatGPT以来,这一大型语言模型(LLM)迅速走红,标志着AI领域进入了一个新的发展阶段,即AI大模型时代。 这一时代预示着AI正朝着通用人工智能&am…...
快速上手C语言【下】(非常详细!!!)
目录 1. 指针 1.1 指针是什么 1.2 指针类型 1.2.1 指针-整数 1.2.2 指针解引用 1.3 const修饰 1.4 字符指针 1.5 指针-指针 1.6 二级指针 2. 数组 2.1 定义和初始化 2.2 下标引用操作符[ ] 2.3 二维数组 2.4 终极测试 3. 函数 3.1 声明和定义 3.2 传值调用…...
红黑树的理解与实现(详解)
相关的数据结构: 搜索二叉树-CSDN博客 AVL树的创建与检测-CSDN博客 个人主页:敲上瘾-CSDN博客 个人专栏:游戏、数据结构、c语言基础、c学习、算法 目录 一、红黑树规则: 二、红黑树的插入 1.变色 2.单旋变色 3.双旋变色 三、…...
从一到无穷大 #37 Databricks Photon:打响 Spark Native Engine 第一枪
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言技术决策JVM vs. Native ExecutionInterpreted Vectorization vs Code-GenRow vs…...
Java 字符串占位格式化
Java 提供了几种方式来处理字符串占位符,最常用的是 String 类的 format 方法和 MessageFormat 类。以下是这两种方法的详细说明和示例。 1、String.format 基本语法: String formatted String.format("格式字符串", 参数1, 参数2, ...); …...
基于netty实现简易版rpc服务-理论分析
1.技术要点 1.1 rpc协议 定义一个rpc协议类,用于rpc服务端和客户端数据交互。 1.2 netty粘包半包处理 由于数据传说使用tcp协议,rpc协议的数据在网络传输过程中会产生三种情况: 1)刚好是完整的一条rpc协议数据 2)不…...
Elasticsearch高级搜索技术-全文搜索
目录 倒排索引 (Inverted Index) 示例 分词器 (Analyzer) 评分机制 (Scoring) 查询执行 match 查询 match_phrase 查询 全文搜索是Elasticsearch的核心功能之一,它通过复杂的算法和数据结构来提供高效的搜索能力。为了深入理解其工作原理,我们需要…...
案例分享—国外优秀UI卡片设计作品赏析
国外UI设计注重用户体验,倾向于采用简洁的布局、清晰的排版和直观的交互方式,减少用户的认知负担。卡片式设计能够完美利用屏幕空间,使内容一目了然,易于用户快速浏览和阅读,从而提升了整体的用户体验。 更加注重扁平化…...
Go语言基础学习(Go安装配置、基础语法)
一、简介及安装教程 1、为什么学习Go? 简单好记的关键词和语法;更高的效率;生态强大;语法检查严格,安全性高;严格的依赖管理, go mod 命令;强大的编译检查、严格的编码规范和完整的…...
STM32—FLASH闪存
1.FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程 我们怎么操作这些存储器呢?这就需要用到这个闪存存储器接口了,闪…...
AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线
1、了解FITAP与AC的建立过程 之前我们已经知道了FATAP与FIT是一对双胞胎一样的兄弟,FAT哥哥能够直接独立使用当AP桥接、路由器等,而弟弟FIT则比较薄弱,独自发挥不出功效,需要一位师傅(AC)来带领,…...
10 django管理系统 - 管理员管理 - 新建管理员(通过模态框和ajax实现)
在文章“04 django管理系统 - 部门管理 - 新增部门”中,我们通过传统的新增页面来实现部门的添加。 在本文中,我们通过模态框和ajax来实现管理员的新增。 首先在admin_list.html中新建入口,使用按钮 <div class"panel-heading&quo…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
