1. 前言

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

2. 程序填空题

2.1 题目要求

2.2 提供的代码

#include <stdio.h>
unsigned long fun(unsigned long n) {
unsigned long x = 0;
int t;
while (n) {
t = n % 10;
/**********found**********/
if (t % 2 == __1__)
/**********found**********/
x = __2__ + t;
/**********found**********/
n = __3__;
}
return x;
}
main() {
unsigned long n = -1;
while (n > 99999999 || n < 0) {
printf("Please input(0<n<100000000): ");
scanf("%ld", &n);
}
printf("\nThe result is: %ld\n", fun(n));
getchar();
}

2.3 解题思路

题目要求将各位上的偶数取出,需要将各位的数取出后再判断该数是否为偶数,偶数可以通过该数除 2 取余的结果来判断,如果结果为 0 则是偶数,为 1 则是奇数。

第(1)处填空:

此处是用来判断取出的一位数字是否为偶数,上面说过如何判断是否为偶数,所以这里我们需要让它判断是否等于 0。

if (t % 2 == 0)

第(2)处填空:

这里我们要实现的功能是重组一个新的数,题目要求是相反的顺序,所以我们需要每次让x * 10,下面程序的代码中演示:

// t = 6 时符合条件,x = 0 * 10 + 6,则 x 为 6
// t = 9 时不符合条件,则执行 n = n / 10;
// t = 4 时符合条件,x = 6 * 10 + 4,则 x 为 64
// t = 8 时符合条件,x = 64 * 10 + 8,则 x 为 648
// 下同
x = x * 10 + t;

第(3)处填空:

这里我们要实现的是将前面取出的个位数除去,原本的十位变为个位,以便下次循环进入时t = n % 10;取出的是一个新数值。

n = n / 10;

2.4 代码实现

填写完整的代码:

#include <stdio.h>
unsigned long fun(unsigned long n) {
unsigned long x = 0;
int t;
while (n) {
t = n % 10;
/**********found**********/
if (t % 2 == 0) // 除 2 取余等于 0,则为整数
/**********found**********/
x = x * 10 + t; // 将 t 的值加到 x 的个位
/**********found**********/
n = n / 10; // 逐次除去 n 的个位
}
return x;
}
main() {
unsigned long n = -1;
while (n > 99999999 || n < 0) {
printf("Please input(0<n<100000000): ");
scanf("%ld", &n);
}
printf("\nThe result is: %ld\n", fun(n));
getchar();
getchar();
}

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

3. 程序修改题

3.1 题目要求

3.2 提供的代码

#include <stdio.h>
void fun(char* p) {
char max, *q;
int i = 0;
max = p[i];
q = p;
while (p[i] != 0) {
if (max < p[i]) {
max = p[i];
/**********found**********/
q = p + i
}
i++;
}
/**********found**********/
wihle(q > p) {
*q = *(q - 1);
q--;
}
p[0] = max;
}
main() {
char str[80];
printf("Enter a string: ");
gets(str);
printf("\nThe original string: ");
puts(str);
fun(str);
printf("\nThe string after moving: ");
puts(str);
printf("\n\n");
getchar();
}

3.3 解题思路

本题只有两处错误,一个语法错误,一个关键字写错了,都是初学者经常犯的错误,在编程时需要注意一下。

第(1)处修改:

这里是因为语句后面没有加;,加上就好。

q = p + i;

第(2)处修改:

这句是因为while写错了。对于这种错误,更有可能出错的是main,会有人写成mian导致程序出错,也要注意。

