# 第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;
}

• 本文已收录于以下专栏：

## lua程序设计第二版 读书笔记（5-8章）

• myy2012
• 2013年05月09日 17:04
• 1206

## [课本划重点]深入理解jvm－第3章 垃圾收集器与内存分配策略(2)

• Jelly_Jiang
• 2016年08月22日 23:36
• 307

## 《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件

• wo541075754
• 2017年07月15日 11:30
• 1662

## 《深入剖析Tomcat 》第3章 连接器（Connector）

• u011345136
• 2015年04月27日 14:58
• 391

## JavaScript+DOM编程艺术 第三章 DOM

DOM简介1.HTML DOM：网页被加载时，浏览器会创建文档对象模型 2.DOM操作HTML：改变HTML的元素、属性、CSS样式、对所有事件作出反应DOM操作HTML不要在文档加载完成后使用do...
• qq_34664510
• 2017年07月10日 21:34
• 208

## Java - Thinking in Java 第2章 练习

Thinking in Java1//: object/HelloDate.java /** * Default initialize class. * @author C.L.Wang * @...
• u012515223
• 2015年07月06日 23:14
• 1387

## 《 Thinking in Java 》_第3章_操作符_练习题

• waterydd
• 2017年04月19日 10:32
• 408

## 第三章 Dom操作

• yangyiboshigou
• 2017年05月18日 18:59
• 196

## 统计学习方法 第3章 k近邻法

• super_chicken
• 2017年11月16日 13:03
• 84

## Netty In Action中文版 - 第三章：Netty核心概念

• abc_key
• 2014年07月12日 11:34
• 11682

举报原因： 您举报文章：第3章 数组与字符串 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)