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
请按任意键继续. . .
*/