1.使用main函数的参数,实现一个整数计算器;2、写冒泡排序可以排序多个字符串

1.使用main函数的参数,实现一个整数计算器

程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。

例如:命令行参数输入:test.exe -a 1 2

——>执行1+2输出3

首先,我们先来看一下main函数有哪些参数:

int main(int argc, char *argv[], char *envp[])
{
    program-statements
}

从代码中可以看出,main函数有三个参数:

第一个argc是整形变量, 表示包含文件名在内的命令行参数的个数;

第二个argv是个字符指针的数组, 其中每个元素是一个字符指针,指向一个字符串,这些字符串就是命令行中的每一个参数()字符串;

第三个envp是个字符指针的数组,数组的每一个原元素是一个指向一个环境变量(字符串)的字符指针;

通过上面对main函数参数的了解,现在可以实现一下计算器:

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


int Add(int x, int y)//(加)
{
    return x+y;
}

int Sub(int x, int y)//(减)
{
    return x-y;
}

int Mul(int x, int y)//(乘)
{
    return x*y;
}

int Div(int x, int y)//(除)
{
    return x/y;
}

int main (int argc, char* argv[], char* envp[])
{
    int x = 0;
    int y = 0;
    int ret = 0;

    if (argc != 4)
    {
        printf ("%d", argc);
        printf ("参数错误,程序退出!\n");
        system ("pause");
        return 0;
    }


        x = atoi(argv[2]);//函数atoi接收字符串的起始位置,可以吧字符串转换成对应的数字,比如字符串“123”转换成数字123;
        y = atoi(argv[3]);

        switch (*(argv[1]+1))//(以"-a"为例)argv[1]指向的是"-a"中'-'的地址,加一就指向'a'的地址,解引用就表示a
        {
        case 'a':
            ret = Add(x, y);//(加)
            break;
        case 's':
            ret = Sub(x, y);//(减)
            break;
        case 'm':
            ret = Mul(x, y);//(乘)
            break;
        case 'd':
            ret = Div(x, y);//(除)
            break;

        default:printf ("输入错误!!\n");
            break;
        }
        printf ("%d\n", ret);

    system ("pause");
    return 0;
}

程序的运行结果如下图:

先在vs里面修改命令行参数,然后在运行,效果如下:

这里写图片描述
这里写图片描述

或者在cmd里面运行,结果如下:

这里写图片描述

2、写冒泡排序可以排序多个字符串

排序原理:

每次对相邻的两个元素进行比较,若前者大于后者则交换,如此一趟下来最后一个则是最大的一个元素;然后对剩下的字符串再进行同样的操作,n个字符串,经过n-1轮比较后完成排序。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void bubble_sort(char *arr[], int sz)
{
    int i = 0;
    int j = 0;
    char* tmp = NULL;

    for (i=0; i<sz; i++)
    {
        for (j=0; j<sz-1-i; ++j)
        {
            if (strcmp(arr[j], arr[j+1])<0)
            {
                tmp = *(arr+j);
                *(arr+j) = *(arr+j+1);
                *(arr+j+1) = tmp;
            }
        }
    }
}

void print (char* arr[], int sz)
{
    int i = 0;
    for (i=0; i<sz; i++)
    {
        printf ("%s ",*(arr+i));
    }
    printf ("\n");
}
int main()
{
    char *arr[] = {"abcde", "bcdef", "cdefg", "fghij", "jilmn"};        
    int i = 0;
    int sz = sizeof (arr)/sizeof (arr[0]);

    bubble_sort(arr, sz);
    print (arr, sz);    

    system ("pause");
    return 0;
}

/*
运行结果:
jilmn fghij cdefg bcdef abcde
请按任意键继续. . .
*/

猜你喜欢

转载自blog.csdn.net/a__b__c__/article/details/80226329