//3:模拟实现strcpy (字符串拷贝) #include<stdio.h> #include<windows.h> #include<assert.h> //#include<string.h>(char *strcpy( char *strDestination, const char *strSource )的头文件) //#pragma warning (disable:4996) char*my_strcpy(char *dest, const char *src) { assert(dest);//检验数组 assert(src); while (*dest=*src) { dest++; src++; } return dest; } int main() { const char str[32] = "abcdefg";//将其定义为数组或者指针都可以 char buf[32]; my_strcpy(buf, str);//后者拷贝给前者 printf("%s\n", buf); system("pause"); return 0; }
//4.模拟实现strcat (字符串拼接) #include<stdio.h> #include<windows.h> //#include<string.h> #include<assert.h> //#pragma warning (disable:4996) char*my_strcat(char*dest, const char*src) { assert(dest); assert(src); while (*dest) { dest++; }//让dest指向最后一个字符 while (*dest = *src) { dest++; src++; } return dest; } int main() { char str[32]= "abcdefg";//将其改为指针形式就中断,因为要拼接需要空间 char *buf= "123456789"; my_strcat(str, buf);//后者拼接在前者上 printf("%s\n", str); system("pause"); return 0; }
//1.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 //找出这两个数字,编程实现。 #include<stdio.h> #include<windows.h> void my_nums( int arr[10],int size ) { int i = 0; int ret = 0; int num1 = 0; int num2 = 0; int flage = 0; for (i=0; i < size; i++) { ret ^= arr[i]; } for (i=0; i < 32; i++) { if (((ret >> i) & 1) != 1)//找异或之后这个数字最先出现1的位置 { flage++; } else break; } for (i=0; i < size; i++) { if (((arr[i] >> flage) & 1) == 1) { num1 ^= arr[i]; } else num2 ^= arr[i]; } printf("%d %d\n", num1, num2); } int main() { int arr[10] = { 1, 2, 1, 2, 3, 5, 6, 5, 6, 4 }; int size = sizeof(arr) / sizeof(arr[0]); my_nums(arr,size); system("pause"); return 0; }
//2.喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。 #include<stdio.h> #include<windows.h> int my_water(int mymoney, int watermoney) { int n =0; n = mymoney / watermoney; int ret = n; while (n > 1) { ret += n / 2; n = n / 2 + n % 2; } return ret; } int main() { int mymoney = 20; int watermoney = 1; int n=0; n = my_water(mymoney, watermoney); printf("汽水瓶数:%d", n); system("pause"); return 0; }