函数和数组习题

news2024/11/20 8:32:45

个人主页:平行线也会相交
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创
收录于专栏【C语言基础习题】
在这里插入图片描述

文章目录

  • 知识点
  • 习题
    • 2.实现一个整型数组的冒泡排序(编程体)。
    • 3.编程题:创建一个整型数组,完成对数组的操作
    • 4.编程题:将数组A的内容和数组B中的内容进行交换(数组一样大)。
    • 5.下列程序的运行结果是什么?
    • 6.编写一个函数实现n的k次方(使用递归实现)
    • 8.写一个递归函数Digitsum(n),输入一个非负整数,返回组成它的数字之和。
    • 9.编写一个函数reverse_string(char * string),用递归实现。
    • 10.写一个函数返回参数二进制中1的个数
      • 法一:
      • 法二:
      • 法三(推荐):
    • 11.求二进制位中不同位的个数
    • 12.打印二进制中的奇数和偶数位。
    • 13.交换两个变量(不创建临时变量)
    • 14.函数判断素数
    • 15.乘法口诀表

知识点

1.函数可以传值调用,传值调用的时候形参是实参的一份临时拷贝。
2.函数可以传址调用,传址调用的时候,可以通过形参操作实参。
3.函数可以嵌套调用,但是不可以嵌套定义。
4.形参和实参可以同名。
5.函数定义是说明函数是怎么实现的。
6.形参在函数调用的时候才实例化,才开辟内存空间。
7.函数调用如果采用传值调用,改变形参不影响实参。
8.函数设计应追求高内聚低耦合(即模块化)。是衡量程序的模块之间独立性的标准。要保证模块(函数,方法)内部高内聚,之间低耦合。比如一个程序有50个函数,这个程序执行得非常好;然而一旦你修改其中一个函数,其他49个函数都需要仍然可以不需要修改,这就说明程序的函数之间保持了较好的独立性,即:低耦合。同时各个模块的变量也是和自己模块保持着紧密的联系。说明也是高内聚的。可以这样理解,一个企业的管理, 最理想的情况就是各个部门各司其职,井然有序,互不干涉, 但是需要沟通交流的时候呢, 各个部门都可以找到接口人专门负责部门沟通以及对外沟通。
9.要尽量少的使用全局变量。(因为全局变量在整个工程中哪里、到处都可以使用,这个地方可以改,那个地方也可以改,此时就乱套了。少的去使用全局变量不至于让代码失控。)
10.函数的参数不易过多。
11.设计函数时,尽量做到谁申请的资源就由谁来释放。
12.库函数的使用必须包含对应的头文件。
13.在不同的函数中可以使用相同名字的变量。
14.函数中的形式参数是在栈中保存的。
15.在一个函数内定义的变量只能在本函数范围内有效。
16.在一个函数内复合语句中定义的变量在本函数范围内无效。

习题

1.函数调用fun((v1,v2),(v3,v4),v5,v6)中,实参的个数是4。(逗号表达式算一个)。

2.实现一个整型数组的冒泡排序(编程体)。

//冒泡排序
void bubble_sort(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = 0;
				tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}
#include<stdio.h>
int main()
{
	int arr[] = { 4,5,6,3,7,2,8,1,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//进行排序
	bubble_sort(arr, sz);
	//打印数据
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

3.编程题:创建一个整型数组,完成对数组的操作

1.实现函数Init()初始化为全0。
2.实现Print()打印数组的每一个元素
3.实现reverse()函数完成数组元素的逆置。

#include<stdio.h>
void Init(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		arr[i] = 0;
	}
}
void Reverse(int arr[], int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left < right)
	{
		int tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}
void Print(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//Init(arr, sz);//把数组初始化为0
	Print(arr, sz);//打印
	Reverse(arr,sz);//实现数组逆置
	Print(arr, sz);//打印
	return 0;
}

4.编程题:将数组A的内容和数组B中的内容进行交换(数组一样大)。

//交换数组
//通过创建临时变量的方式
#include<stdio.h>
int main()
{
	int arr1[5] = { 1,2,3,4,5 };
	int arr2[5] = { 6,7,8,9,10 };
	int tmp = 0;
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		tmp = arr1[i];
		arr1[i] = arr2[i];
		arr2[i] = tmp;
	}
	return 0;
}

