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; } 数组指针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 for(i=0;i 输出格式:下标为3的倍数的元素,各个数值之间用空格分隔。输入:10 2 7 9 10 5 4 3 6 8 20 输出:20 3 10 2 #include 实验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 字符数组总结 字符数组不仅可以存储字符还可以存储字符串,而且存储字符串时必须包含…\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语言数组练习及答案集团文件版本号:(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; 数组练习解答 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'}; 第四部分数组 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 字符数组与字符串 <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语言中数组的用法 时间: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人为加入\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语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。 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进行比较复杂的编程时,经常需要用到复杂的数组结构,并希望能实现动态管理。由于C++并不支持动态数组,MFC提供了一个CArray类来实现动态数组的功能。有效的使用CArray类,可以提高程序的效率。 MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。CArray即为其中的一个,用来实现动态数组的功能。 CArray是从CObject派生,有两个模板参数,第一个参数就是CArray类数组元素的变量类型,后一个是函数调用时的参数类型。 我们有一个类class Object,我们要定义一个Object的动态数组,那么我们可以用以下两种方法: CArray 《高级语言程序设计》实验报告实验序号:5 实验项目:数组 1. #include #include 3. #include 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语言中的字符串数组输入输出控制符的若干问题 示例一: #include 数组 定义:数组就是有序的并且具有相同类型的数据的集合。 一维数组 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程序设计(数组)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 。 数组 定义:数组是有序的并且具有相同类型的数据的集合。 一维数组 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}; 一、选择题: 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等价 #include }; 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;c数组指针题含答案
C语言数组编程题
C语言字符数组总结
C语言数组练习及答案
C语言数组典型例题分析与解答
C语言数组练习及答案
c语言字符数组与字符串总结
单片机C语言中数组的用法
C语言字符串的输入和输出
C语言一维数组的定义和引用
VC中的CArray的使用
C语言数组
#include
c语言编程技巧如何定义一个字符串的数组
关于C语言中的字符串数组输入输出控制符的若干问题
C语言数组知识点总结
C语言数组练习题
C语言数组知识点总结
C数组习题
C用数组实现栈