程序设计基础(C)第七章数组习题

合集下载

C语言第7章_数组

C语言第7章_数组

7.3练习与习题参考答案7.3.1练习参考答案练习7-1 将例7-3程序中的break语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:如果将break语句去掉,当在数组a中找到与x 值相同的元素并输出其下标后,继续查找并输出与x 值相同的元素。

即查找并输出与x 值相同的所有元素的下标。

当输入数据仍为2 9 8 1 9时,输出将是Index is 1Index is 4练习7-2 求最大值及其下标。

输入一个正整数 n (1<n≤10),再输入n个整数,输出最大值及其对应的最小下标,下标从0开始。

试编写相应程序。

解答:#include <stdio.h>int main(){int i, n, max, maxi;int a[10];scanf("%d", &n);for(i = 0; i < n; i++){scanf("%d", &a[i]);}max = a[0]; maxi = 0;for (i = 1; i < n; i++) {if (a[i] > max) {max = a[i]; maxi = i;}}printf("%d %d\n", max, maxi);return 0;}练习7-3 将数组中的数逆序存放。

输入一个正整数 n (1<n≤10),再输入 n 个整数,存入数组a中,先将数组a中的这n个数逆序存放,再按顺序输出数组a中的n个元素。

试编写相应程序。

解答1:#include <stdio.h>int main(){int i, high, low, n, temp;int num[10];scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &num[i]);low = 0, high = n - 1;while(low <= high) {temp = num[high];num[high] = num[low];num[low] = temp;low++;high--;}for(i = 0; i < n; i++) {if(i == 0)printf("%d", num[i]);elseprintf(" %d", num[i]);}printf("\n");return 0;}解答2:#include <stdio.h>int main(){int i, n, temp;int num[10];scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &num[i]);for(i = 0; i < n/2; i++){temp = num[i];num[i] = num[n-1-i];num[n-1-i] = temp;}for(i = 0; i < n; i++) {if(i == 0)printf("%d", num[i]);elseprintf(" %d", num[i]);}printf("\n");return 0;}练习7-4 找出不是两个数组共有的元素。

c语言复习题及答案第七章数组

c语言复习题及答案第七章数组

第七章数组(8学时)学习目的与要求:1、要点掌握一维数组的定义和引用;2、基本掌握二维数组的定义和引用;3、要点掌握字符型数组的定义与引用;4、能正确使用字符串办理函数;5、学会使用数组解决实质问题。

要点:1、一维数组的定义与引用;2、二维数组的定义与引用;3、字符数组的定义与引用;第 1 讲知识归纳:1、一维数组的定义:种类说明符数组名[常量表达式];(1) (1)数组名后一定用方括弧[ ],用其余括弧均错误;(2)方括弧中的常量表达式表示数组的元素个数;(3)方括弧中的常量表达式,一定是能计算出详尽数值,且不改变的常量,不可以是变量;2、一维数组的引用:数组名[下标]for ( i =0 ; i<7 ; i ++ ) printf(“%c” , c1[ i ] );(2) 将整个字符串一次输入输出,用格式符%s ;如:char c1[10];scanf (“ %s”, c1) ;100];D) int N=100;int num[N];(2003 年 9 月)25、有以下程序main(){ char a[ ]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘0’}; int i,j;i=sizeof(a); j=strlen(a);printf( “%d,%d b”i,j);}程序运转后的输出结果是( )。

A) 9,9B) 8,9C) 1,8D) 9, 8(2002 年 9 月)21、 C 22、C 23、D 24、B 25 、D二、填空题1、下边 fun 函数的功能是将形参x 的值变换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为0 的元素中,其余依此类推。

请填空。

fun(int x,int b[]){ int k=0,r;do{ r=x% 2;b[k++]=r;x/= 2 ; } while(x); }(1996 年 4 月)2 22、以下程序用来对从键盘上输入的两个字符串进行比较 , 而后输出两个字符串中第一个不同样字符的 ASCII 码之差。

C程序设计(第2版)第七章习题解答.doc

C程序设计(第2版)第七章习题解答.doc

