文档库 最新最全的文档下载
当前位置:文档库 › C++数组

C++数组

C++数组
C++数组

1. (10分)已知10个四位数输出所有对称数及个数n。例如1221,2332都是对称数。

设:int m[10] = {1221, 2243, 2332, 1435, 1236, 5623, 4321, 4356, 6754, 3234};

输出结果:1221

2332

#include

using namespace std;

int main()

{

int m[10] = {1221, 2243, 2332, 1435, 1236, 5623, 4321, 4356, 6754, 3234};

int i, s, n, t;

for (i = 0; i < 10; i++)

{

t = m[i] / 1000;

if (t == m[i] % 10)

cout << m[i] << endl;

}

return 0;

}

2. (10分)已知10个数求最大值及最小值以及它们的差.

设:int a[] = {8, 92, 7, 8, 1, 56, 37, 23, 25, 26}, max, min, ca;

输入格式格式要求:无

输出格式要求:max=92,min=1,ca=91

#include

using namespace std;

int main()

{

int a[10] = {8, 92, 7, 8, 1, 56, 37, 23, 25, 26}, max, min, ca, i, t;

for (i = 0; i < 10; i++)

{

if (a[i] > a[i + 1])

{

t = a[i];

a[i] = a[i + 1];

a[i + 1] = t;

max = a[i+1];

}

}

cout << "max=" << max << ",";

for (i = 0; i < 10; i++)

{

if (a[0] > a[i + 1])

{

t = a[0];

a[0] = a[i + 1];

a[i + 1] = t;

min = a[0];

}

}

cout << "min=" << min << ",";

ca = max - min;

cout << "ca=" << ca << endl;

return 0;

}

3. (10分)请输入10个整数到一个一维数组,并逆序输出。

输入提示信息格式要求:无

输出提示信息格式要求:cout << a[i] << " ";

#include

using namespace std;

int main()

{

int a[10], i ;

for (i = 0; i < 10; i++)

cin >> a[i];

for (i = 0; i < 10; i++)

cout << a[9 - i] << " ";

return 0;

}

4. (10分)输入20个整数,统计非负数的个数,并计算它们的和,然后将非负数从小到大进行排序并输出。

输入信息提示要求:无

输出提示信息格式要求:cout<<"非负数有:"<

cout<<"非负数是:"<

cout << setw(5) << a[i];

cout<<"非负数的和是:"<

cout<<"将非负数从小到大排序输出:"<

cout << setw(5) << a[i];

#include

#include

using namespace std;

int main()

{

int a[20], s = 0, n = 0, i, j, t;

for (i = 0; i <= 19; i++)

cin >> a[i];

for (i = 0; i <= 19; i++)

{

if (a[i] > 0)

{

a[n] = a[i];

n++;

}

}

cout << "非负数有:" << n << "个" << endl; cout << "非负数是:" << endl;

for (i = 0; i < n; i++)

cout << setw(5) << a[i];

cout << endl;

for (i = 0; i < n; i++)

s = s + a[i];

cout << "非负数的和是:" << s << endl;

for (i = 0; i <= n - 2; i++)

for (j = i + 1; j <= n - 1; j++)

if (a[i] > a[j])

{

t = a[i];

a[i] = a[j];

a[j] = t;

}

cout << "将非负数从小到大排序输出:" << endl;

for (i = 0; i < n; i++)

cout << setw(5) << a[i];

cout << endl;

return 0;

}

5. (10分)在一个具有N个数的数组中查找并删除一个数K。程序中定义: #define n 10

输入信息格式提示信息: 无

输出信息格式提示信息: 无

#define n 10

#include

using namespace std;

int main()

int a[n], k, i, j;

for(i = 0; i < n; i++)

cin >> a[i];

cin >> k;

for(i = 0; i < n && a[i] != k; i++);

if(i < n)

{

for(j = i; j <= n - 1; j++)

a[j] = a[j + 1];

for(i = 0; i < n - 1; i++)

cout << a[i];

}

else

{

cout << "not found";

for(i = 0; i < n; i++)

cout << a[i];

}

return0;

}

6. (10分)在一个已知的一维数组中分类统计正数和负数的个数。正数的个数存入变量C1中,负数个数存入变量C2中.

输出格式要求:cout << "c1=" << c1 << endl;

cout << "c2=" << c2 << endl;

#include

using namespace std;

int main()

