2个月搞定计算机二级C语言——真题(9)解析
1. 前言
本篇我们讲解2个月搞定计算机二级C语言——真题9
2. 程序填空题
2.1 题目要求
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 题目要求
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
赋值给了m
、b
赋值给了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 题目要求
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. 后记
本篇博客到这就结束了,如果您有疑问或建议欢迎您在留言区留言。
2个月搞定计算机二级C语言——真题(9)解析的更多相关文章
- 二级C语言真题笔记
二级C语言真题笔记 1. 知识重点:数据类型.循环.数组.函数.指针.结构体与共同体 2. 求程序的运行结果 #include <stdio.h> main() { short i ...
- 计算机二级-C语言-程序修改题-190108记录-字符串处理
//程序修改题:给定程序MODI1.C中函数fun的功能是:先将字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面.例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为 ...
- 计算机二级-C语言-程序修改题-190113记录-对指定字符串的大小写变换处理。
//给定程序中fun函数的功能是:将p所指的字符串中每个单词的最后一个字母改成大写.(这里的“单词”是指由空格隔开的字符串) //重难点:指针对数组的遍历.大小写转换的方法.第一种使用加减32 得到, ...
- 计算机二级-C语言-程序设计题-190112记录-结构体的遍历和结构体的数据的交换处理,文件的操作。
//程序设计题:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回 ...
- 计算机二级-C语言-程序设计题-190111记录-两种指针赋值的不同,普通输入输出函数和文件输入输出函数的使用
//程序设计题:函数fun的功能是:将两位数的正整数a,b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上.例如:当 ...
- 计算机二级-C语言-程序修改题-190123记录-对整数进行取余和除以操作。
//函数fun功能:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中.高位仍在高位,低位仍在低位. //重难点:思路:因为不是字符串,所以可以把问题变成整数的操作,采用取余和除的操作.对整 ...
- 计算机二级-C语言-程序设计题-190119记录-求出一个二维数组每一列的最小值。
//编写一个函数:tt指向一个M行N列的二维数组,求出二维数组每列中最小的元素,并依次放入pp所指的一维数组中.二维数组中的数在主函数中赋予. //重难点:求出的是每一列的最小值,这里要注意,学会简化 ...
- 计算机二级-C语言-程序设计题-190118记录-通过数组和指针两种方式对字符串进行处理。
//编写一个函数fun,比较两个字符串的长度,(不使用C语言提供的求字符串长度的函数),函数返回较长的字符串.若两个字符长度相同,则返回第一个字符串. //重难点:通过数组处理和通过指针进行处理的不同 ...
- 计算机二级-C语言-程序修改题-190116记录-对数组进行排序的两种方法。
//函数fun的功能是:将n个无序整数从小到大排序. //冒泡排序法:小数往下浮,大数往上浮.把数都存到一个数组,然后两两比较,大数往后交换.双层递减循环. //第二种方法:都放入一个数组中,然后记录 ...
- 计算机二级-C语言-程序修改题-190114记录-对整型变量进行取余操作可以取得各个位上的值。
//给定程序中fun函数的功能是:从低位开始取出长整形变量s中奇数位上的数,依次构成一个新的数放在t中.高位仍在高位,低位仍在低位.例如:当s中的数为7654321时,t中的数为7531. //重难点 ...
随机推荐
- 15-canvas渐变色
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- Camera | 6.v4l2拓扑架构
一. 设备节点.模块.拓扑结构关系 拓扑结构是我们了解MIPI-CSI内部模块以及与摄像头连接关系的最直观最便捷的方法. 1. 如何表示拓扑结构? file视角 v4l2视角 来自: 参考文档< ...
- 一文教你如何用C代码解析一段网络数据包?【含代码】
本文的目的是通过随机截取的一段网络数据包,然后根据协议类型来解析出这段内存. 学习本文需要掌握的基础知识: 网络协议 C语言 Linux操作 抓包工具的使用 其中抓包工具的安装和使用见下文: < ...
- 使用 prerenderRoutes 进行预渲染路由
title: 使用 prerenderRoutes 进行预渲染路由 date: 2024/8/20 updated: 2024/8/20 author: cmdragon excerpt: prere ...
- [postgres]使用pgbench进行基准测试
前言 pgbench是一种在postgres上进行基准测试的简单程序,一般安装后就会自带.pgbench可以再并发的数据库绘画中一遍遍地进行相同序列的SQL语句,并且计算平均事务率. 测试准备 既然要 ...
- Web刷题之polarctf靶场(1)
PolarCTF 1.XFF 打开靶场发现需要ip为1.1.1.1的用户才行, 打开BurpSuite进行抓包并对数据包进行修改,根据题目XFF提示 flag{847ac5dd4057b1ece411 ...
- python之re库,正则表达
一.前言 为什么要学re库呢?这里主要学他的正则表达,在编写安全脚本的时候肯定要遇到一些不规则的匹配规则,当然编写爬虫也少不了正则匹配去找到一些具有特殊特征的字符串.因此这是十分必要的,然而.re库使 ...
- 官方 | 征集 Flutter 桌面端应用程序的构建案例
亲爱的社区成员们,大家好! Google Flutter 团队希望了解开发者们使用 Flutter 构建的桌面端应用程序,以提高 Flutter 桌面端的测试覆盖率,邀请大家通过表单的形式提交征集和反 ...
- springboot整合shiro框架详解
在ShiroRealm 中 对所有 引入的service 加上注解 @Lazy ,防止 事务回滚失败.具体原因看该文章 新增整合swagger2,因为之前整合了shiro,所以再访问swagger的时 ...
- 使用 Docker 部署 MySql
前言 虽然不建议将需要持久化的数据保存在容器中,但是自己平时做个小项目玩玩还是没什么问题的. 拉取镜像 docker pull mysql 不加 tag 的话默认从 DockerHub 拉取最新版本的 ...