C程序设计(第2版)第七章习题解答第七章动态内存分配习题一、基本概念与基础知识自测题7.1 填空题7.1.1 C/C++定义了4个内存区间:(1)、(2)、(3)和(4)。

答案:(1)代码区,存放程序代码;(2)全局变量与静态变量区,存放全局变量或对象(包括静态);(3)局部变量区即栈(stack)区,存放局部变量;(4)自由存储区(free store),即动态存储区或堆(heap)区。

7.1.2 静态定义的变量和对象用标识符命名,称为(1);而动态建立的称为(2),动态建立对象的初始化是通过(3)实现(4)。

答案:(1)命名对象(2)无名对象(3)初始化式(initializer)(4)显式初始化7.1.3 在用new运算符建立一个三维数组15*30*10时,使用了(1)个下标运算符,对应的用delete运算符注销这个三维数组时使用了(2)个下标运算符。

new返回的指针是指向(3)的指针。

答案:(1)3个(2)1个(3)30行10列的2位数组7.1.4 当动态分配失败,系统采用(1)来表示发生了异常。

如果new返回的指针丢失,则所分配的自由存储区空间无法收回,称为(2)。

这部分空间必须在(3)才能找回,这是因为无名对象的生命期(4)。

答案:(1)返回一个空指针(NULL)(2)内存泄漏(3)重新启动计算机后(4)并不依赖于建立它的作用域7.1.5 按语义的默认复制构造函数和默认复制赋值操作符实现的复制称为(1),假设类对象obj中有一个数据成员为指针,并为这个指针动态分配一个堆对象,如用obj1按成员语义拷贝了一个对象obj2,则obj2对应指针指向(2)。

答案:(1)浅拷贝(2)同一个堆对象7.1.6 单链表的结点包含两个域:(1)和(2)。

使用链表的最大的优点是(3),即使是动态数组也做不到这一点。

答案:(1)数据域(2)指针域(3)用多少空间,开多少空间7.1.7 进入单链表必须通过单链表的(1),如果它丢失则(2),内存也(3),在单链表中进行的查找只能是(4)。

C程序设计(数组)习题与答案

C程序设计(数组)习题与答案

C程序设计(数组)习题与答案C程序设计(数组)习题与答案数组是C语言中常用的数据结构之一,它可以存储多个相同类型的元素。

掌握数组的使用对于C程序设计至关重要,下面将为大家介绍一些关于C数组的习题及其答案。

1. 习题一:计算数组元素的和题目描述:编写一个程序,计算给定数组中所有元素的和,并输出结果。

解题思路:```c#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5}; // 定义一个包含5个元素的整型数组int sum = 0; // 用于存储和的变量// 遍历数组,累加每个元素的值for (int i = 0; i < 5; i++) {sum += arr[i];}printf("数组元素的和为:%d\n", sum);return 0;}```2. 习题二:查找数组中的最大值题目描述:编写一个程序,找出给定整型数组中的最大值,并输出结果。

解题思路:```c#include <stdio.h>int main() {int arr[7] = {4, 7, 2, 9, 1, 5, 8}; // 定义一个包含7个元素的整型数组int max = arr[0]; // 假设第一个元素为最大值// 遍历数组,比较每个元素的值与当前最大值的关系for (int i = 1; i < 7; i++) {if (arr[i] > max) {max = arr[i];}}printf("数组中的最大值为:%d\n", max);return 0;}```3. 习题三:查找数组中的特定元素题目描述:编写一个程序,在给定整型数组中查找是否存在指定元素,并输出结果。

解题思路:```c#include <stdio.h>int main() {int arr[6] = {3, 6, 9, 2, 5, 8}; // 定义一个包含6个元素的整型数组 int target = 2; // 指定要查找的元素int found = 0; // 用于标记是否找到目标元素的变量// 遍历数组,比较每个元素的值与目标值的关系for (int i = 0; i < 6; i++) {if (arr[i] == target) {found = 1;break;}}if (found) {printf("数组中存在目标元素:%d\n", target);} else {printf("数组中不存在目标元素:%d\n", target);}return 0;}```4. 习题四:数组元素逆序排列题目描述:编写一个程序,将给定整型数组的元素逆序排列,并输出结果。