{

int a[10] = {1, 2, 3, 4, 5, 0, 0, -1, -5, -6} , i, c1 = 0, c2 = 0;

for (i = 0; i < 10; i++)

{

if (a[i] > 0)

c1++;

else if (a[i] < 0)

c2++;

}

cout << "c1=" << c1 << endl;

cout << "c2=" << c2 << endl;

return 0;

7. (10分)对给定的10个数按逆序排列,必须用循环完成。

设: int n[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

输入格式要求:无

输出结果:10,9,8,7,6,5,4,3,2,1,

#include

using namespace std;

int main()

{

int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i, j, t;

for (i = 0; i <= 8; i++)

for (j = i + 1; j <= 9; j++)

if (a[i] < a[j])

{

t = a[i];

a[i] = a[j];

a[j] = t;

}

for (i = 0; i < 10; i++)

cout << a[i] << ",";

return 0;

}

8. (10分)输入10个学生的成绩,存放在一个一维数组中,求出总分和平均分。

输入提示信息格式要求: cout << "请输入学生的分数:";

输出结果格式要求:cout << "学生的总分是:" << sum << endl;

cout << "学生的平均分是:" << aver << endl;

#include

using namespace std;

int main()

{

int a[10], i, sum = 0;

int aver;

cout << "请输入学生的分数:";

for (i = 0; i < 10; i++)

cin >> a[i];

for (i = 0; i < 10; i++)

sum = sum + a[i];

aver = sum / 10;

cout << "学生的总分是:" << sum << endl;

cout << "学生的平均分是:" << aver << endl;

return 0;

}

9. (10分)定义数组,输入不多于20名若干学生成绩,统计高于平均分的人数k,用-1做结束标志。

输入格式要求:无

输出格式要求:cout << "高于平均分的人数:" << k << endl;

#include

using namespace std;

int main()

{

double cj[20], aver, sum = 0;

int n = 0, k = 0, i;

cin >> cj[0];

while(cj[n] >= 0)

{

sum += cj[n];

n++;

cin >> cj[n];

}

aver = sum /( n-1);

for(i = 0; i < n-1; i++)

if(cj[i] > aver) k++;

cout << "高于平均分的人数:"<< k << endl;

return0;

}

10.程序设计,输入5个字符串(不含空格),用指针按字母顺序由小到大对字符串排序后输出。

要点分析:定义二维字符数组存储输入字符串,定义字符指针数组对二维字符数组排序。#include

using namespace std;

int main()

{

char *p[5],*t;

char str[5][80];

int i,j;

for(i=0;i<5;i++)

{

cin>>str[i];

p[i]=str[i];

}

for(i=0;i<5;i++)

for(j=i+1;j<5;j++)

if(strcmp(p[i],p[j])>0)

{

t=p[i];

p[i]=p[j];

p[j]=t;

}

for(i=0;i<5;i++)

{

cout<

cout<

}

return 0;

}

11. (10分)在包含10个数的一维整数数组a中查找最大元素max和最小元素min。输出格式要求:cout << "最大元素:" << max << endl;

cout << "最小元素:" << min << endl;

#include

using namespace std;

int main()

{

int a[10] = {32, 43, 65, 23, 432, 543, 543, 54, 542, 87};

int i;

int max, min;

max = a[0], min = a[0];

for(i = 1; i < 10; i++)

{

if(a[i] > max) max = a[i];

if(a[i] < min) min = a[i];

}

cout << "最大元素:"<< max << endl;

cout << "最小元素:"<< min << endl;

return0;

}

12. (10分)利用选择法将下面10个数按降序排列。

有如下定义:int n[10] = {5, 6, 4, 2, 3, 7, 8, 5, 6, 7};

输入格式要求:无

输出格式要求:以逗号分隔降序数列

#include

using namespace std;

int main()

{

int a[10] = {5, 6, 4, 2, 3, 7, 8, 5, 6, 7};

int i, j, t;

for (i = 0; i < 9; i++)

{

for (j = i + 1; j < 10; j++)

{

if (a[i] < a[j])

{

t = a[i];

a[i] = a[j];

a[j] = t;

}

}

}

for (i = 0; i < 10; i++)

cout << a[i]<<",";

cout << endl;

return 0;

}

13. (10分)在a数组和b数组中放入an+1和bn+1个由小到大的有序数,程序把两个数组中的数按由小到大的顺序归并在c数组中。

设: int a[10] = {2, 4, 5, 8, 9, 19}, an = 5;

int b[10] = {2, 3, 4, 8, 12, 18}, bn = 5;

输出格式要求:输出结果用2个空格隔开

cout << endl;

#include

using namespace std;

int main()

{

int a[10] = {2, 4, 5, 8, 9, 19}, an = 5;

int b[10] = {2, 3, 4, 8, 12, 18}, bn = 5;

int c[12], i, j, t;

for (i = 0; i < 6; i++)

{

c[i] = a[i];

c[i + 6] = b[i];

}

for (i = 0; i < 11; i++)

for (j = i + 1; j < 12; j++)

if (c[i] > c[j])

{

t = c[i];

c[i] = c[j];

c[j] = t;

}

for (i = 0; i < 12; i++)

cout << c[i] << " ";

cout << endl;

return 0;

}

14. (10分)求具有10个数的数组中的最大值和次最大值。

设:int a[10] = {39, -47, 21, 2, -8, 15, 98, -3, 87, 56};

输入格式要求:无

输出提示信息:"最大值:"

"次最大值:"

"a[0]="

"a[1]="

输出结果:最大值:98

次最大值:87

a[0]=98

a[1]=87

#include

using namespace std;

int main()

{

int a[10] = {39, -47, 21, 2, -8, 15, 98, -3, 87, 56}, i, j, t;

for (i = 0; i < 9; i++)

for (j = i + 1; j < 10; j++)

if (a[i] < a[j])

{

t = a[i];

a[i] = a[j];

a[j] = t;

}

cout << "最大值:" << a[0] << endl;

cout << "次最大值:" << a[1] << endl;

cout << "a[0]=" << a[0] << endl;

cout << "a[1]=" << a[1] << endl;

return 0;

}

定义数组,输入不多于20名若干学生成绩,统计高于平均分的人数k,用-1做结束标志。设: float cj[]={76,89,90,67,56,45,24,87,66,56,-1};

输入格式要求:无

输出格式要求:cout << "高于平均分的人数:" << k << endl;

#include

using namespace std;

int main()

{

float cj[] = {76, 89, 90, 67, 56, 45, 24, 87, 66, 56, -1}, aver, sum = 0;

int i,n=0,k=0;

while(cj[n] >= 0)

{

sum += cj[n];

n++;

}

aver = sum / n;

for(i = 0; i < n; i++)

if(cj[i] > aver) k++;

cout << "高于平均分的人数:"<< k << endl;

return0;

}

c数组指针题含答案

数组指针01:逆序输出 从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。 输入格式:第一个整数为个数n,后续为n个整数 输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。 输入:10 2 7 9 10 5 4 3 6 8 20 输出: 6 3 9 20 3 10 2 #include using namespace std; const int MAX=100; int main() { int a[MAX],n,i; cin>>n;

for(i=0;i>a[i]; for(i=n-1;i>=0;i--) if(a[i]%3==0) cout<=0;i--) if(i%3==0) cout<

输出格式:下标为3的倍数的元素,各个数值之间用空格分隔。输入:10 2 7 9 10 5 4 3 6 8 20 输出:20 3 10 2 #include using namespace std; const int MAX=100; int main() { int a[MAX],b[MAX],n,i; cin>>n; for(i=0;i>a[i]; b[n-1-i]=a[i]; } for(i=0;i

C语言数组编程题

实验4 数组 一.实验目的: 1.掌握一维数组的定义、赋值和输入输出的方法; 2.掌握字符数组定义、初始化、赋值的方法; 3.了解常见的字符串函数功能及其使用方法; 4.掌握二维数组的定义与引用。 二.实验内容: 1.编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。 2.编写程序,输入10个整数存入一维数组,再按逆序重新存放后再输出。 3.编写程序,输入10个整数存入一维数组,对其进行升序排序后输出。 4.编写程序,求二维数组中元素的最大值和最小值。 5.编写程序,求一个4×4矩阵中所有元素之和。 6.编写程序:从键盘上输入一字符串,统计输出该字符串中的字母字符、数字字符、空格以及其他字符的个数。 7.编写程序:从键盘上输入一字符串,并判断是否形成回文(即正序和逆序一样,如“abcd dcba”)。 8. 产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。 9. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,按原来的规律将其插入并输出。 页脚内容1

10. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,要求找出该数是数组中的第几个元素,如果不在数组中,则输出找不到。 11. 找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小。可能没有鞍点。 12. 编程输出杨辉三角。(要求输出10行)(杨辉三角:每行端点与结尾的数为1.每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大) 13. 输入一行字符,统计大写字母、小写字母、数字、空格以及其它字符个数。 14. 编写程序,将两个字符串连接起来,不用strcat。 15. 编写程序实现strcpy函数功能。 16. 编程实现strlen函数功能。 17. 编程求2-4+6-8…-100+102的值。 18. 假设某人有100,000现金。每经过一次路口需要进行一次交费。交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。请写一程序计算此人可以经过多少次这个路口。 19. 输入若干个正整数,以0结束,将其中大于平均值且个位为5的数排序后输出。(按由大到小的顺序排序) 20. 输入一个字符串,将其中ASCII码值为基数的字符排序后输出。(按由小到大的顺序) 21. 输入一个以回车结束的字符串(少于80个字符),滤去所有的非16进制字符后,组成一个新字符串(16进制形式),然后将其转换为10进制数后输出。 22. 读入一个正整数n(1<=n<=6),再读入n阶矩阵,计算该矩阵除副对角线、最后一行、最后一列 页脚内容2

C语言字符数组总结

字符数组总结 字符数组不仅可以存储字符还可以存储字符串,而且存储字符串时必须包含…\0?,因为此字符是字符串的结束标志。因此,对字符数组的初始化、输入输出与一般数组又有不同。现总结如下: 数组的赋值(其中前两种赋值后不能以字符串进行处理) 1. 逐个元素赋值 char a[5]; a[0]=…C?; a[1]=…H?; a[2]=…I?; a[3]=…N?; a[4]=…A?; 2. 一般整体赋值 char a[5]={…C?, …H?, …I?,?N?,?A?}; char a[ ]={…C?, …H?, …I?, …N?, …A?} 3. 字符串整体赋值 char a[ ]={“abc”}; char a[ ]=“abc”; char a[4]={…a?,…b?,…c?,…\0?}; 字符串的输入(已知:char str[ 10 ]; int i;) 1. 逐个元素输入(必须输入9个) for(i=0;i<9;i++) scanf(“%c”,&str[i]); //此句也可以用str[i]=getchar();代替 str[9]=…\0?; 注意:?\0?只能直接赋值,不能从外部输入,外部输入的\0是\和0两个字符 2. 整个字符串输入(以空格,回车或TAB键结束) scanf(“%s”,str); 注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。 3. 整个字符串输入(只以回车键结束) gets(str); 注意:此语句执行后自动会在str后添加一个?\0?,如:运行时输入:abc回车键,则str 中将有4个字符,依次为:?a?,?b?,?c?,?\0?,其中?\0?是自动添加上的。 字符串的输出(已知:char str[ 10 ]; int i;) 1. 逐个字符输出(注意此时for语句表示从第一个字符一直到?\0?) for(i=0;a[i]!=…\0?;i++) //此句中的a[i]!=…\0?;也可以用i

C语言数组练习及答案

C语言数组练习及答案集团文件版本号:(M928-T898-M248-WU2669-I2896-

第四部分数组 4.1 选择题 1. 以下关于数组的描述正确的是(c )。 A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是(d )。 A.int a(10); B. int n=10,a[n]; C.int n; D. #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(c )。 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 4. 以下对一维数组m进行正确初始化的是(c )。 A. int m[10]=(0,0,0,0) ; B. int m[10]={ }; C. int m[ ]={0}; D. int m[10]={10*2}; 5. 若有定义:int bb[ 8];。则以下表达式中不能代表数组元bb[1]的地址的是(c )。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1 6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是(d )。 A. 3 B. 6 C. 10 D. 20 7. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g;

C语言数组典型例题分析与解答

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是________________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四:static float [4]; 2 下列数组定义语句中,错误的是() ①char x[1]='a';②auto char x[1]={0}; ③static char x[l];④char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。现在假设有4个数据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 41 1 14 2 32 4 23 3 【答案】l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是______________________。 【分析】开始排序前的排列为:413 2 执行第1步后的排列为:143 2 执行第2步后的排列为:123 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ①int a[][]={1,2,3,4,5,6};②char a[2]「3]='a','b'; ③int a[][3]= {1,2,3,4,5,6};④static int a[][]={{1,2,3},{4,5,6}}; 【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④是错误的。C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也是错误的。显然备选答案③符合题意。【答案】③ 6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句是() ①char s[]={‘1','2','3','\0 '};②char s「」={"123"}; ③char s[]={"123\n"};④char s[4]={'1','2','3'};

C语言数组练习及答案

第四部分数组 4.1 选择题 1. 以下关于数组的描述正确的是(c )。 A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是(d )。 A.int a(10); B. int n=10,a[n]; C.int n; D. #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(c )。 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 页脚内容1

4. 以下对一维数组m进行正确初始化的是(c )。 A. int m[10]=(0,0,0,0) ; B. int m[10]={ }; C. int m[ ]={0}; D. int m[10]={10*2}; 5. 若有定义:int bb[ 8];。则以下表达式中不能代表数组元bb[1]的地址的是(c )。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1 6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是(d )。 A. 3 B. 6 C. 10 D. 20 7. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g; 则数值为4的表达式是(d ) A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入(a )。 #include main() { int a[10],i=0; while(i<10) scanf("%d",________ ); 页脚内容2

c语言字符数组与字符串总结

字符数组与字符串 <1>定义 Char数组名[常量表达式] 数组中每一个元素的值为一个字符。 系统在内存为字符数组分配若干连续的存储单元,每个储存单元为一个字节。 <2>初始化 逐个元素初始化,如char c[8]={‘b’,’o’,’y’};(要记得加单引号) 用字符串初始化,如char c[11]={“I am a boy”};初始化后在末尾自动添加’0’ 如果初值个数<数组长度,则只将这些字符赋给数组中前面元素,其余元素自动定为空字符(即’0’) <3>输入输出 ①用格式”%c”逐个输入输出,如scanf(“%c”,&a[0]); ②用格式符”%s”整个字符串输入输出,如scanf(“%s”,a) 用”%s”格式输出字符数组时,遇’\0’结束输出,且输出字符中不含’\0’,用scanf及”%s”输入时,数组名前不能再加”&”符号。 字符串的末尾必须有’\0’字符,且字符串只能存放在字符数组中。 scanf中%s输入时遇空格或回车结束。 ③用函数gets实现输入 gets(字符数组),如gets(a) 调用函数时,回车键作为输入结束标志;然后将接收到的字符依

次赋给数组各个元素,并自动在字符串末尾加字符串结束标记’\0’ ④用字符串输出函数puts实现输出 puts(字符串/字符数组),如puts(a); 输出一个字符串,并在输出后自动换行。 <4>字符串处理函数 ①字符串拷贝函数 格式strcpy(字符数组1,字符串2) 将字符串2拷贝到字符数组1中去,要求字符数组1必须足够大,拷贝时’\0’一同拷贝,不能使用赋值语句为一个字符数组赋值。字符数组1应写成数组名的形式,比如char a[0]; strcpy(a,…) ②字符串连接函数 格式strcat(字符数组1,字符数组2) 将字符数组2连到字符数组1后面,要求字符数组1必须足够大,连接前,两串均以’\0’结束;连接后,串1的’0’取消,新串最后加’\0’。 ③计算字符串长度的函数 strlen(字符数组); 求出字符串或字符数组中实际字符个数,不包括’\0’,并且遇到’\0’结束。 ④字符串比较函数 格式strcmp(字符数组1,字符数组2)

单片机C语言中数组的用法

单片机C语言中数组的用法 时间:2011-10-11 09:37:07 来源:作者: 数组是由具有相同类型的数据元素组成的有序集合。数组是由数组名来表示的,数组中的数据由特定的下标来唯一确定。引入数组的目的,是使用一块连续的内存空间存储多个类型相同的数据,以解决一批相关数据的存储问题。数组与普通变量一样,也必须先定义,后使用。数组在C51语言的地位举足轻重,因此深入地了解数组是很有必要的。下面就对数组进行详细的介绍。 (1)一维数组 一维数组是最简单的数组,用来存放类型相同的数据。数据的存放是线性连续的。 用以下例程说明数组的建立、数据操作: #include /* ----------------------------------------------------- 此程序用以说明数组的建立、数据操作 ----------------------------------------------------- */ unsigned char array[10];//定义一个有10个单元的数组 void main() { unsigned char i; for(i=0;i<10;i++) { array[i]=i; //用下标调用数组中的元素 } /* --------------------------------------- array |9|8|7|6|5|4|3|2|1|0| [9]~[0] --------------------------------------- */ while(1); } 数组名是用来表示数组的标识,其实它是数组的首地址,即一个指针。不过它所表示的地址是固定的,不能改动。如前几章所述的相关内容,array[2]与*(array+2)是等效的,不过不能用array++,因为array是常量。 上面的程序中的数组是静态建立的,以下例程来用说明数组的动态建立。 #include #include /*

C语言字符串的输入和输出

C语言字符串的输入和输出 字符串的输入和输出 %c人为加入\0进行输入输出 %s直接输入输出 *输入输出字符串时字符数组应有足够的存储空间,指针变量作为输入项时,指针必须已经指向确切的、足够大的存储空间 %s的使用 scanf("%s",地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 例:char str[15]; scanf("%s",str); abc123 1.不读入空格和回车,从空格处结束 2.输入字符串长度超过字符数组元素个数,不报错 3.当输入项为字符指针时,指针必须已指向确定的有足够空间的连续 存储单元 4.当为数组元素地址时,从此元素地址开始存放 2.printf("%s",地址值) 输出时遇到第一个'\0'为止 3.gets和puts函数 开头必须stdio.h #include"stdio.h"

1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 4.当为数组元素地址时,从此元素地址开始存放 5.printf("%s",地址值) 输出时遇到第一个'\0'为止 6.gets和puts函数 开头必须stdio.h #include"stdio.h" 1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 7.例: char str[10]; gets(str); 包括空格符 8. 2.puts(字符串起始地址) 遇第一个'\0'结束,自动加入换行符 9.字符串数组:数组中每个元素都是一个存放字符串的数组 可以将一个二维数组看作是字符串数组 10.char ca[3][5]={"A","BB","CCC"}; A\0 B B\0 C C C\0 字符型指针数组 char*pa[3]={"a","bb","ccc"}; pa[0]pa[1]pa[2] 可以重新赋值gets(pa[2]);

C语言一维数组的定义和引用

C语言一维数组的定义和引用 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。 7.1一维数组的定义和引用 7.1.1一维数组的定义方式 在C语言中使用数组必须先进行定义。一维数组的定义方式为:类型说明符数组名[常量表达式]; 其中:类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 例如: int a[10]; 说明整型数组a,有10个元素。 float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。 char ch[20]; 说明字符数组ch,有20个元素。 对于数组类型说明应注意以下几点: 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 数组名的书写规则应符合标识符的书写规定。 数组名不能与其它变量名相同。 例如: main() { int a; float a[10]; …… } 是错误的。 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。 例如: #define FD 5 main() { int a[3+2],b[7+FD];

VC中的CArray的使用

我们在使用vc进行比较复杂的编程时,经常需要用到复杂的数组结构,并希望能实现动态管理。由于C++并不支持动态数组,MFC提供了一个CArray类来实现动态数组的功能。有效的使用CArray类,可以提高程序的效率。 MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。CArray即为其中的一个,用来实现动态数组的功能。 CArray是从CObject派生,有两个模板参数,第一个参数就是CArray类数组元素的变量类型,后一个是函数调用时的参数类型。 我们有一个类class Object,我们要定义一个Object的动态数组,那么我们可以用以下两种方法: CArray Var1; CArray Var2; Var1与Var2哪一个的效率要高呢?Var2的效率要高。为什么呢?接下来我们对CArray的源代码做一个剖析就清楚了。 先了解一下CArray中的成员变量及作用。 TYPE* m_pData; // 数据保存地址的指针 int m_nSize; // 用户当前定义的数组的大小 int m_nMaxSize; // 当前实际分配的数组的大小 int m_nGrowBy; // 分配内存时增长的元素个数 首先来看它的构造函数,对成员变量进行了初始化。 CArray::CArray() { m_pData = NULL; m_nSize = m_nMaxSize = m_nGrowBy = 0; } SetSize成员函数是用来为数组分配空间的,从这里着手,看CArray是如何对数据进行管理的。SetSize 的函数定义如下: void SetSize( int nNewSize, int nGrowBy = -1 ); nNewSize 指定数组的大小 nGrowBy 如果需要增加数组大小时增加的元素的个数。 对SetSize的代码,进行分析。(由于代码太长,只列出部分重要部分) void CArray::SetSize(int nNewSize, int nGrowBy) { if (nNewSize == 0) { // 第一种情况 // 当nNewSize为0时,需要将数组置为空, // 如果数组本身即为空,则不需做任何处理 // 如果数组本身已含有数据,则需要清除数组元素 if (m_pData != NULL) { //DestructElements 函数实现了对数组元素析构函数的调用 //不能使用delete m_pData 因为我们必须要调用数组元素的析构函数

C语言数组

《高级语言程序设计》实验报告实验序号:5 实验项目:数组

1. #include

#include int main() { int array[1000]; int i=0, iter = 0; for(i=0; i<1000; i++ ) array[i] = i+1; array[0] = 0; iter = 1; while( iter<1000 ) { if( array[iter]!=0 ) for( i=iter+1; i<1000; i++ ) { if( array[i]%array[iter] == 0 ) array[i] = 0; } iter++; } for( i=0; i<1000; i++ ) if( array[i]!=0 ) printf( "%d", array[i] ); } 2#include #include int main() { char str[100],s[100]; int i,j; scanf("%s",str); for(i=strlen(str)-1,j=0;i>=0;i--) if(str[i]>'0' && str[i]<='9') //要删除的就不用赋值了。 continue; else s[j++]=str[i]; s[j]='\0'; printf("%s\n",s); return 0; }

3. #include main() { int ab[50],a[50],b[50],n,m,q=0,p=0; printf("请输入元素个数:"); scanf("%d",&n); printf("请输入各个元素:"); for(m=0;m0) { a[q]=ab[m]; q++; } if(ab[m]<0) { b[p]=ab[m]; p++; } } printf("a[%d]=",q); for(m=0;m #include #include void main() { int a[2][10],i,j; srand(time(0)); for(i=0;i<2;i++)

c语言编程技巧如何定义一个字符串的数组

C语言编程技巧:如何定义一个字符串的数组 实现目的 我们在用C语言编写程序时,经常会遇到使用字符串数组的情况,这种数组的特点是,数组中的每个元素都是一个字符串,但每个字符串的长度却不相同。如果你使用C++语言进行编程的话,实现起来相对比较简单,只需直接选择标准模板库的字符串string类,在代码中定义该类的一个数组即可实现。现在的问题是,在纯C语言中如何定义这样的一个字符串数组呢? 如对于下面的一个字符串数组: str = { “I love C.”, “I love C++.”, “I love JA V A.”, “I love Python.”, “I love LabVIEW.” }

下面给出C语言中的两种定义方法。 方法1:定义一个char类型的二维数组 这种方法是通过定义一个char类型的二维数组实现,通过二维数组的行索引可得到数组中的每个字符串,列的大小限定了每个字符串所能包含的最大字符个数,所以采用这种定义方式时,列的大小必须不能小于数组所有字符串的最大长度。如对于上面的数组,C语言的定义代码如下: 在取该数组的每个字符串时,直接对行索引即可。 方法2:定义一个指向char类型的指针数组 这种方法是通过定义一个指向char类型的指针数组实现,数组中的每个元素都是一个指针,通过该指针可得到数组中的每个字符串。如对于上面的数组,C语言的定义代码如下: 两种方法对比 上面的两种方法都可以实现我们的目的,但在内存的占用上两种方法不同。第1种方法定义了一个5行20列的二维数组,即每个字符串所占的字节长度都为20个,所以共需要占用100个字节,而第2种方法是定义的指针数组,每个指针指向的字符串占用的字节长度是其实际长度,所以其总的长度肯定小于100个字节。综合来讲,第1种方法相对于第2种方法,造成了存储空间的浪费情况。

关于C语言中的字符串数组输入输出控制符的若干问题

关于C语言中的字符串数组输入输出控制符的若干问题 示例一: #include void main() { int i; int a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%d",&(a[i])); } printf("%d,%d,%d,%d,%d,%d",a[0],a[1],a[2],a[3],a[4],a[5]); //printf("%d",a); 这是错误做法,没有输出若干个实数的控制符,只能一个个输出。 } 实例二: #include void main() { int i; char a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%s",&(a[i])); //只可从键盘输入一个字符,否则输出将每次输入多余的部分丢弃。 //不可写成:scanf("%c",&(a[i])); } printf("%c%c%c%c%c%c",a[0],a[1],a[2],a[3],a[4],a[5]); //不可用%s%s%s%s%s%s //也可以这样写:printf("%s",a); } 示例三: #include void main() { int i; char a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%c",&(a[i])); getchar(); //如果用%c作为输入一个字符控制符用,后面必须加此句;

C语言数组知识点总结

数组 定义:数组就是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如: int a[10]; 元素为a[0]----a[9]、 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以就是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9};正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9};可以写成int a[]={0,1,2,3,4,5,6,7,8,9}; 但就是,既不赋初值,也不指定长度就是错误的。例如:int a[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4];可以瞧成就是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。 所有元素为a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 2、与一维数组一样元素下标可以就是就是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 int a[3][4]; a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}};可以瞧成就是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

