2个月搞定计算机二级C语言——真题(8)解析
1. 前言
本篇我们讲解2个月搞定计算机二级C语言——真题8
2. 程序填空题
2.1 题目要求
2.2 提供的代码
#include <stdio.h>
#define N 3
#define M 4
/**********found**********/
void fun(int (*a)[N], int __1__) {
int i, temp;
/**********found**********/
for (i = 0; i < __2__; i++) {
temp = a[0][i];
/**********found**********/
a[0][i] = __3__;
a[k][i] = temp;
}
}
main() {
int x[M][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}, i, j;
printf("The array before moving:\n\n");
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++)
printf("%3d", x[i][j]);
printf("\n\n");
}
fun(x, 2);
printf("The array after moving:\n\n");
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++)
printf("%3d", x[i][j]);
printf("\n\n");
}
getchar();
}
2.3 解题思路
第(1)处填空:
该函数的形参中留了一个空,根据题目描述我们可以得到一共有两个形参:一个是指针a
,另一个是行k
,所以这里直接填入k
即可。
void fun(int (*a)[N], int k) {
第(2)处填空:
题目所给定得代码是想要通过循环到达第k
行,然后通过temp
作为临时存储变量,从而转换了第k
行与第 0 行的元素,这里需要填入=k
,即i<=k
。
for (i = 0; i <= k; i++) {
第(3)处填空:
这个空的上一条语句temp = a[0][i];
已经把第 0 行的元素a[0][i]
赋值给了temp
,这里要做的是把a[k][i]
赋值给a[0][i]
,再加上下一句a[k][i] = temp;
从而达到交换元素的效果。
原理和交换两个变量中存储的值差不多,这里也借用了一个中间的临时存储变量来暂存某一变量的值。
a[0][i] = a[k][i];
2.4 代码实现
填写完整的代码:
#include <stdio.h>
#define N 3
#define M 4
/**********found**********/
void fun(int (*a)[N], int k) {
int i, temp;
/**********found**********/
for (i = 0; i <= k; i++) {
temp = a[0][i];
/**********found**********/
a[0][i] = a[k][i];
a[k][i] = temp;
}
}
main() {
int x[M][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}, i, j;
printf("The array before moving:\n\n");
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++)
printf("%3d", x[i][j]);
printf("\n\n");
}
fun(x, 2);
printf("The array after moving:\n\n");
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++)
printf("%3d", x[i][j]);
printf("\n\n");
}
getchar();
}
提示:为确保代码正常运行,请在题库编程环境的对应题目中进行测试和运行。
3. 程序修改题
3.1 题目要求
3.2 提供的代码
#include <stdio.h>
#include <string.h>
void fun(char* a, char* b, char* c) {
int i, j;
char ch;
i = 0;
j = strlen(b) - 1;
/************found************/
while (i > j) {
ch = b[i];
b[i] = b[j];
b[j] = ch;
i++;
j--;
}
while (*a || *b) {
/************found************/
If(*a) {
*c = *a;
c++;
a++;
}
if (*b) {
*c = *b;
c++;
b++;
}
}
*c = 0;
}
main() {
char s1[100], s2[100], t[200];
printf("\nEnter s1 string : ");
scanf("%s", s1);
printf("\nEnter s2 string : ");
scanf("%s", s2);
fun(s1, s2, t);
printf("\nThe result is : %s\n", t);
getchar();
}
3.3 解题思路
原题写的是i > j
,我们可以看到i
是 0,j
是b
所指字符串的长度减 1,只要b
所指字符串中有字符就永远不会满足这个条件,所以程序不会执行此while
循环。
这里要实现的是b
所指字符串中的字符逆序存放,其中i
和j
分别代表下标的头和尾,它俩在while
中会逐渐向数组中间下标移动,并且每次移动会将下标中的元素互换,从而达到字符串逆序的效果。
所以这里需要填写i < j
,i
在小于j
的时候说明还未走到数组中间,即未完成逆序,则循环。
第(1)处修改:
while (i < j) {
第(2)处修改:
这里没什么好说的,原本为小写的if
写成了If
,改过来即可。
if(*a) {
3.4 代码实现
修改后的代码:
#include <stdio.h>
#include <string.h>
void fun(char* a, char* b, char* c) {
int i, j;
char ch;
i = 0;
j = strlen(b) - 1;
/************found************/
while (i < j) {
ch = b[i];
b[i] = b[j];
b[j] = ch;
i++;
j--;
}
while (*a || *b) {
/************found************/
if(*a) {
*c = *a;
c++;
a++;
}
if (*b) {
*c = *b;
c++;
b++;
}
}
*c = 0;
}
main() {
char s1[100], s2[100], t[200];
printf("\nEnter s1 string : ");
scanf("%s", s1);
printf("\nEnter s2 string : ");
scanf("%s", s2);
fun(s1, s2, t);
printf("\nThe result is : %s\n", t);
getchar();
}
提示:为确保代码正常运行,请在题库编程环境的对应题目中进行测试和运行。
4. 程序设计题
4.1 题目要求
4.2 提供的代码
#include <stdio.h>
#define N 50
#define M 11
void fun(int* a, int* b) {
}
double rnd() {
static t = 29, c = 217, m = 1024, r = 0;
r = (r * t + c) % m;
return ((double) r / m);
}
main() {
int age[N], i, d[M];
void NONO(int d[M]);
for (i = 0; i < N; i++)
age[i] = (int) (115 * rnd());
printf("The original data :\n");
for (i = 0; i < N; i++)
printf((i + 1) % 10 == 0 ? "%4d\n" : "%4d", age[i]);
printf("\n\n");
fun(age, d);
for (i = 0; i < 10; i++)
printf("%4d---%4d : %4d\n", i * 10, i * 10 + 9, d[i]);
printf(" Over 100 : %4d\n", d[10]);
NONO(d);
getchar();
}
void NONO(int d[M]) { /* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE* wf;
int i;
wf = fopen("out.dat", "w");
for (i = 0; i < 10; i++)
fprintf(wf, "%4d---%4d : %4d\n", i * 10, i * 10 + 9, d[i]);
fprintf(wf, " Over 100 : %4d\n", d[10]);
fclose(wf);
}
4.3 解题思路
针对这个题的解法是遍历age
数组,将其中存储的年龄分别判断后,把结果传给*d
。
判断的方式有很多,你可以通过判断范围、或判断十位上的数字等等。
我这里采用的是先判断年龄是否>=100
,是则让b[10]++;
,否则说明年龄是在 0~99之间的,之间将年龄除 10 得到的经过即可作为b
的下标。
例如年龄为 18,计算18 / 10 = 1
,因为是整形相除所以会自动取整,而结果1
正好对应题目要求的“把10至19岁年龄段的人数放在d[1]中”的下标,可以简化程序。
4.4 代码实现
填写完整的代码:
#include <stdio.h>
#define N 50
#define M 11
void fun(int* a, int* b) {
int i = 0;
// 初始化 *b,防止出现垃圾值
for (i = 0; i < M; i++) {
b[i] = 0;
}
// 遍历指针 *a 所指向的数组 age 的每个年龄
for (i = 0; i < N; i++) {
if (a[i] >= 100) { // 年龄 >= 100
b[10]++;
} else {
b[a[i] / 10]++;
}
}
}
double rnd() {
static t = 29, c = 217, m = 1024, r = 0;
r = (r * t + c) % m;
return ((double) r / m);
}
main() {
int age[N], i, d[M];
void NONO(int d[M]);
for (i = 0; i < N; i++)
age[i] = (int) (115 * rnd());
printf("The original data :\n");
for (i = 0; i < N; i++)
printf((i + 1) % 10 == 0 ? "%4d\n" : "%4d", age[i]);
printf("\n\n");
fun(age, d);
for (i = 0; i < 10; i++)
printf("%4d---%4d : %4d\n", i * 10, i * 10 + 9, d[i]);
printf(" Over 100 : %4d\n", d[10]);
NONO(d);
getchar();
}
void NONO(int d[M]) { /* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE* wf;
int i;
wf = fopen("out.dat", "w");
for (i = 0; i < 10; i++)
fprintf(wf, "%4d---%4d : %4d\n", i * 10, i * 10 + 9, d[i]);
fprintf(wf, " Over 100 : %4d\n", d[10]);
fclose(wf);
}
提示:为确保代码正常运行,请在题库编程环境的对应题目中进行测试和运行。
5. 后记
本篇博客到这就结束了,如果您有疑问或建议欢迎您在留言区留言。
2个月搞定计算机二级C语言——真题(8)解析的更多相关文章
- 二级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. //重难点 ...
随机推荐
- grpc与http2的关系
https://nullget.sourceforge.io/?q=node/895 grpc与http2的关系 grpc client 发送包到原生的http2 server client收到报错: ...
- GenericObjectPool 避免泄漏
GenericObjectPool GenericObjectPool 是 Apache Commons Pool 提供的对象池,使用的时候需要调用 borrowObject 获取一个对象,使用完以后 ...
- Pytorch的主要组成模块
Pytorch的主要组成模块 一.基本配置 对于一个PyTorch项目,我们需要导入一些Python常用的包来帮助我们快速实现功能.常见的包有os.numpy等,此外还需要调用PyTorch自身一些模 ...
- Docker 迁移数据目录
Centos7 环境,采用yum安装的,默认数据目录在/var/lib/docker中 1. 关闭docker服务 systemctl stop docker 2. 备份和迁移 # 迁移 cp -r ...
- git与svn的对比-copy
SVN与Git比较的优缺点差异 目录: SVN与Git比较(一)集中式vs分布式 SVN与Git比较(二)版本库与工作区 SVN与Git比较(三)全局版本号和全球版本号 SVN与Git比较(四)部 ...
- Qml 中实现时间轴组件
[写在前面] 时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件. 本文将介绍如何使用 Qml 实现一个灵活且可定制的时间轴组件,并探讨其设计思路和实现细节. [正文开始] 效果图 组件概述 ...
- Linux服务器上shell脚本批量循环测试接口连通性,bash工具循环测试curl性能
使用curl的-w选项来输出各种时间信息 -o /dev/null 用于丢弃响应体,只关心头部信息 -s 用于静默模式,不输出进度信息 %{http_code} 输出HTTP状态码 %{time_na ...
- 转换流:InputStreamReader、OutputStreamWriter
1.转换流涉及到的类:属于字符流InputStreamReader:将一个字节的输入流转换为字符的输入流解码:字节.字节数组 --->字符数组.字符串 OutputStreamWriter:将一 ...
- 面向对象-下(复习:关键字static、单例模式、main()的使用说明、类的结构代码块、属性的赋值顺序、关键字final)
一.关键字:static static:静态的1.可以用来修饰的结构:主要用来修饰类的内部结构属性.方法.代码块.内部类2.static修饰属性:静态变量(或类变量) 2.1 属性,是否使用stati ...
- 小程序之navigator跳转方式
navigator中的open-type可以决定小程序的跳转方式: 是否关闭当前页面 或者说以何种方式进行跳转 标签<navigator>中 open-type属性表示小程序的跳转方式: ...