2个月搞定计算机二级C语言——真题(9)解析

news/2024/12/24 11:44:26/文章来源:https://www.cnblogs.com/main-studio/p/18531036

1. 前言

本篇我们讲解2个月搞定计算机二级C语言——真题9

真题9-程序评分

2. 程序填空题

2.1 题目要求

真题9-程序填空

2.2 提供的代码

#include  <stdio.h>
double f1(double  x)
{return x * x;
}
double f2(double  x, double  y)
{return  x * y;
}
/**********found**********/
__1__ fun(int  i, double  x, double  y)
{if (i == 1)/**********found**********/return __2__(x);else/**********found**********/return  __3__(x, y);
}
main()
{double  x1 = 5, x2 = 3, r;r = fun(1, x1, x2);r += fun(2, x1, x2);printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n", x1, x2, r);getchar();
}

2.3 解题思路

第(1)处填空:

题目要求输出浮点型,所以返回值可以使用main函数中使用的类型double

double fun(int  i, double  x, double  y)

第(2)处填空:

这里填写的参数只有x,所以是调用的函数f1

return f1(x);

第(3)处填空:

参数为x,y,对应着函数f2

return  f2(x, y);

2.4 代码实现

填写完整的代码:

#include  <stdio.h>
double f1(double  x)
{return x * x;
}
double f2(double  x, double  y)
{return  x * y;
}
/**********found**********/
double fun(int  i, double  x, double  y)
{if (i == 1)/**********found**********/return f1(x);else/**********found**********/return  f2(x, y);
}
main()
{double  x1 = 5, x2 = 3, r;r = fun(1, x1, x2);r += fun(2, x1, x2);printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n", x1, x2, r);getchar();
}

提示:为确保代码正常运行,请在题库编程环境的对应题目中进行测试和运行。

3. 程序修改题

3.1 题目要求

真题9-程序修改

3.2 提供的代码

#include   <stdio.h>
void fun(int  n)
{int  j, b, c, m, flag = 0;for (b = 1; b <= n / 2; b++) {/**********found**********/n = m;c = b;while (m != 0 && m >= c) {/**********found**********/m = m - c;    c++}/**********found**********/if (m != 0){printf("%d=", n);for (j = b; j < c - 1; j++)   printf("%d+", j);printf("%d\n", j);flag = 1;}}if (flag == 0)printf("不能分解\n");
}
main()
{int  n;printf("请输入一个整数 :   ");   scanf("%d", &n);fun(n);getchar();
}

3.3 解题思路

第(1)处修改:

原来的程序是n = m;,因为m这个变量在定义时没有初始化,它内部存储的可能是垃圾值,赋值给n后会导致n不再存储传入的 100,而是存储的垃圾值,这没有实际的意义,反而会导致程序跑飞。

所以这里需要让m初始化为n,在while (m != 0 && m >= c)这个循环中不断从m中减去c(当前序列的值),并且让c递增以考虑下一个正整数。

m = n;

第(2)处修改:

C语言中每条语句是以;作为结束,在语句c++后面少了;,加上即可。

m = m - c;    c++;

第(3)处修改:

如果在while (m != 0 && m >= c)循环结束时,变量m的值为 0,说明通过不断减去当前的正整数c,正好将m减到 0。我们前面将n赋值给了mb赋值给了c,这就意味着从b开始的连续正整数的和恰好等于n

所以说如果m等于 0,代表找到了和为n的一组连续正整数,则进行相应的输出。

if (m == 0)

3.4 代码实现

修改后的代码:

#include   <stdio.h>
void fun(int  n)
{int  j, b, c, m, flag = 0;for (b = 1; b <= n / 2; b++) {/**********found**********/m = n;c = b;while (m != 0 && m >= c) {/**********found**********/m = m - c;    c++;}/**********found**********/if (m == 0){printf("%d=", n);for (j = b; j < c - 1; j++)   printf("%d+", j);printf("%d\n", j);flag = 1;}}if (flag == 0)printf("不能分解\n");
}
main()
{int  n;printf("请输入一个整数 :   ");   scanf("%d", &n);fun(n);getchar();
}

