数组c习题答案解析

合集下载

C语言数组编程题及解答

C语言数组编程题及解答

C语言数组编程题及解答【程序1】用筛选法求100之内的素数筛选法又称筛法,是求不超过自然数N(N>1)的所有质数的一种方法。

据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛子。

具体做法是:先把N个自然数按次序排列起来。

1不是质数,也不是合数,要划去。

第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。

2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。

3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。

这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。

#include <stdio.h>#include <math.h>void main(){int i,j;int a[100];for(i=0;i<100;i++)a[i]=i+1;for(i=1;i<100;i++){if(a[i]==0)continue;for(j=i+1;j<100;j++)if(a[j]%a[i]==0)a[j]=0;}for(j=1;j<100;j++) //j从1开始,去除a[0](其值为1),因为1既不是质数,也不是合数if(a[j]!=0)printf("%d,",a[j]);printf("\n");}【程序2】题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。

例如6=1+2+3.编程找出1000以内的所有完数。

程序源代码:#include <stdio.h>int main(){int k[10];int i,j,n,s;for(j=2;j<1000;j++){n=-1;s=j;for(i=1;i<j;i++){if ((j%i)==0){n++;s=s-i;k[n]=i;}}if(s==0) //说明是完数{printf("%d is a wanshu:",j);for(i=0;i<=n;i++)printf("%d ",k[i]);printf("\n");}}return 1;}【程序3】题目:用选择法对10个数进行从大到小排序1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。

C语言数组答案

C语言数组答案

C第5次上机练习:数组
1、输入n个整数,用一维数组存放,然后将这n个整数逆序存放并输出。

2、将1-200中所有11的倍数存放到一个一维数组中,并输出。

3、有n个已经按由小到大排好序的整数,再输入一个整数,将其插入到这批数据中,要求插入该元素后仍然按由小到大的顺序排列。

4、(二维数组)求一个n*n矩阵对角线元素之和。

5、(一维字符数组)输入两个任意的字符串,编写程序实现两个字符串的链接。

(不能使用strcat()函数)
6、(一维字符数组)从键盘输入一个不超过30个字符的字符串,存储到一个字符数组中。

将下标为奇数位置上的字符按顺序复制到另外一个字符数组中并输出。

如:输入“abcdefg”,则输出”bdf”。

7、(一维字符数组)在一个指定的字符串中删除指定的字符,并输出该字符串。

C语言-数组-实验题目及答案

C语言-数组-实验题目及答案

实验六数组程序设计【实验目的】1、掌握使用一维数组编程方法2、掌握使用二维数组进行程序设计【实验内容】一、上机验证程序,并分析结果要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。

1、#include <stdio.h>int main(){ int a[ ]={1,2,3,4,5} , i, j, s=0 ;j = 1;for ( i = 4 ; i>=0 ; i--){s = s+ a[i] * j ;j = j * 10 ;}printf(" s= %d \n" , s );return 0;}二、程序改错题1.下面程序的功能,是从键盘输入一个数组(数组长度为10),查找数组中正数的个数。

源代码如下,程序中存在错误,请将其改正。

#include <stdio.h>int main(){int a(10);/*定义数组*/int count,i;/* i循环变量 count 正数个数*/for(i=0;i<=10;i++){/*循环输入*/scanf("%d",a[i]);}count=1;for(i=0;i<=10;i++){/*查找正数*/if(a(i)>0)count++;}printf("数组中正数有:%d个\n",count);return 0;}三编写程序1.编写程序要求输入30个学生的单科成绩,输出高于平均分的成绩。

#include <stdio.h>#define N 30int main(){float score[N],sum=0,aver;int i;for(i=0;i<30;i++){scanf("%f",&score[i]);sum=sum+score[i];}aver=sum/30;printf("平均分为:%.2f\n",aver);for(i=0;i<N;i++)if(score[i]>aver)printf("%.2f ",score[i]);printf("\n");return 0;}2.编写程序:假设有13位评委参与评分工作。

c语言数组试题及答案

c语言数组试题及答案

c语言数组试题及答案1. 请编写一个程序,要求用户输入10个整数,然后将其存储在一个数组中,并输出这个数组的内容。

答案:```c#include <stdio.h>int main() {int numbers[10];int i;printf("请输入10个整数:\n");for (i = 0; i < 10; i++) {scanf("%d", &numbers[i]);}printf("数组内容为:\n");for (i = 0; i < 10; i++) {printf("%d ", numbers[i]);}return 0;}```2. 请编写一个程序,要求用户输入一个整数n(n>0),然后分别输入n个整数存储在一个数组中,计算并输出这个数组中所有元素的和。

答案:```c#include <stdio.h>int main() {int n;int numbers[100];int sum = 0;int i;printf("请输入整数n:\n");scanf("%d", &n);printf("请输入%d个整数:\n", n);for (i = 0; i < n; i++) {scanf("%d", &numbers[i]);sum += numbers[i];}printf("数组元素之和为:%d\n", sum);return 0;}```3. 请编写一个程序,要求用户输入一个整数n(n>1),然后分别输入n个整数存储在一个数组中,计算并输出这个数组中最大和最小的元素。

