基本情况

对应课程:程序设计与算法基础I

考试时间:3小时

题型:函数题+编程题

函数题只需要完成期中一些(个)函数即可
编程题需要自己手动写main函数

说明:题目从icoding看的,不确定是不是真的是2022级的题,可以供学弟学妹练习


题目

  1. 三角形面积

题目编号:188

一. 已知条件

  1. 秦九韶公式 给定三个边长a、b、c。如果这三条边能构成一个三角形,那么该三角形的面积可以由秦九韶公式求出:

s = (a + b + c) / 2.0
area = sqrt(s * (s - a) * (s - b) * (s - c))

三角形任意两边之和大于第三边。

  1. 求平方根函数sqrt 该函数的原型如下:

double sqrt(double x);

其功能是:求数x的平方根。你可以在程序中直接调用它。

二. 任务

请补全函数area。该函数的原型如下:

double area(double a, double b, double c);

此函数的功能是:判断给定的边长a、b、c是否能构成三角形。

  • 如果能,计算并返回三角形的面积。

  • 如果不能,返回任意负值。

三. 测试用例

  1. 测试程序 测试程序已经写好,并保证输入的有效性。你不必自行编写。 测试程序的功能是:

  • 从键盘输入三条边长。各输入项间用空格隔开。

  • 调用你补全的函数area,得到结果。

  • 如果结果是正值,则按%.2lf格式输出面积;否则输出invalid。

  1. 测试用例举例

  • 用例1 输入 3 4 5 输出 6.00

  • 用例2 输入 1 2 3 输出 invalid

四. 要求

  1. 请在框架文件中完成任务。

  1. 请将你的代码写在//TODO和//END OF TODO这对标记之间。

  1. 请勿修改框架中的任何已有内容。

#include <math.h>
#include <stdio.h>/** 求三角形面积函数area* 参数说明:*      - a、b、c都是三角形的边长。* 返回值说明:*      - 如果a、b、c能构成三角形,则返回面积。*      - 否则,返回任意负值。*/
double area(double a, double b, double c) {//TODO//END OF TODO
}int main(){float a, b, c;scanf("%f %f %f", &a, &b, &c);double res = area(a, b, c);if(res < 0)printf("invalid");elseprintf("%.2lf", res);
}
  1. 找出闭区间内所有完全数

题目编号:189

一. 已知条件

  1. 真因子 有正整数f和m,且f < m。如果m能被f整除,那么f是m的真因子。显然,1是任意大于1的正整数的真因子;m不是它本身的真因子。

  1. 完全数 如果一个正整数m,其所有真因子之和等于m,那么它就是一个完全数。例如完全数6和28:

6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

二. 任务

请补全函数is_perfect。该函数的原型如下:

bool is_perfect(unsigned m);

此函数的功能是:

  • 判断m是否是一个完全数。

  • 如果是,则返回真true;否则返回假false。

注:你可以将bool类型看作是int类型,true视为1,false视为0。

提示:如果判断i是m的真因子?

三. 测试用例

  1. 测试程序 测试程序已经写好,并保证输入的有效性。你不必自行编写。 测试程序的功能是:

  • 从键盘输入两个正整数a和b并保证3 < a < b <= 10000。

  • 调用你补全的函数is_perfect,找出区间内的所有完全数,并按如下格式输出结果: (完全数1)(完全数2)...(完全数n) 如果区间内没有完全数,则输出为: ()

  1. 测试用例举例

  • 示例1 输入 1 30 输出 (6)(28)

  • 示例2 输入 7 27 输出 ()

四. 要求

  1. 请在框架文件中完成任务。

  1. 请将你的代码写在//TODO和//END OF TODO这对标记之间。

  1. 请勿修改框架中的任何已有内容。

#include <stdio.h>
#include <string.h>
#include <stdbool.h>/** 判断m是否为完全数* 参数说明:*      - m:unsigned,待判断的正整数* 返回值说明:*      - bool,如果m是完全数,返回true;否则返回false。*/
bool is_perfect(unsigned m) {//TODO//END OF TODO
}static void print_perfect(unsigned a, unsigned b) {int c = 0;for (unsigned i = a; i <= b; ++i)if (is_perfect(i)) {++c;printf("(%d)", i);}if (!c) printf("()");putchar('\n');
}int main() {unsigned a, b;scanf("%u%u", &a, &b);print_perfect(a, b);return 0;
}
  1. 利用斐波那契数列求黄金分割比例

