二级C语言教程章节测试 一维数组与指针
一维数组与指针

一维数组与指针1 关于数组元素地址的说明:一维数组在内存储单元中是连续存放的。
数组名a代表数组的首地址即a[0]的地址,&a[0],是一个地址常量,是数组存储单元最开头第一个字节的地址。
既然是一个地址值就可以给指针变量Int a[5],*pa=a; (数组名即数组首地址赋给指针变量,指针变量指向数组首个元素)Int a[5],*pa=&a[0];(遇上面等价)。
Int a[5],*pa=&a[3];2 数组元素的引用(1)引用各个数组元素的地址值:①通过使用数组名定义一个数组a[5] 则a代表&a[0] a+1,a+2,a+3,a+4 依次代表&a[1],&a[2],&a[3],&a[4]。
这里要注意,a的值为地址值,且a为一个地址常量,是一个常量,不能用来赋值,自加自减等。
a+n的计算规则是地址值的计算规则,即当前地址值(可以用十进制表示)加上n乘以数组元素的数据类型所占的字节数,代表数组元素a[n]。
可以通过循环语句和scanf语句来将输入的数存放到一位数组中,即Int a[5];F0r(i=0;i<5;i++)Scang(“%d”,a+i);②通过指针如int a[5],*pa=a; 等价于int a[5],*pa=&a[0];Int a[5],*pa;For(pa=a,i=0;i<5;i++)Scanf(“%d”,pa++);或者For(pa=a,i=0;i<5;i++){Scanf(“%d”,pa);pa++;}或者For(pa=a;pa-a<5;pa++)Scanf(“%d”,pa);(2)引用各个数组元素所在的存储单元或存储单元里面的值①通过对数组名取内容运算符*即*(a+i)。
即a[0]可以用*(a+0)或者*a来引用,a[1]可以用*(a+1)来引用,一次类推。
可以逐个输出数组元素的值For(i=0;i<4;i++)Printf(“%d”,*(a+i);②通过对指针变量取内容运算*(p+i)③通过数组名后面跟下标即a[i]④通过指针变量后面跟下标pa[i],这里有个前提即pa使数组名a的地址及pa=a;3 总结:(1)引用数组元素的方式有:*(a+i) *(p+i) a[i] p[i](前提是p=a)(2)引用数组各个元素地址的方式有:a+i ,p+i ,&a[i] , &p[i](前提是p=a)(3)注意a与p的区别,a是不可变的,而p中的地址是可以改变的,所以a++,a+=3,a=p,p=&a,都是非法的。
C语言二级,函数、数组、指针等的整理和课后题解答

第一个try(x,y,z)中的xyz是实参,中的xyz是形参,因为是void,没有return,所以无返回值,所以输出的(4)仍是2,3,0。
转换就是实参-----形参-----return------实参。
xy是实参,有值,是10,20。
ab是形参,(1)(4)中的xy不能换为ab,因为没有定义的ab 不能用。
此处没有return,所以(4)不能输出交换后的ab值。
7-7先读懂题意,这个主函数是一定要写出来的,关键在看返回值怎么弄。
注意(1)程序开始一定要有主函数的额定义,。
(2)中可以加上==1,但是因为if判断时就是1和0,所以此处不用写上1。
(3)下面的a是形参。
(4)for循环控制着if和return 0,在for---if---return 0执行完了才会执行return1 。
如果在return1 前面加上else的话,那么就会循环一次而判断一次,就输出一个0,不会整个循环完后返回1或0 。
(5)两个return的时候只执行一个return。
如条件成立的时候,执行return0,不成立的时候执行return1。
不断。
需要用循环,那么是用while还是for,则看:若是当。
则用while,如果是一个范围,则用while,若果是对次数什么的限制的话,就是用for。
不断输出结果,所以putchar(c)是放在和c=myupper(c)一样额括号内,如果是吧putchar(c)放在括号外面的话,就不会不断输出,只会输出一个,且是最后一个。
只要接受到的不是@,那么while久会一直循环。
7-9这个程序里没有实参和形参,是可以的,可以独立完成自己的事儿,不用实参传给形参。
这个程序也可以不用定义函数,直接把循环写在主函数中。
说明:7.1A,从主函数开始。
B、可以在程序的任意位置,如果实在main函数后面的话,记得开始要在函数最初的地方有个函数说明的语句。
7.2 如果函数没有说明格式的话,默认的是int型。
C语言全国计算机二级等级考试教程第10章 字符串(章节带习题)

输出时直到遇第一 char str[ ]=“I love you!” , *p=str; 个‘\0‟结束输出。 字符指针变量 printf(“%s\n” , p); 字符数组名
输入项 字符指针变量
转去介绍
10.3 字符串的输入和输出
字符数组名
输入项
字符指针变量 当字符数组名作为输入项: char str[15]; scanf(“%s”,str); 在内存中的形式是: P R 输入形式为: PROGRAMMING<CR> O G R A M M I N Ga赋初值后的存储示意图
10.4 字符串数组
可以定义字符型指针数组并通过赋初值来构成一个类似的字符串数组。 例如:char *pa[3]={“a”, ”bb”, ”ccc”}; 定义了一个字符型指针数组,该数组中含有3个元素pa[0] 、pa[1]、 pa[2],且每一个 元素都是一个指向字符串的指针。
则在str中存入的只是字符串“APROGRAM”,而不是字符串“APROGRAM MING
10.3 字符串的输入和输出
10.3.3 调用gets、puts函数在终端输入或输出一行字符串
调用gets函数来输入字符串,例如: char str[15]; gets( str ); 在内存中的形式是: A P 若从键盘上依次输入: APROGRAM MING<CR> R O G R A M M I N G \0 \0
★ 两个字符串分别占有不同的存储空间。 ★ 指针变量pmark中的地址可以改变而指向另外一个长度 不同的字符串。
10.3 字符串的输入和输出
10.3.1 输入和输出字符串时的必要条件
输入和输出的格式说明符为 %s 对字符串输入输出时的必要条件: 字符串常量 输出项 字符数组名 printf(“%s\n” , ”I love you!”); char str[ ]=“I love you!”; printf(“%s\n” , str); I love you!
全国计算机二级C语言程序设计讲义一维数组和二维数组

全国计算机二级C语言程序设计讲义一维数组和二维数组一维数组和二维数组是C语言中非常基础且重要的概念。
通过使用数组,我们可以轻松地存储和处理大量的数据。
本文将详细介绍一维数组和二维数组的基本概念以及它们在C语言中的应用。
一维数组是指由相同类型的元素组成的线性序列,可以通过一个变量名和一个下标来引用其中的元素。
一维数组是在内存中连续存储的,可以按照位置索引访问元素。
例如,我们可以定义一个包含整数的一维数组:```cint numbers[5]; //定义一个包含5个整数的一维数组```对于上面的示例,我们可以通过下标来引用数组中的元素,并赋予它们特定的值:```cnumbers[0] = 10; //给数组中的第一个元素赋值为10numbers[1] = 20; //给数组中的第二个元素赋值为20//以此类推...```除了单个的变量名和下标来访问数组元素外,我们还可以使用循环结构来遍历整个数组,从而更方便地对数组进行操作:```cint i;for(i = 0; i < 5; i++)printf("%d ", numbers[i]); //输出数组中的元素```除了一维数组,C语言还支持多维数组,其中二维数组是最常见的。
二维数组本质上是由一组相同类型的一维数组构成的。
```cint matrix[3][4]; //定义一个3行4列的二维数组```可以通过两个下标来引用二维数组中的元素,第一个下标表示行号,第二个下标表示列号:```cmatrix[0][0] = 1; //给二维数组中的第一个元素赋值为1matrix[1][2] = 5; //给二维数组中的第二行第三列元素赋值为5//以此类推...```和一维数组一样,我们可以使用嵌套的循环结构来遍历整个二维数组:```cint i, j;for(i = 0; i < 3; i++)for(j = 0; j < 4; j++)printf("%d ", matrix[i][j]); //输出二维数组中的元素}printf("\n"); //换行```在实际应用中,一维数组和二维数组非常常见。
C二级操作题 3 一维数值数组

/************found************/
p=j;改为p=i;
t=a[p];a[p]=a[j];a[j]=t;
}
}
main()
{int a[N]={9,6,8,3,-1},i,m=5;
printf("排序前的数据:");
for(i=0;i< m;i++) printf("%d",a[i]);printf("\n");
注意:部分源程序存在文件prog.c中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include < stdlib.h >
#include < stdio.h >
void fun(int a[], int n , int *max, int *d )
注意:部分源程序存在文件prog.c中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include < stdio.h >
#define N 80
void fun(int *w, int p, int n)
{}
main()
{int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
elseif(m >a[mid])
low=mid+1;
else return(mid);
}
__3_return__(-1);
}
main()
{int i,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;
计算机二级C语言第11讲(一维数组)

#include<stdio.h> #define M 100 void arrout(int *,int); int arrin(int *); main() { int a[M],k,*p; p=a; k=arrin(p); arrout(p,k); }
void arrout(int *a,int n) { int i; for(i=0;i<n;i++) printf(((i+1)%5==0)?"%4d\n":"%4d",*(a+i)); printf("\n"); }
• 引用形式: 引用形式:
数组名[下标];
例 int a[10]; printf(“%d”,a); (×) 必须 for(j=0;j<10;j++) printf(“%d\t”,a[j]);
• 说明: 说明:
( )
• 只能逐个引用数组元素,不能一次引用整个数组 • 下标可以是常量或整型表达式 • 元素的下标下限为0,上限为:数组大小-1
void arrout(int *a,int n) { int i; for(i=0;i<n;i++) printf(((i+1)%5==0)?"%4d\n":"%4d",*(a+i)); printf("\n"); }
20
• 实参、形参均为指针变量
int arrin(int *a) { int i,x; i=0; scanf("%d",&x); while(x>=0) { *(a+i)=x; i++; scanf("%d",&x); } return i; }
【C语言】-指向一维数组元素的指针

【C语⾔】-指向⼀维数组元素的指针本⽂⽬录说明:这个C语⾔专题,是学习iOS开发的前奏。
也为了让有⾯向对象语⾔开发经验的程序员,能够快速上⼿C语⾔。
如果你还没有编程经验,或者对C语⾔、iOS开发不感兴趣,请忽略前⾯我们已经学习了指针,如果指针存储了某个变量的地址,我们就可以说指针指向这个变量。
数组及其数组元素都占有存储空间,都有⾃⼰的地址,因此指针变量可以指向整个数组,也可以指向数组元素。
⼀、⽤指针指向⼀维数组的元素1// 定义⼀个int类型的数组2int a[2];34// 定义⼀个int类型的指针5int *p;67// 让指针指向数组的第0个元素8 p = &a[0];910// 修改所指向元素的值11 *p = 10;1213// 打印第⼀个元素的值14 printf("a[0] = %d", a[0]);输出结果:,说明已经通过指针间接修改了数组元素的值,跟指向⼀个普通int类型变量是⼀样的。
由于数组名代表着数组的⾸地址,即a == &a[0],因此第8⾏代码等价于:// 让指针指向数组的第0个元素p = a;内存分析图如下,⼀个指针变量占⽤2个字节,⼀个int类型的数组元素占⽤2个字节⼆、⽤指针遍历数组元素1.最普通的遍历⽅式是⽤数组下标来遍历元素1// 定义⼀个int类型的数组2int a[4] = {1, 2, 3, 4};34int i;5for (i = 0; i < 4; i++) {6 printf("a[%d] = %d \n", i, a[i]);7 }输出结果:2.接下来我们⽤指针来遍历数组元素先定义⼀个指针,指向数组的第⼀个元素// 定义⼀个int类型的数组int a[4] = {1, 2, 3, 4};// 定义⼀个int类型的指针,并指向数组的第0个元素int *p = a;p的值是a[0]的地址,因此,现在我们利⽤指针p只能访问数组的第0个元素a[0],⽤*p就可取出a[0]的值1。
计算机二级等级考试C语言关于指针的讲解

如果有: 则内存情况如图8-1 如果有:int a=5;则内存情况如图 则内存情况如图 所示。 所示。 •a是存储单元(即变量)的名字, 是存储单元(即变量)的名字, • 5是存放在存储单元中的内容, 是存放在存储单元中的内容 是存放在存储单元中的内容, •存储单元的地址是2000。 存储单元的地址是 存储单元的地址 。
注意: 注意:
p++; /* 相当于 相当于p=p+1; */ 等价于*(p++) 特殊表达式: 特殊表达式: 不等价于(*p)++ *p++; 和 *p--; 先取用对象(*p),然后 自加减 自加减1 先取用对象( ,然后p自加减 ++*p;与 *++p; 完全相同 与 --*p;与*--p;完全相同 , 与 完全相同 这四种形式都是p先自加减 ,然后再取用对象 这四种形式都是 先自加减1,然后再取用对象 先自加减
本章考点
指针与指针变量的概念。 指针与指针变量的概念。 指针变量的运算。 指针变量的运算。 一维数组的地址、指向一维数组的指针及其应用。 一维数组的地址、指向一维数组的指针及其应用。 二维数组的地址、指向二维数组的指针及其应用。 二维数组的地址、指向二维数组的指针及其应用。 指针数组的概念及其应用。 指针数组的概念及其应用。 用指针表示字符串。 用指针表示字符串。 指针变量作为函数参数。 指针变量作为函数参数。 指向指针的指针变量及其应用。 指向指针的指针变量及其应用。 命令行参数的基本概念。 命令行参数的基本概念。
b[i] &b[i][0] 代表第 行0列元素的地址 代表第i行 列元素的地址 列元素的地址.
b b+1 b+2 则:b *b *(b+i)
C语言【指针】一维数组与指针概念

C语言【指针】一维数组与指针概念C语言学习笔记----指针【一】虽然以前学过C语言,但是那个时候才大一,没有认真的学习,最近又回炉看了好久的指针,把我的经验心得写下来和大家一起分享,共同学习。
指针变量(1)指针就是内存地址;系统对变量的访问形式有两种:直接访问:按变量地址存取变量值的方式间接访问:如上所示,int i=3,然后特殊变量P存放的内容是变量i的地址,利用P来访问变量i。
2000是变量i空间的地址。
3是i的值。
变量P指向变量i,P是指向变量i的指针变量。
(2)定义指针变量: int *P,*p1; float *P;注意:(1) *号毫无意义,如果硬要说意义的话就是:C语言规定所有变量必须先定义后使用,指针变量也是这样,但是为了表示指针变量的特殊性,所以就加了一个*号。
(2)一个指针变量只能指向同一个数据类型,定义*P为int型,那就不能指向float。
(3)指针变量赋值:int i=3; int *P; P=&i; &是取地址运算符,取i的空间的地址给P。
所以P里面存放的是i空间的地址。
*P是i空间存放的值,即*P=3;注意:&i是i空间的地址,是一个整型数据,这个数据赋值给P,但是不能直接给P赋值,如P=1000是不行的,因为变量的地址是由编译系统分配的,用户是不知道的,更不能随便给赋地址值。
(4)&和*辨析:main(){int i=100; int *P;p=&i;printf("%d\n",i); 直接访问变量printf("%d\n",*P); 间接访问变量}A. int *P 中的*没有意义,只能说明定义的是一个指针变量,printf(*P)中的*是指针运算符。
B.&*P的计算:&和*的优先级一样,自右向左结合,先计算*P是100,然后计算&是&100.*&P的计算是一样的,先计算& 再计算*。
C语言全国计算机二级等级考试教程第10章 字符串(章节带习题)

用一维字符数组存放字符串 使指针指向一个字符串 字符串的输入和输出 字符串数组 用于字符串处理的函数 程序举例
10.1 用一维字符数组存放字符串
字符常量:是用单引号括起来的一个字符。 例如 „A‟ „C‟ „t‟ „!‟ „?‟
在内存中占一个字节
字符串常量:是由双引号括起来的一串字符 。
例如 “CHINA” C H 在内存中占6个字节 I N A \0
10.2 使指针指向一个字符串
用字符数组作为字符串和用指针指向的字符串之间的区别
若有以下定义: char mark[ ]= “PROGRAM”; char *pmark= “PROGRAM”; 它们在内存中的存储形式如下: mark pmark P R O G R A M \0
PROGRAM\0
区别
此函数功能是计算出以s为起始地址的字符串的长度,并作为函数返回值。 注意:不包括串尾的结束标志’\0‟。 ★ 字符串比较函数strcmp。调用形式为: strcmp(s1,s2);
此函数功能是来比较s1和s2所指字符串的大小。若s1>s2,函数值为大于0(正数)的数; 若s1==s2,函数值等于0;若s1<s2,函数值为小于0(负数)的数。
该数组中只包含7个元素
10.1 用一维字符数组存放字符串
10.1.1 通过赋初值的方式给一维字符数组赋字符串
也可以直接用字符串常量给一维字符数组赋初值。例如: char str[10]={ “sting!” }; 习惯上均省略花括号 char str[10]=“sting!”; 把一个字符串常量赋值给一个一维字符数组时,数组的元素个数 一定要大于字符串的实际长度 char str[6]=“sting!”;由于字符串的实际长度为6,而数组只有6个存储 单元,‘\0‟将无法存放。 如下的定义形式也可以正确进行: char str[ ]=“sting!”; 数组中包含7个元素 (含系统自动加的’\0‟)
指针与一维数组_C语言程序设计(第2版)_[共3页]
![指针与一维数组_C语言程序设计(第2版)_[共3页]](https://img.taocdn.com/s3/m/5462901089eb172dec63b725.png)
154
关于运算符“&”和“*”,应注意(假定int *p,a;p=&a;):
“&”和“*”两个运算符的优先级别相同,按自右向左方向结合。
计算&*p时,先求*p,得a的值,再求&(*p),即&*p与&a相同,都是指变量a的地址。
同理,*&a与*p相同,都是p所指变量a的值。
9.3 指针与数组
9.3.1 指针与一维数组
第6章已介绍过,一维数组中的元素按下标从小到大的次序占用连续的内存单元,数组名就是这块连续内存单元的首地址,也是第0号元素的地址,是一个地址常量。
指针变量不仅可以指向普通变量,也可指向数组元素。
和普通变量一样,数组元素的地址也是指它所占有的几个连续字节的首地址。
1.指向数组元素的指针
指向数组元素的指针的定义方法与指向普通变量的指针的定义方法相同。
例如:
int a[10]; /*定义a为包含10个整型数据的数组*/
int *p;
指针p既可指向整型变量,也可指向整型数组的元素。
例如:
p=&a[0];
表示把a[0]元素的地址赋给指针变量p,亦即p指向a数组的第0号元素a[0],如图9.4所示。
图9.4 指向数组元素的指针图9.5 指针与数组元素的对应关系因为数组名a就是a[0]的地址,所以下面两个语句等价:
p=&a[0];
p=a;
也可以通过初始化的方法使指针p指向数组a的元素,如:
int *p=&a[0];。
计算机二级C语言辅导 第9章 一维数组

注意:
• 1、若指针p指向数组a,虽然p+i与a+i、 *(p+i)与*(a+i)意义相同,但仍应注意p与a的 区别,a是地址常量,而p是指针变量。例、 for(p=a; a<(p+10); a++) a代表数组的首地址,是不变的,a++不合法 • 2、指针变量可以指向数组中的任何元素, 注意指针变量的当前值。
通过指针引用数组元素 当使指针p指向数组a后,可以用指针p访问 数组的各个元素。
说明: •如果指针p指向数组a(指向数组的第一个元素a[0]), 则:p+1指向下一个元素a[1],注意不是将p值简单加 1。 •如果数组元素是短整型,p+1表示p的地址加2; •如果数组元素是整型或实型,p+1表示p的地址加4; •如果数组元素是字符型,p+1表示p的地址加1。 p+i指向元素a[i]。可以使用*(p+i)访问元素a[i]。 另外: 1、p+i也可以记作a+i。指向元素a[i]。 2、指向数组的指针变量也可以带下标,如,p[i]与 *(p+i)等价,表示元素a[i]。
1
a[3]
a[4] a[5] a[6] a[7] a[8] a[9]
p+9,a+9
– 指针变量的关系运算 • 若p1和p2指向同一数组,则
– p1<p2 表示p1指的元素在前 – p1>p2 表示p1指的元素在后 – p1==p2 表示p1与p2指向同一元素
• 若p1与p2不指向同一数组,比较无意义 • p==NULL或p!=NULL
地址 a a+1 a+2
[] 变址运算符 一维数组和指针 a[i] *(a+i) 数组元素表示方法 元素 地址 p p+1 p+2
c语言二级考试重点第9章-数组

{ printf(“%5d”,a[i][j]); b[j][i]=a[i][j];
} printf(“\n”); }
a= 1 2 3 456
14 b= 2 5
的地址)
第9页,共49页。
考点1
• 首先让p指向数组a的首地址,那么:
• p+0就指向a[0]单元 • p+1就指向a[1]单元 •…
• p+i就指向a[i]单元 • i范围是0—9 • 现在,我们要引用指针所指向的存储单元,就可以用*(p+i)。 • *(p+0)就可以表示a[0]元素 • *(p+1)就可以表示a[1]元素
• 。。 • *(p+i)就可以表示a[i]元素
第10页,共49页。
考点1
• #include <stdio.h>
• void main()
•{
•
int a[10],i,*p;
•
p=a;
•
for (i=0;i<10;i++)
•
{
•
scanf("%d",p+i);
•
•
}//将数据存放到a[0]---a[9]
第25页,共49页。
考点4 二维数组元素的引用
• 2.通过地址来引用二维数组元素 • ①*(&a[i][j])//等价于a[i][j] • ②*(a[i]+j) • ③*(*(a+i)+j) • ④*(&a[0][0]+4*i+j) • ⑤*(a[0] +4*i+j)
C语言 第5章 指针和一维数组

2013-8-27
C语言程序设计
第5章 指针与一维数组
第5章 指针与一维数组
软件学院计算机科学与技术教研室 冯海文
fhw19770704@
2013-8-27
C语言程序设计
5.1 指针的概念与运算
者什的汇 自么数编 己位据语 决置存言 定等放程 。需在序 要内里 编存使 程的用
第5章 指针与一维数组
权限大,复 杂和危险
未查到时,p指向数组a的末尾
p a+N
**********
a
查到后,p指向中间某处
逐个前移1位
******x***
a
5.4 一维数组与指针的关系 2013-8-27
a+1
a+N
图 利用指针查找时的位置关系
C语言程序设计
指针与数组的一致性
伪程序描述
第5章 指针与一维数组
void main( ) { 定义数组a和相关变量x等; 输入数组元素和x的值; for(k=0; k<n; k++) { if(a[k] == x) for(m=k+1;m<n;m++) 删除元素a[k]; a[m-1]= a[m]; } 输出数组元素; 问题:字符串 时如何删除? }
利用指针做函数的参数能实现返回多 个返回值的功能。
通过return 最多能返 回一个值
一维数组与指针

指 针1、 概述1.1 地址和指针的概念如果在C 语言中定义一个变量,系统会自动的给它存储空间。
比如:int a,b,c;系统会自动的给a,b,c 分别分配2个字节的空间,内存中的表示如下图:这样以来,就建立了变量和地址的对应关系。
如果产生赋值行为,比如:a=1,b=3;,存储图如下:如果产生具体的操作,比如:c=a+b ,具体的过程如下: 第一步:从2001-2002字节空间取出1; 第二步:从2003-2004字节空间中取出3;第三步:将1和3相加后的结果4存入变量C 所指向的地址空间(2005-2006),图例如下:ab cab c以上的程序,在C 语言中称为“直接访问”。
既然有“直接访问”,肯定会存在“间接访问”,举例如下:张三出差,住宾馆,房间号码为1001,从携带钥匙的方式上来看,有两种方式: 1、 钥匙自己带(直接方式);2、 钥匙放在总台上,要开门,先到总台拿钥匙,而后开门(间接方式) 以上是生活中的例子,那么,在C 程序中,如何表示这种“间接方式”呢? 第一步:定义一个普通的变量并赋值(int a=3;)第二步:定义一种变量,用来存储变量a 的地址(a_pointer );第三步:建立该变量和普通变量之间的联系,将变量a 的地址存储到a_pointer 中。
第四步:通过该变量(a_pointer )来访问a;程序如下:b c一种示意图:以上的图形象的表示了一种“指向关系”。
“*”,表示指向。
在C 语言中,一个变量的地址被称为该变量的“指针”,存储该变量地址的“东东”,称为指针变量。
故,指针是一个地址,而指针变量是存放该地址的变量,它用来指向“指针”所表示的地址。
1.2 指针变量的定义和使用定义格式:数据类型(基本型) *指针变量比如:int *pointer_1;指针变量是pointer_1,而不是*pointer_1; 有了以上的定义,pointer_1是我们定义的指针变量,*pointer_1是具体的内容。
2010年计算机等级考试二级C语言一维数组与指针

2010年计算机等级考试二级C语言一维数组与指针一、选择题(1)有以下程序以下是引用片段:main(){ int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3], *q=p+2;printf("%d\n", *p + *q);}程序运行后的输出结果是A)16B)10C)8D)6(2)有以下程序以下是引用片段: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)10B)11C)14D)15(3)有以下程序以下是引用片段:void sort(int a[], int n){ int i, j ,t;for (i=0; ifor (j=i+1; jif (a[i]}main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10}, i;sort(aa+2, 5);for (i=0; i<10; i++) printf("%d,",aa[i]);printf("\n");}程序运行后的输出结果是A)1,2,3,4,5,6,7,8,9,10, B)1,2,7,6,3,4,5,8,9,10,C)1,2,7,6,5,4,3,8,9,10, D)1,2,9,8,7,6,5,4,3,10,(4)有以下程序以下是引用片段: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)6B)7C)5D)8(5)有以下程序以下是引用片段:void swap1(int c0[], int c1[]){ int t ;t=c0[0]; c0[0]=c1[0]; c1[0]=t;}void swap2(int *c0, int *c1){ int t;t=*c0; *c0=*c1; *c1=t;}main(){ int a[2]={3,5}, b[2]={3,5};swap1(a, a+1); swap2(&b[0], &b[1]);printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]); }程序运行后的输出结果是A)3 5 5 3B)5 3 3 5C)3 5 3 5D)5 3 5 3(6)有以下程序以下是引用片段: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)42B)45C)56D)60(7)有以下程序以下是引用片段:void f(int *x,int *y){ int t;t=*x;*x=*y;*y=t;}main(){ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;p=a;q=&a[7];while(p{f(p,q);p++;q--;}for(i=0;i<8;i++)printf("%d,",a[i]);}程序运行后的输出结果是A)8,2,3,4,5,6,7,1,B)5,6,7,8,1,2,3,4,C)1,2,3,4,5,6,7,8,D)8,7,6,5,4,3,2,1,(8)以下叙述中错误的是A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数(9)有以下程序以下是引用片段:#define N 20fun(int a[],int n,int m){ int i,j;for(i=m;i>=n;i--)a[i+1]=a[i];}main(){int i,a[N]={1,2,3,4,5,6,7,8,9,10};fun(a,2,9);for(i=0;i<5;i++)printf("%d",a[i]);}程序运行后的输出结果是A)10234B)12344C)12334D)12234(10)有以下程序以下是引用片段:prt(int *m,int n){int i;for(i=0;im[i]++;}main(){int a[]={1,2,3,4,5},i;prt(a,5);for(i=0;i<5;i++)printf("%d,",a[i]);}程序运行后的输出结果是:A)1,2,3,4,5,B)2,3,4,5,6,C)3,4,5,6,7,D)2,3,4,5,1,(11)有以下程序以下是引用片段:main(){ int a[]={1,2,3,4,5,6,7,8,9,0},*p;for(p=a;pprintf("%d,",*p);}程序运行后的输出结果是A)1,2,3,4,5,6,7,8,9,0,B)2,3,4,5,6,7,8,9,10,1,C)0,1,2,3,4,5,6,7,8,9,D)1,1,1,1,1,1,1,1,1,,1,(12) 有以下程序以下是引用片段:int f(int a){ return a%2; }main(){ int s[8]={1,3,5,2,4,6},i,d=0;for (i=0;f(s[i]);i++) d+=s[i];printf("%d\n",d);}程序运行后的输出结果是A) 9B) 11C) 19D) 21(13) 设有定义语句int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是A) for(i=0;i<6;i++) printf("-",*(p++));B) for(i=0;i<6;i++)printf("-",*(p+i));C) for(i=0;i<6;i++) printf("-",*p++); D) for(i=0;i<6;i++)printf("-",(*p)++);(14) 有以下程序以下是引用片段:#includemain(){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 6C) 6 11D) 5 10(15) 已有定义:int i,a[10],*p;,则合法的赋值语句是A) p=100;B) p=a[5];C) p=a[2]+2;D) p=a+2;(16) 有以下程序以下是引用片段:main(){ int x[]={1,3,5,7,2,4,6,0},i,j,k;for(i=0;i<3;i++)for (j=2;j>=i;j--)if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}for(i=0;i<3;i++)for(j=4;j<7-i;j++)if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}for (i=0;i<3;i++)for(j=4;j<7-i;j++)if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}for (i=0;i<8;i++) printf("%d",x[i]);printf("\n");}程序运行后的输出结果是:A) 75310246B) 01234567C) 76310462D) 13570246(17) 有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是A) 5B) 6C) 8D) 9(18) 有以下程序void swap1(int c[]){ int t;t=c[0];c[0]=c[1];c[1]=t;}void swap2(int c0,int c1){ int t;t=c0;c0=c1;c1=t;}main( ){ int a[2]={3,5},b[2]={3,5};swap1(A) ; swap2(b[0],b[1]);printf(“%d %d %d %d\n”,a[0],a[1],b[0],b[1]);}其输出结果是A) 5 3 5 3B) 5 3 3 5C) 3 5 3 5D) 3 5 5 3(19) 有以下程序以下是引用片段:void sum(int *A){ a[0]=a[1];}main( ){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;for(i=2;i>=0;i--) sum(&aa[i]);printf(“%d\n”,aa[0]);}执行后的输出结果是A) 4B) 3C) 2D) 1(20) 有以下程序以下是引用片段:void sort(int a[],int n){ int i,j,t;for(i=0;ifor(j=i+2;jif(a[i]}main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(aa,10);for(i=0;i<10;i++) printf(“%d”,aa[i]);printf(“\n”);}其输出结果是A) 1,2,3,4,5,6,7,8,9,10,B) 10,9,8,7,6,5,4,3,2,1,C) 9,2,7,4,5,6,3,8,1,10,D) 1,10,3,8,5,6,7,4,9,2,(21) 以下能正确定义一维数组的选项是A) int num []; B) #define N 100Int num [N];C) int num[0..100]; D) int N=100;int num[N];(22) 有以下程序以下是引用片段: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) 58B) 56C) 45D) 24(23) 有以下程序以下是引用片段:main(){ int x[8]={8,7,6,5,0,0},*s;s=x+3printf("%d\n",s[2]);}执行后输出结果是A) 随机值B) 0C) 5D) 6(24) 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
C_lab6-2_指针与一维数组.

