1. 前言

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

2. 程序填空题

2.1 题目要求

2.2 提供的代码

#include  <stdio.h>
#define N 3
int fun(int (*a)[N])
{
int i, j, m1, m2, row, colum;
m1 = m2 = 0;
for (i = 0; i < N; i++)
{
j = N - i - 1; m1 += a[i][i]; m2 += a[i][j];
}
if (m1 != m2) return 0;
for (i = 0; i < N; i++) {
/**********found**********/
row = colum = __1__;
for (j = 0; j < N; j++)
{
row += a[i][j]; colum += a[j][i];
}
/**********found**********/
if ((row != colum) __2__(row != m1)) return 0;
}
/**********found**********/
return __3__;
}
main()
{
int x[N][N], i, j;
printf("Enter number for array:\n");
for (i = 0; i < N; i++)
for (j = 0; j < N; j++) scanf("%d", &x[i][j]);
printf("Array:\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++) printf("%3d", x[i][j]);
printf("\n");
}
if (fun(x)) printf("The Array is a magic square.\n");
else printf("The Array isn't a magic square.\n");
getchar();
}

2.3 解题思路

第(1)处填空:

在这条语句的下方,使用了一个for循环将数组的行和列累加至rowcolum中,所以这里需要对他俩进行初始化为 0。

和上方的m1 = m2 = 0;是同种作用,在实际应用中可以直接在变量定义时初始化,例如:int m1 = 0,m2 = 0;

row = colum = 0;

第(2)处填空:

if中的语句是返回 0,则需要判断检查当前行的和是否等于当前列的和,或当前行的和是否等于对角线的和(幻方的要求),这两个中只要有一个为不等于,则可以说明该数组不是幻方。

其中判断的条件已经给出,我们只需要在中间填入||,表示有其中一个条件符合就会执行return 0;

if ((row != colum) || (row != m1)) return 0;

第(3)处填空:

经过前面一系列的判断,都没有执行到return 0;,则说明该数组是幻方,返回1即可。

return  1;

2.4 代码实现

填写完整的代码:

#include  <stdio.h>
#define N 3
int fun(int (*a)[N])
{
int i, j, m1, m2, row, colum;
m1 = m2 = 0;
for (i = 0; i < N; i++)
{
j = N - i - 1; m1 += a[i][i]; m2 += a[i][j];
}
if (m1 != m2) return 0;
for (i = 0; i < N; i++) {
/**********found**********/
row = colum = 0;
for (j = 0; j < N; j++)
{
row += a[i][j]; colum += a[j][i];
}
/**********found**********/
if ((row != colum) || (row != m1)) return 0;
}
/**********found**********/
return 1;
}
main()
{
int x[N][N], i, j;
printf("Enter number for array:\n");
for (i = 0; i < N; i++)
for (j = 0; j < N; j++) scanf("%d", &x[i][j]);
printf("Array:\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++) printf("%3d", x[i][j]);
printf("\n");
}
if (fun(x)) printf("The Array is a magic square.\n");
else printf("The Array isn't a magic square.\n");
getchar();
}

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

3. 程序修改题

3.1 题目要求

3.2 提供的代码

#include <stdio.h>
#include <string.h>
#define N 80
int fun(char* s, char* t)
{
int n;
char* p, * r;
n = 0;
while (*s)
{
p = s;
/*********found**********/
r = p;
while (*r)
if (*r == *p) { r++; p++; }
else break;
/*********found**********/
if (*r = 0)
n++;
s++;
}
return n;
}
main()
{
char a[N], b[N]; int m;
printf("\nPlease enter string a : "); gets(a);
printf("\nPlease enter substring b : "); gets(b);
m = fun(a, b);
printf("\nThe result is : m = %d\n", m);
getchar();
}

3.3 解题思路

第(1)处修改:

先执行了p = s;,又执行了r = p;,此时r等于p等于s,下方的语句会判断*r*p是否相等。在程序里它没有用形参t,也就是说程序运行起来,一直是s自己比较。

这里需要将t的地址赋值给r,才能达到题目要求的效果。

r = t;

第(2)处修改:

这里没啥好说的,少个等号,加上即可。

if (*r == 0)

3.4 代码实现

修改后的代码:

#include <stdio.h>
#include <string.h>
#define N 80
int fun(char* s, char* t)
{
int n;
char* p, * r;
n = 0;
while (*s)
{
p = s;
/*********found**********/
r = t;
while (*r)
if (*r == *p) { r++; p++; }
else break;
/*********found**********/
if (*r == 0)
n++;
s++;
}
return n;
}
main()
{
char a[N], b[N]; int m;
printf("\nPlease enter string a : "); gets(a);
printf("\nPlease enter substring b : "); gets(b);
m = fun(a, b);
printf("\nThe result is : m = %d\n", m);
getchar();
}

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

4. 程序设计题

4.1 题目要求

4.2 提供的代码

