本帖最后由 鸦领主 于 2020-12-10 22:13 编辑
一、函数的开发
1.函数的定义:
返回值类型 函数名 参数列表
int cifang(int m, int n) 函数头:返回值类型 函数名(参数列表)
{ 函数名可以自定义
int i = 0;
int k = 1;
while ((i < n)) 函数体:大括内输入你要实现的内容
{
k = k * m;
i++;
}
return k;
}
列如:
#include<stdio.h>
int cifang(int m, int n)
{
int i = 0;
int k = 1;
while (i < n) //i=0,n=6;0<6 循环6次
{
k = k * m; //循环一次k=1x3=3 ;循环二次k=3x3=9;循环三次k=9x3=27.......
i++;
}
return k;//最后返回k最后得出的值
}
//上面是你定义的函数
int main()
{
int y = cifang(5, 6);//这里直接调用这个函数带入俩个数值
printf("结果是%d\n",y);//算出5的6次方
int x = cifang(3, 4);//3和4是送入的实际参数,可以再次调用这个函数重复使用
printf("结果是%d\n", x);
return 0;
}
C语言学习第八天
2.制作一些简单的函数
%c输出一个字符
a)判断一个字符是否为字母
#include<stdio.h>
int zimu(int i)
{
if (i >= 'a' && i <= 'z')//判断输入的字符是否大于等于a,而且小于等于z
return 1; //成立返回真
else
return 0;//不成立返回假
//4句简化成一句 return i >= 'a' && i <= 'z';
}
//上面为定义的函数
int main()
{
int i = 'h';
(zimu(i))? printf("你输入的%c是字母", i): printf("你输入的不是字母"); //返回真执行第句,返回假执行第二句
return 0;
}
C语言学习第八天
C语言学习第八天
b)判断一个字符是否为0-9之间的数字
int shuzi(int i)
{
if (i >= '0' && i <= '9')
return 1;
else
return 0;
//4句简化成一句 return i >= '0' && i <= '9';
}
int main()
{
int i = '3';
(shuzi(i))? printf("你输入的%c是", i): printf("你输入的不是");
return 0;
}
C语言学习第八天
二、函数开发练习
1.编写一个函数,功能:测试带入的数字是否为素数;连续输入3个数字,判断这个3个数字分别是否为素数并打印。 #include<stdio.h>
#include<math.h>
int shusu(int i)
{
int n = 2;
int m = sqrt(i) + 1;
while (m>=n)
{
if (i % n == 0)
return 0; //如果程序执行到这里说明不是素数,直接返回假
n++;
}
return 1; //能执行到这里说明是素数,直接返回真
}
//上面是编写的函数
int main()
{
int a, b, c;
printf("请输入3个数字判断是否为素数:");
scanf_s("%d%d%d",&a,&b,&c);
(shusu(a))? printf("%d是素数\n", a): printf("%d不是素数\n", a);
(shusu(b)) ? printf("%d是素数\n", b) : printf("%d不是素数\n", b);
(shusu(c)) ? printf("%d是素数\n", c) : printf("%d不是素数\n", c);
return 0;
}
C语言学习第八天
2.编写一个函数,功能:打印出a到z之间的素数
#include<stdio.h>
#include<math.h>
int shusu(int i)
{
int n = 2;
int m = (int)sqrt(i) + 1;
while (m>=n)
{
if (i % n == 0)
return 0;
n++;
}
return 1;
}
//上面判断否为素数
//void不需要return
void fanwei(int a,int z)//接收俩个数字
{
int i = 0;
while (a<z)
{
if (shusu(a))//每循环一次送如shusu里面判断
{
printf("%d ", a); //再打印出来
i++;
}
a++;
}
printf("\n共打印%d个素数", i);
}
int main()
{
int i, n;
printf("请输入:");
scanf_s("%d%d", &i, &n);
fanwei(i, n); //把俩个数字送入void fanwie
return 0;
}
C语言学习第八天
3、编写一个菜单函数 #include<stdio.h>
int caidan()
{
puts("1、浏览所有数据");
puts("2、添加数据");
puts("3、删除数据");
puts("4、修改数据");
puts("0、退出程序");
printf("===========\n");
int i;
printf("请选择:");
scanf_s("%d", &i);
return i;
}
//上面为函数内容
int main()
{
while (caidan())//返回值为0退出循环不等于0一直循环
;
return 0;
}
C语言学习第八天
4.编写一个函数,求俩个数的最大公约数(2,3,6都能被12和18整除那么最大公约数是6)
#include<stdio.h>
int yueshu(int a,int b)
{
int m = a > b ? b : a; //求出最小的数字
while (m>0) //从最小的数字开始探测
{
if (a % m == 0 && b % m == 0) //能同时被a或者b整除
{
printf("%d和%d的最大公约数是:%d", a, b, m);
return m;
}
m--; //比如12到11,10,9.....找出第一个能被整除的数字
}
}
int main()
{
yueshu(18, 12);
}
C语言学习第八天
思路:如从12开始向下探测11,10,9,8,7...找出第一个能被a和b同时整除的数
4.编写一个函数,求俩个数的最小公倍数(6、15两数的公倍数有30、60、90、……,6及15两数之最小公倍数为30) #include<stdio.h>
int yueshu(int a,int b)
{
int m = a > b ? a : b; //求出最大的数字
while (m)//从某个数开始一直向上探测
{
if (m %a == 0 && m % b == 0)//直到找出能同时被a或者b整除
{
printf("%d和%d的最小公倍数是:%d", a, b, m);
return m;
}
m++;//比如36,37,38...直到找出可以同时整除a和b的数
}
}
int main()
{
yueshu(18, 12);
}
C语言学习第八天
思路:如从36开始向上探测37,38,39...找出第一个能同时整除a和b的数
5.代码融合在一起 为了看着不乱我们将代码分为多个cpp (隔页调用需要声明:将要调用的函数的函数头复制到本页加个;)
main.cpp #include<stdio.h>
int caidan();
int main()
{
while (caidan())
;
return 0;
}
菜单.cpp #include<stdio.h>
#include<Windows.h>
void Testbeishu();
void Testgongyue();
void Testsushu();
int caidan()
{
system("cls");
int a;
puts("1、求最大公约数");
puts("2、求最小公倍");
puts("3、判断是否为素数");
puts("0、退出程序");
puts("===============");
printf("请选择:");
scanf_s("%d", &a);
switch (a)
{
case 1:
Testgongyue();
break;
case 2:
Testbeishu();
break;
case 3:
Testsushu();
break;
case 0:
return a;
default:
printf("输入的数字无效\n");
system("pause");
break;
}
return a;
}
case要用.cpp; #include<stdio.h>
#include<Windows.h>
int gongyue(int a, int b);
int beishu(int a, int b);
int sushu(int a);
void Testgongyue()
{
while (1)
{
system("cls");
int a, b;
printf("你选择了求最大公约数\n请输入俩个数字求最大公约:");
scanf_s("%d%d", &a, &b);
if (a == 0&&b==0)
return;
printf("%d和%d的最大公约数是%d\n", a, b, gongyue(a, b));
system("pause");
}
}
void Testbeishu()
{
while (1)
{
system("cls");
int a, b;
printf("你选择了求最小公倍数\n请输入俩个数字求最小公倍:");
scanf_s("%d%d", &a, &b);
if (a == 0 && b == 0)
return;
printf("%d和%d的最小公倍数是%d\n", a, b, beishu(a, b));
system("pause");
}
}
void Testsushu()
{
while (1)
{
system("cls");
int a;
printf("输入0返回到选项列表\n");
printf("你选择了判断是否为素数\n请输入一个数判断是否为素数:");
scanf_s("%d", &a);
if (a == 0)
return;
(sushu(a)) ? printf("%d是素数\n", a) : printf("%d不是素数\n", a);
system("pause");
}
}
最大公约数.cpp #include<stdio.h>
int gongyue(int a, int b)
{
int m=(a > b) ? b : a;
while (m>0)
{
if (a % m == 0 && b % m == 0)
return m;
m--;
}
}
最小公倍数.cpp #include<stdio.h>
#include<stdio.h>
int beishu(int a, int b)
{
int m = (a > b) ? a : b;
while (m)
{
if (m % a == 0 && m % b == 0)
return m;
m++;
}
}
素数.cpp #include<stdio.h>
#include<math.h>
int sushu(int a)
{
if (a % 2 == 0&&a!=2)
return 0;
if (a == 1)
return 0;
int i = 2;
int m = (int)sqrt(a) + 1;
while (i<m)
{
if (m % i == 0)
return 0;
i++;
}
return 1;
}
或者可以创建一个头文件把声明全部放进去
C语言学习第八天
C语言学习第八天
C语言学习第八天
F10单步跟踪,F11进菜单函数
C语言学习第八天
C语言学习第八天
C语言学习第八天
C语言学习第八天
C语言学习第八天
6.软件运行流程 将地址固定的方法:
C语言学习第八天
链接器→高级→将随机基址改为否,固定改为是
C语言学习第八天
栈是循环使用的,当返回到main函数,栈将不会使用,下次再调用其他函数时还是同样的空间
|