当前位置: 首页 > article >正文

二级C语言题解:十进制转其他进制、非素数求和、重复数统计

目录

一、程序填空📝 --- 十进制转其他进制

题目📃

分析🧐

二、程序修改🛠️ --- 非素数求和

题目📃

分析🧐

三、程序设计💻 --- 重复数统计

题目📃

分析🧐


前言
本文讲解:十进制转其他进制、非素数求和、重复数统计
🏠我的主页:我的主页
📚系列专栏:系列专栏

一、程序填空📝 --- 十进制转其他进制

难度:⭐⭐

题目📃

函数 fun 的功能是:将整数 m 转换成 n(二~十六)进制数的字符串,并通过函数值返回字符串首地址。
例:输入:125 16,则输出:7d
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!

代码如下: 
在1️⃣2️⃣3️⃣处填空

#include <stdio.h>
#include <string.h>
char  c[32];
char *fun(int m, int n)
{
	int i = 0, j = 0, a[32];
	char b[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }, *p;
	do
	{
		a[i] = m%n;
		/**********found**********/
		m = 1️⃣;
		i++;
		/**********found**********/
	} while (2️⃣);
	for (--i; i >= 0; --i)
	{
		n = a[i];
		/**********found**********/
		c[j++] = 3️⃣;
	}
	c[j] = 0;
	p = c;
	return p;
}

void main()
{
	int m, n;
	char s[32];
	scanf("%d %d", &m, &n);
	strcpy(s, fun(m, n));
	printf("%s\n", s);
}

分析🧐

这里要注意,第一个是十进制的值,第二个值是转成对应的进制
例如题中给的例子,就是让十进制125转成16进制
现在来逐个分析每一空(最后一空是难点)

  1. 填写:m / n
    因为由十进制转任意进制的原理可知
    十进制模除对应进制取余数,再反向输出即可
    那么这个当前值就要更新为值
  2. 填写:m != 0
    当值不为零时就继续取余
  3. 填写:b[n]
    看到b数组就要想想他的作用是什么
    很明显是用于将对应位数的字符取出来

解答代码如下:

#include <stdio.h>
#include <string.h>
char  c[32];
char *fun(int m, int n)
{
	int i = 0, j = 0, a[32];
	char b[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }, *p;
	do
	{
		a[i] = m%n;
		/**********found**********/
		m = 1️⃣m / n;
		i++;
		/**********found**********/
	} while (2️⃣m != 0);
	for (--i; i >= 0; --i)
	{
		n = a[i];
		/**********found**********/
		c[j++] = 3️⃣b[n];
	}
	c[j] = 0;
	p = c;
	return p;
}

void main()
{
	int m, n;
	char s[32];
	scanf("%d %d", &m, &n);
	strcpy(s, fun(m, n));
	printf("%s\n", s);
}

二、程序修改🛠️ --- 非素数求和

难度:⭐

题目📃

函数 fun 的功能是:求一维数组 a 中非素数之和 sum,其结果 sum 通过函数返回。
例:22,3,65,37,18,19,10,11,12,23,15,17,则输出结果:sum=142
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!

代码如下:
在代码中找出3个错误并修改

#include <stdio.h>

int fun(int a[], int n)
{
	int i, j, k, sum;
	sum = 0;
	for (i = 0; i < n; i++)
	{
		k = a[i] / 2;
		/**********found**********/
		for (j = 2; j < k; j++)
		{
			if (a[i] % j == 0)
				/**********found**********/
				continue;
		}
		/**********found**********/
		if (j >= k)
			sum += a[i];
	}
	return sum;
}
int main()
{
	int a[12] = { 22,3,65,37,18,19,10,11,12,23,15,17 };
	printf("sum=%d\n", fun(a, 12));
	return 0;
}

分析🧐

本题还是很容易理解的,要掌握素数
素数:只能被1或怎么整数的数字,例如:11

  1. 第11行的j < k改成  j <= k
    如果这里的k是要是a[i]的原值的话就不能有等于
    因为如果是等于的话就是和自己整除
    那么这里是将要测试的数字除2了,那么就要等于
  2. 第15行的continue;改成break;
    因为如果能被除了1和自己以外的数整除就说明不是素数
    所以就要打断
  3. 第18行的if (j >= k)改成 if(j <=k)
    因为根据题意,这里是计算非素数的和
    也就是通过break打断的,不是正常结束的
    所以条件就和11行判断循环的条件一样就可以了

解答代码如下:

#include <stdio.h>