答案:```c#include <stdio.h>int main() {int n;int numbers[100];int max, min;int i;printf("请输入整数n:\n");scanf("%d", &n);printf("请输入%d个整数:\n", n);for (i = 0; i < n; i++) {scanf("%d", &numbers[i]);}max = numbers[0];min = numbers[0];for (i = 1; i < n; i++) {if (numbers[i] > max) {max = numbers[i];}if (numbers[i] < min) {min = numbers[i];}}printf("数组中的最大元素为:%d\n", max);printf("数组中的最小元素为:%d\n", min);return 0;}```4. 请编写一个程序,要求用户输入两个整数m和n(1<=m<=n<=100),然后生成并输出m到n之间(包含m和n)的所有整数。

C语言数组典型例题分析与解答

C语言数组典型例题分析与解答

数组练习解答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步后的排列4 1 11 4 23 2 42 3 3【答案】l、2、4、34 用"选择排序法"对n个数据排序,需要进行n-1步。

其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。

第4章_数组c++_习题答案解析

第4章_数组c++_习题答案解析

习题4一、单项选择题1.若有说明inta[3][4];则a数组元素的非法引用是【】A.a[0][2*1]B.a[1][3]C.a[4-2][0]D.a[0][4]【答案】D【解析】数组下标从0开始,a[0][4]的列下标越界。

2.在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】A.整型常量B.整型表达式C.整型常量或整型表达式D.任何类型的表达式【答案】C3.以下不正确的定义语句是【】A.doublex[5]={2.0,4.0,6.0,8.0,10.0};B.inty[5]={0,1,3,5,7,9};C.charc1[]={′1′,′2′,′3′,′4′,′5′};D.charc2[]={x1′0′x,a′′x,8′′};【答案】B【解析】初始值的个数大于数组的大小,系统会出现编译错误。

4.对以下说明语句的正确理解是【】inta[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.因为数组长度与初值的个数不相同,所以此语句不正确【答案】B5.若有说明:inta[][4]={0,0};则下面不正确的叙述是【】A.数组a的每个元素都可得到初值0B.二维数组a的第一维大小为1C.当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D.只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值【答案】D【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。

元素a[0][0]和a[0][1]赋初值为0,其余元素初值系统默认为0。

6.以下能对二维数组c进行正确的初始化的语句是【】A.intc[3][]={{3},{3},{4}};B.intc[][3]={{3},{3},{4}};C.intc[3][2]={{3},{3},{4},{5}};D.intc[][3]={{3},{},{3}};【答案】B【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。

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程序设计(数组)习题与答案

一、单选题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)。

习题 4一、单项选择题1. 若有说明int a[3][4];则a数组元素的非法引用是【】A. a[0][2*1]B. a[1][3]C. a[4-2][0]D. a[0][4]【答案】D【解析】数组下标从0开始,a[0][4]的列下标越界。

2. 在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】A. 整型常量B. 整型表达式C. 整型常量或整型表达式D. 任何类型的表达式【答案】C3. 以下不正确的定义语句是【】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 c1[]={′1′,′2′,′3′,′4′,′5′};D. char c2[]={′\x10′,′\xa′,′\x8′};【答案】B【解析】初始值的个数大于数组的大小,系统会出现编译错误。

4. 对以下说明语句的正确理解是【】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. 因为数组长度与初值的个数不相同,所以此语句不正确【答案】B5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【】A. 数组a的每个元素都可得到初值0B. 二维数组a的第一维大小为1C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D. 只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值【答案】D【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。

元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。

6. 以下能对二维数组c进行正确的初始化的语句是【】A. int c[3][]={{3},{3},{4}};B. int c[][3]={{3},{3},{4}};C. int c[3][2]={{3},{3},{4},{5}};D. int c[][3]={{3},{},{3}};【答案】B【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。

C 答案中初始值行数多于数组大小中的行大小,也是错误的。

另外初始化时,初值之间不能有空位置,故D错误。

7. 以下不能对二维数组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};【答案】C8. 阅读下面程序,则程序段的功能是【】#include<iostream>using namespace std;int main(){int c[]={23,1,56,234,7,0,34},i,j,t;for(i=1;i<7;i++){t=c[i];j=i-1;while(j>=0 && t>c[j]){c[j+1]=c[j];j--;}c[j+1]=t;}for(i=0;i<7;i++)cout<<c[i]<<'\t';putchar('\n');return 0;}A. 对数组元素的升序排列B. 对数组元素的降序排列C. 对数组元素的倒序排列D. 对数组元素的随机排列【答案】B【解析】每层外层for循环结束会增加对一个元素的排序,确定c[0] ,c[1]的大小顺序,如图4-1所示。

图4-1 第一次排序第二次将c[2]分别与前2两个元素比较,插入最前面,确定c[0] ,c[1], c[2] 的大小顺序,如图4-2所示。

