# 第3章 数组与字符串

## 3.1 数组

#include <stdio.h>
#define maxn 105   //常常难以精确计算出需要的数组大小，数组一般会比声明的稍大一点，会更保险
int buf[maxn];     //因为局部变量存放在堆栈段中，若放在函数体内可能会导致栈溢出，一般在全局部分声明较大的数组
int main()
{
int x, n = 0;
while(scanf("%d", &x) == 1)
buf[n++] = x;
for(int i = n-1; i >= 1; i--)
printf("%d ", buf[i]);
printf("%d\n", buf[0]);
return 0;
}

#include<stdio.h>
#include <string.h>
int main()
{
int a[5], b[5] = {1, 2, 3, 4, 5};
memset(a, 1, sizeof(a));   //memset是对每个字节赋值，而int有4字节(32位),则每个元素为00000001000000010000000100000001，即16843009
memcpy(b, a, sizeof(int) * 4);  //是将a的前4个元素赋值给b；若需要全部赋值，则用memcpy(b, a, sizeof(a))
for(int i = 0; i<5; i++)
printf("%d ",a[i]);
printf("\n");
for(int i = 0; i<5; i++)
printf("%d ",b[i]);
return 0;
}

#include<stdio.h>
#include <string.h>
#define maxn 1010
int a[maxn];
int main()
{
int n, k;
memset(a, 0, sizeof(a));
scanf("%d%d", &n, &k);
for(int i = 1; i <= k; i++){
for(int j = i; j <= n; j+=i){  //for(int j = 1; j <= n; j++) if(j %i == 0) a[j] = !a[j];
a[j] = !a[j];
}
}
int first = 1;
for(int i = 1; i <= n; i++){
if(a[i])
{
if(first) { printf("%d", i); first = 0; }
else printf(" %d", i);
}
}
printf("\n");
return 0;
}

#include <stdio.h>
#include <string.h>
#define maxn 20
int a[maxn][maxn];
int main()
{
memset(a, 0, sizeof(a));
int n;
scanf("%d", &n);
a[1][n] = 1;
int x = 1, y = n, count = 1;
while(count < n*n){
while(x+1 <= n && !a[x+1][y]) a[++x][y] = ++count;  //不断往下走，并且填数，先判断，再移动，而不应该走完之后再退回来，对于a[x][y]而言往下走的元素为a[x+1][y]，判断为0后再对a[++x][y]赋值
while(y-1 >= 1 && !a[x][y-1]) a[x][--y] = ++count;
while(x-1 >= 1 && !a[x-1][y]) a[--x][y] = ++count;
while(y+1 <= n && !a[x][y+1]) a[x][++y] = ++count;
}
for(x = 1; x <= n; x++){
for(y = 1; y <= n; y++){
printf("%5d", a[x][y]);
}
printf("\n");
}
return 0;
}

## 3.2 字符数组

#include <stdio.h>
#include <string.h>
char set[20], buf[100];
int main()
{
int kase = 0;
scanf("%s", set);
for(int abc = 100; abc <= 999; abc++){
for(int de = 10; de <= 99; de++){
int tmp1 = abc * (de/10), tmp2 = abc * (de%10), sum = abc * de;
sprintf(buf, "%d%d%d%d%d", abc, de, tmp1, tmp2, sum);
int tag = 1;
for(int i = 0; buf[i]; ++i)
if(strchr(set, buf[i]) == NULL) tag = 0;
if(tag){
printf("<%d>\n", ++kase);
printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n", abc, de, tmp1, tmp2, sum);
}
}
}
printf("The number of solutions = %d\n", kase);
return 0;
}

#include <stdio.h>
int main()
{
char *who = "I";
char *whom = "CSDN";
char s[99];
sprintf(s, "%s love %s.", who, whom);
printf("%s\n", s);                  //输出I love CSDN.
sprintf(s, "%.3f", 3.141592654);
printf("%s", s);                    //输出3.142
return 0;
}

## 3.4 注解与习题

#### java第3章 数组与字符串

2011年06月23日 515KB 下载

#### 算法入门经典第二版 第三章数组和字符串 习题参考答案

2015-02-01 22:18:28

#### 第15章上机练习3

2016-09-20 15:27:09

#### ACTIONSCRIPT 3.0 开发人员指南

2011年03月29日 13.63MB 下载

#### 数据结构 第4~5章 串和数组 自测卷答案

2010年05月20日 71KB 下载

#### 数据结构（c++版）第四章 字符串和多维数组

2014-12-17 19:13:38

#### 第十五章上机练习2

2016-09-20 17:04:14

#### 15章字符串上机2,3,4

2016-09-20 17:19:12

#### C ++ Primer Plus 第六版 第十三章编程练习答案

2017-08-15 17:11:19

#### Python第三章课后作业

2018-03-13 21:18:24