在这里插入图片描述

5.下列程序的运行结果是什么?

#include<stdio.h>
int i;//全局变量-不初始化-默认是0
int main()
{
	i--;
	if (i > sizeof(i))//sizeof()-计算变量/类型所占内存的大小
	{
		printf(">\n");
	}
	else
	{
		printf("<\n");
	}
	return 0;
}

在这里插入图片描述

6.编写一个函数实现n的k次方(使用递归实现)

#include<stdio.h>
double Pow(int n, int k)
{
	if (k == 0)
		return 1;
	else if (k > 0)
	{
		return n * Pow(n, k - 1);
	}
	else
	{
		return 1.0 / Pow(n, -k);
	}
}
int main()
{
	int n = 0;
	int k = 0;
	double ret = 0.0;
	scanf("%d %d", &n, &k);
	ret = Pow(n, k);
	printf("%lf", ret);
	return 0;
}

8.写一个递归函数Digitsum(n),输入一个非负整数,返回组成它的数字之和。

#include<stdio.h>
int Digitsum(n)
{
	if (n > 9)
	{
		return Digitsum(n / 10) + n % 10;
	}
	else
	{
		return n;
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int sum = Digitsum(n);
	printf("%d", sum);
	return 0;
}

9.编写一个函数reverse_string(char * string),用递归实现。

#include<stdio.h>
#include<string.h>
void reverse_string(char arr[])
{
	int l = 0;
	int r = strlen(arr) - 1;
	while (l < r)
	{
		char tmp = arr[l];
		arr[l] = arr[r];
		arr[r] = tmp;
		l++;
		r--;
	}
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s", arr);
	return 0;
}

在这里插入图片描述

#include<stdio.h>
#include<string.h>
int Strlen(char *str)
{
	int count = 0;
	while ((*str) != '\0')
	{
		count++;
		str++;
	}
	return count;
}
void reverse_string(char *str)
{
	int l = 0;
	int r = Strlen(str) - 1;
	while (l < r)
	{
		char tmp = *(str + l);//char tmp = str[l];
		*(str + l) = *(str + r);//str[l]=str[r];
		*(str + r) = tmp;//str[r]=tmp;
		l++;
		r--;
	}
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s", arr);
	return 0;
}

10.写一个函数返回参数二进制中1的个数

//注意此算法不能解决n是负数的问题
#include<stdio.h>
int count_bit_one(int n)
{
	int count = 0;
	while (n)
	{
		if (n % 2 == 1)
		{
			count++;
		}
		n /= 2;
	}
	return count;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int count = count_bit_one(n);
	printf("%d", count);
	return 0;
}

在这里插入图片描述

当输入为负数时:

法一:

#include<stdio.h>
int count_bit_one(unsigned int n)
{
	int count = 0;
	while (n)
	{
		if (n % 2 == 1)
		{
			count++;
		}
		n /= 2;
	}
	return count;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int count = count_bit_one(n);
	printf("%d", count);
	return 0;
}

在这里插入图片描述

法二:

#include<stdio.h>
int count_bit_one(int n)
{
	int count = 0;
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if (((n >> i) & 1) == 1)
		{
			count++;
		}
	}
	return count;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int count = count_bit_one(n);
	printf("%d", count);
	return 0;
}

法三(推荐):

#include<stdio.h>
int count_bit_one(int n)
{
	int count = 0;
	while (n)
	{
		n = n & (n - 1);
		count++;
	}
	return count;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int count = count_bit_one(n);
	printf("%d", count);
	return 0;
}

11.求二进制位中不同位的个数

编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入样例:
1999 2299
输出样例:
7

//求二进制位中不同位的个数
#include<stdio.h>
int get_diff_bit(m, n)
{
	int tmp = m ^ n;
	return count_bit_one(tmp);
}
int count_bit_one(int n)
{
	int count = 0;
	while (n)
	{
		n = n & (n - 1);
		count++;
	}
	return count;
}
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	int count = get_diff_bit(m, n);
	printf("%d", count);
	return 0;
}

12.打印二进制中的奇数和偶数位。

获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。

