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个学生的学号和姓名,并将学生按照学号由小到大排序。当输入一个学号时能用折半法查找出该学生的姓名。
这题有些难度,有时间补上。
没做完,等待补充2022.5.16 {{doge}}
建议素数的那个再限制一下负数