图4-2 第二次排序以此类推,外层6次循环后,将无序的数组实现大到小的降序排列。

9. 下列选项中错误的说明语句是【】A. char a[]={′t′,′o′,′y′,′o′,′u′,′\0′};B. char a[]={"toyou\0"};C. char a[]="toyou\0";D. char a[]=′toyou\0′;【答案】D10. 下述对C++语言字符数组的描述中错误的是【】A. 字符数组的下标从0开始B. 字符数组中的字符串可以进行整体输入/输出C. 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值D. 字符数组可以存放字符串【答案】C11. 以下二维数组c的定义形式正确的是【】A. int c[3][]B. float c[3,4]C. double c[3][4]D. float c(3)(4)【答案】C12. 已知:int c[3][4];则对数组元素引用正确的是【】A. c[1][4]B. c[1.5][0]C. c[1+0][0]D. 以上表达都错误【答案】C13. 若有以下语句,则正确的描述是【】char a[]="toyou";char b[]={′t′,′o′,′y′,′o′,′u′};A. a数组和b数组的长度相同B. a数组长度小于b数组长度C. a数组长度大于b数组长度D. a数组等价于b数组【答案】C【解析】a数组中存放的是字符串,数组大小为6个字节空间,分别存放′t′,′o′,′y′,′o′,′u′和′\0′,b数组的长度为5个字节空间,只存放′t′,′o′,′y′,′o′,′u′,5个字符。

二、填空题1.若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是________。

【答案】 32. 设有数组定义:char array[]="China"; 则数组array所占的空间为________个字节。

【答案】 63. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是________。

【答案】204. 下面程序的功能是输出数组s中最大元素的下标,请填空。

#include<iostream>using namespace std;int main(){ int k, p,s[]={1, -9, 7, 2, -10, 3};for(p =0, k =p; p< 6; p++)if(s[p]>s[k]) ________cout<< k<<endl;return 0;}【答案】k=p;5. 下面程序是删除输入的字符串中字符′H′,请填空。

#include<iostream>using namespace std;int main(){ char s[80];int i,j;gets(s);for(i=j=0;s[i]!=′\0′;i++)if(s[i]!=′H′){________}s[j]=′\0′;puts(s);return 0;}【答案】s[j++] =s[i];【解析】此处相当于补充了2条语句,等价于s[j] =s[i]; j++;。

6. 已知:char a[20]= "abc",b[20]= "defghi";则执行cout<<strlen(strcpy(a,b));语句后的输出结果为________。

【答案】 67. 有如下定义语句:int aa[][3]={12,23,34,4,5,6,78,89,45};,则45在数组aa中的行列坐标各为________。

【答案】2和28. 若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为(假设a[0][0]位于数组的第一个位置上)________。

【答案】i*m+j+19. 定义如下变量和数组:int k;int a[3][3]={9,8,7,6,5,4,3,2,1};则语句for(k=0;k<3;k++) cout<<a[k][k];的输出结果是________。

【答案】951【解析】定义的二维数组可以描述一个方阵:9 8 76 5 43 2 1语句功能是实现该方阵主对角线上元素的输出。

10. 已知:char a[15],b[15]={"I love china"};则在程序中能将字符串I love china赋给数组a的语句是________。

【答案】strcpy(a,b);三、读程序写结果1. 程序代码如下#include<iostream>using namespace std;int main(){char arr[2][4];strcpy(arr[0],"you");strcpy(arr[1],"me");arr[0][3]='&';cout<<arr[0]<<endl;return 0;}【答案】you&me2. 程序代码如下:#include<iostream>using namespace std;int main(){char a[]={'a', 'b', 'c', 'd', 'e', 'f', 'g','h','\0'};int i,j;i=sizeof(a);j=strlen(a);cout<< i <<","<<j<<endl;return 0;}【答案】9,83. 程序代码如下:#include<iostream>using namespace std;int main(){int i;int a[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)cout<<a[2-i][i];return 0;}【答案】753【解析】程序功能是实现一个方阵次对角线上元素的输出。

4. 程序代码如下:#include<iostream>using namespace std;int main(){char a[30]="nice to meet you!";strcpy(a+strlen(a)/2,"you");cout<<a<<endl;return 0;}【答案】nice to you5. 程序代码如下:#include<iostream>using namespace std;int main(){int k[30]={12,324,45,6,768,98,21,34,453,456};int count=0,i=0;while(k[i]){if(k[i]%2==0||k[i]%5==0)count++;i++;}cout<< count <<","<<i<<endl;return 0;}【答案】8,106. 程序代码如下:#include<iostream>using namespace std;int main(){char a[30],b[30];int k;gets(a);gets(b);k=strcmp(a,b);if(k>0) puts(a);else if(k<0) puts(b);return 0;}输入love↙China↙输出结果是?【答案】love【解析】strcmp(a,b)函数功能是比较a和b字符串的大小,比较是逐个字符的比较,比较方法是ASCII码值做减法,k='l'-'C'>,所以结果输出字符串a。

相关文档
最新文档