C语言数组练习题

C程序设计(数组)12.23 【题1】在C 语言中,引用数组元素时,其数组下标的数据类型允许是 C 。 A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 【题2】C语言中,数组名代表B A.数组全部元素的值B.数组首地址 C.数组第一个元素的值D.数组元素的个数【题3】以下对一维整型数组a 的正确说明是。 A)int a(10); B)int n=10,a[n]; C) int n; D)#define SIZE 10 scanf(“%d”,&n);int a[SIZE]; int a[n]; 【题4】合法的数组定义是D A.int a[ ]=”string”;B.int a[5]={0,1,2,3,4,5}; C.char a=”string”;D.char a[ ]={0,1,2,3,4,5}; 【题5】若有定义和语句:char s[10]; s=”abcd”; printf(“%s\n”,s); 则结果是(以下u代表空格)D A.输出abcd B.输出a C.输出abcd u u u u u D.编译不通过 【题6】有以下语句,则下面是正确的描述B

static char x [ ]=“12345”;static char y[ ]={‘1’,‘2’,‘3’,‘4’,‘5’}; A.x数组和y数组的长度相同。A B.x数组长度大于y数组长度。 C.x数组长度小于y数组长度 D.x数组等价于y数组。 【题7】若有说明:int a[10];则对a 数组元素的正确引用是 D 。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] 【题8】在C 语言中,一维数组的定义方式为:类型说明符数组名C ; A)[整型常量表达式] B)[整型表达式] C)[整型常量] 或[整型表达式] D)[常量] 【题9】以下能对一维数组a 进行正确初始化的语句是C。 A)int a[10]=(0,0,0,0,0); B)int a[10]={}; C)int a[]={0}; D)int a[10]=”10*1”; 【题10】对以下说明语句的正确理解是 B 。 int a[10]={6,7,8,9,10}; A)将5 个初值依次赋给a[1]至a[5] B)将5 个初值依次赋给a[0]至a[4] C)将5 个初值依次赋给a[6]至a[10] D)因为数组长度与初值的个数不相同,所以此语句不正确【题11】若已定义数组:float a[8];则下列对数组元素引用正确的是 A 。