题目编号:190

一. 已知条件

  1. 斐波那契数列 斐波那契数列的定义为:第1、2项都是1;第n项是前两项之和。递推公式如下: Fn = 1, 当n=1,2时 Fn = Fn-1 + Fn-2, 当n>2时

  1. 黄金分割比例 黄金分割比例phi约等于0.618,可以用斐波那契数列中的相邻两项求得: phi = Fn-1 / Fn n越大,得到得结果就越精确。

二. 任务

请补全函数phi的编码。该函数的原型如下:

double phi(int n);

此函数的功能是:

  • 根据递推公式计算出斐波那契数列的第n-1项和第n项

  • 计算并返回二者的商。

注意:不能也不需要用递归方法

三. 测试用例

  1. 测试程序 测试程序已经写好,并保证输入的有效性。你不必自行编写。 测试程序的功能是:

  • 从键盘输入正整数n(3 <= n <= 20)。

  • 调用你补全的函数phi,计算并用格式"%.5lf"输出结果。

  1. 测试用例举例

  • 用例1 输入 3 输出 0.50000

  • 用例2 输入 8 输出 0.61905

  • 用例3 输入 20 输出 0.61803

四. 要求

  1. 请在框架文件中完成任务。

  1. 请将你的代码写在//TODO和//END OF TODO这对标记之间。

  1. 请勿修改框架中的任何已有内容。

#include <stdio.h>/** 利用斐波那契数列求黄金分割比例** 参数说明:*      - n:int, 斐波那契数列的项数* 返回值说明:*      - double,黄金分割比例** 提示:斐波那契数列每项的值都是整数* 注意:不能也不需要用递归方法*/
double phi(int n) {//TODO//END OF TODO
}int main() {int n;scanf("%d", &n);printf("%.5lf\n", phi(n));return 0;
}
  1. 还原压缩的三角方阵

题目编号:191

一. 已知条件

  1. 三角方阵压缩 有这样的一种方阵(行列数相同的矩阵),左上三角地带所有值都是0,右下三角地带全是无规律的非0值。 例如,以下是这样的一个4阶方阵:

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

因为存在大量的0元素,所以常把它压缩存储到一个一维序列中:

7 2 4 9 6 3 8 5 1 10

假设方阵是n阶的,其非0元素个数为m,则有:m=n(n+1)/2;那么反推过来,n就接近于2m的平方根。提示:是向上取整还是向下取整?

  1. 数据结构 在C语言实现上,方阵可以用一个二维数组表示,压缩成的一维序列可以用一个一维数组表示。

二. 任务

请补全函数restore_matrix的编码。该函数的原型如下:

int restore_matrix(int a[], int b[][MAXN]); //#define MAXN  512

此函数的功能是:

  • 将一维数组a中的压缩数据还原到方阵b中,返回方阵的阶数。

三. 测试用例

  1. 测试程序 测试程序已经写好,并保证输入的有效性。你不必自行编写。 测试程序的功能是:

  • 从键盘依次输入压缩一维数组的值,最后一个数据是0值,表示输入结束。输入数值间用空格隔开。

  • 调用你补全的函数restore_matrix,得到结果,并按行依次输出还原的二维方阵的所有元素,元素间用空格隔开。

  1. 测试用例举例

  • 用例 输入 7 2 4 9 6 3 8 5 1 10 0 输出 0 0 0 7 0 0 2 4 0 9 6 3 8 5 1 10

四. 要求

  1. 请在框架文件中完成任务。

  1. 请将你的代码写在//TODO和//END OF TODO这对标记之间。

  1. 请勿修改框架中的任何已有内容。