while(q > p) {

3.4 代码实现

修改后的代码:

#include <stdio.h>
void fun(char* p) {
char max, *q;
int i = 0;
max = p[i];
q = p;
while (p[i] != 0) {
if (max < p[i]) {
max = p[i];
/**********found**********/
q = p + i;
}
i++;
}
/**********found**********/
while(q > p) {
*q = *(q - 1);
q--;
}
p[0] = max;
}
main() {
char str[80];
printf("Enter a string: ");
gets(str);
printf("\nThe original string: ");
puts(str);
fun(str);
printf("\nThe string after moving: ");
puts(str);
printf("\n\n");
getchar();
}

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

4. 程序设计题

4.1 题目要求

4.2 提供的代码

#include <stdio.h>
#pragma warning(disable : 4996)
#define N 10
int fun(int x[], int e, int* sum) {
}
main() {
void NONO();
int x[N] = {1, 7, 8, 6, 10, 15, 11, 13, 29, 31}, e = 3, n, sum;
n = fun(x, e, &sum);
printf("n=%d,sum=%d\n", n, sum);
NONO();
} void NONO() {
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
int i, j, x[10], n, e, sum;
FILE *rf, *wf; rf = fopen("in.dat", "r");
wf = fopen("out.dat", "w");
for (i = 0; i < 5; i++) {
for (j = 0; j < 10; j++)
fscanf(rf, "%d ", &x[j]);
fscanf(rf, "%d", &e);
n = fun(x, e, &sum);
fprintf(wf, "%d, %d\n", n, sum);
}
fclose(rf);
fclose(wf);
}

4.3 解题思路

根据题目提供的数组x、整数e和输出结果可以看出是要求数组中能整除e的,也就是整除e的倍数,所以本题的题目描述错了。

那么我们只需要遍历数组x,判断元素是否能整除e,是则计数加 1,否则求和加该元素存储的数。

4.4 代码实现

填写完整的代码:

#include <stdio.h>
#pragma warning(disable : 4996)
#define N 10
int fun(int x[], int e, int* sum) {
int count = 0, i = 0; *sum = 0; // 将 sum 存储的数据清空,防止出现垃圾值 for (i = 0; i < N; i++) { // 遍历数组 X,范围取 0 ~ (N-1)
if (x[i] % e == 0) { // 判断是否能整除 e
count++; // 计数
} else {
*sum += x[i]; // 求和
}
} return count;
}
main() {
void NONO();
int x[N] = {1, 7, 8, 6, 10, 15, 11, 13, 29, 31}, e = 3, n, sum;
n = fun(x, e, &sum);
printf("n=%d,sum=%d\n", n, sum);
NONO();
getchar();
getchar();
} void NONO() {
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
输出数据,关闭文件。 */
int i, j, x[10], n, e, sum;
FILE *rf, *wf; rf = fopen("in.dat", "r");
wf = fopen("out.dat", "w");
for (i = 0; i < 5; i++) {
for (j = 0; j < 10; j++)
fscanf(rf, "%d ", &x[j]);
fscanf(rf, "%d", &e);
n = fun(x, e, &sum);
fprintf(wf, "%d, %d\n", n, sum);
}
fclose(rf);
fclose(wf);
}

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

5. 后记

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

2个月搞定计算机二级C语言——真题(6)解析的更多相关文章

  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. 解决Perforce lua文件utf-8 with bom

    设置typemap,将lua文件定义为unicode

  2. AtCoder Beginner Contest 315

    AtCoder Beginner Contest 315 A - tcdr (atcoder.jp) 一次遍历 #include<bits/stdc++.h> using i64 = lo ...

  3. Deformable DETR:商汤提出可变型 DETR,提点又加速 | ICLR 2021 Oral

    DETR能够消除物体检测中许多手工设计组件的需求,同时展示良好的性能.但由于注意力模块在处理图像特征图方面的限制,DETR存在收敛速度慢和特征分辨率有限的问题.为了缓解这些问题,论文提出了Deform ...

  4. 组长:你熟悉过React,开发个Next项目模板吧,我:怎么扯上关系的?

    组长:你熟悉过React,开发个Next项目模板吧,我:怎么扯上关系的? 最近工作安排我开发一个Next.js项目模板,心里默笑,React用得少得都快忘光了,现在得搞Next?虽然我曾是React的 ...

  5. spm 一阶分析的Microtime onset应该如何填写?

    1. 如果对数据进行了slice timing, 那么在进行一阶分析时应该修改microtime onset和 microtime resolution这两个参数, 假设数据的slice order= ...

  6. 牛逼!Vue3.5的useTemplateRef让ref操作DOM更加丝滑

    前言 vue3中想要访问DOM和子组件可以使用ref进行模版引用,但是这个ref有一些让人迷惑的地方.比如定义的ref变量到底是一个响应式数据还是DOM元素?还有template中ref属性的值明明是 ...

  7. 【转】ElasticSearch报错FORBIDDEN/12/index read-only / allow delete (api) ,read_only_allow_delete 设置 windows

    仅供自己记录使用,原文链接:ElasticSearch报错FORBIDDEN/12/index read-only / allow delete (api)_sinat_22387459的博客-CSD ...

  8. ASP.NET Core – Partial View

    前言 之前写过一篇 ASP.NET Core – View Component 里面有提到, View Component 是 Partial View 的加强版. 多了一个 .cs 可以写逻辑. 那 ...

  9. docker安装运行kafka单机版

    这里我们安装一下kafka的单机版,由于kafka是基于zk进行管理的,如果我们没有安装过zk的话,需要进行安装好zk再安装kafka,当然如果已经安装过了, 那就没必要安装了.我们可以执行docke ...

  10. Vue——前端框架

    Vue    Vue 快速入门    <!DOCTYPE html> <html lang="en"> <head> <meta char ...