实验6-2指针与一维数组【实验目的】1. 正确认识指针与数组的关系。
2. 掌握如何利用指针变量控制对数组的各种操作【实验内容】Part1:基础练习(课堂练习)1. C语言中,数组名是一个不可改变的地址,不能对它进行赋值运算。
数组在内存中占用一段连续的存储空间,它的首地址由数组名表示。
2. 若有以下声明和语句,则++(*p的值是 2 ,*--p的值是 0 。
int a[4] ={0,1,2,3}, *p;p=&a[1];3. 若有定义:int a[]={2,4,6,8,10,12}, *p=a;则*(p+1的值是 4 ,*(a+5的值是12 。
4. 以下程序段通过移动指针变量m,将下图所示连续动态存储单元的值,从第一个元素起,输出到终端屏幕,请填空(假设程序段中的所有变量均已正确说明)。
for(m=q; m-q<10;printf(“%3d”, *m++ ;5. 以下程序段通过指针变量q,给下图所示连续动态存储单元赋值(此过程中不能移动q),请填空(假设程序段中的所有变量均已正确说明)。
for( k=0;k<10;k++scanf(“%d”, q+k ;6. 以下程序段通过移动指针变量m,给下图所示连续动态存储单元赋值,请填空(假设程序段中的所有变量均已正确说明)。
for(m=q; mscanf(“%d”, m++ ;7. 若数组m如下所示,则数组元素m[m[4]+m[8]]的值是 8 ,*m+m[9]的值是12 。
m[*(m+4]的值是 12 。
8. 若有声明如int x[10], *p=x; 则在程序中引用数组元素x[i]的四种形式是: *(p+i ,*(x+i , p[i] , x[i]。
9. 下面程序的运行结果是sum=25 。
Part2:巩固提高(课后实践)1. 若有声明int a[10], *p=a; 则p+5表示 A ,*(p+5表示 B 。
A. 元素a[5]的地址B. 元素a[5]的值C.元素a[6]的地址 D. 元素a[6]的值2. 若已有声明char s[10]; 则在下面表达式中不表示s[1]的地址的是 B 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二级C语言教程章节测试一维数组与指针(一)一、选择题(1)有以下程序main(){ int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=&a[3], *q=p+2;printf("%d\n", *p + *q);}程序运行后的输出结果是_____。
A)16 B)10 C)8 D)6(2)有以下程序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)15(3)有以下程序void sort(int a[], int n){ int i, j ,t;for (i=0; i for (j=i+1; j if (a[i] }main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10}, i;sort(aa+2, 5);for (i=0; i<10; i++)printf("%d,",aa[i]);printf("\n");}程序运行后的输出结果是_____。
A)1,2,3,4,5,6,7,8,9,10, B)1,2,7,6,3,4,5,8,9,10,C)1,2,7,6,5,4,3,8,9,10, D)1,2,9,8,7,6,5,4,3,10,(4)有以下程序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)8(5)有以下程序void swap1(int c0[], int c1[]){ int t ;t=c0[0]; c0[0]=c1[0]; c1[0]=t;}void swap2(int *c0, int *c1){ int t;t=*c0; *c0=*c1; *c1=t;}main(){ int a[2]={3,5}, b[2]={3,5};swap1(a, a+1); swap2(&b[0], &b[1]); printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]); }程序运行后的输出结果是_____。
A)3 5 5 3 B)5 3 3 5 C)3 5 3 5 D)5 3 5 3(6)有以下程序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)60(7)有以下程序void f(int *x,int *y){ int t;t=*x;*x=*y;*y=t;}main(){ int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;p=a;q=&a[7];while(p {f(p,q);p++;q--;}printf("%d,",a[i]);}程序运行后的输出结果是A)8,2,3,4,5,6,7,1,B)5,6,7,8,1,2,3,4,C)1,2,3,4,5,6,7,8,D)8,7,6,5,4,3,2,1,(8)以下叙述中错误的是_____。
A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数(9)有以下程序#define N 20fun(int a[],int n,int m){ int i,j;for(i=m;i>=n;i--)a[i+1]=a[i];}main(){int i,a[N]={1,2,3,4,5,6,7,8,9,10};fun(a,2,9);for(i=0;i<5;i++)printf("%d",a[i]);}程序运行后的输出结果是_____。
A)10234 B)12344 C)12334 D)12234(10)有以下程序prt(int *m,int n){int i;for(i=0;i m[i]++;}main(){int a[]={1,2,3,4,5},i;prt(a,5);printf("%d,",a[i]);}程序运行后的输出结果是_____。
A)1,2,3,4,5,B)2,3,4,5,6,C)3,4,5,6,7,D)2,3,4,5,1,(11)有以下程序main(){ int a[]={1,2,3,4,5,6,7,8,9,0},*p;for(p=a;p printf("%d,",*p);}程序运行后的输出结果是_____。
A)1,2,3,4,5,6,7,8,9,0,B)2,3,4,5,6,7,8,9,10,1,C)0,1,2,3,4,5,6,7,8,9,D)1,1,1,1,1,1,1,1,1,,1,(12)有以下程序int f(int a){ return a%2; }main(){ int s[8]={1,3,5,2,4,6},i,d=0;for (i=0;f(s[i]);i++)d+=s[i];printf("%d\n",d);}程序运行后的输出结果是_____。
A)9 B)11 C)19 D)21(13)设有定义语句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)++);(14)有以下程序#includemain(){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 10(15)已有定义:int i,a[10],*p;,则合法的赋值语句是_____。
A)p=100; B)p=a[5]; C)p=a[2]+2; D)p=a+2;(16)有以下程序main(){ int x[]={1,3,5,7,2,4,6,0},i,j,k;for(i=0;i<3;i++)for (j=2;j>=i;j--)if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}for(i=0;i<3;i++)for(j=4;j<7-i;j++)if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}for (i=0;i<3;i++)for(j=4;j<7-i;j++)if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}for (i=0;i<8;i++)printf("%d",x[i]);printf("\n");}程序运行后的输出结果是_____。
A)75310246 B)01234567 C)76310462 D)13570246(17)有以下程序段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)9(18)有以下程序void swap1(int c[]){ int t;t=c[0];c[0]=c[1];c[1]=t;}void swap2(int c0,int c1){ int t;t=c0;c0=c1;c1=t;}main(){ int a[2]={3,5},b[2]={3,5};swap1(A); swap2(b[0],b[1]);printf(“%d %d %d %d\n”,a[0],a[1],b[0],b[1]);}其输出结果是_____。
A)5 3 5 3 B)5 3 3 5 C)3 5 3 5 D)3 5 5 3(19)有以下程序void sum(int *A){ a[0]=a[1];}main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;for(i=2;i>=0;i--) sum(&aa[i]);printf(“%d\n”,aa[0]);}执行后的输出结果是_____。
A)4 B)3 C)2 D)1(20)有以下程序void sort(int a[],int n){ int i,j,t;for(i=0;i for(j=i+2;j if(a[i] }main(){ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(aa,10);for(i=0;i<10;i++)printf(“%d”,aa[i]);printf(“\n”);}其输出结果是_____。
A)1,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1, C)9,2,7,4,5,6,3,8,1,10, D)1,10,3,8,5,6,7,4,9,2,(21)以下能正确定义一维数组的选项是_____。
A)int num []; B)#define N 100Int num [N];C)int num[0..100]; D)int N=100;int num[N];(22)有以下程序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);}执行后输出结果是_____。