/*
1. 本题需要的数据较多。因此,为了避免你在本地调试时反复输入,已将测试用例写在了一个数据文件q4.in中,其内容如下:
7 2 4 9 6 3 8 5 1 10 0上述数据产生的输出是:
0 0 0 7 0 0 2 4 0 9 6 3 8 5 1 102. 如果这个文件不存在,那么你就要从键盘手动输入。3. 如果你的程序编译后是a.out,那在命令行里,你可以这样运行程序 a.out < q4.in ,避免重复从键盘输入
*/#include <stdio.h>
#include <math.h>#define MAXN    512int a[MAXN];
int b[MAXN][MAXN];
/** 将压缩到一维数组的二维方阵还原* 首先要根据一维数组的非0元素个数m,计算二维方阵的阶数n。* 提示:n接近于sqrt(2m)* * 参数说明:*      - a:int[],存储压缩数据的一维数组。其中的第一个0值只表示结尾,不是压缩数据。*      - b:int[][MAXN],待还原的方阵。* 返回值说明:*      - int。方阵的阶数。*/
int restore_matrix(int a[], int b[][MAXN]) {//TODO//END OF TODO
}int main() {int i, j;i = 0;while (1) {scanf("%d", &a[i]);if (a[i] == 0) break;++i;}int n = restore_matrix(a, b);for (i = 0; i < n; ++i)for (j = 0; j < n; ++j)printf("%d ", b[i][j]);putchar('\n');return 0;
}
  1. 去除字符串首尾的所有空格

题目编号:192

一. 已知条件

  1. 首尾空格去除 一个字符串的首尾可能存在多个无用的空格。例如:

"   this is    a   test.    "

现在需要将这个字符串首尾所有的空格去除,但字符串中间的空格要原样保留。结果是这样的:

"this is    a   test."

这个结果将保存到另一个字符串中。

  1. 思路 对于原始字符串s和结果字符串t:

  • 指针p从s开头向后,找到第一个非空格字符;

  • 指针q从s尾部向前,找到第一个非空格字符;

  • 将指针p、q之间的字符复制到t中;

  • 字符串t封尾。

提示:如何找到字符串的尾部?

二. 任务

请补全函数trim的编码。该函数的原型如下:

void trim(char *s, char *t);

此函数的功能是:

  • 去除字符串s首尾所有空格,但s中间的空格原样保留。

  • 结果保存到字符串t中。

三. 测试用例

  1. 测试程序 测试程序已经写好,并保证输入的有效性。你不必自行编写。 测试程序的功能是:

  • 从键盘输入首尾、中间可能带有空格的字符串,去掉行尾的'\n',用'\0'封尾。测试程序保证没有全是空格的输入。

  • 调用你补全的函数trim,得到结果,并按如下格式输出: (去掉首尾空格的字符串)

加上()的作用是为了让结果一目了然。

  1. 测试用例举例

  • 用例 输入 this is a test. 输出 this is a test. 注:输入输出背景加深是为了能看清两端空格的存在。

四. 要求

  1. 请在框架文件中完成任务。

  1. 请将你的代码写在//TODO和//END OF TODO这对标记之间。

  1. 请勿修改框架中的任何已有内容。

#include <stdio.h>
#include <string.h>/*对于原始字符串s和结果字符串t:- 指针p从s开头向后,找到第一个非空格字符;- 指针q从s尾部向前,找到第一个非空格字符;- 将指针p、q之间的字符复制到t中;- 字符串t封尾。
*//** 去除字符串两端空格的函数trim* 将字符串开头和末尾的所有空格字符去除* * 参数说明:*      - s:char*,原始字符串*      - t:char*,去掉所有首尾空格后的字符串* 返回值说明:*      - 无**/
void trim(char *s, char *t) {//TODO//END OF TODO
}#define MAXN   512extern void trim(char *s, char *t);int main() {char s[MAXN + 1], t[MAXN + 1];fgets(s, MAXN, stdin);char *p = strchr(s, '\n');if (p) *p = '\0';trim(s, t);printf("(%s)\n", t);return 0;
}
  1. 键值对数组排序

一. 已知条件

  1. 键值对的数据结构 键值对(key-value pair)可以用C语言的结构来描述:

typedef struct {char key[30];  //用字符串表示的键int value;     //基于简化的目的,数值的类型是int
} pair;

在此基础上,用键值对数组来存储更多的数据。

pair kv[128];  //kv是键值对类型的数组。元素的键无重复。
  1. 字符串比较函数 两个字符串进行值比较的标准库函数原型如下:

int strcmp(const char *s, const char *t);

这个函数的功能是:比较两个字符串的字典序大小。如果s>t,函数返回正值;如果s<t,返回负值;如果相等,返回0。

