数组和函数部分作业参考答案

合集下载

数组-理论教材习题参考答案

数组-理论教材习题参考答案

1.在“校园歌手大奖赛”中有10位评委为选手打分。

某位选手的最终得分是去掉一个最高、去掉一个最低分后的平均分,编写程序实现这一功能。

#include "stdio.h"#define N 10 /*评委人数*/#define MAX 10 /*打分分数上限*/#define MIN 0 /*打分分数下限*/int main( ){float s[N]; /*存储10位评委的打分*/float sum=0; /*sum用于存储10个分数之和*/float aver; /*aver用于存储最终得分*/float min= MAX, max= MIN;int i; /*循环控制变量*/for( i=0; i<N; i++){printf("请输入第[%d]个评委的打分:", i+1);scanf("%f", &s[i]);sum += s[i];if(min>s[i]) min = s[i]; /*min得到最低分*/if(max<s[i]) max = s[i]; /*max得到最高分*/}aver = (sum-max-min)/(N-2); /*计算除最高分和最低分的平均分*/printf("该选手最终得分为:%.2f\n", aver);return 0;}2.成绩分析是“成绩管理系统”的一个模块,包括统计各分数段人数及比例,计算平均分数、标准差等。

编程实现成绩分析的以上功能。

#include "stdio.h"#include "math.h" /*平方根函数sqrt()的头文件*/#define N 10 /*人数*/int main( ){int i; /*循环控制变量*/float score[N] = {55,86,79,93,66,71,95,72,88,65}; /*准备数据*/int s[5]={0}; /*数组s存放个分数段人数*/float sum = 0, aver; /*sum存储总分,aver存储平均分*/float var, stdev; /*var存储方差,stdev存储标准差*/for(i=0;i<N;i++){sum+= score[i];if(score[i]<60) s[0]++;if(score[i]>=60 && score[i]<70) s[1]++;if(score[i]>=70 && score[i]<80) s[2]++;if(score[i]>=80 && score[i]<90) s[3]++;if(score[i]>=90 && score[i]<=100) s[4]++;}aver = sum/N;var=0;for(i=0;i<N;i++)var+=(aver-score[i])* (aver-score[i]);var/=N-1; /*计算方差*/stdev=sqrt(var); /*计算标准差*/printf("总分:%f\n", sum);printf("平均分:%.2f\n", aver);printf("不及格人数:%d\n", s[0]);printf("60~69人数:%d\n", s[1]);printf("70~79人数:%d\n", s[2]);printf("80~89人数:%d\n", s[3]);printf("90~100人数:%d\n", s[4]);printf("标准差:%f\n", stdev);return 0;}3.利用数组存放斐波那契(Fibonacci)数列的前20项并输出。

C语言必背的典型程序设计题目 - 数组、函数-------参考答案

C语言必背的典型程序设计题目 - 数组、函数-------参考答案

1、使用选择法、冒泡法对10个数进行排序,并输出排序前后的数列。

nk=0; mt=0; //用于记录出列顺序while(t<n){if(num[i]==0) k++;if(k==m){t++;num[i]=t;k=0;}i++;if(i==n)i=0; //或者 i=i%n,构成循环}for(i=0;i<n;i++)printf("%4d",i+1);printf("\n");for(i=0;i<n;i++)printf("%4d",num[i]);printf("\n");}4、编程打印直角杨辉三角形前六行。

#include <>#include <>void main(){int i,j,a[6][6];for(i=0;i<=5;i++){a[i][i]=1;a[i][0]=1;}for(i=2;i<=5;i++){for(j=1;j<=i-1;j++){a[i][j]=a[i-1][j]+a[i-1][j-1];}}for(i=0;i<=5;i++){for(j=0;j<=i;j++){printf("%4d",a[i][j]);}printf("\n");}}5、编写程序,把下面的数据输入一个二维数组中。

25 36 78 1312 26 88 9375 18 22 3256 44 36 58然后执行以下操作:①输出矩阵两个对角线上的数;②分别输出各行和各列的和;③交换第一行和第三行的位置;④交换第二列和第四列的位置;⑤输出处理后的数组。

#include<>#define SIZE 4void main(){inta[SIZE][SIZE]={{25,36,78,13},{12,26,88,93},{75,18,22,32},{56,44,36,58}};int i,j,t,sum;//输出二维数组printf("二维数组:\n");for(i=0;i<SIZE;i++){for(j=0;j<SIZE;j++){printf("%5d",a[i][j]);}printf("\n");}printf("\n");printf("主对角线上的数:");for(i=0;i<SIZE;i++){printf("%4d",a[i][i]);}printf("\n");printf("副对角线上的数:");for(i=0;i<SIZE;i++){printf("%4d",a[i][SIZE-1-i]);}printf("\n\n");//各列的和for(i=0;i<SIZE;i++){sum=0;for(j=0;j<SIZE;j++){sum+=a[i][j];}printf("第%d行的和=%d\n",i+1,sum);}printf("\n");//各列的和for(j=0;j<SIZE;j++){sum=0;for(i=0;i<SIZE;i++){sum+=a[i][j];}printf("第%d列的和=%d\n",j+1,sum);}printf("\n");//交换第一行和第三行的位置for(j=0;j<SIZE;j++){t=a[0][j];a[0][j]=a[2][j];a[2][j]=t;}//输出二维数组printf("交换第一行和第三行后的二维数组:\n"); for(i=0;i<SIZE;i++){for(j=0;j<SIZE;j++){printf("%5d",a[i][j]);}printf("\n");}printf("\n");//交换第二列和第四列的位置for(i=0;i<SIZE;i++){t=a[i][1];a[i][1]=a[i][3];a[i][3]=t;}//输出二维数组printf("交换第2列和第4列后的二维数组:\n"); for(i=0;i<SIZE;i++){for(j=0;j<SIZE;j++){printf("%5d",a[i][j]);}printf("\n");}} 6、求一个5×5矩阵中的马鞍数,输出它的位置,所谓马鞍数是指在行上最小而在列上最大的数。

数据结构习题及参考答案

数据结构习题及参考答案

数据结构习题及参考答案一、概述在计算机科学领域,数据结构是指组织和存储数据的方式,以便于有效地访问和操作。

它是计算机算法和程序设计的基础。

下面将介绍一些常见的数据结构习题,并提供相应的参考答案,帮助读者更好地理解和掌握数据结构。

二、数组1. 习题:给定一个数组,编写一个函数来计算数组中元素的和。

【参考答案】```pythondef sum_array(arr):sum = 0for num in arr:sum += numreturn sum```三、链表1. 习题:给定一个链表,反转链表,并返回反转后的头节点。

【参考答案】```pythonclass ListNode:def __init__(self, val=0, next=None): self.val = valself.next = nextdef reverse_linked_list(head):prev = Nonecurr = headwhile curr:next_node = curr.nextcurr.next = prevprev = currcurr = next_nodereturn prev```四、栈和队列1. 习题:使用栈实现队列的功能。

【参考答案】```pythonclass MyQueue:def __init__(self):self.stack1 = []self.stack2 = []def push(self, x):self.stack1.append(x)def pop(self):if not self.stack2:while self.stack1:self.stack2.append(self.stack1.pop())return self.stack2.pop()def peek(self):if not self.stack2:while self.stack1:self.stack2.append(self.stack1.pop())return self.stack2[-1]def empty(self):return len(self.stack1) == 0 and len(self.stack2) == 0 ```五、树1. 习题:给定一个二叉树,判断它是否是高度平衡的。

