C语言练习 4

2023.08.01

输入4个整数,找出其中最大的数。用函数的嵌套调用来处理。

int max2(int a,int b)
{
   int k;
   k=a>b?a:b;
   return k;
}

int max4(int a,int b,int c,int d)
{
    int m,n,i;
    m=max2(a,b);
    n=max2(c,d);
    i=m>n?m:n;
    return(i);
}

int main()
{
    int a,b,c,d,e;
    printf("输入四个整数");
    scanf("%d %d %d %d",&a,&b,&c,&d);
    e=max4(a,b,c,d);
    printf("max=%d",e);
    return 0;
}

先写主函数部分,在写调用函数部分,主函数部分书写无问题,主要出现在函数调用部分。函数嵌套调用,我是两数两数字先比较,再进行比较,将最大值返回主函数,所以第一层调用就设置两两比较,再比较,因为两数比较这个流程要进行两次,我就写成第二层调用函数供比较使用。关于变量定义的部分,我尝试使用了好几个不同的max做为变量名称,发现运行起来总数在定义处报错,于是我经过更换,没有再报了。

int max2(int a,int b)
{
    if(a<b) return b;
    else return a;
}

int max4(int a,int b,int c,int d)
{
    int max2(int a,int b);
    int m;
    m=max2(a,b);
    m=max2(m,c);
    m=max2(m,d);
    return m;
}

int main()
{
    int max4(int a,int b,int c,int d);
    int a,b,c,d,max;
    printf("输入4个数");
    scanf("%d %d %d %d",&a,&b,&c,&d);
    max=max4(a,b,c,d);
    printf("max=%d\n",max);
    return 0;
}

书本上的程序在比较大小方法上略有不同,且写的很简洁,值得借鉴。

程序改进:

//max2函数的返回值
int max2(int a,int b)
{
    return(a>=b?a:b);
}

//max4函数中最大值m的赋值
//原
m=max2(a,b);
m=max2(m,c);
m=max2(m,d);
//改
m=max2(max2(max2(a,b),c),d);

求组合数,Cmn。

关键:对于函数的定义,输入m,n为整型数据,输出的组合数为double。

int main()
{
    int m, n;
    void change(int x, int y);
    double cmn, facto(int x);
    printf("Input m and n=");
    scanf("%d %d",&m,&n);
    cmn = facto(m) / (facto(n) * facto(m - n));
    printf("The combination is %lf\n", cmn);
    return 0;
}

double facto(int x)
{
    int y;
    for (y = 1; x > 0; --x) y *= x;
    return y;
}

写一个函数,计算x的n次方。

关键:运用pow函数求幂次方的运算。引用头文件<math.h>中,声明了一个函数pow(x, n),用于求x的n次方。

#include <math.h>
double power(double x, double n)
{
	double p;
	p = pow(x, n);
	return p;
}

int main()
{
	double x, n;
	printf("输入x和n,计算x^n:");
	scanf("%lf %lf", &x, &n);
	printf("x^n=%lf", power(x, n));
	return 0;
}

输出正六边形。编写程序输出边长为n的空心正六边形,其边由*组成。

调试练习

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i;
	for (i = 0; i < 10; i++ )
	{
		arr[i] = -1;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

使用断点,条件断点,逐语句,逐过程这些快捷键对上面的代码进行调试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值