指针与数组练习题
计算机二级c语言第九章 数组和指针习题与答案
第九章数组和指针1、有以下程序main(){ int a[]={2,4,6,8,10}, y=0, x, *p;p=&a[1];for(x= 1; x< 3; x++) y += p[x];printf("%d\n",y);}程序运行后的输出结果是A)10 B)11 C)14 D)152、有以下程序void sum(int a[]){ a[0] = a[-1]+a[1]; }main(){ int a[10]={1,2,3,4,5,6,7,8,9,10};sum(&a[2]);printf("%d\n", a[2]);}程序运行后的输出结果是A)6 B)7 C)5 D)83、有以下程序main(){int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;while(i++< 7) if(p[i]%2) j+=p[i];printf("%d\n",j);}程序运行后的输出结果是A)42 B)45 C)56 D)604、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是A)for(i=0;i<6;i++) printf("%2d",*(p++));B)for(i=0;i<6;i++) printf("%2d",*(p+i));C)for(i=0;i<6;i++) printf("%2d",*p++);D)for(i=0;i<6;i++) printf("%2d",(*p)++);5、有以下程序#include < stdio.h >main(){ int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5);printf("%d %d\n",*p,*q); }程序运行后的输出结果是A)运行后报错 B)6 6 C)6 11 D)5 106、有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是A)5 B)6 C)8 D)97、已有定义:int i,a[10],*p;则合法的赋值语句是A)p=100; B)p=a[5]; C)p=a[2]+2; D)p=a+2;8、以下能正确定义一维数组的选项是A)int num []; B)#define N 100int num [N];C)int num[0..100]; D)int N=100;int num[N];9、有以下程序main(){ int p[7]={11,13,14,15,16,17,18},i=0,k=0;while(i< 7&&p[i]%2){k=k+p[i];i++;}printf("%d\n",k);}执行后输出结果是A)58 B)56 C)45 D)2410、有以下程序main(){ int x[8]={8,7,6,5,0,0},*s;s=x+3;printf("%d\n",s[2]);}执行后输出结果是A)随机值 B)0 C)5 D)611、若有定义:int aa[8];。
指针练习题
编程题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相同的是()。
指针和一维数组经典题目
指针和一维数组经典题目
下面是一些经典的指针和一维数组题目:
1. 求一个一维数组的和、平均值、最大值、最小值。
2. 将一个一维数组元素逆序存放。
3. 合并两个有序的一维数组为一个新的有序数组。
4. 将一个一维数组中的奇数和偶数分别放在两个新的一维数组中。
5. 给定一个一维数组和一个目标值,判断目标值是否存在于数组中。
6. 给定一个一维数组和一个目标值,查找目标值在数组中的索引。
7. 统计一个一维数组中0的个数。
8. 对一个一维数组进行冒泡排序或选择排序。
9. 将一个一维数组循环右移k位。
10. 判断一个一维数组是否为回文数组。
这些题目可以帮助您巩固指针和一维数组的基本操作,同时也可以提高您的编程能力。
指针经典练习题及答案
二、程序题1、计算字符串中子串出现的次数。
要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。
2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。
算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。
例如,China转换成密文为G l m r e。
要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。
3、字符替换。
要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E),并返回替换字符的个数。
4、编写一个程序,输入星期,输出该星期的英文名。
用指针数组处理。
5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列,再分别取出每个字符串的第三个字母合并成一个新的字符串输出(若少于三个字符的输出空格)。
要求:利用字符串指针和指针数组实现。
6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值,然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。
7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较,输它们相同的数字个数(使用动态内存分配)。
/*1、计算字符串中子串出现的次数。
要求:用一个子函数subString()实现,参数为指向字符串和要查找的子串的指针,返回次数。
*/#include<stdio.h>int subString(char *a, char *b){int i = 0;int j = 0;int m = 0;char *p = b;while(*a){while(*a){if(*a == *b){break;}a++;}while(*b){if(*a != *b){return m;}else{m = m;}b++;a++;}// a++;b = p;++m;}return m;}int main(){char a[100];char b[100];printf("请输入字符串a:");gets(a);printf("请输入字符串b:");gets(b);printf("%d", subString(a, b));return 0;}/*2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。
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++数组指针题含答案
数组指针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个),存放在一个一维数组中,计算这组数的平均值(实型)。
(完整word版)C语言指针练习+答案+讲解
第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针.p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值).A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。
除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n”, *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。
A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。
A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
C语言 数组和指针练习题
若当堂没做完,下周四之前上交也可。
至ftp://211.64.82.253/用户名和密码:stuC语言程序设计练习题——数组一、选择题77、以下对一维数组a的正确说明是_d ___A、char a(10);B、int a[ ];C、int k=5,a[k];D、char a[ ]={'a' , 'b' , 'c'};78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是_a___A、a[0][3]B、a[0][4]C、a[2][2]D、a[2][2+1]79、以下能对二维数组y进行初始化的语句是_b__A、static int y[2][ ]={{1,0,1}, {5,2,3}};B、static int y[ ][3]={{1,2,3}, {4,5,6}};C、static int y[2][4]={{1,2,3}, {4,5} , {6}};D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}};80、若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是_d___A、数组y的每个元素都可得初值0B、二维数组y的行数为1C、该说明等价于int y[ ][4]={0};D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值081、以下各组选项中,均能正确定义二维实型数组s的选项是_c___A、float s[3][4];B、float s(3,4);float s[ ][4]; float s[ ][ ]={{0};{0}};float s[3][ ]={{1},{0}}; float s[3][4];C、 float s[3][4];D、float s[3][4];static float s[ ][4]={{0},{0}}; float s[3][ ];auto float s[ ][4]={{0},{0},{0}}; float s[ ][4];82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为__a__A、3B、2C、无确定值D、183、若二维数组y有m列,则在y[i][j]前的元素个数为_B___A、j*m+iB、i*m+jC、i*m+j-1D、i*m+j+184、下面程序中有错误的行是____1、 main( )2、 {3、 int x[3]={1};4、 int k;5、 scanf("%d", &x);6、 for (k=1; k<3; k++)7、 x[0]=x[0]+x[i];8、 printf("x[0]=%d\n", x[0]);9、 }A、3B、6C、7D、585、若有以下语句,则正确的描述是__b__char x[ ]="12345";char y[ ]={'1', '2', '3', '4', '5'};A、x数组与y数组的长度相同B、x数组长度大于y数组长度C、x数组长度小于y数组长度D、x数组等价于y数组86、以下不正确的数组定义语句是__b__A、double x[5]={2.0, 4.0, 6.0, 8.0, 10.0};B、int y[5]={0, 1, 3, 5, 7, 9};C、char ch1[ ]={'1', '2', '3', '4', '5'};D、char ch2[ ]={'\x10', '\xa', '\x8'};87、以下正确的数组定义语句是_c___A、char a[5]={'1', '2', '3', '4', '5', '\0'};B、int b[2][ ]={{1}, {2}};C、float c[ ][3]={1, 2, 3, 4, 5};D、char d[5]="CHINA";88、判断字符串str1是否大于字符串str2,应当使用__d__A、if (str1>str2)B、if (strcmp(str1, str2))C、if (strcmp(str2, str1)>0)D、if (strcmp(str1, str2)>0)89、下面程序段的运行结果是_c___char x[5]={'a', 'b', '\0', 'c', '\0'};printf("%s", x);A、'a''b'B、abC、ab└┘cD、abc90、有两个字符数组a,b,则以下能正确为a,b进行赋值的语句是_d___A、gets(a, b);B、scanf("%s%s", &a, &b);C、getchar(a); getchar(b);D、gets(a); gets(b);91、有字符数组s1[80]和s2[80],则以下能正确对s1, s2进行输出的语句是___b_A、puts(s1, s2)B、printf("%s, %s", s1, s2);C、putchar(s1, s2);D、puts(s1), puts(s2);92、以下程序段的运行结果是_c___char a[7]="abcdef";char b[4]="ABC";strcpy(a, b);printf("%c", a[5]);A、└┘B、\0C、eD、f93、以下描述正确的是_d___A、两个字符串所包含的字符个数相同时,才能比较字符串B、字符个数多的字符串比字符个数少的字符串大C、字符串"STOP└┘"与"STOP"相等D、字符串"That"小于字符串"The"94、以下对字符数组的描述中错误的是_c___A、字符数组中可以存放字符串B、字符数组中的字符串可以整体输入、输出C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值D、不可以用关系运算符对字符数组中的字符串进行比较95、若有语句:char s1[10], s2[10]={"books"},则能将字符串books赋给数组s1的正确语句是_b___A、s1={"books"};B、strcpy(s1, s2);C、s1=s2;D、strcpy(s2, s1);96、以下printf语句的输出结果是____printf("%d\n", strlen("school");A、7B、6C、存在语法错误D、不定值97、下面程序的功能是将字符串s中所有的字符c删除。
第五章_数组与指针习题
第五章数组与指针习题一、.基本概念与基础知识自测题5.1 填充题5.1.1 数组定义时有三个要素:数组名,数组元素的(1)和数组元素的(2)。
按元素在数组中的位置进行访问,是通过(3)进行的,称为(4)或(5)访问。
为了使数组声明中数组的大小修改更为方便,总是将(6)用于声明数组长度。
答案:(1)类型(2)数量(3)下标运算符(4)下标(5)索引(6)常变量5.1.2 C/C++中的多维数组用的是一个(1)的定义,即多维数组的基本定义是(2)构成的数组,三维数组的元素是(3)。
答案:(1)嵌套(2)以数组作为元素(3)二维数组5.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)*u5.1.4 对于多维数组,(1)的大小是确定的,所谓“不检查数组边界”只是不检查(2)的边界,而(3)的边界是在控制之中的,所以多维数组名作为函数的参数只可以(4)缺省。
答案:(1)较低各维的(2)最高维(第一维)(3)较低各维(4)最高维5.1.5 指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给它(2)和(3)的地址。
使用变量名来访问变量,是按(4)来直接存取变量称为(5)方式;而借助指针变量取得另一变量的地址,访问该变量称为(6)方式。
答案:(1)地址(2)NULL(3)已经分配了内存的变量的地址(4)按变量的地址(5)直接访问(6)间接访问5.1.6 固定指向一个对象的指针,称为(1),即(2),定义时const放在(3)。
而指向“常量”的指针称为(4),指针本身可以指向别的对象,但(5),定义时const放在(6)。
数组和指针 笔试题
数组和指针笔试题当然!以下是一个关于数组和指针的笔试题:题目:编写一个函数,接收一个整型数组和数组的长度作为参数,并将数组中的元素逆序存放。
要求:只能使用指针来操作数组,不能使用任何其他的辅助数组或临时变量。
示例输入:arr = [1, 2, 3, 4, 5], length = 5示例输出:arr = [5, 4, 3, 2, 1]请编写代码实现该功能,并给出示例输入的输出结果。
以下是示例代码:```c#include <stdio.h>void reverseArray(int *arr, int length) {int *start = arr;int *end = arr + length - 1;while (start < end) {int temp = *start;*start = *end;*end = temp;start++;end--;}}int main() {int arr[] = {1, 2, 3, 4, 5};int length = sizeof(arr) / sizeof(arr[0]);printf("原数组:");for (int i = 0; i < length; i++) {printf("%d ", arr[i]);}reverseArray(arr, length);printf("\n逆序后的数组:");for (int i = 0; i < length; i++) {printf("%d ", arr[i]);}return 0;}```以上代码定义了一个reverseArray函数,该函数通过使用指针实现了将数组元素逆序存放的功能。
在主函数中,我们定义了一个示例数组arr,并计算出数组的长度。
然后调用reverseArray函数对数组进行逆序操作,并打印出逆序后的数组。
指针和数组习题
一、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。
132实验十三数组指针和函数综合编程练习参考答案.doc
数组、指针和函数综合编程练习:打印最高分和学号假设每班人数最多不超过40人,具体人数由键盘输入,试编程打印最高分及其学号。
程序1 用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。
/*以一维数组的数组名作函数参数,实参、形参均为数组以指针变量作函数形参,通过该指针变量间接访问主调函数中的变量,并修改其值*/#include <stdio.h>#define ARR_SIZE 40int FindMax(int score[ ], long num[ ], int n, long *pMaxNum);void main(){int score[ARR_SIZE], maxScore, n, i;long num[ARR_SIZE], maxNum;printf("Please enter total number:");scanf("%d", &n); /*从键盘输入学生人数n*/printf("Please enter the number and score:\n");for(i=0; i<n; i++) /*分别以长整型和整型格式输入学生的学号和成绩*/{scanf("%ld%d", &num[i], &score[i]);}maxScore = FindMax(score, num, n, &maxNum); /*计算最高分及学生学号*/printf("maxScore = %d, maxNum = %ld\n", maxScore, maxNum);}/* 函数功能:计算最高分及最高分学生的学号函数入口参数:整型数组score,存放学生的成绩长整型数组num,存放学生的学号函数出口参数:长整型指针变量pMaxNum,指向最高分学生的学号函数返回值:最高分*/int FindMax(int score[ ], long num[ ], int n, long *pMaxNum){int i;int maxScore;maxScore = score[0];*pMaxNum = num[0]; /*假设score[0]为最高分*/ 以一维数组的数组名作函数参数,实参、形参均为数组for (i=1; i<n; i++){if (score[i] > maxScore){maxScore = score[i]; /*记录最高分*/*pMaxNum = num[i]; /*记录最高分学生的学号num[i]*/ }}return (maxScore); /*返回最高分maxScore*/}程序2 用二维数组和指针变量作为函数参数,编程打印3个班学生(假设每班4个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。
指针与数组练习
指针练习题一、选择题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.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。
C语言程序设计(判断题专项练习)及答案
计算机C语言(判断题专项练习)及答案一、基础知识(每小题1 分,共 10分)()1、程序调试就是找出并改正c源程序中的语法错误。
()2、一个变量的数据类型被强制转换后,它将保持被强制转换后的数据类型。
()3、在标准c语言中,共用体变量中的各成员是共同占用一块存储空间()4、赋值运算符的结合方向为自右向左。
()5、c语言的标识符由字母、数字和下划线组成,其中第一个字符必须是字母或下划线。
()6、在c程序中, aph和Aph 是两个相同的变量()7、计算机语言(computer language)是人与计算机之间通讯的语言。
()8、在c语言中,当一个逻辑表达式的值为"假"时,该表达式的值一定是 0()9、在c程序中,abc与ABC是两个相同的变量。
()10、c语言中sizeof 是函数,而不是运算符。
二、控制结构(每小题1 分,共 10分)()1、if 语句后面的表达式只能是关系表达式()2、在switch语句中,可以根据需要使用或不使用break语句。
()3、在标准c中,逻辑表达式中只允许出现逻辑型数据。
()4、逻辑表达式的值只能为1或0。
()5、c程序中if语句可以单独存在。
()6、省略else的if语句的一般形式如下,若表达式的值为"真",则执行语句1;否则,就什么也不做。
if (表达式) 语句1()7、在if语句中,必须出现else。
()8、内层break语句可以终止嵌套的switch,使最外层的switch结束。
()9、switch语句中的default必须出现在所有case之后。
()10、switch语句中,每一个case的冒号后面都必须至少跟有一条语句。
三、循环结构(每小题1 分,共 10分)()1、for循环的三个表达式可以任意省略,while,do-while也是如此。
()2、选择结构( if 语句)和循环结构都可以使用嵌套形式()3、在循环过程中,使用break语句和continue语句的作用是一样的()4、无论哪种循环语句,都必须给出循环结束条件。
数组指针习题讲解
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.因为数组长度与初值的个数不相同,所以此语句不正确
数组和指针习题
☆☆ 19
☆☆ 7
1、设变量定义为“int a[4]={1,3,7,9},*p=a+2; 则*p的值为_____。
解:7
2、若有定义:char *p1,*p2,*p3,*p4,ch; 则不能正确赋值的程序语句是: A、p1=&ch; scanf("%c",p1); B、p2=(char *)malloc(1); scanf("%c",p2); C、p3=getchar( ); 解:C D、p4=&ch; *p4=getchar( );
☆☆ 6
程序段如下: int a[10][10]; 1 int i,j; 1 1 for(i=0;i<N;i++) 1 2 1 { 1 3 3 1 a[i][0]=1; 1 4 6 4 1 a[i][i]=1; · · · · · · } for(i=2;i<N;i++) for(j=1;j<i;j++) a[i][j] = a[i-1][j-1]+a[i-1][j];
17
☆☆
15、写出程序的运行结果:
void ss(char *s,char t) { while(*s) { if(*s==t) *s=t-'a'+'A'; s++; } } void main( ) { char str1[100]="abcddfefdbd", c='d'; ss(str1,c); printf("%s",str1); abcDDfefDbD }
☆☆ 8
3、下列__形式不表示二维数组a的第1行第2列的 元素地址。 A、a[1]+2 B、*(a+1)+2 解:D
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指针与数组练习题
1、下面程序实现如下功能:输入一个整数字符串转换为一个整数值,如”1234”转换为1234,”-1234”转换为-1234。
读懂main函数,编写转换函数chnum
#include<stdio.h>
#include<string.h>
void main()
{
char s[6];
int n;
int chnum(char *p);
gets(s);
if (*s=='-')
n=-chnum(s+1);
else
n=chnum(s);
printf("%d\n",n);
}
int chnum(char*p) {
int sum=0;
while(*p!='\0') {
if(*p>='0'&&*p<='9')
sum=sum*10+*p-'0';
p++;
} return sum;
}
2、从键盘输入一个字符串,去掉所有非十六进制字符后转换成十进制数输出。
读懂以下main函数,编写相应的函数del16和htod。
#include<stdio.h>
#include<string.h>
void main()
{ char s1[10],s2[10];
void del16(char*,char*);
int htod(char*);
gets(s1); //读入一字符串
del16(s1,s2); //去掉所有非十六进制字符到s2
printf("%d\n",htod(s2)); //把s2转换为10进制
}
void del16(char*s1,char*s2){
for(;*s1!='\0';s1++)
if(*s1>='0'&&*s1<='9'||*s1>='a'&&*s1<='f'||*s1>='A'&&*s1<='F'){
*s2 = *s1;
s2++;}
*s2='\0';
}
int htod(char*s2){
int sum=0;
for(;*s2!='\0';s2++){
if(*s2>='0'&&*s2<='9')
sum=sum*16+*s2-'0';
else if(*s2>='a'&&*s2<='f')
sum=sum*16+*s2-'a'+10;
else if(*s2>='A'&&*s2<='F')
sum=sum*16+*s2-'A'+10;
}
return sum;
}
3、编写函数insert(char *s1,char *s2,int pos),实现在字符串s1中的指定位置pos处插入字符串s2。
Happy Year
New
7
Happy New Year
#include<stdio.h>
#include<string.h>
int main(void) {
void insert(char *s1,char *s2,int pos);
char s1[80],s2[80];
int pos;
gets(s1);
gets(s2);
scanf("%d",&pos);
insert(s1,s2,pos);
puts(s1);
return 0;
}
void insert(char *s1,char *s2,int pos) {
char s[100];
strcpy(s,(s1+pos-1));
strcpy((s1+pos-1),s2);
strcat(s1,s);
}
4、编写程序,实现下面一个有关单词个数统计问题。
编写一个函数findstr(char *str,char *substr),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。
例如,假定输入的字符串为”asd asasdfg asd as zx67 asd mklo”,子字符串为as,函数返回值是6。
asd asasdfg asd as zx67 asd mklo
as
6
#include<stdio.h>
int main(void) {
int findstr(char *,char *);
char s1[80],s2[3];
int count;
gets(s1);
gets(s2);
count = findstr(s1,s2);
printf("%d",count);
return 0;
}
int findstr(char *str,char *substr) {
int count = 0;
for(;*str!='\0';str++)
if(*str == *substr&&*(str+1) == *(substr+1))
count++;
return count;
}
5、有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规则插到字符串a中,最后输出”abdefghjkmnptwy”。
#include<stdio.h>
#include<string.h>
void main() {
char a[20]="bdfhjmptwy";
char s[ ]="ganke";
int i,j,n;
char temp;
strcat(a,s);
n = strlen(a);
for(i = 1;i<n;i++)
for(j = 0;j<n-i;j++)
if(a[j]>a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp; }
puts(a);
}
6、编写程序将已按升序排好的两个字符串a和b中的字符按升序归并到字符串c中,最后输出”abcdefghijklmnpq”。
#include<stdio.h>
#include<string.h>
void main() {
char a[]="acegikm";
char b[]="bdfhjlnpq";
char c[80],*p;
int i=0,j=0,k=0;
char temp;
strcpy(c,a);
strcat(c,b);
p = c;
k = strlen(c);
for(i = 1;i<k;i++)
for(j = 0;j<k-i;j++)
if(*(p+j)>*(p+j+1)){
temp = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = temp;
}
puts(c);
}。