数组试题及答案

数组试题及答案

数组试题及答案1. 定义一个整型数组,包含10个元素,并初始化为0。

答案:```cint array[10] = {0};```2. 编写一个函数,用于计算数组中所有元素的和。

答案:```cint sumArray(int arr[], int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += arr[i];}return sum;}```3. 给定一个数组,编写一个函数来找到数组中的最大值。

答案:```cint findMax(int arr[], int size) {int max = arr[0];for (int i = 1; i < size; i++) {if (arr[i] > max) {max = arr[i];}}return max;}```4. 编写一个程序,将一个数组中的所有元素逆序输出。

答案:```cvoid reverseArray(int arr[], int size) {for (int i = size - 1; i >= 0; i--) {printf("%d ", arr[i]);}}```5. 给定一个整数数组,编写一个函数,将数组中的所有负数移到数组的开头,所有非负数移到数组的末尾。

答案:```cvoid moveNegativesToFront(int arr[], int size) {int j = 0;for (int i = 0; i < size; i++) {if (arr[i] < 0) {arr[j++] = arr[i];}}for (int i = j; i < size; i++) {arr[i] = 0;}}```6. 编写一个函数,用于检查数组中是否存在重复元素。

答案:```cbool hasDuplicates(int arr[], int size) {for (int i = 0; i < size; i++) {for (int j = i + 1; j < size; j++) {if (arr[i] == arr[j]) {return true;}}}return false;}```7. 给定一个数组,编写一个函数,用于找出数组中第二大的元素。

C语言数组与函数测试卷

C语言数组与函数测试卷

C语言数组与函数阶段测试题答案一、选择题(18*2=36分)1、在定义“int a[5][6];”后,第11个元素是【 C 】A、a[2][5]B、a[2][4]C、a[1][4]D、a[1][5]2、假定int类型变量占用两个字节,其定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是【 D 】。

A、3B、6C、10D、203、当接受用输入的含空格的字符串地,应使用的函数是【 B 】A、scanf()B、gets()C、getchar()D、getc()4、设有数组定义:char array[]=”China”;。

则数组array所占的空间为【 C 】A、4个字节B、5个字节C、6个字节D、7个字节5、设有变量定义:int a [ ] = {1,2,3,4};执行语句a[3] = - - a[0]? a[1] + + : a[2] + +;执行后,数组的元素a[0], a[1], a[2], a[3]的值依次为【 D 】A、 1,2,3,4B、 0,3,3,4C、 0,2,3,4D、0,2,4,36、以下程序的输出结果是【 C 】void main( ){int i, x[3][3] = { 1,2,3,4,5,6,7,8,9}for(i= 0;i < 3; i + +) printf("3%d", x[i][2 - i]); }A、 1 5 9B、 1 4 7C、3 5 7D、 3 6 97、不能把字符串:Hello!赋给数组b的语句是【 B 】A、 char b [10] = {‘H’‘e’‘l’‘l’‘o’‘!’};B、char b [10] ; b = “Hello!”;C、 char b [10] ; strcpy(b, “Hello!”);D、char b [10] = “Hello!”;8、在函数间传递数据的四种方式中,不能把被调函数的数据带回到主调函数的是【 A 】A、值传递B、地址传递C、返回值传递D、全局外部变量9、以下关于函数的叙述中不正确的是【 B 】A、C程序是函数的集合,包括标准库函数和用户自定义函数B、在C语言程序中,被调用的函数必须在main函数中定义C、在C语言程序中,函数的定义不能嵌套D、在C语言程序中,函数的调用可以嵌套10、若用数组名作为函数调用的实参,则传递给形参的是【 A 】A、数组的首地址B、数组的第一个元素的值C、数组中全部元素的值D、数组元素的个数11、C语言中,凡未指定存储类别的局部变量的隐含存储类别是【 A 】A、autoB、staticC、externD、register12、若有以下函数调用语句:fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是【 A 】A、3B、4C、5D、613、若程序中定义函数float myadd(float a, float b) { return a+b;}并将其放在调用之后,则在调用之前应对该函数进行说明。

《C++数组》习题参考答案

《C++数组》习题参考答案

《C++数组》习题学号姓名一、选择题1、下列对字符数组进行初始化的语句正确的是 AA.char a[]= "Hello";B.char a[][]= {'H','e','l','l','o'};C.char a[5]="Hello";D.char a[2][5]= {"Hello","World"};2、以下一维数组a的正确定义是 DA.int a(10) ; B.int n=10,a[n];C.int n; D.#define size 10cin>>n; int a[size];int a[n];3、以下对二维数组a进行不正确初始化的是 CA.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);4、执行以下程序后,s的值为 Aint a[]={5,3,7,2,1,5,4,lO);int s=0,k;for(k=0;k<8;k+=2)s+=*(a+k);A.17 B.27 C.13 D.无定值5、为了判断两个字符串sl和s2是否相等,应当使用 DA.if (s1==s2)B.if (s1=s2)C.if(strcpy(S1,s2))D.if(strcmp(s1,s2)==O)6、有定义int a[2][5];,若a[0][1]的地址为x,则a[0][O]、a[1][3]地址分别为(假设一个整型数据占用两个字节的内存空间): A A.x-2,x+14 B.x-1,x+7C.x+1,x+7 D.x-1,x+147、若有定义float a[m][n];,且a[1][1]的地址为x,每个float元素占用4个字节,则a[il[j]的地址为 AA.x+4*(i-1)*n+4*(j-1) B.x+(i-1)*n+(j-1)C.x+4*(i-1)*j+(j-1) D.x+4*i*j+4*j二、填空题1、char st[20] = "SEU\0\t\\";cout<<sizeof(st)<<strlen(st)<<endl;则输出的内容是 203 ,如将st数组定义中的20去掉,则输出的内容是 73 。

C语言实验5-8答案(函数与数组)

C语言实验5-8答案(函数与数组)

