1. 前言

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

2. 程序填空题

2.1 题目要求

2.2 提供的代码

#include  <stdio.h>
#pragma warning (disable:4996)
double fun(double x[], int n)
{
int i, k = 0;
double avg = 0.0, sum = 0.0;
for (i = 0; i < n; i++)
avg += x[i];
/**********************found***********************/
avg /= ____(1)____;
for (i = 0; i < n; i++)
if (x[i] > avg)
{
/**********************found***********************/
____(2)____ += x[i];
k++;
}
/**********************found***********************/
return ____(3)____;
}
main()
{
double score[12] = { 50,60,70,80,90,100,55,65,75,85,95,99 };
double aa;
aa = fun(score, 12);
printf("%f\n", aa);
}

2.3 解题思路

第(1)处填空:

在这条语句之前,程序使用for循环将所有学生的成绩加到了变量avg中,这里我们要实现的是求平均成绩,所以需要使用avg除学生的数量n,即可得到所有学生的平均成绩,并赋值给avg

其中avg /= n;等价于avg = avg / n;

avg /= n;

第(2)处填空:

经过if (x[i] > avg)判断,进来以后的x[i]都是大于平均成绩avg的,这里要执行的是将符合条件的x[i]累加至sum(程序已给出),并且每次使k++以便于后续求平均值。

sum += x[i];

第(3)处填空:

这里我们需要返回的是高于平均成绩的学生成绩的平均值,其中sum为高于平均成绩的学生总成绩,k为高于平均成绩的学生人数,用sum / k即可得到高于平均成绩的学生成绩的平均值。

return  (sum / k);

2.4 代码实现

填写完整的代码:

#include  <stdio.h>
#pragma warning (disable:4996)
double fun(double x[], int n)
{
int i, k = 0;
double avg = 0.0, sum = 0.0;
for (i = 0; i < n; i++)
avg += x[i];
/**********************found***********************/
avg /= n;
for (i = 0; i < n; i++)
if (x[i] > avg)
{
/**********************found***********************/
sum += x[i];
k++;
}
/**********************found***********************/
return (sum / k);
}
main()
{
double score[12] = { 50,60,70,80,90,100,55,65,75,85,95,99 };
double aa;
aa = fun(score, 12);
printf("%f\n", aa);
}

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

3. 程序修改题

3.1 题目要求

3.2 提供的代码

#include <stdio.h>
void fun(char* s)
{
int i, j;
for (i = 0, j = 0; s[i] != '\0'; i++)
if (s[i] >= '0' && s[i] <= '9')
/**********found**********/
s[j] = s[i];
/**********found**********/
s[j] = "\0";
}
main()
{
char item[80];
printf("\nEnter a string : "); gets(item);
printf("\n\nThe string is : \"%s\"\n", item);
fun(item);
printf("\n\nThe string of changing is : \"%s\"\n", item);
getchar();
}

3.3 解题思路

第(1)处修改:

这里需要将取出的数字字符形成新的字符串,并取代原字符串。

只使用s[j]是不行的,因为在程序中j始终没有改变值,一直为 0,导致每次的数字字符都会存储到s[0]的地址中,并没有形成新的字符串,所以我们要在这里让j++,从而改变存储的地址。

s[j++]=s[i];

第(2)处修改:

""是用来表示字符串的,而这里的s[j]只能存储单个字符,所以需要使用''来括起来。

这里给s[j]赋值'\0'是应为字符串是以'\0'作为结尾的。

s[j]='\0';

3.4 代码实现

修改后的代码:

#include <stdio.h>
void fun(char *s)
{ int i,j;
for(i=0,j=0; s[i]!='\0'; i++)
if(s[i]>='0' && s[i]<='9')
/**********found**********/
s[j++]=s[i];
/**********found**********/
s[j]='\0';
}
main()
{ char item[80];
printf("\nEnter a string : ");gets(item);
printf("\n\nThe string is : \"%s\"\n",item);
fun(item);
printf("\n\nThe string of changing is : \"%s\"\n",item );
getchar();
}

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

4. 程序设计题

4.1 题目要求

4.2 提供的代码

#include <stdio.h>
#include <string.h> void fun(char* s, char t[])
{ } main()
{
char s[100], t[100]; void NONO();
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
getchar();
} void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s[100], t[100];
FILE* rf, * wf;
int i; rf = fopen("in.dat", "r");
wf = fopen("out.dat", "w");
for (i = 0; i < 10; i++) {
fscanf(rf, "%s", s);
fun(s, t);
fprintf(wf, "%s\n", t);
}
fclose(rf);
fclose(wf);
}