提示:为确保代码正常运行,请在题库编程环境的对应题目中进行测试和运行。

4. 程序设计题

4.1 题目要求

真题9-程序设计

4.2 提供的代码

#include   <stdio.h>
#include  <string.h>
void NONO();
int  fun(char* t)
{}main()
{char  s[26];printf("请输入一个字母组成的字符串 :  "); gets(s);if (fun(s))  printf("%s 是由连续字母组成的字符串.\n", s);else   printf("%s 不是由连续字母组成的字符串!\n", s);NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE* fp, * wf;int i;char s[26], * p;fp = fopen("in.dat", "r");wf = fopen("out.dat", "w");for (i = 0; i < 10; i++) {fgets(s, 26, fp);p = strchr(s, '\n');if (p) *p = 0;if (fun(s)) fprintf(wf, "%s\n", s + 2);else  fprintf(wf, "%s\n", strrev(s));}fclose(fp);fclose(wf);
}

4.3 解题思路

我给出了两种解法,第二种在文末,先来看第一种。

对于这个题,我们首先需要知道t所指字符串的首位是什么字母,也就是t[0]的值,这里我使用char c = t[0]来存储,在知道值后可以根据t的大小遍历它,同时每次进行c++;作为连续递增字母序列的比较,在循环中只要找到一次t[i]不等于c的值,就说明t所指字符串是不连续的,直接返回 0 即可。当遍历完所有的元素均相等,则说明是连续的递增字母序列,返回 1。

下面假设t所指的字符串是acd,进行不连续字符串程序的演示:

      i    c    t[i]
1.    0    a    a---- > 相等进行下一次
2.    1    b    c---- > 不相等返回 0

反之连续字符串会执行完for循环后,返回 1。

4.4 代码实现

填写完整的代码:

#include   <stdio.h>
#include  <string.h>
void NONO();
int  fun(char* t)
{char c = t[0];int i = 0;for (i = 0; i < strlen(t); i++){if (t[i] != c)    // 当检测到一处不相等时,说明不是连续递增的{return 0;    // 则返回 0}c++;}return 1; // 将字符串全部遍历,没有发现不相等的,返回 1
}main()
{char  s[26];printf("请输入一个字母组成的字符串 :  "); gets(s);if (fun(s))  printf("%s 是由连续字母组成的字符串.\n", s);else   printf("%s 不是由连续字母组成的字符串!\n", s);NONO();getchar();
}void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */FILE* fp, * wf;int i;char s[26], * p;fp = fopen("in.dat", "r");wf = fopen("out.dat", "w");for (i = 0; i < 10; i++) {fgets(s, 26, fp);p = strchr(s, '\n');if (p) *p = 0;if (fun(s)) fprintf(wf, "%s\n", s + 2);else  fprintf(wf, "%s\n", strrev(s));}fclose(fp);fclose(wf);
}

提示:为确保代码正常运行,请在题库编程环境的对应题目中进行测试和运行。

还有一种方法是先根据首位元素和长度生成一个连续的递增字母序列,使用函数strcmp()t与之比较,也可以判断是否连续,下面给出代码供大家参考:

int  fun(char* t)
{char c[26] = { 0 };int i = 0;// 先根据 t[0]的值,和它的大小生产连续的递增字母序列c[0] = t[0];for (i = 0; i < strlen(t); i++){c[i] = c[0] + i;}// 使用 strcmp() 函数判断这两个字符串是否相等if (strcmp(c, t) == 0)    // strcmp() 返回 0 则说明两个字符串相等{return 1;    // 则返回 1}else {return 0;    // 不相等的,返回 0
}

5. 后记

本篇博客到这就结束了,如果您有疑问或建议欢迎您在留言区留言。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转载】TortoiseSVN怎么恢复到以前版本-恢复到以前版本的方法

原文链接:https://blog.csdn.net/hbiao68/article/details/131595214 SVN(Subversion)是一个版本控制系统,它允许用户跟踪文件的更改并回退到以前的版本。 第一步:进到到文件目录,右键点击【空白处】。 第二步:点击打开【TortoiseSVN】。 第三步:点击【更新至版本】。 …