任务
1.fact(j-1)*j
2.gcd(n,m%n)
m<n
3.//for(j=0;j<=n-i;j++)
//printf("");//删除这两行,因为顶格输出,不要空行了。
y==1||y==x
z=c(x-1,y-1)+c(x-1,y)
4.程序代码如下:
#include<stdio.h>
fib(int n)
#include <stdio.h>
main( )
{double fun(int m);//先调用再定义,且不是能缺省的int型,请加上函数说明。
int m;
printf("\n input m:");
scanf("%d",&m);
printf("\n t= %12.10lf \n",fun(m));
j=2
j—
i+j==2
输出为:a=13,b=14
4.i=1
x[i-1]
5.m<1000
m/10%10或m/10-x*10
a[i]=m
m<i
输出结果为:153 370 371 407
6.a
a
sum/n
x[i]<ave
任务
1.‘\0’
str1[i]-str2[i]
2.c[k]=a[i++];
c[k]=b[j++];
return yes;
}
main( )
{
int n;
scanf("%d",&n);

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

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

习题 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 答案错误。

数组练习及答案

数组练习及答案

数组练习及答案数组练习121、合法的数组定义是___ _____.A) int a[6]={"string"};B) int a[5]={0,1,2,3,4,5};C) char a={"string"};D) char a[]={0,1,2,3,4,5};122、要求下面的程序运行后,显示如下结果:2 10 4 61 52 32 4 7 85 1 3 2则程序中的划线处应填入___ _____.#include <>void main( ){ int a[4][4]={ ________ };int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++) printf("%4d",a[i][j]);printf("\n"); }}A) {1,5,2,3},{2,4,7,8},{5,1,3,2}B) {2,10,4,6},{1,5,2,3},{2,4,7,8},{5,1,3,2}C) {5,1,3,2},{2,4,7,8},{1,5,2,3}D) {2,1,2,5},{10,5,4,1},{4,2,7,3},{6,3,8,2}123、给出以下定义:char x[ ]="abcdefg";char y[ ]={'a','b','c','d','e','f','g'};则正确的叙述为___ _____.A) 数组x和数组y等价B) 数组x和数组y的长度相同C) 数组x的长度大于数组y的长度D) 数组x的长度小于数组y的长度124、定义如下变量和数组:int i;int x[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};则下面语句的输出结果是___ _____.for(i=0;i<4;i++) printf("%3d",x[i][3-i]);A) 1 5 9 13 B) 1 6 11 16C) 4 7 10 13 D) 4 8 12 16126、若希望下面的程序运行后输出45,程序空白处的正确选择是___ _____.#include <>void main( ){ int i,j=10,a[ ]={1,3,5,7,9,11,13,15};for( ____________ )j+=a[i];printf("%d\n",j);}A) i=5;i>1;i-- B) i=0;i<7;++iC) i=5;i>=1;--i D) i=2;i<6;++i127、若有以下说明:char s1[ ]={"tree"},s2[]={"flower"}; ,则以下对数组元素或数组的输出语句中,正确的是__ ___.A) printf("%s%s",s1[5],s2[7]);B) printf("%c%c",s1,s2);C) puts(s1);puts(s2); D) puts(s1,s2);128、下列一维数组初始化语句中,正确且与语句float a[ ]={0,3,8,0,9};等价的是_____ ___.A) float a[6]={0,3,8,0,9};B) float a[4]={0,3,8,0,9};C) float a[7]={0,3,8,0,9};D) float a[5]={0,3,8,0,9};129、运行下面程序段的输出结果是___ _____.char s1[10]={'S','e','t','\0','u','p','\0'};printf("%s",s1);A) Set B) Setup C) Set up D) 'S''e''t'130、以下程序段的输出结果是____ ____.char s[ ]="an apple";printf("%d\n",strlen(s));A) 7 B) 8 C) 9 D) 10131、若有说明:char c[10]={'E','a','s','t','\0'};,则下述说法中正确的是_____ _____.A) c[7]不可引用B) c[6]可引用,但值不确定C) c[4]不可引用D) c[4]可引用,其值为空字符132、下列初始化语句中,正确且与语句char c[ ]="string";等价的是____ ____.A) char c[ ]={'s','t','r','i','n','g'};B) char c[ ]='string';C) char c[7]={'s','t','r','i','n','g','\0'};D) char c[7]={'string'};133、若有说明char c[7]={'s','t','r','i','n','g'};则对元素的非法引用是____ ____.A) c[0] B) c[9-6] C) c[4*2] D) c[2*3]134、如有说明:char s1[5],s2[7]; ,要给数组s1和s2整体赋值,下列语句中正确的是____ ____.A) s1=getchar(); s2=getchar();B) scanf("%s%s",s1,s2);C) scanf("%c%c",s1,s2);D) gets(s1,s2);135、下列一组初始化语句中,正确的是___ _____.A) int a[8]={ }; B) int a[9]={0,7,0,4,8};C) int a[5]={9,5,7,4,0,2}; D) int a[7]=7*6; 136、以下程序输出的结果是____ _____.#include <>void main( ){ char str[ ]="1a2b3c"; int i;for(i=0;str[i]!='\0';i++)if(str[i]>='0'&&str[i]<='9') printf("%c",str[i]); printf("\n");}A) 9 B) 1a2b3cC) abc D) 123137、以下程序输出的结果是___ _____.#include <>void main( ){ int a[ ]={5,4,3,2,1},i,j;long s=0;for(i=0;i<5;i++) s=s*10+a[i];printf("s=%ld\n",s);}A) s=12345 B) s=5 4 3 2 1C) s=54321 D) 以上都不对138、以下程序输出的结果是____ ____.#include <>void main( ){ int a[ ]={1,2,3,4,5},i,j,s=0;for(i=0;i<5;i++) s=s*10+a[i];printf("s=%d\n",s);}A) s=12345 B) s=1 2 3 4 5C) s=54321 D) s=5 4 3 2 1139、在定义int a[5][6];后,数组a中的第10个元素是.________(设a[0][0]为第一个元素)A) a[2][5] B) a[2][4] C) a[1][3] D) a[1][5]140、当接受用户输入的含有空格的字符串时,应使用____ ____函数.A) gets( ) B) getchar( )C) scanf( ) D) printf( )141、以下程序执行时输入Language Programming<回车>,输出结果是____ ____.#include <>void main( ){ char str[30];gets(str);printf("str=%s\n",str);}A) Language ProgrammingB) LanguageC) str=LanguageD) str=Language Programming142、以下一维数组a的正确定义是___ _____ .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];143、以下对二维数组a进行正确初始化的是__ _____.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}};144、以下关于数组的描述正确的是____ ______.A) 数组的大小是固定的,但可以有不同类型的数组元素。

数组题参考答案

数组题参考答案

数组题参考答案数组题参考答案在计算机科学中,数组是一种用于存储和管理一组相同类型数据的数据结构。

它是一种非常重要的数据结构,被广泛应用于各种编程语言和算法中。

在编程中,经常会遇到与数组相关的题目,这些题目既有基础的数组操作,也有一些较为复杂的问题。

下面,我将为大家提供一些常见数组题目的参考答案。

1. 数组反转题目描述:给定一个数组,将其反转。

解题思路:可以使用双指针法,一个指针指向数组的起始位置,另一个指针指向数组的末尾位置。

然后交换两个指针所指向的元素,并分别向中间移动,直到两个指针相遇。

```pythondef reverse_array(arr):left = 0right = len(arr) - 1while left < right:arr[left], arr[right] = arr[right], arr[left]left += 1right -= 1return arr```2. 数组去重题目描述:给定一个数组,删除其中重复的元素。

解题思路:可以使用一个集合来存储已经出现过的元素,然后遍历数组,将未出现过的元素添加到集合中。

```pythondef remove_duplicates(arr):unique_elements = set()result = []for num in arr:if num not in unique_elements:unique_elements.add(num)result.append(num)return result```3. 数组求和题目描述:给定一个数组,计算其中所有元素的和。

解题思路:可以使用一个变量来记录累加的和,然后遍历数组,将每个元素加到累加和中。

```pythondef array_sum(arr):sum = 0for num in arr:sum += numreturn sum```4. 数组中的最大值和最小值题目描述:给定一个数组,找出其中的最大值和最小值。

第5章 数组习题参考答案

第5章 数组习题参考答案