int fun(int a[], int n)
{
	int i, j, k, sum;
	sum = 0;
	for (i = 0; i < n; i++)
	{
		k = a[i] / 2;
		/**********found**********/
		for (j = 2; 1️⃣j <= k; j++)
		{
			if (a[i] % j == 0)
				/**********found**********/
				2️⃣break;
		}
		/**********found**********/
		3️⃣if (j <= k)
			sum += a[i];
	}
	return sum;
}
int main()
{
	int a[12] = { 22,3,65,37,18,19,10,11,12,23,15,17 };
	printf("sum=%d\n", fun(a, 12));
	return 0;
}

三、程序设计💻 --- 重复数统计

难度:⭐⭐⭐

题目📃

请编写函数 fun,其功能是:从一个整数数组中,统计出有重复数字数的个数存于 m 中,m 值由函数值返回。
例如:2430, 3001, 1798, 199, 498, 277, 229, 851, 369, 1146
其中如:3001 中有重复的数字 0
输出:Total Num=5
注意:部分源程序在文件 PROG1.C 中。
请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。

代码如下:
在fun函数中编写 

#include <stdio.h>
#include <string.h>

int fun(int a[], int n)
{
	
}

void main()
{
  int a[10]={2430,3001,1798,199,498,277,229,851,369,1146};
  int m;

  m = fun(a, 10);
  printf("符合条件的数共有:%d\n",m);
  getchar();
}


分析🧐

由题意可知,这里要统计一个数组中的一个整数里有重复数字的个数
可以这样:

  1. 先在数组中取出一个数
  2. 对这个数进行拆解,放到新的数组b中
  3. 再对这个这个b数组进行遍历,看是否有相等的数字
  4. 有的话就将其加1

解答代码如下:

#include <stdio.h>
#include <string.h>

int fun(int a[], int n)
{
	int i, j, k, flag, value = 0, save = 0;
	int b[10] = {0};
    //一个循环取一个数
	for(i = 0; i < n; i++)
	{
		j = 0;
        //将这个数中的每个数字
        //保存到数组b中
		while(a[i] != 0)
		{
			b[j++] = a[i] % 10;
			a[i] = a[i] /10;

		}
        //判断这个数是否有重复的数
		for(k = 0; k < j; k++)
		{
			for(flag = k+1; flag < j; flag++)
			{
                //如果有相等的数,就给save赋1
                if(b[k] == b[flag])
				{
					save = 1;
					break;
				}
			}
		}
        //如果save为1,则表示有重复的数,就将其加一
		if(save == 1)
		{
			value++;
			save = 0;
		}
	}
	return value;
}

void main()
{
  int a[10]={2430,3001,1798,199,498,277,229,851,369,1146};
  int m;

  m = fun(a, 10);
  printf("符合条件的数共有:%d\n",m);
  getchar();
}

如果本文对您有帮助,还希望点点关注呢,这将是我不断前进的动力😊


http://www.kler.cn/a/538807.html

相关文章:

  • 如何在Android Studio中开发一个简单的Android应用?
  • ESXi Host Client创建ubuntu虚拟机教程及NVIDIA显卡驱动安装
  • 代码随想录算法训练营day38
  • SSA-TCN麻雀算法优化时间卷积神经网络时间序列预测未来Matlab实现
  • 【Matlab优化算法-第13期】基于多目标优化算法的水库流量调度
  • 【通俗易懂说模型】反向传播(附多元回归与Softmax函数)
  • Linux 系统搭建 Python 开发环境全流程
  • 基础入门-网站协议身份鉴权OAuth2安全Token令牌JWT值Authirization标头
  • PDF 2.0 的新特性
  • redis之GEO 模块
  • MVCC机制深度解析
  • html语义化
  • 详细教程 | 如何使用DolphinScheduler调度Flink实时任务
  • 瑞芯微 Rockchip 系列 RK3588 主流深度学习框架模型转成 rknn 模型教程
  • mysql8 从C++源码角度看sql生成抽象语法树
  • 定期删除一周前的数据,日志表的表空间会增长吗?
  • springboot基于微信小程序的短文写作竞赛管理系统
  • QT修仙之路1-1--遇见QT
  • docker部署superset并连接华为MRS hive数据库
  • 使用Python实现PDF与SVG相互转换
  • CNN卷积神经网络多变量多步预测,光伏功率预测(Matlab完整源码和数据)
  • PDFMathTranslate-翻译 ble core 5.4全文
  • 算法【Java】—— 动态规划之子序列问题
  • Apipost 调试 Node 服务接口
  • python 包和模块的导入机制详解!
  • LLM(十三)| DeepSeek-R1论文全文翻译