第四讲 数组与指针习题
c++数组、指针与字符串xiti答案
1.概念填空题1.1 数组定义时有3个要素:数组名、数组元素的类型和数组元素的个数。
按元素在数组中的位置进行访问,是通过下标进行的,称为直接或索引访问。
1.2 C++中的多维数组是嵌套定义的,即多维数组的基本定义是数组构成的数组,三维数组的元素是二维数组。
1.3 计算机内存是一维编址的,多维数组在内存中的存储必须转换为一维方式,C++多维数组在内存中的排列是行方式,即越低的下标变化快。
设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为a[0][0]的地址+ (i*n+j)*u。
1.4数组名是整型常量,数组名赋给同类型的指针后,该指针是指向数组首元素的指针。
数组名在表达式中被转换为指向数组首元素的指针常量。
1.5每个对象都有一个指向自身的指针,称为this指针,通过使用它来确定其自身的地址。
该指针只能读,不能写。
1.6在C++中,对象访问成员所用的运算符是.,通过指针访问对象的成员所用的运算符是->。
1.7 当动态分配失败时,系统采用返回NULL来表示发生了异常。
如果new返回的指针丢失,则所分配的自由存储区空间将无法收回,称为内存泄漏。
这部分空间必须在计算机重启才能找回,这是因为无名对象的生命期为整个程序。
1.8默认复制构造函数只能完成对象成员的赋值,可能会造成重复释放,默认的析构函数可能会产生内存泄漏。
“=”运算也会产生对象重复释放。
因此我们需要自定义复制构造函数完成对象的深复制。
1.9 在用new运算符建立一个三维数组int 4*5*6,使用了3 个下标运算符,用delete运算符释放该数组时使用了 1 个下标运算符。
new返回的指针类型是int (*) [5]6]。
2 简答题2.1 用一维数组名作函数参数和用一维数组元素函数参数的含义是否相同?为什么2.2 指针变量与整型量的加减运算代表什么意义?2.3个指向普通变量的指针进行减运算是否有意义?为什么2.4什么是浅拷贝?什么是深拷贝?二者有何异同?何时必须自定义复制构造函数、析构函数,何时必须自定义=运算符中在函数, 自定义的复制构造函数、析构函数应该怎样设计?2.5从右往左解释int *(*(*pf)[5])(double *)中4个*的含义。
c语言指针试题
c语言指针试题
以下是一些关于C语言指针的试题,供您参考:
1.什么是指针?指针在C语言中的作用是什么?
2.指针变量如何声明和初始化?
3.指针运算符有哪些?它们的作用是什么?
4.指针如何进行算术运算和关系运算?
5.什么是空指针?如何声明和使用空指针?
6.指针如何进行类型转换?有哪些类型转换需要注意?
7.什么是函数指针?如何声明和使用函数指针?
8.什么是数组指针?如何声明和使用数组指针?
9.指针如何用于动态内存分配?有哪些常见的动态内存分配函数?
10.指针在使用中需要注意哪些问题?如何避免常见的指针错误?。
数组与指针习题
数组与指针习题一、.基本概念与基础知识自测题1 填充题1.1 数组定义时有三个要素:数组名,数组元素的(1)和数组元素的(2)。
按元素在数组中的位置进行访问,是通过(3)进行的,称为(4)或(5)访问。
为了使数组声明中数组的大小修改更为方便,总是将(6)用于声明数组长度。
答案:(1)类型(2)数量(3)下标运算符(4)下标(5)索引(6)常变量1.2 C/C++中的多维数组用的是一个(1)的定义,即多维数组的基本定义是(2)构成的数组,三维数组的元素是(3)。
答案:(1)嵌套(2)以数组作为元素(3)二维数组1.3 计算机内存是一维编址的,多维数组在内存中的存储(1),C/C++多维在内存中的排列是(2)方式,即越(3)的下标变化(4)。
设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为(5)+ (6)。
答案:(1)必须要转化为一维方式,(2)按行方式(3)右(4)越快(5)a数组的首地址(6)(i*n+j)*u1.4 对于多维数组,(1)的大小是确定的,所谓“不检查数组边界”只是不检查(2)的边界,而(3)的边界是在控制之中的,所以多维数组名作为函数的参数只可以(4)缺省。
答案:(1)较低各维的(2)最高维(第一维)(3)较低各维(4)最高维1.5 指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给它(2)和(3)的地址。
使用变量名来访问变量,是按(4)来直接存取变量称为(5)方式;而借助指针变量取得另一变量的地址,访问该变量称为(6)方式。
答案:(1)地址(2)NULL(3)已经分配了内存的变量的地址(4)按变量的地址(5)直接访问(6)间接访问1.6 固定指向一个对象的指针,称为(1),即(2),定义时const放在(3)。
而指向“常量”的指针称为(4),指针本身可以指向别的对象,但(5),定义时const放在(6)。
答案:(1)指针常量(2)指针本身是常量(3)const放在类型说明之后,变量名之前(4)常量指针(5)不能通过该指针修改对象(6)const放在类型说明之前1.7 数组名在表达式中被自动转换为指向(1)的指针常量,数组名是地址,但数组名中放的地址是(2),所以数组名(3)。
指针基础练习题
指针基础练习题
指针是C语言中非常重要的概念之一,掌握指针的基本使用方法对于理解和编写复杂的程序至关重要。
本文将提供一些指针的基础练习题,帮助读者巩固和提升对指针的理解和应用。
请读者根据每个题目的要求完成代码,并注明每一步的思路和解答。
题目一:交换两个变量的值
要求:编写一个函数,使用指针交换两个整数变量的值,并在主函数中调用该函数进行测试。
题目二:计算数组元素的平均值
要求:编写一个函数,使用指针计算给定整型数组的元素平均值,并在主函数中调用该函数进行测试。
数组长度和元素的值可由用户输入。
题目三:查找数组中的最大值和最小值
要求:编写一个函数,使用指针查找给定整型数组中的最大值和最小值,并在主函数中调用该函数进行测试。
数组长度和元素的值可由用户输入。
题目四:字符串反转
要求:编写一个函数,使用指针将输入的字符串反转,并在主函数中调用该函数进行测试。
要求不能使用任何库函数。
题目五:动态分配内存
要求:编写一个函数,使用指针动态分配内存,在堆中存储指定数量的整型数据,并在主函数中调用该函数进行测试。
要求用户输入存储的整数个数,然后输入每个整数。
题目六:指针数组的排序
要求:编写一个函数,通过指针数组实现对字符串数组的排序,并在主函数中调用该函数进行测试。
要求用户输入字符串的个数和每个字符串的值。
以上是指针基础练习题的要求和内容,通过完成这些题目,读者可以加深对指针概念和使用方法的理解,在实际编程中能够熟练地运用指针操作。
希望读者能够通过不断的练习和实践,掌握指针的应用技巧,并在编程中取得更好的成果。
指针练习题
编程题1用指向数组的指针变量输出数组的全部元素2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出练习题:一判断题1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。
2.指针的类型是它所指向的变量或对象的类型。
3.定义指针时不可以赋初值。
4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。
5.指针可以加上或减去一个int型数,也可以加上一个指针。
6.两个指针在任何情况下相减都是有意义的。
7.数组元素可以用下标表示,也可以用指针表示。
8.指向数组元素的指针只可指向数组的首元素。
9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。
10.引用是一种变量,它也有值和地址值。
11.引用是某个变量的别名,引用是被绑定在被引用的变量上。
12.创建引用时要用一个同类型的变量进行初始化。
13.指针是变量,它可以有引用,而引用不能有引用。
二单选题1.下列关于定义一个指向double型变量的指针,正确的是()。
A.int a(5);double *pd=a; B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d; D.double a(2.5),pd=d;2.下列关于创建一个int型变量的引用,正确的是()。
A.int a(3),&ra=a; B.inta(3),&ra=&a;C.double d(3.1);int &rd=d; D.int a(3),ra=a;3.下列关于指针概念的描述中,错误的是()。
A.指针中存放的是某变量或对象的地址值B.指针的类型是它所存放的数值的类型C.指针是变量,它也具有一个内存地址值D.指针的值是可以改变的4.下列关于引用概念的描述中,错误的是()。
A.引用是变量,它具有值和地址值B.引用不可以作数组元素C.引用是变量的别名D.创建引用时必须进行初始化5.已知:int a[5],*p=a;则与++*p相同的是()。
c语言(函数,数组,指针)练习题
C语言第2次练习题一.选择题1)一个C程序的执行是________.A.从程序的main( )函数开始执行。
B.从本程序的第一个函数开始执行。
C.从本程序第一条语句开始执行D.从#include 处开始执行3) 定义 int a, *p1; 若使p1指向a,在程序中应使用_______。
A.*p1=&a; B. p1=&a; C. p1=a; D. p1=*a;4) 下列为一维数组初始化时, 正确的是_______.A)int a[ ]={1,3,5,….15};B) int a[5]=1; C) int a[3]={5,6,8,3}; D) int a[5]={0};5).下列要将2,4,6,8存入数组a中,不正确的是______.B)int a[4]={2,4,6,8}; B) int a[ ]={2,4,6,8};C) int a[4]; a={2,4,6,8}; D) int a[4]; a[0]=2;a[1]=4,a[2]=6;a[3]=8;6).下列二维数组定义并初始化中, 正确的是A) int a[2][ ]={{3,4},{5,10,15}};B) int a[2][3]={2,3,4,5,6,7,8,9};C) int a[ ][3]={{0},{1,2},{3,4,5}};D) int a[ ][4]={(1,2,4,5),(2,3),(3,4,9),(5,6,8)};7). 若有说明: int a[5][5]; 则对数组元素的正确引用是______.A) a[3+2][3] B) a[0,3] C) a[4][1+2] D) a[ ][2]8).若有定义: char ch[ ]=”book120”; 则数组ch的存储长度是____;A) 7 B) 8 C)9 D)109) 设有定义: char s[20]; 向数组s中输入含有中间空格的字符串应使用的语句是______.A)scanf(“%s”,&s);B) scanf(“%s”,s);C)s=getchar(); D)gets(s);10).在数组: int a[][3]={{1},{3,2},{4,5,6},{0}}; 中, 数组元素a[2][1]的值是________.A)3 B) 4 C) 5 D) 211) 以下字符串赋值错误的是________。
C++数组指针题含答案
数组指针01:逆序输出从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。
输入格式:第一个整数为个数n,后续为n个整数输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:6 3 920 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],n,i;cin>>n;for(i=0;i<n;i++)cin>>a[i];for(i=n-1;i>=0;i--)if(a[i]%3==0)cout<<a[i]<<" ";cout<<endl;for(i=n-1;i>=0;i--)if(i%3==0)cout<<a[i]<<" ";cout<<endl;return 0;}数组指针02:逆序存储从键盘输入n(n<100)个整数,存放在一个一维数组a中,将它们逆序存放在另一个整型数组b中,并按b数组中下标从小到大的顺序输出下标为3的倍数的数组元素。
输入格式:第一个数为数组中元素个数n,之后为n个元素。
输出格式:下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:20 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],b[MAX],n,i;cin>>n;for(i=0;i<n;i++){cin>>a[i];b[n-1-i]=a[i];}for(i=0;i<n;i++)if(i%3==0)cout<<b[i]<<" ";cout<<endl;return 0;}数组指针03:平均值从键盘输入任意个整数(以0结束,假设不超过100个),存放在一个一维数组中,计算这组数的平均值(实型)。
c语言数组指针题库
以下是一些关于C语言数组指针的题目:题目:以下程序中,函数f 的功能是交换两个整数的值。
请在f 函数中填入适当的语句,使程序能够实现该功能。
c#include <stdio.h>void f(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}int main() {int x = 5, y = 10;printf("Before swap: x = %d, y = %d\n", x, y);f(&x, &y);printf("After swap: x = %d, y = %d\n", x, y);return 0;}答案:在f 函数中,使用指针*a 和*b 分别访问整数变量a 和b 的值,然后交换它们的值。
具体实现如下:cvoid f(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}题目:以下程序中,函数g 的功能是交换两个整数的值。
请在g 函数中填入适当的语句,使程序能够实现该功能。
c#include <stdio.h>void g(int a, int b) {int temp = a;a = b;b = temp;}int main() {int x = 5, y = 10;printf("Before swap: x = %d, y = %d\n", x, y);g(x, y);printf("After swap: x = %d, y = %d\n", x, y);return 0;}答案:在g 函数中,由于参数传递是按值传递的,因此无法直接交换两个整数的值。
为了实现交换功能,需要使用指针来传递变量的地址。
具体实现如下:cvoid g(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}。
指针和数组习题
一、1 数组可以在定义时整体赋初值,但不能在赋值语句中整体赋值。
()2. 取数组a的第5个元素的地址,正确的写法是()A) *a[4] B) &a[4]C) a[4] D) *(a+4)3. 程序段输出结果是()int main(){double number = 12345.12345678;cout << setw(10) << setprecision(5) << number << endl;cout << setw(10) << setprecision(10) << number << endl;return 0;}12345 B)12345 C) 12345 D) 1234512345.12346 12345.12345 12345.12345 12345.12354、若x为整形变量,p是基类型为整形的指针变量,则正确的赋值表达式()A p=&xB p=xC *p=&xD *p=*x5,设p1和p2均为指向同一个int型一维数组的指针变量,k为int型变量,下列不正确的语句是()A k=*p1+*p2B k=*p1*(*p2)C p2=kD p1=p26.对于相同类型的指针变量,不能进行()运算。
A,+ B,- C,= D,==7.有函数定义如下,则其返回值为()int *f(int a){Int*p,n;n=a;p=&n;return p;}A 一个不可用的存储单元地址值B一个不可用的存储单元地址值C n中的值D 形参a中得值8,下列关于字符串的描述中,错误的是()A,一维字符数组可以存放一个字符串B,可以用一个字符串给二维字符数组赋值C,二维字符数组可以存放多个字符串D;可以用一个字符串给二维字符数组进行初始化9;下列关于字符数组的描述中,错误的是()A.字符数组中得每一个元素都是字符B,字符数组可以使用初始值表进行初始化C,字符数组可以存放字符串D 字符数组就是字符串10;下列关于数组下标的描述中,错误的是()A;C++中,数组元素的下标是从0开始的B,数组元素下标是一个整型常量表达式C,数组元素可以用下标来表示D,数组元素的某维数下标值应小于该维的大小11,下面能正确地将字符串“C++”进行完整赋值操作语句的是()A char s【3】={‘C’,‘+’,‘+’}B char s【】=“C++”C,char s【3】={“C++”} D,char s【3】;s【0】=‘C’;s 【1】=‘+’;s【2】=‘+’;12,在C++中,二维数组元素在内存中的存放顺序为()A.按行存放B。
指针与数组练习
指针练习题一、选择题1.变量的指针,其含义是指该变量的__________a)值 b)地址c)名 d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__________a)a,point,*&a b)&*a,&a,*pointc)*&point,*point,&a d)&a,&*point ,point3.若有说明;int *p,m=5,n;以下正确的程序段的是__________a)p=&n; b)p=&n;scanf("%d",&p); scanf("%d",*p);c)scanf("%d",&n); d)p=&n;*p=n; *p=m;4.下面程序段的运行结果是__________char *s="abcde";s+=2;printf("%d",s);a)cde b)字符’c’ c)字符’c’的地址 d)无确定的输出结果5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是__________a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);6.以下正确的程序段是__________a)char str[20]; b) char *p=”ok”scanf("%s",&str); scanf("%s",p);c)char str[20]; d)char str[20],*p=str;scanf("%s",&str[2]); scanf("%s",p[2]);7.若有说明语句char a[]="It is mine";char *p="It is mine";则以下不正确的叙述是__________a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符8.下面程序的运行结果是__________#include <stdio.h>#include <string.h>main(){char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));}a)正数 b)负数 c)零 d)不确定的值9.下面程序的运行结果是__________#include <stdio.h>#include <string.h>fun(char *w,int n){char t,*s1,*s2;s1=w;s2=w+n-1;while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}}main(){char *p;p="1234567";fun(p,strlen(p));puts(p);}a)7654321 b)1714171 c)1711717 d)717717110.若有以下定义,则对a数组元素的正确引用是__________int a[5],*p=a;a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)11.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为__________a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j12.若有以下定义,则p+5表示__________int a[10],*p=a;a)元素a[5]的地址 b)元素a[5]的值c)元素a[6]的地址 d)元素a[6]的值二.填空题1.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。
(7)--数组与指针基础_试卷
B.int *p; scanf(“%d”, p); D. int k, *p; *p= &k; scanf(“%d”, p);
29. 有函数原型为 void f(int, int *),主函数中有变量定义:int a=2, *p=&a; 则下列函数
调用正确的是____.
A.f(a, &p)
3. 下列代码段的输出为______。 char st[20]=”hello\0world!”; printf(“%d,%d\n”,strlen(st),sizeof(st));
答案:5,20
4. 写出下列程序段的输出结果。 char str[]="hello\tworld\n"; printf("%d, %c\n", sizeof(str), *(str+10));
答案:D。
14. 下列数组定义,不正确的是 _______.
A.int a[1][3];
B.int x[2][2]={1,2,3,4};
C.int x[2][]={1,2,4,6};
D.int m[][3]={1,2,3,4,5,6};
答案:C。
15. 不正确的赋值或赋初值的方式是______。 A.char str[]="string"; B.char str[7]={'s', 't', 'r', 'i', 'n', 'g'}; C.char str[10];str="string"; D、 char str[7]={'s', 't', 'r', 'i', 'n', 'g', ’\0’};
数组指针习题讲解
22.有以下程序: #include<stdio.h> void f(char p[][10], int n) /*字符串从小到大排序*/ { char t[10];int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(p[i],p[j])>0) { strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main( ) { char p[5][10]={"abc", "aabdfg", "abbd", "dcdbe", "cd"}; f(p,5); printf("%d\n",strlen(p[0])); } 程序运行后的输出结果是( )。 A .2 B.3 C.4 D.6 23.若二维数组a有m列,则在a[i][j]之前的元素个数为( )。 A.j*m+I B.i*m+j C.i*m+j-1 D.i*m+j+1
18.已知:static int a[3][4]={0};则下面正确的叙述是( )。 A.只有元素a[0][0]可得到初值0 B.此说明语句是错误的 C.数组a中每个元素都可得到初值,但其值不一定为0 D.数组a中每个元素均可得到初值0 19.已知:int a[]={1,2,3,4,5,6,7,8,9,10};则值为5的表达式是( )。 A.a[5] B.a[a[3]] C.a[a[4]] D.a[a[5]] 20.在C语言中,二维数组元素在内存中的存放顺序是( )。 A.按行存放 B.按列存放 C.由用户自己定义 D.由编译器决定 21.对以下说明语句的正确理解是( )。 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.因为数组长度与初值的个数不相同,所以此语句不正确
C++数组指针题(含答案)_共6页
数组指针01:逆序输出从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。
输入格式:第一个整数为个数n,后续为n个整数输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:6 3 920 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],n,i;cin>>n;for(i=0;i<n;i++)cin>>a[i];for(i=n-1;i>=0;i--)if(a[i]%3==0)cout<<a[i]<<" ";cout<<endl;for(i=n-1;i>=0;i--)if(i%3==0)cout<<a[i]<<" ";cout<<endl;return 0;}数组指针02:逆序存储从键盘输入n (n<100)个整数,存放在一个一维数组a中,将它们逆序存放在另一个整型数组b中,并按b数组中下标从小到大的顺序输出下标为3的倍数的数组元素。
输入格式:第一个数为数组中元素个数n,之后为n个元素输出格式:下标为3的倍数的元素,各个数值之间用空格分隔输入:10 2 7 9 10 5 4 3 6 8 20输出:20 3 10 2#include <iostream> using namespace std; const int MAX=100; int main(){int a[MAX],b[MAX],n,i; cin>>n;for(i=0;i<n;i++){cin>>a[i];b[n-1-i]=a[i];}for(i=0;i<n;i++)if(i%3==0)cout<<b[i]<<" ";cout<<endl;return 0;}数组指针03:平均值从键盘输入任意个整数(以0结束,假设不超过100个),存放在一个一维数组中,计算这组数的平均值(实型) 。
指针与数组补充习题
指针与数组补充习题指针与数组练习题信管92 杨沁309014111、从键盘输入一个字符串,按照字符顺序从小到大进行排序,并要求删除重复的字符。
如输入”ad2f3ad jfeainzzzv”,则输出”23adefi j nvz”。
#includeint main(void){char a[80],temp;int index,j,i = 0,n;scanf("%c",&a[i]);while(a[i]!='\n'){i++;scanf("%c",&a[i]);}n = i;for(i = 0;i<n-1;i++){< p="">index = i;for(j = i+1;j<n;j++)< p="">if(a[j]<a[index])< p="">index = j;temp = a[i];a[i] = a[index];a[index] = temp;}for(i = 1;i<n;i++){< p="">if(a[i-1] == a[i]){for(j = i+1;j<n-1;j++)< p="">a[j-1] = a[j];n--;i--;}}for(i = 0;i<n;i++)< p="">printf("%c",a[i]);printf("\n");return 0;}2、从键盘输入一个n×n的二维数组(n键盘输入),找出此二维数组中各行的最大值,并按从大到小的次序输出各行的最大值及此值所在的行号。
如:输入4 (n=4)13 34 23 4445 78 21 3098 32 11 505 66 88 22 (n×n)输出3 (最大98,在第3行)421#includeint main(void){int a[80][80],i,j,n,max,s[80][80],index,temp;scanf("%d",&n);for(i = 0;i<n;i++)< p="">for(j = 0;j<n;j++)< p="">scanf("%d",&a[i][j]);for(i = 0;i<n;i++){< p="">max = 0;for(j = 1;j<n;j++){< p="">if(a[i][max]<a[i][j])< p="">max = j;s[i][0] = a[i][max];s[i][1] = i+1;}}for(i = 0;i<n;i++){< p="">index = i;for(j = i+1;j<n;j++)< p="">if(s[index][0]<s[j][0])< p="">index = j;temp = s[index][0];s[index][0] = s[i][0];s[i][0] = temp;temp = s[index][1];s[index][1] = s[i][1];s[i][1] = temp;}for(i = 0;i<n;i++)< p="">printf("%d %d\n",s[i][0],s[i][1]);return 0;}3、下面程序实现如下功能:输入一个整数字符串转换为一个整数值,如”1234”转换为1234,”-1234”转换为-1234。
计算机C++数组指针题(有答案)
数组指针01:逆序输出从键盘输入n个整数(n<100),存放在一个一维数组中,逆序输出能被3整除的元素,并逆序输出数组下标为3的倍数的元素。
输入格式:第一个整数为个数n,后续为n个整数输出格式:第一行能被3整除的元素,第二行为下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:6 3 920 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],n,i;cin>>n;for(i=0;i<n;i++)cin>>a[i];for(i=n-1;i>=0;i--)if(a[i]%3==0)cout<<a[i]<<" ";cout<<endl;for(i=n-1;i>=0;i--)if(i%3==0)cout<<a[i]<<" ";cout<<endl;return 0;}数组指针02:逆序存储从键盘输入n(n<100)个整数,存放在一个一维数组a中,将它们逆序存放在另一个整型数组b中,并按b数组中下标从小到大的顺序输出下标为3的倍数的数组元素。
输入格式:第一个数为数组中元素个数n,之后为n个元素。
输出格式:下标为3的倍数的元素,各个数值之间用空格分隔。
输入:10 2 7 9 10 5 4 3 6 8 20输出:20 3 10 2#include <iostream>using namespace std;const int MAX=100;int main(){int a[MAX],b[MAX],n,i;cin>>n;for(i=0;i<n;i++){cin>>a[i];b[n-1-i]=a[i];}for(i=0;i<n;i++)if(i%3==0)cout<<b[i]<<" ";cout<<endl;return 0;}数组指针03:平均值从键盘输入任意个整数(以0结束,假设不超过100个),存放在一个一维数组中,计算这组数的平均值(实型)。
习题集(数组、指针、函数)
第七章数组一、选择1.若有定义:int a[10],则对数组a元素的正确引用是。
A.a[10] B.a[3.5] C.a(5) D.a[10-10]2.以下能对一维数组a进行正确初始化的语句是。
A.int a[10]={0,0,0,0,0}; B.int a[10]={ } ;C.int a[ ] = {0} ; D.int a[10]={10*1} ;3.若有定义:int a[3][4],则对数组a元素的正确引用是。
A.a[2][4] B.a(2,2) C.a[1][3] D.a[10-10]4.以下对二维数组进行正确初始化的是()。
A.int a[2][3]={{1,2},{3,4},{5,6}};B.int a[ ][3]={1,2,3,4,5,6};C.int a[2][ ]={1,2,3,4,5,6};D.int a[2][ ]={{1,2},{3,4}};5.以下能对二维数组a进行正确初始化的语句是。
A.int a[2][ ]={{1,0,1},{5,2,3}} ;B.int a[ ][3]={{1,2,3},{4,5,6}} ;C.int a[2][4]={{1,2,3},{4,5},{6}} ;D.int a[ ][3]={{1,0,1},{},{1,1}} ;6.以下不能对二维数组a进行正确初始化的语句是。
A.int a[2][3]={0} ;B.int a[ ][3]={{1,2},{0}} ;C.int a[2][3]={{1,2},{3,4},{5,6}} ;D.int a[ ][3]={1,2,3,4,5,6} ;7.若有说明:int a[3][4]={0};则下面正确的叙述是。
A.只有元素a[0][0]可得到初值0B.此说明语句不正确C.数组a中各元素都可得到初值,但其值不一定为0D.数组a中每个元素均可得到初值08.下面程序段的输出结果是。
int k,a[3][3]={1,2,3,4,5,6,7,8,9};for (k=0;k<3;k++) printf(“%d”,a[k][2-k]);A.3 5 7 B.3 6 9 C.1 5 9 D.1 4 7二、填空1.C语言数组的下标总是从开始,不可以为负数;构成数组各个元素具有相同的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(提示: 输入的概率 p 为[0, 1)之间的数, 所谓位置被占领的概率为 p, 指的是为每个位置产生一个[0, 1)之间的随机数,当产生的随机数小于 p 时,表示该位置有雷,否则无雷) 。
位置被占领的概率为 p。在扫雷游戏中,被占领的格子表示有雷,空格子表示安全。请首先打印这个数 组,用星号表示雷,点号表示安全格子。然后,用安全格子周围的雷数(上下左右和对角格子)替换 格子中的句号,并将瓦雷后的结果输出。下面是一个示例,要求按示例格式输出。 **... ..... .*... **100 33200 1*100
级别 Fly Weight Super Fly Weight Bantam Weight Super Bantam Weight Feather Weight Super Feather Weight Light Weight Super Light Weight Welter Weight Super Welter Weight Middle Weight Super Middle Weight Light Heavy Weight Super Light Heavy Weight Cruiser Weight 下限 0 112 115 118 122 126 130 135 140 147 154 160 167 174 183 上限 112 115 118 122 126 130 135 140 147 154 160 167 174 183 189
请编写一个 C++程序,将 N 作为输入,按上例格式输出 H(N)(假设 N 为 2 的幂) 。 (提示:需要动态创建 2 维数组,可参考的代码(注意:动态创建的布尔数组元素缺省值为 true) :
bool **H = new bool* [N]; for ( int i = 0; i < N; i++ ) H[i] = new bool[N];
) 7、 请编写一个 C++程序,根据用户输入的整数 N,首先生成一个 N×N 的二维数组,按行优先的方式在 该二维数组中填入 1~N2 的数,然后按螺旋方式输出数组。下面是一个示例(输入为 16) :
1 5 2 6 3 7 4 8
9 10 11 12 13 14 15 16 输出:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
(提示:可仿照上题动态生成二维数组,需考虑 N 为奇数时,中间元素的输出) 8、 请编写一个 C++程序,根据用户输入的奇数 N,首先生成一个 N×N 的矩阵,在该矩阵中填入 1~N2 的数,使得每行、每列,以及两个对角线上的数之和都相等,要求,必须判断 N 为奇数。 (提示:可用 第 4 题方法动态生成二维数组,填数的方法请参考九宫格方法) 9、 利用本讲洗牌的程序,编写一个 C++程序,由用户指定玩牌的人数,洗牌后给每个玩家发 5 张牌(可 以是连续发 5 张,也可以是每人轮流发一张) ,要求输出每位玩家手中的牌。 10、请编写一个 C++程序,模拟人们不断地进入某个房间,直到进入的人有两人生日在同一天为止,要求 统计到停止进人时,有多少人进入了房间。 (提示:可将人的生日看作是分布在 0~364 上的数,并且这 种分布是均匀的、独立的。可参考本讲 Coupon Collector 示例) 11、在上题的基础上,请编写一个 C++程序,计算到停止进人为止,平均需要多少人进房间。 (提示:即进 行多次模拟,求平均值) 12、编写一个 C++程序,该程序有 3 个输入:M、N 和 p。程序将创建一个 M× N 布尔数组,数组中每一个
第四讲 数组与指针习题
1、 编写一个程序,利用字符数组实现: a) b) c) d) 在输入的字符串中寻找某个字符(自己指定)的第一次出现,并输出第一次出现的下标值。 统计输入的字符串中某个字符的出现次数。 将输入的字符串逆向保存到另一个字符数组; 将输入的字符串中所有的数字字符全部删除。
2、 利用数组重新编写一个 C++程序,计算小于等于某个整数 N 的素数的个数。 3、 利用随机数生成方法,编写一个 C++程序,根据用户指定的人数 N,动态创建一个长度为 N 的整型数 组,为每个人生成一个[60, 100]的整数成绩,然后统计每个成绩区间的人数:60~69 为及格、70~79 为 中等、80~89 为良好、90~100 为优秀,同时输出每个区间人数占全部学生人数的比例。输出格式不限, 必须输出所要求的内容。 4、 编写一个 C++程序,由用户指定数字序列的长度 N,然后读入由 0~(N-1)这些数构成的一个长度为 N 的序列。程序中要判断输入的序列是否合法,所谓序列合法指的是序列中只能出现 0~(N-1)这些数,并 且不能重复出现。对合法序列,请输出其反序列,若读入的序列保存于数组 a 中,反序列保存在数组 b 中,则有 a[b[i]]=b[a[i]]=i 成立。 5、 有氧搏击操(kickboxing)是一种新兴的体育运动,该运动按照体重进行分级,下表是体重与级别对照 表,请编写一个 C++程序,根据用户输入的体重 w,输出对应的级别。要求,必须用数组实现。
Super Cruiser Weight Heavy Weight Super Heavy Weight
189 198 209
8 209
6、 N× N 的 Hadamard 矩阵是一个布尔矩阵,任何两行元素有 N/2 个位置不同(这种属性可以用它进行纠 错) 。H(1)是 1× 1 的矩阵,它有唯一元素 true。当 N>1 时,H(2N)由 4 个 H(N)拼接组成,即将 H(N)放 于 H(2N)的左上角、右上角、左下角、右下角,然后将右下角 H(N)元素取反。下面是几个一个例子(T 表示 true,F 表示 false) H(1) T H(2) TT TF H(4) TTTT TFTF TTFF TFFT