第5章数组习题参考答案第1题'方法1Dim a(), b(), c() '定义a,b数组用于存放两组数据,C数组存放a,b相加的结果a = Array(1, 3, 5, 2, 4, 18, 50, 25) 'a数组赋值b = Array(5, 27, 30, 35, 60, 41, 87, 33) 'b数组赋值n = UBound(a) '计算数组最大下标For i = 0 To n '输出数组aPrint a(i);Next iPrintFor i = 0 To n '输出数组bPrint b(i);Next iPrintReDim c(0 To n) '定义(确定)数组c实际大小For i = 0 To nc(i) = a(i) + b(i)Next iFor i = 0 To n '输出数组cPrint c(i);Next iPrint'方法2Dim a(0 To 7), b(0 To 7), c() '定义a,b数组存放两组数据,C数组存放a,b相加的结果n = UBound(a) '计算数组最大下标For i = 0 To n '数组a赋值、输出a(i) = Val(InputBox("输入数据"))Print a(i);Next iPrintFor i = 0 To n '输出数组bb(i) = Val(InputBox("输入数据"))Print b(i);Next iPrintReDim c(0 To n) '定义(确定)数组c实际大小For i = 0 To nc(i) = a(i) + b(i)Next iFor i = 0 To n '输出数组cPrint c(i);Next iPrint第2题'方法1Dim a() '定义a,b数组用于存放两组数据,C数组存放a,b相加的结果x = Val(InputBox("输入行数"))y = Val(InputBox("输入列数"))ReDim a(1 To x, 1 To y)For i = 1 To x '数组a赋值For j = 1 To ya(i, j) = Int(Rnd() * 100)Next jNext iFor i = 1 To x '输出a数组For j = 1 To yPrint a(i, j);Next jPrintNext iPrintMax = a(1, 1) '设最大数为a(1,1)row = 1 '则最大数行下标为1col = 1 '则最大数列下标为1For i = 1 To x '求最大数max及其所在的行row、列colFor j = 1 To yIf Max < a(i, j) ThenMax = a(i, j)row = icol = jEnd IfNext jNext iPrint "最大数为:"; Max; "行为:"; row; "列为:"; col'方法2Dim a() '定义a,b数组用于存放两组数据,C数组存放a,b相加的结果x = Val(InputBox("输入行数"))y = Val(InputBox("输入列数"))ReDim a(1 To x, 1 To y)For i = 1 To xFor j = 1 To ya(i, j) = Int(Rnd() * 100) '数组a赋值Print a(i, j); '数组a输出Next jPrintNext iMax = a(1, 1) '设最大数为a(1,1)row = 1 '则最大数行下标为1col = 1 '则最大数列下标为1For i = 1 To x '求最大数max及其所在的行row、列col For j = 1 To yIf Max < a(i, j) ThenMax = a(i, j)row = icol = jEnd IfNext jNext iPrint "最大数为:"; Max; "行为:"; row; "列为:"; col第3题'方法1Dim a(1 To 10) '定义a数组存放10个数据For i = 1 To 10 '数组a赋值a(i) = Int(Rnd() * 100)Next iFor i = 1 To 10 '输出数组aPrint a(i);Next iPrint'数组元素数值交换For i = 1 To 5t = a(i)a(i) = a(11 - i)a(11 - i) = tNext iFor i = 1 To 10 '输出交换后a数组各元素值Print a(i);Next iPrint'方法2Dim a(1 To 10) '定义a数组存放10个数据For i = 1 To 10 '数组a赋值a(i) = Int(Rnd() * 100)Print a(i); '输出数组aNext iPrint'数组元素数值交换For i = 1 To 5t = a(i)a(i) = a(11 - i)a(11 - i) = tNext iFor i = 1 To 10 '输出交换后a数组各元素值Print a(i);Next iPrint'方法3Dim a(1 To 10) '定义a数组存放10个数据For i = 1 To 10 '数组a赋值a(i) = Val(InputBox("输入数据"))Print a(i); '输出数组aNext iPrint'数组元素数值交换For i = 1 To 5t = a(i)a(i) = a(11 - i)a(11 - i) = tNext iFor i = 1 To 10 '输出交换后a数组各元素值Print a(i);Next iPrint'方法4 任意多个元素值交换Dim a()n = Val(InputBox("输入数据个数"))ReDim a(1 To n) '定义a数组存放n个数据For i = 1 To n '数组a赋值a(i) = Int(Rnd() * 100)Print a(i); '输出数组aNext iPrint'数组元素数值交换For i = 1 To n \ 2t = a(i)a(i) = a(11 - i)a(11 - i) = tNext iFor i = 1 To n '输出交换后a数组各元素值Print a(i);Next iPrint第4题'方法1Dim a(0 To 10) As Integer '定义a数组存放各分数段统计结果n = Val(InputBox("输入学生人数"))For i = 1 To n '数组a赋值score = Val(InputBox("输入学生成绩"))Print score;If score < 60 Thena(5) = a(5) + 1ElseIf score <= 69 Thena(6) = a(6) + 1ElseIf score <= 79 Thena(7) = a(7) + 1ElseIf score <= 89 Thena(8) = a(8) + 1ElseIf score <= 100 Thena(9) = a(9) + 1End IfNext iPrintPrint "输出各分数段统计结果如下:"Print "<60人数"; a(5)Print "60~69人数"; a(6)Print "70~79人数"; a(7)Print "80~89人数"; a(8)Print "90~100人数"; a(9)'方法2Dim a(0 To 10) As Integer '定义a数组存放各分数段统计结果n = Val(InputBox("输入学生人数"))For i = 1 To n '数组a赋值score = Val(InputBox("输入学生成绩"))Print score;m = score \ 10 '构造m与数组a元素下标对应If m < 6 Thena(5) = a(5) + 1ElseIf m < 7 Thena(6) = a(6) + 1ElseIf score < 8 Thena(7) = a(7) + 1ElseIf score < 9 Thena(8) = a(8) + 1ElseIf score <= 10 Thena(9) = a(9) + 1End IfNext iPrintPrint "输出各分数段统计结果如下:"Print "<60人数"; a(5)Print "60~69人数"; a(6)Print "70~79人数"; a(7)Print "80~89人数"; a(8)Print "90~100人数"; a(9)'方法3Dim a(0 To 10) As Integer '定义a数组存放各分数段统计结果n = Val(InputBox("输入学生人数"))For i = 1 To n '数组a赋值score = Val(InputBox("输入学生成绩"))Print score;m = score \ 10 '构造m与数组a元素下标对应a(m) = a(m) + 1 'm对应的分数段数组元素累加Next iFor i = 0 To 5 '<60分的分数段数组元素累加s = s + a(i)Next iPrintPrint "输出各分数段统计结果如下:"Print "<60人数"; sPrint "60~69人数"; a(6)Print "70~79人数"; a(7)Print "80~89人数"; a(8)Print "90~100人数"; a(9)第5题身份证号码数字编码表'方法1Dim ID As String '定义ID存放身份证号码Dim a(0 To 16) '定义a数组存放身份证号码数字Dim w() '定义w数组存放加权因子Dim y() '定义y数组存放第18位编码表校验码w = Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) 'a数组赋值y = Array(1, 0, x, 9, 8, 7, 6, 5, 4, 3, 2) 'b数组赋值ID = InputBox("输入身份证号码")n = Len(ID) '计算身份证号码长度For i = 1 To n '输出数组aChar = Mid(ID, i, 1) '获得身份证号码每一位字符a(i - 1) = Val(Char) '将身份证号码字符转化为数值s = s + a(i - 1) * w(i - 1) '计算权求和sum(ai*wi)Next iy18 = s Mod 11 '计算模y=mod(s,11)Print y(y18) '输出校验码第6题Dim a(1 To 30) As Long '定义a数组存放数列各项a(1) = 1a(2) = 1For i = 3 To 30 '计算数列各项a(i) = a(i - 1) + a(i - 2)Next iFor i = 1 To 30 '输出数列各项Print a(i);Next i第7题Dim a(1 To 15) As String '定义a数组存放产生的字符a(1) = Chr(Int(Rnd() * (90 - 65 + 1) + 65)) '产生第一个字符For i = 2 To 15 '产生其它的字符,比较相同后重新产生a(i) = Chr(Int(Rnd() * (90 - 65 + 1) + 65)) '产生一个新的字符,For j = 1 To i - 1 '新产生的字符与其前产生的字符比较If a(i) = a(j) Then '若与其前产生的字符相同i = i - 1 '则i值减1,达到重新产生的目的Exit ForEnd IfNext jNext iFor i = 1 To 15 '输出数组Print a(i);Next iPrint第8题Dim a() '定义a数组存放数据n = Val(InputBox("数组大小")) '输入数组大小ReDim a(1 To n) '定义实际数组大小For i = 1 To na(i) = Int(Rnd() * 100) '数组赋值Next iFor i = 1 To n '数组输出Print a(i);Next iPrintx = Val(InputBox("插入数组的位置"))y = Val(InputBox("输入插入的数据"))n = n + 1 '计算新数组大小ReDim Preserve a(1 To n) '重新定义新数组大小,保留原数组元素值For i = n To x + 1 Step -1 '从后向前,数组元素值依次后移a(i) = a(i - 1) '数组元素值后移动1位Next ia(x) = y '将数据插入到指定的数组元素For i = 1 To n '数组输出Print a(i);Next iPrint第9题Dim a() '定义a数组存放数据n = Val(InputBox("数组大小")) '输入数组大小ReDim a(1 To n) '定义实际数组大小For i = 1 To na(i) = Int(Rnd() * 100) '数组赋值Next iFor i = 1 To n '数组输出Print a(i);Next iPrinty = Val(InputBox("输入删除的数据"))p = 0 '默认删除的数不在数组中For i = 1 To n '查找删除的数是否在数组中If a(i) = y Then '若删除的数在数组中存在p = 1 '则标记p为1m = i '记录删除的数在数组中的位置m(下标)Exit For '结束查找End IfNext iIf p = 1 Then '若删除的数在数组中存在,则进行删除n = n - 1 '重新设定数组元素个数For i = m To n '从m位置处,数组元素值依次前移a(i) = a(i + 1) '数组元素值前移动1位Next iReDim Preserve a(1 To n) '重新定义新数组大小,保留原数组元素值End IfFor i = 1 To n '数组输出赋值Print a(i);Next iPrint第10题'方法1Dim a() '定义a数组用于存放m*n矩阵数据m = Val(InputBox("输入行数没m"))n = Val(InputBox("输入列数n"))ReDim a(1 To m, 1 To n)For i = 1 To m '数组a赋值For j = 1 To na(i, j) = Int(Rnd() * 100)Next jNext iFor i = 1 To m '输出a数组For j = 1 To nPrint a(i, j);Next jPrintNext iPrints1 = 0 's1存放所有元素的和For i = 1 To m '求所有元素的和For j = 1 To ns1 = s1 + a(i, j) '所有元素累加Next jNext is2 = 0 's2存放非四周的所有元素和For i = 2 To m - 1 '求除去四周的所有元素的和For j = 2 To n - 1s2 = s2 + a(i, j) '非四周元素累加Next jNext is = s1 - s2 '求四周元素的和Print "四周元素和为:"; s'方法2Dim a() '定义a数组用于存放m*n矩阵数据m = Val(InputBox("输入行数没m"))n = Val(InputBox("输入列数n"))ReDim a(1 To m, 1 To n)For i = 1 To m '数组a赋值For j = 1 To na(i, j) = Int(Rnd() * 100)Next jNext iFor i = 1 To m '输出a数组For j = 1 To nPrint a(i, j);Next jPrintNext iPrints1 = 0 's1存放第一行所有元素的和s2 = 0 's2存放最后一行所有元素的和For j = 1 To n '求第一行、最后一行元素的和s1 = s1 + a(1, j) '第一行所有元素累加s2 = s2 + a(m, j) '最后一行所有元素累加Next js3 = 0 's3存放第一列、最后一列元素和For i = 2 To m - 1 '求第一列、最后一列除去第一行、最后一行元素的和s3 = s3 + a(i, 1) + a(i, n) '第一列、最后一列元素累加Next is = s1 + s2 + s3 '求四周元素和Print "四周元素和为:"; s, s1, s2, s3第11题'方法1 定义a、b分别存放运动员号码、成绩Dim a() '定义a数组号码Dim b() '定义b数组存放成绩a = Array("011", "095", "041", "070", "008", "009", "021", "061", "006", "004") 'a数组赋值b = Array(12.4, 11.1, 13.4, 12.1, 12.4, 10.4, 14.4, 15.1, 15.4, 11.4) 'b数组赋值n = UBound(a) '计算数组长度For i = 0 To n '输出数组a,bPrint a(i); b(i)Next i'比较交换法排序For i = 0 To n - 1For j = i + 1 To nIf b(i) > b(j) Thent = b(i): b(i) = b(j): b(j) = t '成绩交换s = a(i): a(i) = a(j): a(j) = s '对应的号码交换End IfNext jNext iPrint "排序后成绩为:"For i = 0 To n '输出数组a,bPrint a(i); b(i)Next i'方法2 选择法排序,定义a、b分别存放运动员号码、成绩Dim a() '定义a数组号码Dim b() '定义b数组存放成绩a = Array("011", "095", "041", "070", "008", "009", "021", "061", "006", "004") 'a数组赋值b = Array(12.4, 11.1, 13.4, 12.1, 12.4, 10.4, 14.4, 15.1, 15.4, 11.4) 'b数组赋值n = UBound(a) '计算数组长度For i = 0 To n '输出数组a,bPrint a(i); b(i)Next i'选择法排序For i = 0 To n - 1k = iFor j = i + 1 To nIf b(k) > b(j) Thenk = jEnd IfNext jt = b(i): b(i) = b(k): b(k) = t '成绩交换s = a(i): a(i) = a(k): a(k) = s '对应的号码交换Next iPrint "排序后成绩为:"For i = 0 To n '输出数组a,bPrint a(i); b(i)Next i'方法3 选择法排序,定义a数组为自定义数据类型,数组元素存放运动员号码与成绩Private Type sport '自定义数据类型,ID存放运动员号码、score存放运动员成绩id As String * 3 '定义运动员号码字段score As Single '定义运动员成绩字段End TypePrivate Sub Command1_Click()Dim a(1 To 10) As sport '定义a数组为自定义类型Dim s As sport '定义s变量自定义类型n = 3 'UBound(a) '计算数组长度For i = 1 To n '数组a元素赋值a(i).id = InputBox("输入第" & i & "个号码")a(i).score = Val(InputBox("输入第" & i & "个成绩"))Next iPrint "排序前成绩为:"For i = 1 To n '输出数组a元素值Print a(i).id; a(i).scoreNext i'比较交换法排序For i = 1 To n - 1k = iFor j = i + 1 To nIf a(k).id > a(j).id Thenk = jEnd IfNext js = a(i): a(i) = a(k): a(k) = s 'a数组元素值交换Next iPrint "排序后成绩为:"For i = 1 To n '输出数组aPrint a(i).id; a(i).scoreNext iEnd Sub。

