C语言编程练习day18

题目:有三个字符串,要求找出其中最大者。

输入:3个字符串。

输出:3个字符串中最大者。

优化目标:无

思路:设计一个二维字符数组str[3][64],大小为3x64,即有3行64列(每一列可以最多容纳64个字符)。每一行存放一个字符串。通过strcmp函数对3个字符串进行比较,第一次比较前两个,将大的一个存放再临时字符数组string中,然后再用string与最后一个字符串进行比较,输出二者中最大的一个。

#include <stdio.h>
#include <string.h>

int main(){
	
	char str[3][64];//定义二维字符数组,存放3个待比较的字符串
	char string[64];//临时一维字符数组,第一次比较时,存放较大的
	
	//输入3个字符数组
	for(int i=0; i<3; i++){
		gets(str[i]);
	}
	
	if(strcmp(str[0], str[1]) > 0){//str[0]>str[1]
		strcpy(string, str[0]);//把str[0]复制给string
	}else{
		strcpy(string, str[1]);//把str[1]复制给string
	}
	
	//最后比较string与str[2]的大小,谁大输出谁
	printf("the largest string is:\n");
	if(strcmp(string, str[2]) > 0){
		printf("%s", string);
	}else{
		printf("%s", str[2]);
	}
	
	
	return 0;
}

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

输入:4个整数。

输出:4个数中,最大的数。

优化目标:无

思路:这个题目并不复杂,根据题目要求,用函数的嵌套来处理。在函数max4中,找出最大的数。在max4函数中再调用另一个函数max2。max2函数用来找出两个数中最大的一个。在max4函数中多次调用max2,就可以找到最大的数。

#include <stdio.h>

/*
*找两个数中最大的数
*@a:待比较的数1
*@b:待比较的数2
*/
int max2(int a, int b){
	return a >= b ? a : b;
}

/*
*找4个数中最大的数
*@a:待比较的数1
*@b:待比较的数2
*@c:待比较的数3
*@d:待比较的数4
*/
int max4(int a, int b, int c, int d){
	int m = 0;
	//嵌套调用max2
	m = max2(a, b);//比较a与b的大小
	m = max2(m, c);//a与b中大的与c比较
	m = max2(m, d);//a、b、c中大的与d比较
	
	return m;
}

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

题目:用递归的方法求n!

输入:一个正整数n。

输出:输入的正整数的阶乘n!。

优化目标:无

思路:可以用递推的方法,即从1开始,乘2,再乘3…一直到n,还是比较好理解。当然本题要求用递归,即5!=54!, 4!=43!…1!=1。

#include <stdio.h>

/*
*求阶乘函数
*@n:要求阶乘的数
*/
int fac(int n){
	int f;
	if(n < 0){
		//判断参数的合法性
		return -1;
	}else if(n == 1 || n ==0){
		return 1;
	}else{
		//递归,求阶乘
		f = fac(n-1)*n;
	}
	
	return f;
}

int main(){
	
	int n;
	scanf("%d", &n);
	
	printf("%d! = %d", n, fac(n));
	
	return 0;
}

题目:输入10个数,要求输出其中值最大的元素和该数是第几个数。

输入:10个整数

输出:10个数中最大的数即其位置

优化目标:无

思路:可以定义一个数组a,长度为10,用来存放10个整数。设计一个函数max,用来求两个数中的大者。在主函数中定义一个变量m,初值为a[0],每次调用max函数后的返回值存放在m中。用"打擂台"算法,依次将数组元素a[1]到a[9]与m比较,最后得到m值就是10个数中最大者。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 10
/*
*比较出最大值函数
*@x:待比较的数
*@y:待比较的数
*/
int max(int x, int y){
	return x >=y ? x : y;
}

int main(){
	
	int a[MAX];
	int m, n;
	printf("enter 10 integer numbers:");
	
	for(int i=0; i<MAX; i++){
		scanf("%d", &a[i]);
	}
	printf("\n");
	
	m = a[0];
	for(int j=1; j<MAX; j++){
		if(max(m, a[j]) > m){
			m = max(m, a[j]);
			n = j;//保存当前最大数的位置
		}
	}
	//打印最终结果
	printf("The largest number is %d\nit is the %dth number.\n", m, n+1);
	
	return 0;
}

总结:今天做了几道简单的数学题。感觉还是不要老做很难的,基础的也要时不时的练一练,考试也应该不是全部都非常难,基础题也要抓牢。今天改进了写法,参考了同学的博客,要慢慢的规范自己,不断提高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别偷我的猪_09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值