#include <stdio.h>
#pragma warning (disable:4996)
#define N 5
struct mpow
{
double a;
int t;
};
double fun(struct mpow* x, int n)
{ }
void main()
{
void NONO();
struct mpow x[N] = { 12,0,9,2,23,1,7,2 };
double sum;
sum = fun(x, 4);
printf("sum=%lf\n", sum);
NONO();
}
void NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE* in, * out;
struct mpow x[N];
int i, j;
double sum;
in = fopen("in.dat", "r");
out = fopen("out.dat", "w");
for (i = 0; i < 10; i++) {
for (j = 0; j < 4; j++) fscanf(in, "%lf,%d,", &x[j].a, &x[j].t);
sum = fun(x, 4);
fprintf(out, "sum=%lf\n", sum);
}
fclose(in);
fclose(out);
}

4.3 解题思路

在数学中,幂是用来表示一个数被自身乘以若干次的运算结果。幂由两部分组成:底数和指数。

这个大家在数学中都学过,这里便不再赘述,下面主要来看如何用代码来实现功能。

我们可以采用两层循环嵌套的方式,依次求出结构体数组中计算的结果,外层循环为 n个幂数,内层循环则将幂的底a自乘t次,计算完一个幂数之和后累加到sum中,这样遍历结束后即可得到x所指数组中n个幂数之和,将其返回即可。

4.4 代码实现

填写完整的代码:

#include <stdio.h>
#pragma warning (disable:4996)
#define N 5
struct mpow
{
double a;
int t;
};
double fun(struct mpow* x, int n)
{
double sum = 0.0, number = 1.0;
int i = 0, j = 0; for (i = 0; i < n; i++)
{
number = 1.0;
for (j = 0; j < x[i].t; j++)
{
number *= x[i].a;
}
sum += number;
} return sum;
}
void main()
{
void NONO();
struct mpow x[N] = { 12,0,9,2,23,1,7,2 };
double sum;
sum = fun(x, 4);
printf("sum=%lf\n", sum);
NONO();
}
void NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE* in, * out;
struct mpow x[N];
int i, j;
double sum;
in = fopen("in.dat", "r");
out = fopen("out.dat", "w");
for (i = 0; i < 10; i++) {
for (j = 0; j < 4; j++) fscanf(in, "%lf,%d,", &x[j].a, &x[j].t);
sum = fun(x, 4);
fprintf(out, "sum=%lf\n", sum);
}
fclose(in);
fclose(out);
}

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

5. 后记

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

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

  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. Windows提权方式汇总

    windows 提权 一.土豆(potato)家族提权 原理 土豆提权就是通过 windows 的 COM(Component Object Model,组件对象模型)类.向指定的服务器端口发送 NT ...

  2. 自动调用关闭释放资源try-with-resources

    try-with-resources自动执行释放资源 看到了try这个关键字立马就应该能想到异常处理机制try-catch-finally语句块.这里要说的东西和异常处理背后的机制其实几乎是一样的,只 ...

  3. Docker学习11-Docker常规方式安装软件

    本文咱们将通过按照Tomcat.按照MySQL.安装Redis这三个实战安装,来熟悉在docker中怎么安装软件,咱们使用端口映射,及数据卷的使用场景 安装的总体步骤: 1:搜索镜像: 2:拉取镜像: ...

  4. 【图文安装教程】在docker中安装ES

    在docker中安装ES怎么安装?本文就教大家怎么安装 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联.这里先创建一个网络: docker ...

  5. 探索不同引擎Innodb和Myisam的索引优化方案

    数据库可能存在千万级的数据,必须将这些行数据以一定的结构组织起来做到高效的增删改查. 我们将分别探索innodb和myisam两种引擎的索引方案. 一.InnoDB的索引 1.假设表初始没有记录,只有 ...

  6. 待补 重要思考:求给无向图定向使得其变为DAG的方案数

    今天比赛考到了,不会,丢了 100 分. rk2,380 -> rk15,280 别问为什么 T4 没过,因为不会 T2. 方法一 \(O(3^n)\) 令 \(f_S\) 为子集 \(S\) ...

  7. pimp技法浅析--实现轻量级的面向接口编程

    pimp.hpp: #ifndef pimp_hpp #define pimp_hpp class CMyComponent{ public: CMyComponent(); ~CMyComponen ...

  8. 2024 ByteCTF

    ByteCTF 极限逃脱 题目描述:本题需要通过动态调试分析出要输入的内容,可能在某些地方会有提示出现. 这是一个IOS逆向,因为没有设备只能静态分析 流程和安卓逆向大概一致 解压拖进ida 提示输入 ...

  9. Docker基本操作(镜像操作?容器操作?)(四)

    Docker 的基本原理我们已经了解了,也已经安装上了,接下来我们就一起来学习下 Docker 的常用操作,实际上主要就是 Docker CLI 的一些常用命令使用. 一.镜像操作 之前我们提到过 D ...

  10. Windows远程设置''不可复制''的权限

    起因: 有一个技术部门的同事需要远程其他同学的电脑进行操作,但是不允许他复制目标电脑上的文件,避免造成资料外泄 解决办法: 组策略编辑器中,设置 计算机配置 -> 管理模板 -> wind ...