第3章 数组(习题答案及解析)

第3章 数组(习题答案及解析)

习题3 参考答案一、选择题3.1 C 分析:本题考查程序和数组的基本概念。

3.2 A 分析:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有关系,B选项不正确;字符串比较大小除了使用库函数strcn3()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小。

因为字符串在表达式中相当于const char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的。

C选项不正确。

C语言中只有字符串常量而没有字符串变量,D选项描述不正确;空串的长度为0,而以空格打头的字符串的长度至少为1,因此A选项是正确。

3.3 A 分析:如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内存空间给它,所以选项B、C错误;二维数组a[2][3]中只有两个元素,都是一维数组,一维下标最大只能是a[1],所以选项D错误;若完成初始化的二维数组,第一维的长度没有指定,则第一维的大小按如下规则确定:若初值个数能被第二维大小整除,所得的商就是第一维的大小,若不能整除,则所得的商加1作为第一维的大小,所以选项A相当于:double a[1][3] = {6};其中a[0][0]=6,其他元素赋值0,选项A正确,答案为A。

3.4 D 分析:本题考察的知识点是:字符串常量。

在C语言中,字符串常量是以双引号括起来的字符序列。

因此B选项和C选项不正确。

字符序列中可包含一些转义字符,转义字符都是以"\"开头的。

