本文介绍: 写一个判断素数函数,在主函数输入一个整数,输出是否素数信息一个函数,使给定一个 3X3 的二维整型数组转置,即行列互换。写一个函数,使输入一个字符串按反序存放,如输入”CANADA”,输出“ADANAC”。在主函数中输入和输出字符串。写一个函数,将两个字符串连接,如字符串 1 是”BEI”,字符串 2 是”JING”,连接起来是”BEIJING”

第七章 函数

7.1 最大公约数最小倍数

题目概述

两个函数,分别求两个整数最大约数最小倍数,用主函数调用两个函数,并输出结果两个整数键盘输入。

题目思路

最大约数:辗转相除法

代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int gcd(int x, int y)
{
	int z = -1;
	while (z != 0)
	{
		z = x % y;
		x = y;
		y = z;
	}

	return x;
}

int lcm(int x, int y)
{
	int z = x * y / gcd(x, y);
}

int main()
{
	int a = 0;
	int b = 0;

	scanf("%d %d", &a, &b);

	printf("最大公约数:%dn", gcd(a, b));
	printf("最小倍数:%dn", lcm(a, b));



	return 0;
}

运行结果如下
在这里插入图片描述

7.2 函数判断素数

题目概述

写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息

题目思路:
代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int Is_prime(int n)
{
	int i = 0;
	int flag = 1;
	for (i = 2; i < n; i++)
	{
		if (n % i == 0)
		{
			flag = 0;
			break;
		}
	}

	return flag;
}
int main()
{
	int n = 0;
	
	scanf("%d", &amp;n);

	int ret = Is_prime(n);

	if (ret == 1)
	{
		printf("是素数n");
	}
	else
	{
		printf("不是素数n");
	}

	return 0;
}

代码优化

优化1:由于偶数都不是素数,我们可以只从奇数项开始,每个数加+2让下一个也是奇数
优化2:当一个数不是素数的时候,一定能下成下列的一个式子,且他是可以被一个因子整除
例:m = a *b
16 = 4 * 4
16 = 2 * 8
a和b中一个数字是 <= sqrt(m) →[4]

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
int Is_prime(int n)
{
	int i = 0;
	int flag = 1;
	for (i = 3; i <= sqrt(n); i+=2)
	{
		if (n % i == 0)
		{
			flag = 0;
			break;
		}
	}

	return flag;
}
int main()
{
	int n = 0;
	
	scanf("%d", &amp;n);

	int ret = Is_prime(n);

	if (ret == 1)
	{
		printf("是素数n");
	}
	else
	{
		printf("不是素数n");
	}

	return 0;
}

运行结果如下
在这里插入图片描述
在这里插入图片描述

7.3 行列互换

题目概述

写一个函数,使给定的一个 3X3 的二维整型数组转置,即行列互换。

题目思路:
  • 画一个对角线
    在这里插入图片描述

对角线的值不变,然后让对角线外的对称值进行互换,既然是互换,那么就会要有一个中间变量temp进行互换

对应下标如下
在这里插入图片描述

代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Swap(int arr[3][3])
{
	int i = 0;
	int j = 0;
	int temp = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < i; j++)
		{
			temp = arr[i][j];
			arr[i][j] = arr[j][i];
			arr[j][i] = temp;
		}
	}
}
int main()
{
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
	int i = 0;
	int j = 0;

	Swap(arr);

	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("n");
	}


	return 0;
}

运行结果如下
在这里插入图片描述

7.4 反序存放字符串

题目概述

写一个函数,使输入的一个字符串按反序存放,如输入”CANADA”,输出”ADANAC”。在主函数中输入和输出字符串

题目思路:
代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
void reverse(char ch[100], int sz)
{
	int i = 0;
	int temp = 0;
	for (i = 0; i < sz /2; i++)
	{
		temp = ch[i];
		ch[i] = ch[sz - 1 - i];
		ch[sz - 1 - i] = temp;
	}
}
int main()
{
	char ch[100] = { '0' };

	gets(ch);
	
	int sz = strlen(ch);

	reverse(ch, sz);

	printf("%s", ch);

	return 0;
}

运行结果如下
在这里插入图片描述

7.5 函数连接字符

题目概述

写一个函数,将两个字符连接,如字符串 1 是”BEI”,字符串 2 是”JING”,连接起来是”BEIJING”

题目思路:
代码实现
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
void my_link(char s1[100], char s2[100], int sz)
{
	int i = sz;
	int j = 0;
	while (s2[j] != '')
	{
		s1[i] = s2[j];
		i++;
		j++;
	}

	s1[i] = '';
}
int main()
{
	char s1[100] = { '0' };
	char s2[100] = { '0' };

	gets(s1);
	gets(s2);
	int sz = strlen(s1);

	my_link(s1, s2, sz);

	printf("%s", s1);


	return 0;
}

运行结果如下
在这里插入图片描述

原文地址:https://blog.csdn.net/weixin_47347629/article/details/134754506

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_33956.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注