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,jb所指字符串的长度减 1,只要b所指字符串中有字符就永远不会满足这个条件,所以程序不会执行此while循环。

这里要实现的是b所指字符串中的字符逆序存放,其中ij分别代表下标的头和尾,它俩在while中会逐渐向数组中间下标移动,并且每次移动会将下标中的元素互换,从而达到字符串逆序的效果。

所以这里需要填写i < ji在小于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)解析的更多相关文章

  1. 二级C语言真题笔记

    二级C语言真题笔记 1. 知识重点:数据类型.循环.数组.函数.指针.结构体与共同体 2. 求程序的运行结果 #include <stdio.h> main() {     short i ...

  2. 计算机二级-C语言-程序修改题-190108记录-字符串处理

    //程序修改题:给定程序MODI1.C中函数fun的功能是:先将字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面.例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为 ...

  3. 计算机二级-C语言-程序修改题-190113记录-对指定字符串的大小写变换处理。

    //给定程序中fun函数的功能是:将p所指的字符串中每个单词的最后一个字母改成大写.(这里的“单词”是指由空格隔开的字符串) //重难点:指针对数组的遍历.大小写转换的方法.第一种使用加减32 得到, ...

  4. 计算机二级-C语言-程序设计题-190112记录-结构体的遍历和结构体的数据的交换处理,文件的操作。

    //程序设计题:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回 ...

  5. 计算机二级-C语言-程序设计题-190111记录-两种指针赋值的不同,普通输入输出函数和文件输入输出函数的使用

    //程序设计题:函数fun的功能是:将两位数的正整数a,b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上.例如:当 ...

  6. 计算机二级-C语言-程序修改题-190123记录-对整数进行取余和除以操作。

    //函数fun功能:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中.高位仍在高位,低位仍在低位. //重难点:思路:因为不是字符串,所以可以把问题变成整数的操作,采用取余和除的操作.对整 ...

  7. 计算机二级-C语言-程序设计题-190119记录-求出一个二维数组每一列的最小值。

    //编写一个函数:tt指向一个M行N列的二维数组,求出二维数组每列中最小的元素,并依次放入pp所指的一维数组中.二维数组中的数在主函数中赋予. //重难点:求出的是每一列的最小值,这里要注意,学会简化 ...

  8. 计算机二级-C语言-程序设计题-190118记录-通过数组和指针两种方式对字符串进行处理。

    //编写一个函数fun,比较两个字符串的长度,(不使用C语言提供的求字符串长度的函数),函数返回较长的字符串.若两个字符长度相同,则返回第一个字符串. //重难点:通过数组处理和通过指针进行处理的不同 ...

  9. 计算机二级-C语言-程序修改题-190116记录-对数组进行排序的两种方法。

    //函数fun的功能是:将n个无序整数从小到大排序. //冒泡排序法:小数往下浮,大数往上浮.把数都存到一个数组,然后两两比较,大数往后交换.双层递减循环. //第二种方法:都放入一个数组中,然后记录 ...

  10. 计算机二级-C语言-程序修改题-190114记录-对整型变量进行取余操作可以取得各个位上的值。

    //给定程序中fun函数的功能是:从低位开始取出长整形变量s中奇数位上的数,依次构成一个新的数放在t中.高位仍在高位,低位仍在低位.例如:当s中的数为7654321时,t中的数为7531. //重难点 ...

随机推荐

  1. Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像/录像存储和回放/264/265/aac/pcm等

    一.前言 用ffmpeg做音视频保存到mp4文件,都会遇到一个问题,尤其是在视频监控行业,就是监控摄像头设置的音频是PCM/G711A/G711U,解码后对应的格式是pcm_s16be/pcm_ala ...

  2. Qt音视频开发06-海康sdk内核linux客户端

    一.前言 海康sdk的示例在官方是提供了的,但是无论UI还是交互简直是宇宙无敌的垃圾,猜测应该是初学者编写的,估计练手用的,所以老早就想把这个linux支持集成到自己的示例中,既然已经支持了windo ...

  3. ThreeJs-09精通粒子特效

    一.初识points与点材质 什么叫做点材质,之前说过所有物体都是有定点的比如一个球体,并且将材质设置为线框模式,这个之前就说过所有mesh物体都是由三角形构成,都是有顶点的 我们也可以创建点物体,电 ...

  4. golang自带的死锁检测并非银弹

    网上总是能看到有人说go自带了死锁检测,只要有死锁发生runtime就能检测到并及时报错退出,因此go不会被死锁问题困扰. 这说明了口口相传知识的有效性是日常值得怀疑的,同时也再一次证明了没有银弹这句 ...

  5. 状压 DP 做题记录

    1.普通状态压缩 DP oi-wiki I.P1896 [SCOI2005] 互不侵犯 \(f_{i,j,st}\) 表示前 \(i\) 行中放置了 \(j\) 个国王,当前行状态为 \(st\) 的 ...

  6. RESTful 架构详解-copy

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  7. 2025-01-15:执行操作可获得的最大总奖励 Ⅰ。用go语言,给定一个整数数组 rewardValues,其中包含 n 个代表奖励值的数字。 你开始时的总奖励 x 为 0,并且所有下标都是未标记状

    2025-01-15:执行操作可获得的最大总奖励 Ⅰ.用go语言,给定一个整数数组 rewardValues,其中包含 n 个代表奖励值的数字. 你开始时的总奖励 x 为 0,并且所有下标都是未标记状 ...

  8. wget命令简单使用

    wget是Linux下一个文件下载工具.wget支持HTTP.HTTPS.FTP协议,可使用HTTP代理. 所谓自动下载,是指 wget 可以在用户退出系统的之后在继续后台执行,直到下载任务完成. w ...

  9. 第11章 其他 XML 技术

    第11章 其他 XML 技术 概述 System.Xml 命名空间由以下命名空间和核心类型构成: ​System.Xml.*​ ​XmlReader​ 和 XmlWriter​:高性能.前向读写的 X ...

  10. 开源标杆!天翼云TeleDB入选《2024央国企开源项目典型实践》!

    近日,由中国通信标准化协会主办.中国信通院承办的2024 OSCAR开源产业大会在北京召开,会上发布<2024央国企开源项目典型实践>,天翼云科技有限公司打造的"TeleDB分布 ...