//12.打印二进制中的奇数和偶数位。
#include<stdio.h>
void print(int n)
{
	int i = 0;
	printf("奇数位:\n");
	for (i = 30; i >= 0; i -= 2)
	{
		printf("%d ", (n >> i) & 1);
	}
	printf("\n偶数位:\n");
	for (i = 31; i >= 1; i -= 2)
	{
		printf("%d ", (n >> i) & 1);
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	print(n);
	return 0;
}

在这里插入图片描述

13.交换两个变量(不创建临时变量)

#include<stdio.h>
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	m = m ^ n;
	n = m ^ n;
	m = m ^ n;
	printf("%d %d", m, n);
	return 0;
}

14.函数判断素数

实现一个函数,判断一个数不是素数
利用上面的函数打印100到200之间的素数。

//函数判断素数
#include<stdio.h>
#include<math.h>
int is_prime(int n)
{
	int i = 2;
	for (i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0)
			return 0;
	}
	return 1;
}
int main()
{
	int i = 0;
	for (i = 100; i <= 200; i++)
	{
		if (is_prime(i) == 1)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

在这里插入图片描述

15.乘法口诀表

实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定。
如:输入9,输出9^9口诀表,输入12,输出,…

//实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定。
#include<stdio.h>
void print_table(int n)
{
	int i = 0;
	for (i = 1; i <= n; i++)
	{
		int j = 0;
		for (j = 1; j <= i; j++)
		{
			printf("%-2d*%-2d=%-3d ", i, j, i * j);
		}
		printf("\n");
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	print_table(n);
	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springcloud,springboot各个版本之间的关系

1 版本关系 在实际的开发中如果要自己搭建矿建&#xff0c;发现springcloud&#xff0c;springboot的版本可能是首先需要确定的&#xff0c;那么他们之间的关系是什么呢&#xff1f;看官网&#xff0c;地址 Spring Cloud 左侧是cloud的版本&#xff0c;右侧是对应的文档&…

Splunk Window 客户端迁移

最近客户的Splunk deployment server 要迁移,伴随着client 端的配置也要相应的调整: 先看一下架构: 看一下主要的参数: Summary of key terminology Heres a recap of the key definitions: TermMeaningdeployment serverA Splunk Enterprise instance that acts as a c…

Java中的日期与时间

Java中的日期与时间\huge{Java中的日期与时间}Java中的日期与时间 JavaJavaJava中有很多类是专门用于描述日期类的。 Date类 DateDateDate类&#xff1a;用于表示当前所在系统的日期时间信息。 Date类的构造器 示例&#xff1a; Date d new Date(); System.out.println(d);…

12月第3周榜单丨B站UP主排行榜(飞瓜数据B站)发布!

飞瓜轻数发布2022年12月12日-12月18日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的…

Redis高级篇

redis的四个问题&#xff1a; 1.Redis是基于内存存储,服务重启可能会丢失数据; 2.并发能力问题&#xff1a;单节点Redis能力虽然不错,但也无法满足如618这种高并发的场景(618并发 数量达到数十万甚至上百万); 3.如果reids宕机,服务不可用,则需要一种自动的故障恢复手段; 4.存…

自学Python可以找到工作吗?

自学Python可以找到工作吗&#xff1f;自学Python找工作主要看自己的学习能力&#xff0c;自学能力很强学完并精通当然可以工作&#xff0c;不过对于大多数人而言一般都挺难&#xff0c;学习不成系统&#xff0c;遇到问题没人解决很容易放弃半途而废。 学Python能干很多很多事…

NodeJS安装-Vue模块化项目构建

NodeJS安装-Vue模块化项目构建 一、环境准备&#xff08;NodeJS安装&#xff09; 1. 安装NodeJS 官网自行下载&#xff0c;并安装 2. 配置npm的全局安装路径 npm config set prefix "D:\soft_install\dev\qianduan_dir\nodejs"3. 切换npm的淘宝镜像&#xff0c…

C++11标准模板(STL)- 算法(std::is_permutation)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 判断一个序列是否为另一个…

《记忆力心理学》5个方法 让你过目不忘

《记忆力心理学》 关于作者 赫尔曼•艾宾浩斯&#xff0c;西方心理学泰斗级人物&#xff0c;生活在19世纪的德国心理学家。他是最早用实验的方法对记忆进行量化研究的 人&#xff0c;最受人瞩目的贡献&#xff0c;就是发现了记忆保持曲线。 关于本书 这本书可以看作是记忆心…

全国职业院校技能大赛网络搭建与应用赛项——云平台底层的一些命令

1.列出运行的虚拟机 virsh list 2.列出所有的虚拟机virsh list --all 3.网络信息表&#xff08;20分&#xff09; 显示网络名及所在的vlan idopenstack network show Network10 -c name -c provider:segmentation_id openstack network show Network20 -c name -c provider:s…

学习->C++篇十九:四种智能指针及其实现

目录 为什么需要智能指针&#xff1f; 什么是内存泄露&#xff1f; 如何避免内存泄露&#xff1f; 什么是RAII&#xff1f; RAII有什么用&#xff1f; 智能指针的原理是什么&#xff1f; C的智能指针有哪些&#xff1f; auto_ptr unique_ptr shared_ptr weak_ptr 为什…

【第十五章 分库分表(垂直拆分,水平拆分),MyCat】

第十五章 分库分表&#xff08;垂直拆分&#xff0c;水平拆分&#xff09;&#xff0c;MyCat 1.分库分表&#xff1a; &#xff08;1&#xff09;介绍&#xff1a; ①采用单数据库进行数据存储&#xff0c;存在以下性能瓶颈&#xff1a; A.IO瓶颈&#xff1a;热点数据太多&…

第二证券|A股传奇董秘变身老板,公司IPO过会

A股传奇董秘何愿平卷土重来&#xff0c;但这次不是以董秘的身份。 12月20日&#xff0c;碧兴科技IPO获科创板上市委会议经过&#xff0c;其实控人正是A股曾经的传奇董秘何愿平。作为前碧水源董秘&#xff0c;何愿平曾多年连任A股身家最贵董秘。 二次创业过会 招股书显现&…

离散化算法

目录 算法原理 算法模板 1&#xff09;手工编码 2&#xff09;c用STL函数实现离散化 附录&#xff1a; 算法原理 给出一列数字&#xff0c;在有些情况下&#xff0c;这些数字的值得绝对大小不重要&#xff0c;而相对大小很重要。例如&#xff0c;对一个班级学生的成绩进行…

图片加水印怎么弄?这些图片加水印方法分享给你

相信很多小伙伴平常会喜欢将自己拍摄的作品上传到社交平台上与他人分享吧。然而有时会遇到自己辛苦拍摄的视频或者图片被他人盗用&#xff0c;甚至是获利的情况。其实想要避免自己的作品被他人盗用&#xff0c;我们可以在作品上面添加专属自己的水印&#xff0c;不仅可以给作品…

Java学生成绩管理系统

1、内容要求 编写一个学生成绩管理系统。学生的属性包括学号、姓名、年龄等。每个学生要学习若干课程&#xff0c;每门课程有平时成绩、期中考试成绩、期末考试成绩以及总评成绩&#xff0c;其中总评成绩平时成绩*30%期中成绩*30%期末成绩*40%。请先设计合理的类存放这些信息&a…

Span-level Bidirectional Network(2022 EMNLP)

论文题目&#xff08;Title&#xff09;&#xff1a;A Span-level Bidirectional Network for Aspect Sentiment Triplet Extraction 研究问题&#xff08;Question&#xff09;&#xff1a;方面情感三元组提取(ASTE)是一种新的细粒度情感分析任务&#xff0c;旨在从评论句中提…

【ML】机器学习中的十大深度学习算法

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

RTOS多任务切换实现

实现任务需要的基础知识 1、程序内部细节 通过分析C语言程序的编码会发现程序都是一些指令和数据。 什么是程序&#xff1f; 指令运行过程中的数据 2、常用汇编指令 汇编指令详解 3、ARM架构过程调用标准AAPCS 传参&#xff1a; 通过r0-r3传递&#xff0c;多于4个参数的部…

【矩阵论】6. 范数理论——基本概念——向量范数与矩阵范数

6.1 基本概念 6.1.1 向量范数 a. 模长&#xff08;二范数&#xff09; Cn中向量X(x1x2⋮xn)的模长为∣X∣(X,X)tr(AHA)∣x1∣2∣x2∣2⋯∣xn∣2C^n中向量 X\left( \begin{matrix} x_1\\x_2\\\vdots\\x_n \end{matrix} \right)的模长为 \vert X\vert\sqrt{(X,X)}\sqrt{tr(A^HA…