4.3 解题思路

这道题其实蛮容易的,无非就是遍历数组,再加个奇偶数的判断。

奇偶数判断前面也讲过,这里简单提一下:一个数除 2 取余等于 0,则为偶数,等于 1 则为奇数。

在函数开头要先将t所指的数组清空,然会遍历指针s所指的字符串,判断 ASCII 值为偶数则存到t中,其中t[j++]的作用和上一题一样。

题目要求将奇数的字符删除后,将剩余的字符放入t,实质就是把偶数的字符放入t,可以直接对偶数的字符操作,减少程序的复杂度。

4.4 代码实现

填写完整的代码:

#include <stdio.h>
#include <string.h> void fun(char* s, char t[])
{
int i = 0,j = 0; for (i = 0; i < (sizeof(t) / sizeof(t[0])); i++) // 清空数组 t,防止出现垃圾值
{
t[i] = 0;
} for (i = 0; i < strlen(s); i++)
{
if ((s[i] % 2) == 0) // 等于 0 说明是 ASCII值为偶数
{
t[j++] = s[i]; // 保存到 t 所指的数组中
}
}
} main()
{
char s[100], t[100]; void NONO();
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
getchar();
} void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s[100], t[100];
FILE* rf, * wf;
int i; rf = fopen("in.dat", "r");
wf = fopen("out.dat", "w");
for (i = 0; i < 10; i++) {
fscanf(rf, "%s", s);
fun(s, t);
fprintf(wf, "%s\n", t);
}
fclose(rf);
fclose(wf);
}

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

5. 后记

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

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

  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. CRC算法原理、推导及实现

    CRC, Cyclic Redundancy Check, 循环冗余校验 1. 基本原理 CRC的本质是除法,把待检验的数据当作一个很大(很长)的被除数,两边选定一个除数(有的文献叫poly),最后得 ...

  2. IoTSharp:基于 .NET 8.0 的开源物联网平台

    前言 想要快速了解物联网的世界吗?如果你对物联网(IoT)感兴趣,或者正打算开发自己的物联网项目.可以试试 IoTSharp,一个基于 .NET 的开源平台. 无论你是初学者还是有经验的大佬,IoTS ...

  3. WM_ERASEBKGND

    WM_ERASEBKGND是在当窗口背景必须被擦除时 (例如,窗口的移动,窗口的大小的改变)才发送. 当窗口的一部分无效需要重绘时发送此消息. #define WM_ERASEBKGND 0x0014 ...

  4. Ubuntu 写入磁盘映像

    使用 dd 命令 dd 命令是 Unix 和 Unix-like 操作系统中用于低级别数据复制和转换的命令.它可以直接操作设备文件(如硬盘.光盘.USB 驱动器等),适用于备份.恢复.制作启动盘等任务 ...

  5. ELK快速部署(踩坑记录、常见报错解决)及常用架构讲解

    ELK = Elasticserach + Logstash + kibana(包含但不仅限于) 简介: Elasticsearch:分布式搜索和分析引擎,具有高可伸缩.高可靠和易管理等特点.基于 A ...

  6. 图文教程:从0到1将项目发布到 Maven 中央仓库

    前言 本文基于官方文档 https://central.sonatype.org/publish/publish-guide/ 编写. 发布步骤: 创建账号 创建用户 Token 创建命名空间 配置 ...

  7. pikachu靶场 越权(水平越权+垂直越权)

    水平越权 A用户和B用户属于同一级别用户,但各自不能操作对方个人信息.A用户如果越权操作B用户个人信息的情况称为水行越权操作 三个用户 lucy/lili/kobe  密码都为123456 随便登录其 ...

  8. python pyqt6 QMenu 设定圆角边框

    本来这个没有必要写,但是因为写的过程中,按照网上的写法运行,不知道为什么QMenu的右下角有圆角边框与直角背景颜色会覆盖显示 所以还是有必要写一下 menu = QMenu(self.tool_but ...

  9. 填坑 Plugin 'mysql_native_password' is not loaded

    数据库从 mysql5.7 升级到 mysql8.4,部分场景出现以下错误提示:Plugin 'mysql_native_password' is not loaded 原因是:mysql_nativ ...

  10. 面试官:limit 100w,10为什么慢?如何优化?

    在 MySQL 中,limit X,Y 的查询中,X 值越大,那么查询速度也就越慢,例如以下示例: limit 0,10:查询时间大概在 20 毫秒左右. limit 1000000,10:查询时间可 ...