C语言 实验九 函数

1.编写程序,求4个整数中的最大数。要求利用自定义函数max()求两个整数的最大值。

思路:就我来看,首先声明一个数组,储存这四个数,在定义一个max函数,在主调函数中,调用一次max即可,但我写的跟CSDN里面的写的有些不同,但结果上是没有问题的,我都列出来了。

#include<stdio.h>    //这是我个人思路
int max(int,int,int,int);
int main()
{
	int a[4];
	int i;
	printf("请输入四个整数:\n");
	for (i = 0; i < 4; i++)
		scanf_s("%d",&a[i]);
	printf("四个数中最大值为:%d",max(a[0],a[1],a[2],a[3]));
	return 0;
}
int max(int a, int b, int c, int d)
{
	int j;
	int max;
	max = a;
	if (b > max)
		max= b;
	if(c>max)
		max = c;
	if (d > max)
		max = d;
	return(max);
}
#include<stdio.h>      //这是CSDN博客里的
int main()
{
	int max(int x, int y, int z, int p);//对max函数进行声明
	int a, b, c, d, e;
	scanf_s("%d%d%d%d", &a, &b, &c, &d);
	e = max(a, b, c, d);
	printf("%d\n", e);
	return 0;
}
int max(int x, int y, int z, int p)
{
	int q;
	q = max1(x, y);//比较a,b的大小
	q = max1(q, z);//比较a,b,c的大小
	q = max1(q, p);
	return(q);//将q作为返回值代入主函数进行计算
}
int max1(int x, int y)
{
	if (x > y)
		return x;//如果x>y,则将x作为返回值代入max函数进行计算
	else
		return y;
}

2.编写程序判断一个整数是否为素数。(主函数输入一个整数,调用判断素数的函数,将结果返回主函数,并输出)

思路:在主函数调用两次judge函数,if语句来判断返回值为真或假,为真,则这个数是素数,为假,这个数不是素数。感觉写的还行。

#include<stdio.h>
int judge(int);
int main()
{
	int num;
	printf("请输入一个整数:\n");
	scanf_s("%d",&num);
	if (judge(num))
		printf("这个数是素数:%d", judge(num));
	else
		printf("这个数不是素数!");
	return 0;
}

int judge(int a)
{
	int b;
	for (b = 2; b < a; b++)
	{
		if (a % b == 0)
		{
			return(0);
		}
	}
	if (a == b)
		return(a);	
}

3.编写两个函数,分别求2个数的最大公约数和最小公倍数,再编写一主函数调用者两个函数,并输出结果。(3个数由用户输入)

不理解,为什么编的函数是求2个数的,而我要输入三个数呢,剩下的明天再写。2022.5.16

emm看来是我的问题,三个数求最大公约数和最小公倍数只要调用每个函数两次就可以了。5.17

#include<stdio.h>//辗转相减法求最大公约数和最小公倍数
int func1(int, int);
int func2(int, int);
int main()
{
	int x, y, z,j,k;
	printf("请输入三个数:\n");
	scanf_s("%d%d%d",&x,&y,&z);
	j = func1(x,y);
	printf("三个数的最小公倍数是:%d\n",func1(j,z));
	k = func2(x,y);
	printf("三个数的最大公约数:%d\n",func2(k,z));
	return 0;
}
int func1(int a,int b)//求最小公倍数
{
	int mul = a * b;
	while (a != b)
	{
		if (a > b)
		{
			a = a - b;
		}
		else if (a < b)
		{
			b = b - a;
		}
	}
	return(mul / a);
}
int func2(int a, int b)//求最大公约数
{
	while (a != b)
	{
		if (a > b)
		{
			a = a - b;
		}
		else if (a < b)
		{
			b = b - a;
		}
	}
	return(a);
}

4.编写一递归函数求斐波拉契数列的前40项。

#include<stdio.h>
long f(int n);
int main()
{
	int n;
	printf("请输入要输出数列的第几项:");
	scanf_s("%d",&n);
	printf("斐波拉契数列%d项的值为:%ld\n",n,f(n));
	return 0;
}
long f(int n)
{
	long y;
	if (n <= 0)  y = 0;
	else if (n == 1 || n == 2) y = 1;
	else y = f(n-1) + f(n-2);
	return(y);
}

5.编写程序,输入一个十六进制数,输出相应的十进制数。(转换功能用子函数实现)

#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
    char a[10];
    void convert(char a[]);
    printf("请输入十六进制数:");
    gets(a); //输入十六进制数
    convert(a);
    return 0;
}
void convert(char a[])
{
    int n, i, num = 0;
    n = strlen(a);
    for (i = n - 1; i >= 0; i--)
    {
        if (a[i] >= '0' && a[i] <= '9')
            num += (a[i] - '0') * pow(16, n - 1 - i);
        else if (a[i] >= 'A' && a[i] <= 'F')
            num += (10 + (a[i] - 'A')) * pow(16, n - 1 - i);
        else if (a[i] >= 'a' && a[i] <= 'f')
            num += (10 + (a[i] - 'a')) * pow(16, n - 1 - i);

    }
    printf("转换十进制为:");
    printf("%d", num);
}

6.编写程序,能够输入100个学生的学号和姓名,并将学生按照学号由小到大排序。当输入一个学号时能用折半法查找出该学生的姓名。

这题有些难度,有时间补上。

评论

  1. 小木白
    博主
    Windows
    9月前
    2022-5-16 22:40:17

    没做完,等待补充2022.5.16 {{doge}}

  2. 头像
    sumire_
    Windows
    8月前
    2022-5-29 13:20:04

    建议素数的那个再限制一下负数

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