题目:有三个字符串,要求找出其中最大者。
输入: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;
}
总结:今天做了几道简单的数学题。感觉还是不要老做很难的,基础的也要时不时的练一练,考试也应该不是全部都非常难,基础题也要抓牢。今天改进了写法,参考了同学的博客,要慢慢的规范自己,不断提高。