03. C Pro 关于数组与指针的用例
/* 1. 求一段字符串中的最长单词
int LTH = 0;
int length=0;
char result[100]; // 如果放在函数longest中,函数调用完毕,会将其释放
int alpha(char c) {
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
return 1;
else
return 0;
}
char * longest(char * c) {
int i, len;
char * point;
len = 0;
for (i = 0; i <= LTH; i++) {
if (alpha(*c)) len++;
else {
if (len > length) {
length = len;
point = c - length;
}
len = 0;
}
c += 1;
}
for (i = 0; i < length; i++) {
result[i] = * point;
point += 1;
}
result[length] = '\0';
return result;
}
int main() {
char str[100] = {' '};
char * tmp;
gets_s(str);
LTH = strlen(str);
tmp = longest(str);
printf("the longest word is :");
for (int i = 0; i < length; i++) {
printf("%c", *tmp);
tmp += 1;
}
}
*/
/* 2. 数组作为地址,在函数间的传递
int * update(int b[], int n) {
printf("\nb[] = ");
for (int i = 0; i < n; i++) {
b[i] = b[i] + 1;
printf("%d ", b[i]);
}
return b;
}
int main() {
int a[5] = { 0 }, c[5] = { 0 };
int * tmp;
tmp = update(a, 5);
for (int i = 0; i < 5; i++) {
c[i] = *tmp;
tmp += 1;
}
printf("\nupdate a[] = ");
for (int i = 0; i < 5; i++) printf("%d ",a[i]);
printf("\nupdate c[] = ");
for (int i = 0; i < 5; i++) printf("%d ", c[i]);
}
*/
/* 3. 函数递归:汉诺塔
void hanno(int n, char x, char y, char z) {
if (n == 1)
printf("%c --> %c\n",x,z);
else {
hanno(n - 1, x, z, y); // 将前n-1层塔,借助z,移动到y
printf("\n%c --> %c\n", x, z); // 将第n层塔,移动到z
hanno(n - 1, y, x, z); // 再将前n-1层塔,借助x,移动到z
}
}
int main() {
int n;
scanf("%d", &n);
hanno(n, 'a', 'b', 'c');
}
*/
/* 4. 一群人围成一圈,1-3报数,凡3退出,求最后剩下的是第几号
1.按人数 n 编号;
2.报数 n-1 次,标记退出人员
3.输出最终胜出者
*/
/*
#define MAX_NUM 50
#define BEGIN 1
#define END 3
#define REMOVED 0
void initialize(int * num, int n) {
for (int i = 0; i < n; i++) {
*num = i + 1;
num += 1;
}
}
void count_off(int * num, const int n) {
int i, k, m;
i = k = m = 0;
while (m < n - 1) {
if (*(num + i) != REMOVED) {
k++;
if (k == 3) {
*(num + i) = REMOVED;
k = 0;
m++;
}
}
i++;
if (i == n) i = 0;
}
}
void output(int * num, int n) {
for (int i = 0; i < n; i++) {
if (*num != REMOVED) {
printf("剩下的是原来的第%d号", i);
return;
}
num += 1;
}
}
int main() {
int num[MAX_NUM];
int n; //人数
printf("请输入人数:");
scanf("%d", &n);
initialize(num, n);
count_off(num, n);
output(num, n);
return 0;
}
*/
/*
int main(void) {
int i, k, m, n, num[50], *p;
printf("input number:");
scanf("%d", &n);
p = num;
for (i = 0; i < n; i++) {
*(p+i) = i + 1;
}
i = k = m = 0;
while (m < n - 1) {
if (*(p + i) != 0) {
k++;
if (k == 3) {
*(p + i) = 0;
k = 0;
m++;
}
}
i++;
if (i == n) i = 0;
}
while (*p == 0) p++;
printf("the last one No.%d\n", *p);
return 0;
}
*/
浙公网安备 33010602011771号