如何在windows中安装达梦数据库?

前言 近年来,国产数据库越来越流行了,其中的原因大家也都知道。其中,我接触过的一款数据库就是达梦数据库。这个数据库的使用还是挺方便的。我知道最近有越来越多的小伙伴要开始国产化改造了,所以,对于达梦数据库这样的国产数据库,肯定想要了解很多知识的。所以,今天就来…

基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印)svm参数取值对检测性能的影响: SVM,PSO,GA-PSO-SVM的检测性能对比: 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频,参考文献,说明文档)load GAPSO.mat %调用四个最优的参数 ta…

DBeaver如何快速格式化sql语句,真简单!

前言 我之前在使用DBeaver的时候,一直不知道其可以格式化sql语句,导致sql语句看起来比较杂乱,今天就来介绍下DBeaver如何格式化sql语句。 如何格式化sql语句 首先,我们打开一个sql窗口,在里面输入我们要查询的sql语句,如图所示。可以看到,此时sql语句是比较杂乱的。然后…

学习笔记(二十七):ArkUi-警告弹窗(AlertDialog)

概述: 警告弹窗,需要向用户提问或得到用户的许可。警告弹窗用来提示重要信息,但会中断当前任务,尽量提供必要的信息和有用的操作。 避免仅使用警告弹窗提供信息,用户不喜欢被信息丰富但不可操作的警告打断。 必选内容包含:标题、可选信息文本、最多3个按钮。 可选内容包含…

figure

figure 新知识:坐标隐写和Rot47编码 用010打开发现好长一串字符,全是小写字母和数字,感觉是十六进制最后那里看着是png文件头的十六进制的逆序,逆回去得到png图片有坐标,想起了用坐标画图,但是肯定不是,因为点太少了而且这个图大致算是画出来了 每个点前面有序号,先一个…

CSP2024 前集训:多校A层冲刺NOIP2024模拟赛18

前言 不知道咋回事儿?脑子里一直放歌。 然后 T3 空间给了 256,开了 256.23 死了。 T1 选彩笔 显然可以二分答案,所以现在有了 \(O(nv^3\log v)\) 的做法,去重后可以拿到 \(80pts\),发现直接三维前缀和就可以做到 \(O(v^3\log v)\)。点击查看代码 #include<bits/stdc++.…

实验3 类和对象 基础编程

实验一 task1.cpp#include "window.hpp" #include <iostream>using std::cout; using std::cin;void test() {Window w1("new window");w1.add_button("maximize");w1.display();w1.close(); }int main() {cout << "用组合类模…

别再被多线程搞晕了!一篇文章轻松搞懂 Linux 多线程同步!

别再被多线程搞晕了!一篇文章轻松搞懂 Linux 多线程同步!前言 大家有没有遇到过,代码跑着跑着,线程突然抢资源抢疯了?其实,这都是“多线程同步”在作怪。多线程同步是个老生常谈的话题,可每次真正要处理时还是让人头疼。这篇文章,带你从头到尾掌握 Linux 的多线程同步,…

『模拟赛』NOIP2024加赛2

『模拟赛记录』NOIP2024加赛2Rank 一直烂,什么时候触底反弹(A. 新的阶乘 赛时觉得线筛一遍同时统计每个质数的指数就做完了,然后本机怎么跑不进 1s,卡常卡了半个小时,最后没 T,但是 vector 炸了,70pts。 可以换思路考虑,赛时一直没转换过来。对于每个质数枚举其倍数统计…

矩阵求导 d(A*X)/dX

矩阵求导 d(A*X)/dX简单矩阵求导 $\frac{ \part (A \times X) }{ \part X }=A$。证明如下,自行体会。 感谢 https://www.cnblogs.com/sunny99/ sumoier对本文的帮助

学习笔记(二十六):资源分类与访问(Resources)

概述: 应用开发中使用的各类资源文件,需要放入特定子目录中存储管理。 资源目录的示例如下所示, base目录、限定词目录、rawfile目录、resfile目录称为资源目录;element、media、profile称为资源组目录。resources |---base | |---element | | |---string.json | |…