A选项中包含了三个"\",前两个(\\)代表了一个"\"字符,后面一个和"""一起(\")被看作一个""",所以该字符串缺少一个结束的""",因此不正确。

D选项的两个"""之间没有任何字符,代表的是一个空串,是合法的字符串常量,因此D选项正确。

数组练习题及答案

数组练习题及答案

数组练习题及答案问题1:数组的基本操作题目:编写一个程序,实现以下功能:1. 初始化一个整型数组,大小为10,所有元素初始化为0。

2. 将数组中的元素依次设置为1到10。

3. 输出数组中的所有元素。

答案:```c#include <stdio.h>int main() {int arr[10] = {0};for (int i = 0; i < 10; i++) {arr[i] = i + 1;}for (int i = 0; i < 10; i++) {printf("%d ", arr[i]);}return 0;}```问题2:数组的反转题目:编写一个函数,实现对整数数组的反转。

答案:```cvoid reverseArray(int arr[], int size) {int start = 0;int end = size - 1;while (start < end) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}}```问题3:数组的查找题目:编写一个函数,实现在数组中查找特定元素的索引,如果找到返回该元素的索引,如果未找到返回-1。

答案:```cint findElement(int arr[], int size, int element) {for (int i = 0; i < size; i++) {if (arr[i] == element) {return i;}return -1;}```问题4:数组的排序题目:使用冒泡排序算法对整数数组进行排序。

答案:```cvoid bubbleSort(int arr[], int size) {for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}```问题5:数组的动态扩展题目:编写一个函数,实现对数组的动态扩展,使其能够存储更多的答案:```cvoid dynamicArrayExpansion(int *arr, int *size, int capacity, int newElement) {if (*size >= capacity) {int newCapacity = capacity * 2;int *newArr = (int *)malloc(newCapacity *sizeof(int));for (int i = 0; i < *size; i++) {newArr[i] = arr[i];}free(arr);arr = newArr;capacity = newCapacity;}arr[(*size)++] = newElement;}```结束语:这些练习题涵盖了数组的基本操作、查找、排序和动态扩展等常见问题,希望能够帮助您更好地理解和掌握数组的使用。

132实验十三数组指针和函数综合编程练习参考答案.doc

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个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。

C语言(数组与函数)习题与答案

C语言(数组与函数)习题与答案

1、有以下程序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.56C.60D.45正确答案:D2、以下叙述中错误的是()。

A.数组名代表的是数组所占存储区的首地址,其值不可改变B.只有double类型数组,不可以直接用数组名对数组进行整体输入或输出C.可以通过赋初值的方式确定数组元素的个数D.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息正确答案:B3、以下能正确定义一维数组的选项是()。

A.int a[5]={0,1,2,3,4,5};B.int a[5]="0123";C.char a[]={0,1,2,3,4,5};D.char a={'A','B','C'};正确答案:C解析: D、不加[ ],a只能被看作是一个字符变量,只能接收一个字符4、有以下程序main(){ char p[ ]={‘a’,’b’,’c’},q[ ] =”abc”;printf("%d %d\n",sizeof(p),sizeof(q));};程序运行后的输出结果是()。

A.4 4B.3 3C.3 4D.4 3正确答案:C解析: C、p[] 只能认作字符数组,不会有字符串的结束标志,所以只有3个字符q[] 是字符串,末尾还会有字符串的结束标志,所以有4个字符5、以下程序运行后的输出结果是()。

main(){ int i,j,a[][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)for(j=i+1;j<3;j++) a[j][i]=0;for(i=0;i<3;i++){ for(j=0;j<3;j++) printf("%d ", a[i][j]);printf("\n");}}A.1 2 30 5 60 0 9B.1 2 30 0 00 0 9C.0 0 00 0 00 0 0D.1 2 04 0 60 8 9正确答案:A6、若有定义语句:int m[ ]={5,4,3,2,1},i=4; ,则下面对m 数组元素的引用中错误的是()。

数组和函数习题

数组和函数习题

数组习题一、选择题1.(1) int a[4]={5,3,8,9};其中a[3]的值为( )。

A. 5B. 3C. 8D. 92.以下4 个数组定义中,( )是错误的。

A. int a[7];B. #define N 5 long b[N];C. char c[5];D. intn,d[n];3.对字符数组进行初始化,( )形式是错误。

A. char c1[ ]={'1', '2', '3'};B. char c2[ ]=123;C. char c3[ ]={ '1', '2', '3','\0'}; D. char c4[ ]="123";4.在数组中,数组名表示( )。

A. 数组第1 个元素的首地址B.数组第2 个元素的首地址C. 数组所有元素的首地址D.数组最后1 个元素的首地址5.若有以下说明,则数值为4 的表达式是( )。

int a[12] ={1,2,3,4,5,6,7,8,9,10,11,12}; cha r c=‟a‟, d, g ;A. a[g-c]B. a[4]C. a['d'-'c']D. a['d'-c]6.合法的数组定义是( )。

A. char a[ ]= "string " ;B. int a[5] ={0,1,2,3,4,5};C. char a= "string " ;D. char a[ ]={0,1,2,3,4,5}7.数组定义为int a[3][2]={1,2,3,4,5,6},值为6的数组元素是( )。

A. a[3][2]B. a[2][1]C. a[1][2]D. a[2][3]8.下面的程序中哪一行有错误( )。

#include <stdio.h>main(){float array[5]={0.0}; //第A行int i;for(i=0;i<5;i++)scanf("%f",&array[i]);for(i=1;i<5;i++)array[0]=array[0]+array[i];//第B行printf("%f\n",array[0]); //第C行}A. 第A行B. 第B行C. 第C行D. 没有9.根据以下说明,写出正确的说明语句:men是一个有10个整型元素的数组。

C语言习题六(数组部分)习题及答案

C语言习题六(数组部分)习题及答案

C语言习题六(数组部分)习题及答案习题六一.选择题1.在C语言中,引用数组元素时,其数组下标的数据类型允许是c 。

A)整型常量B)整型表达式C)整型常量或整型表达式C)任何类型的表达式2.以下对一维整型数组a的正确说明是DA)int a(10) ; B)int n=10,a[n];C)int n; D)#define SIZE 10scanf(“%d”,&n);int a[SIZE];int a[n];3.若有定义:int a[10],则对数组a元素的正确引用是 D 。