二. 任务

请补全排序函数sort_kv的编码。该函数的原型如下:

void sort_kv(pair kv[], int n);

此函数的功能是:

  • 利用冒泡排序法,按照键值(注:是个字符串)的大小对长度为n的数组kv进行升序排序。

三. 测试用例

  1. 测试程序 测试程序已经写好,并保证输入的有效性。你不必自行编写。 测试程序的功能是:

  • 先读入键值对数组长度,然后依次读入键值对。

  • 调用你补全的函数sort_kv,然后如下格式输出排序结果: (键1=>值1)(键2=>值2)...(键n=>值n)

  1. 测试用例举例

  • 用例 输入

5
pear 30
apple 100
pineapple 20
orange 80
durian 10

输出

(apple=>100)(durian=>10)(orange=>80)(pear=>30)(pineapple=>20)

四. 要求

  1. 请在框架文件中完成任务。

  1. 请将你的代码写在//TODO和//END OF TODO这对标记之间。

  1. 请勿修改框架中的任何已有内容。

/*
1. 本题需要的数据较多。因此,为了避免你在本地调试时反复输入,已将测试用例写在了一个数据文件q6.in中,其内容如下:
5
pear 30
apple 100
pineapple 20
orange 80
durian 10上述数据产生的输出是:
(apple=>100)(durian=>10)(orange=>80)(pear=>30)(pineapple=>20)2. 如果这个文件不存在,那么你就要从键盘手动输入。3. 如果你的程序编译后是a.out,那在命令行里,你可以这样运行程序 a.out < q6.in ,避免重复从键盘输入
*/#include <stdio.h>
#include <string.h>typedef struct {char key[30];  //用字符串表示的键int value;     //基于简化的目的,数值的类型是int
} pair;/** 用冒泡排序法对键值对数组按键进行排序(升序)* * 参数说明:*      - kv:int[],键值对数组*      - n:int,数组长度* 返回值说明:*      - 无*/
void sort_kv(pair kv[], int n) {//TODO//END OF TODO
}pair kv[128];  //kv是键值对类型的数组static void print_kv(pair kv[], int n) {for (int i = 0; i < n; ++i)printf("(%s=>%d)", kv[i].key, kv[i].value);putchar('\n');
}int main() {int n;scanf("%d", &n);for (int i = 0; i < n; ++i)scanf("%s%d", kv[i].key, &kv[i].value);sort_kv(kv, n);print_kv(kv, n);return 0;
}

自我练习

1. 登录icoding,点击左侧的开始编程

点击左侧栏的开始编程

2. 新建一个标签页,网址栏输入 https://icoding.run/ide/question/xxx/1

注意:上方网址的xxx更换为icoding题目编号,题目编号为上方的题目序号下面的黄帝文字,如第一题的编号为188.要练习哪个题就对应那个题目编号

3. 这个新建的标签页出现如下图像时

回到icoding,刷新,即可看到作答页面。


声明

本文章仅供学习使用。严禁作其他用途。

更多真题可参考https://blog.csdn.net/jjq15008419406/category_11960847.html