c程序设计(谭浩强)第七章习题答案

c程序设计(谭浩强)第七章习题答案
{
int i;
float ave=0;
for(i=0;i<10;i++)
ave=ave+a[i][n]/10;
return ave;
}
void max(float a[][5]) //最高分的学生和课程
{
int i,j,row,colum;
float max=a[0][0];
for(i=0;i<10;i++)
# include <stdio.h>
# include<math.h>
# include<string.h>
/*int yue(int a,int b) //求最大公约数
{
int i,min;
min=a>b?b:a;
for(i=min;i>0;i--)
{
if(a%i==0&&b%i==0)
{
return i;
if((mid%2)!=1) //因职工号序号为奇数,故强制把序号转为奇数
mid-=1;
if(strcmp(b,a[mid])>0) //不能写b>a[mid]
{min=mid+2;}
else if(strcmp(b,a[mid])<0) //不能写b<a[mid]
{max=mid-2;}
else
{printf("职工姓名为:%s\n",a[mid-1]);break;}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("%-2d",b[i][j]);

程序设计基础(人民邮电出版社)答案第7章 数组

程序设计基础(人民邮电出版社)答案第7章  数组

一、选择题1. 对一维数组a的正确说明是 D 。

A) int a(10); B) int n=10,a[n]; C) int n; D) #define SIZE 10scanf("%d",&n); int a[SIZE];int a[n];2. 能对二维数组a进行正确初始化的语句是B。

A) int a[2][]={{1,0,1},{5,3,2}}; 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,2,3,4},{1,1}};3. 对两个数组a和b进行如下初始化char a[]="ABCDEF";char b[]={'A','B','C','D','E','F'};则以下叙述正确的是D。

A) a与b数组完全相同B) a与b长度相同C) a和b中都存放字符串D) a数组比b数组长度长4. 以下数组定义中不正确的是 D 。

A) int a[2][3]; B) int b[][3]={0,1,2,3,4,5};C) int c[100][100]={0}; D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}};5. 以下选项中,不能正确赋值的是 A 。

A) char s1[10];s1="Ctest"; B) char s2[]={'C', 't', 'e', 's', 't'};C) char s3[20]="Ctest"; D) char s4[]="Ctest\n"二、阅读程序写出结果1.#include<stdio.h>void main(){ char ch[7]={"12ab56"};int i,s=0;for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)s=10*s+ch[i]-'0';printf("%d\n",s);}答案:12.#include<stdio.h>void main(){ int a[10]={1,2,2,3,4,3,4,5,1,5};int n=0,i,j,c,k;for(i=0;i<10-n;i++){ c=a[i];for(j=i+1;j<10-n;j++)if(a[j]==c){ n++;for(k=j;k<10-n;k++)a[k]=a[k+1];}}for(i=0;i<(10-n);i++)printf("%d",a[i]);}答案:123453.#include <stdio.h>void main(){ int i;char a[]="Time",b[]="Tom";for(i=0;a[i]!='\0'&&b[i]!='\0';i++)if(a[i]==b[i])if(a[i]>='a'&&a[i]<='z')printf("%c",a[i]-32);elseprintf("%c",a[i]+32);else printf("*");}答案:t*M4.#include<stdio.h>#define LEN 4void main(){ int j,c;static char n[2][LEN+1]={"8980","9198"}; for(j=LEN-1;j>=0;j--){c=n[0][j]+n[1][j]-2*'0';n[0][j]=c%10+'0';}for(j=0;j<=1;j++) puts(n[j]);}答案:7078 9198三、程序填空1.程序的功能是在a数组中查找与x值相同的元素的所在位置。

C语言 第七章 数组期末测试习题与答案

C语言 第七章 数组期末测试习题与答案

C语言第七章数组期末测试习题与答案1、以下对一维整型数组a的正确说明是 ( )。

A.#define SIZE 10int a[SIZE];B.int a(10);C.int n=10,a[n];D.int n; scanf(“%d”,&n); int a[n];参考答案:A2、以下能对一维数组a进行正确初始化的语句是 ( )。

A.int a[10]={ };B.int a[10]={10*1};C.int a[10]=(0,0,0,0,0);D.int a[ ]={0};参考答案:B3、不是给数组的第一个元素赋值的语句是 ( )。

A.a[1]=1;B.int a[2]={1,0};C.int a[2];scanf (“%d”,&a[0]);D.int a[2]={1};参考答案:A4、下面程序的运行结果是 ( )。

main(){int a[6],i;for(i=1;i<6;i++){ a[i]=6*(i-2+4*(i>3))%5;printf("%2d",a[i]);}}A.-1 0 4 0 3B.-1 0 1 4 3C.-1 0 1 4 2D.-1 0 1 1 2参考答案:D5、下列定义正确的是 ( )。

A.int b[3]={2,5}B.int 4e[4]C. static int a[2]={1,2,3,4,5}D.int a(10)参考答案:A6、设有char str[10],下列语句正确的是 ( )。

A.printf("%s",str);B.scanf("%s",&str);C.printf("%c",str);D.printf("%s",str[0]);参考答案:B7、下列说法正确的是 ( )。

A.在C语言中,定义了一个数组后,就确定了它所容纳的具有相同数据类型元素的个数B.在C语言中,数组元素的数据类型可以不一致C.在C语言中,数组元素的个数可以不确定,允许随机变动D.在C语言中,可以使用动态内存分配技术定义元素个数可变的数组参考答案:D8、假设array是一个有10个元素的整型数组,则下列写法中正确的是A.array[-1]=0;B.array[0]='a';C.array[10]=0;D.array[0]=0;参考答案:D9、有一数组如下定义:int a[6]={1,2,3,4,5};执行for (i=0; i<6;i++) printf ("%d ",a[i]);后输出的结果是_____( )。

C程序设计(数组)习题与答案

C程序设计(数组)习题与答案

一、单选题1、若有定义 char s[10];则在下面表达式中不表示s[1]的地址的是()。

A.s++B.&s[0]+1C.&s[1]D.s+1正确答案:A2、若有定义int a[5],*p=a;则对a数组元素的正确引用是()。

A.a+2B.*(a+2)C.*&a[5]D.*(p+5)正确答案:B3、若有定义int a[5],*p=a;则对a数组元素地址的正确引用是()。

A.p+5B.&a+1C.*a+1D.&a[0]正确答案:D4、若要对a进行合法的自减运算,则之前应有下面()的说明。

A.int b[10];int *a=b+1;B.int k;int *a=&k;C.int p[3];int *a=p;D.char *a[3];正确答案:A5、若有定义int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是()。

A.p1=x+3,*p1++B.x[3]C.p1=x+2,*++p1D.p1=x+2,*(p1++)正确答案:D6、设int x[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0},*p=x,k;且0≤k<10, 则对数组元素x[k]的错误引用是()。

A.x[p-x+k]B.p+kC.*(&x[k])D.*(x+k)正确答案:B7、设double *p[6];则()。

A.p是指针数组,其元素是指向double型变量的指针B.p是指向double型变量的指针C.p是double型数组D.p是数组指针,指向double型数组正确答案:A8、若有定义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)++);正确答案:D9、下面程序执行后的输出结果是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号:姓名:成绩:
程序设计基础(C)第七章数组习题
一、选择题
1.下列叙述中错误的是()。

A)对于double 类型数组,不可以直接用数组名对数组进行整体输入或输出
B)数组名代表的是数组所占存储区的首地址,其值不可改变
C)在程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数
2.下列关于字符串的叙述中正确的是()。

A)C 语言中有字符串类型的常量和变量
B)两个字符串中的字符个数相同时才能进行字符串大小的比较
C)可以用关系运算符对字符串的大小进行比较
D)空串一定比空格打头的字符串小
3.当用户要求输入的字符串中含有空格时,应使用的输入函数是()。

A)scanf( ) B)getchar( ) C)gets( ) D)getc( )
4.若有定义语句:int a[3][6];,按在内存中的存放顺序,a 数组的第10 个元素是()。

A)a[0][4] B)a[1][3] C)a[0][3] D)a[1][4]
5.已有定义:char a[ ]="xyz",b[ ]={'x', 'y', 'z'};,下列叙述中正确的是()。

A)数组a 和b 的长度相同 B)a 数组长度小于b 数组长度
C)a 数组长度大于b 数组长度 D)上述说法都不对
6.下列程序的输出结果是()。

main( )
{ char a[7]="a0\0a0\ 0"; int i,j;
i=sizeof(a);
j=strlen(a);
printf("%d %d\n",i,j);
}
A)2 2 B)7 6
C)7 2 D)6 2
7.下列能正确定义一维数组的选项是()。

A)int a[5]={0,1,2,3,4,5}; B)char a[ ]={0,1,2,3,4,5};
C)char a={'A', 'B', 'C'}; D)int a[5]="0123";
8.有以下程序
#include
main()
{ int a[]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{ case 0:
switch(a[i]%2)
{ case 0:a[i]++;break;
case 1:a[i]--;
} break;
case 1:a[i]=0;
}
for(i=0;i<4;i++)
printf("%d ",a[i]);
printf("\n");
}
程序运行后的输出结果是()。

A)3 3 4 4
B)2 0 5 0
C)3 0 4 0
D)0 3 0 4
9.若已定义:
int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
其中0≤i≤9,则对a 数组元素的引用不正确的是()。

A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i))
10.以下程序的输出结果是()。

A)3 B)4 C)1 D)2
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf("%d\n",*(p+2));
}
11. 以下程序的输出结果是()。

A)不确定的值 B)3 C)2 D)1
main()
{
int n[2]={0},i,j,k=2;
for(i=0;i<k;i++)
for(j=0;j<k;j++) n[j]=n[i]+1;
printf("%d\n",n[k]);
}
12. 以下程序的输出结果是()。

A)17 B)18 C)19 D)20 main()
{
int a[ ]={2,4,6,8,10},y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++) y+=*(p+x);
printf("%d\n",y);
}
13. 以下程序的输出结果是()。

A)0987654321 B)4321098765 C)5678901234 D)0987651234 fun(int *s,int n1,int n2)
{
int i,j,t;
i=n1; j=n2;
while(i<j)
{
t=*(s+i); *(s+i)=*(s+j); *(s+j)=t;
i++; j--;
}
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0},*p=a,i;
fun(p,0,3); fun(p,4,9); fun(p,0,9);
for(i=0;i<10;i++) printf("%d",*(a+i));
}
14 若有定义语句int (*p)[M]; 其中的标识符p 是()。

A) M 个指向整型变量的指针
B) 指向M 个整型变量的函数指针
C) 一个指向具有M 个整型元素的一维数组指针
D) 具有M 个指针元素的一维指针数组,每个元素都只能指向整型量
二、填空题
1 若有以下定义:
double w[10];
则w 数组元素下标的上限是____,下限是____。

2. 以下程序的输出结果是____。

main()
{ int arr[10],i,k=0;
for(i=0; i<10; i++) arr[i]=i;
for(i=0; i<4; i++) k+=arr[i]+i;
printf("%d\n",k);
}
3. 以下程序的输出结果是____.
main()
{ int i,j,row,col,m;
int arr[3][3]={{100,200,300},{28,72,-30},{-850,2,6}};
m=arr[0][0];
for(i=0; i<3; i++)
for(j=0; j<3; j++)
if(arr[i][j]<m)
{ m=arr[i][j]; row=i; col=j; }
printf("%d,%d,%d\n",m,row,col);
}
4. 以下findmax 返回数组s 中最大元素的下标,数组中元素的个数由t 传入,请填空。

findmax(int s[],int t)
{ int k,p;
for(p=0,k=p; p<t; p++)
if(s[p]>s[k]) ____;
return ____;
}。

相关文档
最新文档