A)a[10] B)a[3.5] C)a(5) D)a[10-10]4.以下不能对一维数组a进行正确初始化的语句是B 。

A)int a[10]={0,0,0,0,0}; B)int a[10]={} ;C)int a[ ] = {0} ; D)int a[10]={10*1} ;5.若有定义:int a[3][4],则对数组a元素的正确引用是。

AA)a[2][3] B)a[1,3] C)a(5) D)a[10-10]6.以下能对二维数组a进行正确初始化的语句是B。

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}} ;7.以下不能对二维数组a进行正确初始化的语句是。

CA)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} ;8.若有说明:int a[3][4]={0};则下面正确的叙述是D。

A)只有元素a[0][0]可得到初值0B)此说明语句不正确C)数组a中各元素都可得到初值,但其值不一定为0D)数组a中每个元素均可得到初值09.若有说明:int a[][4]={0,0};则下面不正确的叙述是D。

c语言数组练习题及答案

c语言数组练习题及答案

c语言数组练习题及答案第一题:在数组a中,存放有n个学生的成绩.试编一函数:将低于平均分的学生人数m由函数值返回,将低于平均分的分数由数组b带回. int fun(int a[],int n,int b[]) {int i,m=0,aver=0;for(i=0;i<n;i++) aver+=a[i];aver/=n;for(i=0;i<n;i++)if(a[i]<aver) b[m++]=a[i];return m;}第二题:试编一函数:求出1000之间能被7或11整除,但不能同时被7或11整除的所有整数的个数n由函数值返回,并将符合条件的数放在数组a中带回. int fun(int a[]){int i,n=0;for(i=1;i<1000;i++)if((i%7==0&&i%11!=0)||(i%7!=0&&i%11==0)) a[n++]=i;return n;}第三题:试编一函数:将大于整数m且紧靠m的k个素数存入数组a中. void fun(int m,int k,int a[]) {int i,n,data,flag;data=m+1; n=0;while(n<k){flag=1;for(i=2;i<=data/2;i++)if(data%i==0){flag=0; break;}if(flag) a[n++]=data;data++;}}第四题:试编一函数:在数组a中有n个整数,要求把下标从0到p(p小于等于n-1)的数平移到数组的最后.如:原始内容: 1,2,3,4,5,6,7,8,9,10; 当p=4时:移后内容: 6,7,8,9,10,1,2,3,4,5void fun(int a[],int n,int p) {int i,j,t;for(i=0;i<=p;i++){t=a[0];for(j=1;j<n;j++) a[j-1]=a[j];a[n-1]=t;}}第五题:试编一函数:在具有n个数据的数组a中,求出次最大值的下标并由函数值返回.int fun(int a[],int n){int i,j,max,may;if(a[0]>a[1]){max=0; may=1;}else {max=1; may=0;}for(i=2;i<n;i++)if(a[i]>a[max]){may=max;amx=i;}else if(a[i]>a[may]) may=i;return may;}第六题:在数组a中有n个四位数.试编一函数,要求按每个数的后三位的大小进行升序排列,当后三位等相同时,则对这些数值按原始四位数据进行降序排序.将排序后的前10个数存入数组b中.(提示:可采用选择排序)int fun(int a[],int n,int b[]) {int i,j,k,t,m=10;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[j]%1000<a[k]%1000) k=j;else if(a[j]%1000==a[k]%1000 && a[j]>a[k]) k=j;if(k!=i){t=a[i]; a[i]=a[k]; a[k]=t;}}for(i=0;i<m;i++) b[i]=a[i];return m;}第七题:在三位数(100至999)中寻找符合下面条件的整数.它即是完全平方数,又有两位数字相同.(如:144,676;)并将符合条件数的个数n由函数值返回,符合条件的数存入数组a中返回.int fun(int a[]){int i,j,hun,ten,data,n=0;for(i=10;i<32;i++){j=i*i;if(j>=100&&j<=999){hun=j/100;ten=j%100/10;data=j%10;if(hun==ten||ten==data||data==hun) a[n++]=j;}}return n;}第八题:判断一个长整型数是否为回文数(回文数是指其数字左右对称的整数).当该数是回文数时,函数值返回1,否则返回0.(提示:利用逻辑量flag进行操作). intfun(long m){int i=0,n=0,flag=1,a[20];while(m){a[n]=m%10; m=m/10; n++;}while(i<=n/2 && flag)if(a[i]!=a[--n] flag=0;else i++;return flag;}第九题:在数组a中存有n个数据,试编一函数:依次从数组中取出一个数据,如查该数连续大于该数以后的5个数且该数是奇数,统计出满足此条件数的个数m由函数值返回,并把这些数按从小到大的顺序存入数组b中.int fun(int a[],int n,int b[]) {int i,j,flag,m=0;for(i=0;i<n-5;i++){for(j=i+1;j<=i+5;j++)if(a[i]>a[j]) flag=1;else {flag=0; break;}if(flag==1 && a[i]%2==1) b[m++]=a[i];}for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++)if(b[j]>b[j+1]){flag=b[j]; b[j]=b[j+1]; b[j+1]=flag;}return m;}第十题:在数组a中有n个四位数,试编一函数:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数m由函数值返回,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序排序.int fun(int a[],int n,int b[]) {int i,j,m,thou,hun,ten,data;for(i=0;i<n;i++){thou=a[i]/1000;hun=a[i]%1000/100;ten=a[i]%100/10;data=a[i]%10;if(thou+data==hun+ten) b[m++]=a[i];}for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++)if(b[j]<b[j+1]){data=b[j]; b[j]=b[j+1]; b[j+1]=data;}}第十一题:在数组a中有n=100个人围坐一圈并按顺时针方向从1到n编号,从第s=1个人开始进行从1到m=10的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止,现要求将出圈次序重新存入数组a中.void fun(int a[],int n,int s,int m) {int i,j,k,l,x;i=s-1; k=0; l=n;while(l>0){k++;if(k==m){x=a[i];for(j=i+1;j<n;j++) a[j-1]=a[j];a[n-1]=x;k=0; l--;}else i++;if(i==l) i=0;}}。

数组作业参考答案

数组作业参考答案

Company Logo
3、在主函数中输入n(1<n<=10)个数整数,编写函数实现将他们从大到小排序,在主函数中输出排好序的数。
Company Logo
4、输入一个正整数n和n阶矩阵a中的元素,如果a是上三角形,输出“YES”;否则,输出“NO”(上三角形矩阵,即主对角线以下的元素都为0,主对角线为从矩阵的左上角至右下角的连线)。
Company Logo
1、输入一个正整数n(1<n<=10),再输入n个整数,按逆序输出这些整数。(第1个数和最后一个数交换,以此类推)
参考答案
Company Logo
2、输入一个正整数n(1<n<=10),再输入n个整数,将最小值与第一个数交换,最大值和最后一个数交换,然后输出交换后的n个数。
Company Logo
7、编写程序,计算并输出1000以内的fiboቤተ መጻሕፍቲ ባይዱacci数。
答案1:(递归)
Company Logo
答案2:非递归
Company Logo
5、插入一个数,使原来排好序的数依然保持有序。
Company Logo
6、判断输入的一串字符是否为“回文”。例如:xyzzyx,abcba都是回文。 输入: Input a string:abcddcba Yes 输入: Input a string:abcddcb No
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用数组和函数两种方法从10个整数中把最小的数找出来,并与最前面的数对调, 指出最小的数原来的位置。