电子科大信软互+班 程算I 2022级机考真题相关推荐

  1. 电子科大信软互+班 程算I 2021机考真题

    基本情况 对应课程:程序设计与算法基础I 考试时间:3小时 题型:函数题+编程题 函数题只需要完成期中一些(个)函数即可 编程题需要自己手动写main函数 提示:题目序号为x-x的可能为一组题目,若题 ...

  2. 电子科大信软互+班 程算I 2020机考真题

    基本情况 对应课程:程序设计与算法基础I 考试时间:3小时 题型:函数题+编程题 函数题只需要完成期中一些(个)函数即可 编程题需要自己手动写main函数 提示:题目序号为x-x的为一组题目,若题目告 ...

  3. 电子科大信软互+班 程算II 2021机考真题(含答案)

    目录 基本情况 具体题目 1 线性表1 2 线性表2 3 栈 4 二叉树 5 树 6 图 7 排序 自我练习 声明 基本情况 对应课程:程序设计与算法基础II(数据结构与算法基础) 考试时间:3小时 ...

  4. 软件设计师 软考 真题练习 (三)

    软件设计师 软考 真题练习 (三) 以下关于散列表(哈希表),及其查找特点的叙述中,正确的是 A.在散列表中进行查找时,只需要与待查找关键字及其同义词进行比较 B.只要散列表的装填因子不大于1/2,就 ...

  5. 自考软考需要做什么题,自考软考真题哪里有呢?

    除了可以自我提升,软考还能提供各式各样的帮助,包括但不限于北上广落户.孩子上学,人才引进.对于工作的人,报考培训班是不太现实的,时间没有那么自由,很多人会选择自考软考,那么自考软考需要做什么题呢?自考 ...

  6. 软考真题的重要性不用再强调了吧

    各位考生都深知[真题]的重要性.大家对历年真题,从来都是"备考必做"的态度. 刷软考真题,除了可以让自己尽快熟悉考试题型和考点外,还有什么好处呢?真题都考过了,还会再出吗? 不管是 ...

  7. 2021年上半年软考真题及答案解析汇总

    2021上半年软考考试在5月29日-5月30日举行,小编整理了2021年上半年软考各科目的真题及答案解析,欢迎一起讨论,可用于估分. 软考真题软考真题软考真题软考真题软考真题~重要的多说几遍!!! 持 ...

  8. 中科大-计算机类考研真题(初试笔试真题详解+复试笔试机试真题详解+面试问题汇总分析)

    中科大-计算机类考研真题(初试笔试真题详解+复试笔试机试真题详解+面试问题汇总分析) 初试笔试真题2003年~2019年:答案+详解 复试面试问题总结:问题汇总+详解分析 复试面试经验总结:个人小结 ...

  9. 往年考过的软考真题,2021还会再出吗?

    各位考生都深知[真题]的重要性.大家对历年真题,从来都是"备考必做"的态度. 刷软考真题,除了可以让自己尽快熟悉考试题型和考点外,还有什么好处呢?真题都考过了,还会再出吗? 不管是 ...

最新文章

  1. linux中怎么退出执行过程,(进程)处理过程中的Linux:从执行到退出
  2. php 360 极速模式,如何让360浏览器默认使用极速模式
  3. Android 简单基站定位程序
  4. netty springmvc_springmvc源码架构解析之HandlerMapping
  5. 五种方式让你在java中读取properties文件内容不再是难题
  6. spark整合MySQL
  7. ambari mysql jar_从零开始安装 Ambari (3) -- 安装 Ambari
  8. snmp,mrtg安装和配置(2) mrtg安装
  9. Spring MVC静态资源实例
  10. Cisco自反控制列表的应用
  11. 如何自己用U盘重装系统
  12. 阿里布局无人驾驶;滴滴成立汽车服务;“京东 AI 天团”首亮相| CSDN极客头条
  13. 关于结合测试时,数据准备的一些注意点 (之开始篇:如何能更快,更好的准备测试数据)。
  14. asp,jsp,php等web开发必懂技术---什么时候使用静态页,什么时候必须使用动态页...
  15. vue 第十天 (组件的基本使用)
  16. java和C#的相同之处笔记
  17. 8uftp cuteftp,8uftp cuteftp之间的差别
  18. Ubuntu 20.04 LTS 修改IP地址
  19. 【前沿技术RPA】 一文学会用UiPath实现自动发送电子邮件(Email Automation)
  20. 逆火软件测试工资,世界级人体工学设计:HyperX Pulsefire FPS逆火鼠标评测

热门文章

  1. Firefly AIO-3399Pro C开发板交叉编译OpenCV 3.4.10及FFmpeg、x264等依赖库,实现视频播放等功能
  2. [西南财经大学的Python应用基础]:python列表和元组的作业
  3. 原初.Le.premier.cercle.2009.480X272.PSP.iPhone.MP4
  4. 【每天学习一点新知识】robots.txt详解
  5. 【实战】使用Java结合Sendmail邮件服务器+Quartz开源框架定时发邮件
  6. 阿里巴巴达摩院通义千问【附申请链接】阿里版ChatGPT
  7. 光栅位移传感器如何安装
  8. 基于 vue 编写的vue图片预览组件,支持单图和多图预览,仅传入一个图片地址,即可实现图片预览效果,可自定义背景、按钮颜色等
  9. teamspeak搭建_关于teamspeak3搭建云服务器教程
  10. SpringBoot访问jar包静态文件