1.使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
例如:输入test.exe -a 1 2
执行1+2输出3
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,char* argv[]) { int num1 = atoi(argv[2]); int num2 = atoi(argv[3]); int ret = 0; if (strcmp(argv[1], "-a") == 0) { ret = num1 + num2; } if (strcmp(argv[1], "-s") == 0) { ret = num1 - num2; } if (strcmp(argv[1], "-m") == 0) { ret = num1 * num2; } if (strcmp(argv[1], "-l") == 0) { ret = num1 / num2; } printf("%d\n",ret); system("pause"); return 0; }
2.调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
/*奇数位于数组的前半部分,所有偶数位于数组的后半部分。*/
int * sort_arr(int arr[], int len) { int left = 0; int right = len - 1; while(left < right) { int is_left = arr[left] % 2 ; int is_right = arr[right] % 2 ; if(is_left == 0 && is_right == 1)//左偶数右奇数 { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; continue; } if(is_left == 1 ) { left++; } if(is_right == 0) { right--; } } return arr; }
==================================================
【参考】
void swap(int *pa, int *pb) { int tmp = *pa; *pa = *pb; *pb = tmp; } int main() { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; int sz = sizeof(arr) / sizeof(arr[0]); int i = 0; int start = 0; int end = sz - 1; while (start < end) { while ((start < end) && arr[start] % 2 != 0) { start++; } while ((start < end) && arr[end] % 2 == 0) { end--; } if (start < end) { swap(arr + start, arr + end); start++; end--; } } for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } printf("\n"); system("pause"); return 0; }
==================================================
3.写冒泡排序可以排序多个字符串。
/*写冒泡排序可以排序多个字符串。*/
void swap_str(char *c1, char *c2) { char temp = *c1; *c1 = *c2; *c2 = temp; } void S_paixu(char a[][30],int line) { int i = 0; for(;i < line - 1;i++) { int j = 0; for(;j < line - i - 1;j++) { if(strcmp(a[j],a[j+1]) > 0) { int k = 0; while(k < 30) { swap_str(&a[j][k],&a[j+1][k]); k++; } } } } }
----------------------------------------有返回值类型----------
-----------------------
char (*S_paixu(char a[][30],int line))[30]//返回二维指针地址 { int i = 0; for(;i < line - 1;i++) { int j = 0; for(;j < line - i - 1;j++) { if(strcmp(a[j],a[j+1]) > 0) { int k = 0; while(k < 30) { swap_str(&a[j][k],&a[j+1][k]); k++; } } } } return a; } int main() { char arr[][30] = {"abfgg","abcdf","abcda"}; int i = 0; char (*p)[30] = S_paixu(arr,3); //S_paixu(arr,3); for(;i < 3;i++) { //printf("%s ",arr[i]); printf("%s ",p[i]);//p[i]为二维数组对应每行的行地址 } system("pause"); return 0; }
----------------------------------------------------
【参考】
void bubble(char *arr[], int sz) { int i = 0; int j = 0; for (; i < sz - 1; i++) { for (; j < sz - 1 - i; j++) { if (strcmp(arr[j], arr[j + 1])>0) { char *tmp = arr[j];//交换地址 arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } int main() { char *arr[] = { "abcdef", "aaaaa", "cbdef", "bbbbb" }; int sz = sizeof(arr) / sizeof(arr[0]); int i = 0; bubble(arr, sz); for (i = 0; i < sz; i++) { printf("%s\n", arr[i]); } system("pause"); return 0; }
===================================================
4.编写函数判断当前的机器大端小端。
void check_big_little() { int i = 1; if(*((char *)(&i))) { printf("little\n"); } else { printf("big\n"); } }
5.好好理解数组指针、指针数组。