#include <stdio.h>void main( ){int i,j,a[10],k;for(i=0;i<=9;i++) scanf("%d",&a[i]);j=0;/*假设最小值是第0个元素*/for(i=1;i<=9;i++)if(a[i]<a[j]) j=i;if(j!=0){ k=a[0]; a[0]=a[j];a[j]=k;}printf("min number is:%d\n",a[0]);printf("the position is:%d\n", j);} #include <stdio.h>int f(int a[]){int i,j,k;j=0;/*假设最小值是第0个元素*/for(i=1;i<=9;i++)if(a[i]<a[j]) j=i;if(j!=0){ k=a[0]; a[0]=a[j];a[j]=k;}return j;}void main( ){int i,j,a[10];for(i=0;i<=9;i++) scanf("%d",&a[i]);j=f(a);printf("min number is:%d\n",a[0]);printf("the position is:%d\n", j);}已知5个数已经按由大到小排好序,请编程使得它们按由小到大排序。

(逆序)#include <stdio.h>void main( ){int a[5]={5,4,3,2,1},i,t;for (i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}for (i=0;i<5;i++)printf("%d",a[i]); } #include <stdio.h>void f(int a[]){int i,t;for (i=0;i<5/2;i++){t=a[i];a[i]=a[4-i];a[4-i]=t;}}void main(){int a[5]={5,4,3,2,1},i;f(a);for (i=0;i<5;i++)printf("%d",a[i]); }已知5个整数,已经由大到小排好序,现输入一个数,将其插入到该数组适当位置,使其仍然有序。

(定义并初始化、输入、查找、移动、插入)#include <stdio.h>void main( ){int a[6]={20,15,12,8,6};int i,k=9;if(k<=a[4]) a[5]=k;else{for (i=4;i>=0;i--)if(k>a[i]){a[i+1]=a[i];}else break;a[i+1]=k;}for (i=0;i<6;i++)printf("%d ",a[i]); } #include <stdio.h>void f(int a[],int k){int i;if(k<=a[4]) a[5]=k;else{for (i=4;i>=0;i--)if(k>a[i]){a[i+1]=a[i];}else break;a[i+1]=k;}}void main( ){int a[6]={20,15,12,8,6};int i;f(a,33);for (i=0;i<6;i++)printf("%d ",a[i]); }任输入20个正整数,找出其中素数,并按由小到大排序,打印输出素数,每5个数换一行。

#include <stdio.h>#include <math.h>void main( ){ int a[20],b[20],i,j,k,m;for(i=0;i<20;i++)scanf("%d",&a[i]);k=0;for(i=0;i<20;i++){ for( j=2;j<=a[i]-1;j++)if(a[i]%j==0) break;if(j>a[i]-1){ b[k]=a[i]; k++; }}for(i=0;i<k-1;i++)for(j=0;j<k-1-i;j++)if(b[j]<b[j+1]){ m=b[j];b[j]=b[j+1];b[j+1]=m;}for(i=0;i<k;i++){printf("%5d",b[i]);if((i+1)%5==0)printf("\n");}} #include <stdio.h>#include <math.h>int sushu(int a){ int j;int f=1;for( j=2;j<=sqrt(a);j++)if(a%j==0) {f=0;break;}return f;}int sushuarray(int a[],int b[]){ int k=0;int i;for(i=0;i<20;i++)if(sushu(a[i])==1){ b[k]=a[i]; k++; } return k;}void paixu(int b[],int k){ int i,j,m;for(i=0;i<k-1;i++)for(j=0;j<k-1-i;j++)if(b[j]>b[j+1]){ m=b[j]; b[j]=b[j+1]; b[j+1]=m; }}void main( ){ int a[20],b[20],i,k;for(i=0;i<20;i++)scanf("%d",&a[i]);k=sushuarray(a,b);paixu(b,k);for(i=0;i<k;i++){ printf("%5d",b[i]);if((i+1)%5==0)printf("\n");}}有一个2×3的矩阵,求每行最小值及每列的最小值。

#include <stdio.h>void main( ){int a[2][3],b[2],c[3],i, j;for(i=0;i<2;i++)for(j=0;j<3;j++)scanf("%d",&a[i][ j]);for(i=0;i<2;i++){ b[i]=a[i][0];for( j=1;j<3;j++)if(a[i][ j]<b[i]) b[i]=a[i][ j];}for(j=0;j<3;j++){ c[j]=a[0][j];for(i=1;i<2;i++)if(a[i][j]<c[j]) c[j]=a[i][j];}for(i=0;i<2;i++){for(j=0;j<3;j++)printf("%5d",a[i][j]);printf("%5d\n",b[i]);}for(i=0;i<3;i++)printf("%5d",c[i]);printf("\n");} #include <stdio.h>void f(int a[2][3],int b[2],int c[3]){int i,j;for(i=0;i<2;i++){ b[i]=a[i][0];for( j=1;j<3;j++)if(a[i][ j]<b[i]) b[i]=a[i][ j];}for(j=0;j<3;j++){ c[j]=a[0][j];for(i=1;i<2;i++)if(a[i][j]<c[j]) c[j]=a[i][j];}}void main( ){int a[2][3],b[2],c[3],i, j;for(i=0;i<2;i++)for(j=0;j<3;j++)scanf("%d",&a[i][ j]);f(a,b,c);for(i=0;i<2;i++){for(j=0;j<3;j++)printf("%5d",a[i][j]);printf("%5d\n",b[i]);}for(i=0;i<3;i++)printf("%5d",c[i]);printf("\n");}编一程序,将两个字符串连接起来法一:不用函数#include <stdio.h>void main(){char a[80],b[30];int i,j;gets(a);gets(b);for(i=0;a[i]!='\0';i++);for(j=0;b[j]!='\0';j++){a[i++]=b[j];}a[i]='\0';puts(a);puts(b);} 法二:用函数#include <stdio.h>void f(char a[],char b[]) {int i,j;for(i=0;a[i]!='\0';i++);for(j=0;b[j]!='\0';j++){a[i++]=b[j];}a[i]='\0';}void main(){char a[80],b[30];gets(a);gets(b);f(a,b); //puts(a);puts(b);}任输入十个国家的名字,按由小到大排序。

#include <stdio.h>#include <string.h>void main( ){ char a[10][20],b[20];int i,j;for (i=0;i<10;i++)gets(a[i]);for (i=0;i<9;i++)for (j=0;j<9-i;j++)if (strcmp(a[j],a[j+1])>0){ strcpy(b,a[j]);strcpy(a[j],a[j+1]);strcpy(a[j+1],b);}printf("paixu is :\n");for (i=0;i<10;i++)printf("%s\n",a[i]);} #include <stdio.h>#include <string.h>void f(char a[10][20]){ int i,j;char b[20];for (i=0;i<9;i++)for (j=0;j<9-i;j++)if (strcmp(a[j],a[j+1])>0){ strcpy(b,a[j]);strcpy(a[j],a[j+1]);strcpy(a[j+1],b);}}void main( ){ char a[10][20];int i;for (i=0;i<10;i++) gets(a[i]);f(a);printf("paixu is :\n");for (i=0;i<10;i++)printf("%s\n",a[i]);}有一篇三行文字的文章,每行最多80个字符,编写函数,由实参传递字符串,分别统计文章中大写字母、小写字母、数字、空格及其它字符的个数。

相关文档
最新文档