C语言数组知识点总结

数组 定义:数组是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如:int a[10]; 元素为a[0]----a[9]. 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9};正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9};可以写成int a[]={0,1,2,3,4,5,6,7,8,9}; 但是,既不赋初值,也不指定长度是错误的。例如:int a[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4];可以看成是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。 所有元素为a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 2、与一维数组一样元素下标可以是是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 int a[3][4];a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}};可以看成是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

C数组习题

一、选择题: 1.若有以下数组说明,则数值最小的和最大的元素下标分别是(b )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; A.1,12 B.0,11 C.1,11 D.0,12 2.若有以下数组说明,则i=10;a[a[i]]元素数值是(c)。 int a[12]={1,4,7,10,2,5,8,11,3,6,9,12}; A.10 B.9 C.6 D.5 3.若有以下说明,则数值为4的表达式是( d)。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a’,d,g; A.a[g-c] B.a[4] C.a[‘d’-‘c’] D.a[‘d’-c] 4.下列语句中,正确的是(d )。 A.char a[3][]={‘abc’,‘l’}; B.char a[][3]={‘abc’,‘l’}; C.char a[3][]={‘a’,“l”}; D.char a[][3]={“a”,“l”}; 5.下列定义的字符数组中,“printf(“%s\n”,str[2]);”的是输出是(c )。 static str[3][20]={“basic”,“foxpro”,“windows”}; A.basic B.foxpro C.windows D.输出语句出错 6.合法的数组定义是(d)。 A.int a[]={“string”}; B.int a[5]={0,1,2,3,4,5}; C.char a={“string”}; D.char a[]={0,1,2,3,4,5}; 7.语句“printf((“%d\n”,strlen(“ats\no12\1\\”));”的输出结果是(c )。 A.11 B.10 C.9 D.8 8.设有如下字符数组定义,则合法的函数调用是(a )。 char a[]={“I am a student”},b[]={“techer”}; A.strcmp(a,b); B.strcpy(a,b[0]); C.strcpy(a[7],b); D.strcat(a[7],b); 9.设有如下定义,则正确的叙述为( c )。 char x[]={“abcdefg”}; char y[]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’}; A.数组x和数组y等价

C用数组实现栈

#include using namespace std; const int MaxStatckSize =100; //栈大小class MYStack { private: int stacklist[MaxStatckSize]; int top;//栈顶 public: //构造函数 MYStack(void); ~MYStack(void); public: //压栈出栈操作 void Push(const int &item); int Pop(void); void ClearStack(void); //访问栈顶 int Peek(void)const; //检测椎栈 bool isEmpty(void)const; bool isFull(void)const;

}; MYStack::MYStack(void) { this->top = -1; } MYStack::~MYStack(void) { this->top = -1; } void MYStack::Push(const int &item) { //栈是否已满 if (!isFull()) { top += 1; this->stacklist[top] = item; } else std::cout << "Out of the Stack!" << std::endl; } int MYStack::Pop(void) {

if (!isEmpty()) { int ebp = top; top -= 1; return stacklist[ebp]; } else return -1; } int MYStack::Peek(void)const { return top; } void MYStack::ClearStack() { for (int i = top; i >= 0; i--) stacklist[i] = 0; top = -1; std::cout << "Clear stack done!" << std::endl; } bool MYStack::isFull(void)const { return top > MaxStatckSize true : false;

相关文档