C语言数组典型例题分析与解答
C语言必背的典型程序设计题目 - 数组、函数-------参考答案
数组部分必须会编写的程序(参考答案)1、使用选择法、冒泡法对10个数进行排序,并输出排序前后的数列。
//选择法#include<stdio.h>void main(){int a[10]={12,45,7,8,96,4,10,48,2,46},n=10,i,j,t,temp;printf("Before sort:");for(i=0;i<10;i++){printf("%4d",a[i]);}printf("\n");//排序for(i=0;i<9;i++){t=i;for(j=i+1;j<10;j++){if(a[t]>a[j]){t=j;}}if(t!=i){temp=a[i];a[i]=a[t];a[t]=temp;}}printf("Aftere sorted:");for(i=0;i<10;i++){printf("%4d",a[i]);}printf("\n");}//冒泡法#include<stdio.h>void main(){int a[10]={12,45,7,8,96,4,10,48,2,46},n=10,I,j,t;printf(“Before sort:”);for(i=0;i<10;i++){printf("%4d",a[i]);}prtintf(“\n”);//排序for(i=0;i<=n-1;i++){for(j=0;j<i;j++)if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;}}printf(“Aftere sorted:”);for(i=0;i<10;i++){printf("%4d",a[i]);}prtintf(“\n”);}2、已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列。
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位评委参与评分工作。
数组经典题和解析
数组经典题和解析摘要:1.数组经典题概述2.数组经典题的解题思路3.数组经典题的解析方法4.数组经典题的实际应用正文:【数组经典题概述】数组经典题是计算机编程领域中的一种题型,主要涉及到数组元素的查找、排序、插入、删除等操作。
这类题目在面试、竞赛以及日常编程中都非常常见,熟练掌握数组经典题的解题方法能够帮助程序员更高效地解决实际问题。
本文将对数组经典题进行详细的解析,帮助大家更好地理解和掌握这类题目。
【数组经典题的解题思路】解决数组经典题的关键在于掌握一定的数据结构和算法知识。
对于大多数数组题目,通常可以从以下几个方面入手:1.确定数组元素的关系:分析数组中元素之间的关系,例如元素之间的顺序、大小关系等,这有助于快速找到解题思路。
2.选择合适的数据结构:根据题目要求,选择合适的数据结构进行操作,如链表、栈、队列等。
3.应用相应的算法:根据题目要求,应用相应的算法对数组进行操作,如冒泡排序、插入排序、快速排序等。
【数组经典题的解析方法】解析数组经典题时,可以采用以下几种方法:1.穷举法:对于一些简单的数组题目,可以尝试遍历所有可能的情况,找到符合题目要求的解。
2.递归法:将问题分解为规模更小的子问题,通过递归的方式求解。
3.迭代法:通过循环迭代的方式,逐步推导出问题的解。
4.贪心法:在满足题目要求的前提下,尽量选择最优解。
【数组经典题的实际应用】数组经典题在实际编程中有广泛的应用,例如:1.编程实现快速排序算法,对给定数组进行排序。
2.编写一个函数,实现数组元素的查找和替换。
3.设计一个程序,对给定数组进行插入排序。
4.实现一个数组去重功能,删除数组中的重复元素。
总之,掌握数组经典题的解题思路和方法,能够帮助程序员在面对实际问题时更加游刃有余。
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)的所有整数。
数组经典题和解析
数组经典题和解析(原创版)目录1.数组经典题概述2.数组经典题的解题技巧3.数组经典题解析示例正文【数组经典题概述】数组经典题是计算机编程领域中常见的一类题目,主要考察程序员对数组数据结构的掌握程度以及相应的算法应用能力。
数组作为一种重要的数据结构,其操作涵盖了诸多方面,如排序、查找、插入、删除等。
因此,掌握数组经典题的解题技巧,对于提高编程水平具有重要意义。
【数组经典题的解题技巧】1.分析题目,确定数组操作需求:首先要对题目进行仔细阅读和分析,明确题目所要求的数组操作类型,如排序、查找等。
2.选择合适的算法:根据题目需求,选择合适的算法进行实现。
例如,对于排序问题,可以选择冒泡排序、快速排序、归并排序等不同类型的排序算法;对于查找问题,可以选择顺序查找、二分查找等方法。
3.注意数组边界条件:在实现数组操作时,要特别注意数组的边界条件,避免出现数组越界等错误。
4.优化算法性能:在保证算法正确的前提下,要尽量优化算法的性能,提高程序的运行效率。
【数组经典题解析示例】例题:给定一个整数数组,求数组中任意两个数之差的绝对值不超过1 的元素个数。
解题思路:1.遍历数组,对于每个元素,判断其与相邻元素之差的绝对值是否小于等于 1,如果是,则计数器加 1。
2.返回计数器的值,即为满足条件的元素个数。
具体代码实现如下:```pythondef countElements(arr):count = 0for i in range(len(arr) - 1):if abs(arr[i] - arr[i + 1]) <= 1:count += 1return count```总之,掌握数组经典题的解题技巧,可以帮助程序员更好地应对各种编程挑战,提高编程水平。
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个数据交换。
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语言二维数组经典例题题目:有一个3×4的二维数组,求该二维数组中的最大元素及其所在的行和列。
#include <stdio.h>int main() {int arr[3][4] = {{1, 5, 3, 4},{9, 2, 7, 8},{6, 3, 5, 2}};int max = arr[0][0];int row = 0, col = 0;// 遍历二维数组for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {if (arr[i][j] > max) {max = arr[i][j];row = i;col = j;}}}printf("最大元素是 %d,位于第 %d行,第 %d列\n", max, row + 1, col + 1);return 0;}题目解析:1. 初始化二维数组- 首先定义并初始化了一个3×4的二维数组`arr`。
这个二维数组有3行4列,存储了一些整数元素。
2. 寻找最大元素- 先假设二维数组的第一个元素`arr[0][0]`为最大元素,将其赋值给变量`max`,并记录其行索引为0(`row = 0`),列索引为0(`col = 0`)。
- 然后使用嵌套的`for`循环遍历整个二维数组。
外层`for`循环控制行,内层`for`循环控制列。
- 在循环中,对于每个元素`arr[i][j]`,如果它大于当前的最大元素`max`,则更新`max`的值为`arr[i][j]`,同时更新`row`为当前行`i`,`col`为当前列`j`。
3. 输出结果- 根据找到的最大元素`max`以及其所在的行`row`和列`col`,输出结果。
需要注意的是,由于数组索引从0开始,而在实际生活中我们习惯从1开始计数行和列,所以在输出行和列的时候,我们输出`row + 1`和`col + 1`。
C语言练习3(数组)=参考解答
C语言(数组)一、选择题1. 设有程序:main(){ int i,a[11];printf("给数组赋值:\n");for (i=0;i<=10;i++)scanf("%d",( ));... ...printf("输出数组:\n");for(i=0;i<=10;i++)printf("%d,",( ));}则在程序中的两个园括号中分别应填入:CA) &a[i]和&a[i]B) a[i]和&a[i]C) &a[i]和a[i]D) a[i]和a[i]2. 设已定义:int a[15]; 则数组a占用的内存单元数是( C ).A) 15 B) 16 C) 30 D) 323. 阅读程序:main(){ int a[2]={0},i,j,k=2;for(i=0;i<k;i++)for(j=0;j<k;j++) a[j]=a[i]+1;printf("%d\n",a[k]);}以上程序的输出结果是( D ).A) 1 B) 3 C) 2 D) 不确定的值4. 阅读程序:f(int b[],int n){ int i,r=1;for(i=0;i<=n;i++) r=r*b[i];return r;}main(){ int x,a[]={2,3,4,5,6,7,8,9};x=f(a,3);printf("%d\n",x);}以上程序的输出结果是( D ).A) 720 B) 6 C)24 D) 1205. 以下定义语句中,错误的是( B ).A) int a[ ] = {6,7,8};B) int n=5, a[n];C) char a[ ]= "string";D) char a[5 ]={'0','1','2','3','4'};6. 以下描述中正确的是( D ).A) 数组名后面的常量表达式用一对圆括弧括起来B) 数组下标从1开始C) 数组下标的数据类型可以是整型或实型D) 数组名的规定与变量名相同7. 若定义数组并初始化char a[10]={'0','1 ','2','3','4','5','6','7','8','9'};指出以下错误语句( AB ).A) scanf("%c",a[0]);B) scanf("%s",&a);C) printf("%c",a[3]);D) printf("%s",a);8.若定义数组int a[10] ,其最后一个数组元素为( C ).A) a[0]C) a[9]D) a[10]9. 若定义数组并初始化int a[10]={ 1,2,3,4},以下语句哪一个不成立( B )?A) a[8] 的值为0B) a[1] 的值为1C) a[3] 的值为4D) a[9] 的值为010. 指出以下错误语句( A ).A) int n=10,a[n];B) int n,a[10];C) int a[10]={1,2,3};D) int a[10]={1,2,3,4,5,6,7,8,9,10};11. 请读程序:main(){int n[2],i,j,k;for(i=0;i<2;i++) n[i]=0;k=2;for(i=0;i<k;i++)for(j=0;j<k;j++) n[j]=n[i]+1;printf("%d\n",n[k]);}上面程序的输出结果是( A ).A)不确定的值 B)3 C)2 D)112. 若有以下的定义和语句:int str[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='e',则数值为2的表达式是( C ).A)str['g'-c] B)str[2] C)str['d'-'c'] D)str['d'-c]13. 设有数组定义:int a[5];则下列给数组元素赋值错误的是( B ).B) scanf("%c",a[3]);C) a[3]=getchar();D) a[3]='a'+3;14. 以下数组定义中错误的是( D ).A) #define N 30int a[N+30];B) #define N 30int a[N];C) int a[30];D) int a[N];15. 在定义一个一维数组时,不能用来表示数组长度的是( D ).A)常量 B)符号常量 C)常量表达式 D) 已被赋值的变量16. 若float型变量占用4个字节,有定义float a[20]={1.1,2.1,3.1};则数组a在内存中所占的字节数是( D ).A)12 B)20 C)40 D)8017. 设已定义:int x[2][4]={1,2,3,4,5,6,7,8}; 则元素x[1][1]的正确初值是( A ).A) 6 B) 5 C) 7 D) 118. 设有定义:int a[][3]={{1,2,3},{4,5,6},{7,8,9}}; 则a[1][2]的初值为( C ).A) 2 B) 4 C) 6 D) 819. 设有:int a[4][5]; 则数组a占用的内存字节数是( C ).A) 12 B) 24 C) 40 D) 2020. 以下数组定义中,不正确的是( B ).A) int b[3][4];B) int c[3][ ]={{1,2},{1,2,3},{4,5,6,7}};C) int b[200][100]={0};D) int c[ ][3]={{1,2,3},{4,5,6}};21. 定义数组:int x[2][3]; 则数组x 的维数是( 2 ).A) 1 B) 2 C) 3 D) 622. 若定义数组并初始化int b[2][3]= { 1,2,3,4,5,6},以下语句哪一个成立( C )?A) 表达式b[1][2]的值为1B) 表达式b[1][2]的值为4C) 表达式b[1][2]的值为6D) 表达式b[1][2]的值为223. 若定义数组并初始化int a[2][3]={{1,2,3},{4,5,6}};for(i=0;i<2;i++)for(j=0;j<3;j++)printf("%d",a[i][j]);语句的结果是哪一个( C )?A) 1,2,3,4,5,6B) 1 2 3 4 5 6C) 12345624. 若定义数组并初始化int a[2][3]= {{1,2, 3},{4,5,6}};以下语句哪一个不成立( B )?A) a数组中有6个元素B) a[2][3]是a数组的最后一个元素的引用C) a数组中每个元素都为整数D) a数组是整型数组25. 定义如下变量和数组:int i;int x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是( C ).for(i=0;i<3;i++) printf("%d",x[i][2-i]);A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 926. 如有以下定义:double s[][5]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};则数值为2的元素是( C ).A) s[1][3] B) s[0][3] C) s[0][2] D) s[1][2]27. 以下程序的输出结果是( A ).main(){int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;j<=i;j++)s+=a[i][j];printf("%d",s);}A) 18 B) 19 C) 20 D) 2128. 若已有char b[10][50];则该二维字符数组在内存所占字节数为( D ).A) 10 B)50 C)60 D)50029. 设有:char a[10]; 下列语句那个是正确的( D )?A) scanf("%s",a[0]);B) scanf("%s",&a);C) printf("%s",a[0])D) printf("%s",a)30. 阅读程序:main(){ char a[10];int i;for(i=1;i<=5;i++)scanf("%c",&a[i]);printf("%c",a[0]);}设从键盘输入字符串:abcde,则程序的输出结果是( C ).A) a B)空格 C)不确定D)031. 合法的数组定义是( D ).A) int a[ ] = "string";B) int a[5]={0,1,2,3,4,5};C) char a= "string";D) char a[ ]={'0','1','2','3'};32. 设有数组定义:char string[ ]="China";则数组string所占的空间为( B ).A) 5个字节B) 6个字节C) 7个字节D) 10个字节33. 定义字符数组c:char c[ ]={"c language"};数组c在内存中所占字节数是( C ).A) 9 B) 10 C) 11 D) 1234. 指出以下错误语句( C ).A) char a[10]={'0','1','2','3','4','5','6','7','8','9'};B) char a[10]={'0','1 ','2','3'};C) char a[2]= {"1","2"};D) char a[2]= {'a’,'b’};35. 若定义数组并初始化char a[10]={"hello"},该数组的元素个数是( A ).A) 10B) 5C) 6D) 736. 若定义数组并初始化char a[10]={"HELLO"},该数组的元素中 a[2]是( A ).A) 'L'B) 'E'C) 'H'D) 'O'37. 若定义数组并初始化int b[10]={ 1,2,3,4},以下哪几个语句成立( A C D)?A)b[8]的值为0B)b[1]的值为1C)b[3]的值为整数D)b[10]不是b数组中的元素38. 若定义数组int a[10];指出下列错误语句:ABCDA) a数组共有10个元素,其引用方法是:a[1],a[2]...a[10];B) a数组是整型数组,其元素自动初始化为0;C) a数组最后一个元素的引用方法是a[10];D) a数组第一个元素的引用方法是a[1];二、判断题1.数组是数目固定的若干变量的有序集合,数组中各元素的类型可以不同。
数组典型例题分析与解答
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个数据交换。
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以内的所有完数。
2.程序源代码:#include <stdio.h>#define N 10int main(){int i,j,max,tem,a[N];/*input data*/printf("please input ten num:\n"); for(i=0;i<N;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("\n");printf("Before sorted \n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");/*sort ten num*/for(i=0;i<N-1;i++){max=i;for(j=i+1;j<N;j++)if(a[max]<a[j]) max=j;if (max!=i){tem=a[i];a[i]=a[max];a[max]=tem;}}/*output data*/printf("After sorted \n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");return 1;}==================================== ==========================【程序4】题目:求一个3*3矩阵对角线元素之和1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
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语言中,指针数组经常用于存储一组字符串或一组指向不同类型对象的指针。
下面是一些经典的题目,对指针数组进行详细解析。
题目1:将一个字符串数组按字典排序。
解析:首先,我们声明一个指向字符串的指针数组,将字符串数组的每个元素赋值给指针数组的对应元素。
然后使用冒泡排序法对指针数组进行排序,最后按照排序后的顺序打印指针数组元素所指向的字符串。
```c#include <stdio.h>#include <string.h>#define MAX_LENGTH 100#define MAX_NUM 10void bubbleSort(char* arr[], int size) {for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - 1 - i; j++) {if (strcmp(arr[j], arr[j+1]) > 0) {char* temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}int main() {char* strings[MAX_NUM] = {"dog", "cat", "apple", "banana", "elephant", "fish", "goat", "zebra", "horse", "tiger"};int size = sizeof(strings) / sizeof(strings[0]);bubbleSort(strings, size);for (int i = 0; i < size; i++) {printf("%s\n", strings[i]);}return 0;}```题目2:将一个整数数组按升序排序。
数组经典题和解析
数组经典题和解析摘要:一、数组简介1.数组的概念2.数组在编程中的应用二、数组经典题解析1.求数组和2.求数组中最大值和最小值3.求数组中出现次数最多的元素4.求数组中缺失的元素5.求数组中重复的元素6.对数组进行排序7.查找数组中的元素三、结论1.数组在编程中的重要性2.提高数组处理能力的建议正文:一、数组简介数组是一种数据结构,用于存储一组相同类型的数据元素。
这些元素可以通过它们在数组中的位置(称为索引或下标)来访问。
数组在编程中被广泛应用,例如在计算机科学、数据处理、统计学等领域。
二、数组经典题解析1.求数组和给定一个整数数组,计算数组中所有元素的和。
这是一个简单的数组操作题,可以通过遍历数组,将每个元素累加到变量中来实现。
2.求数组中最大值和最小值找出数组中的最大值和最小值。
可以通过遍历数组,使用一个变量来保存最大值和最小值,然后在遍历过程中进行更新。
3.求数组中出现次数最多的元素找出数组中出现次数最多的元素。
可以使用一个哈希表(字典)来记录每个元素出现的次数,然后找出出现次数最多的元素。
4.求数组中缺失的元素给定一个整数数组,找出数组中缺失的元素。
可以通过对数组进行排序,然后遍历已排序的数组,检查元素是否在给定的范围内。
5.求数组中重复的元素找出数组中的重复元素。
可以通过创建一个新的空集合,遍历数组并将每个元素添加到集合中。
最后检查集合中的元素数量是否大于1,如果是,则表示找到了重复元素。
6.对数组进行排序对数组进行排序是一个常见的操作。
有多种排序算法可供选择,如冒泡排序、快速排序、插入排序等。
根据具体需求选择合适的排序算法。
7.查找数组中的元素给定一个数组和要查找的元素,判断元素是否存在于数组中。
可以通过遍历数组,比较元素和给定的值来查找。
如果找到了元素,返回其索引;否则返回-1。
三、结论数组在编程中具有重要的地位,掌握数组相关的操作和题目对于编程人员来说是必不可少的。
二级c语言程序设计习题及解答ch9数组
第九章数组一、选择题[9.1] 假设已定义: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))【解析】A:p开场是数组a首地址,只要p++那么再减去a的首地址a[p-a]就能取到所有元素,B:&a[i]循环取其地址,*(&a[i]) 是该地址中所存储的元素C:p就是指针变量,相当于a[i],D:*(a+i) 那么正确[9.2] 以下程序段数组所有元素输入数据,应在下划线填入的是A) a+(i++) B) &a[i+1] C) a+i D) &a[++i]main(){ int a[10],i=0;while(i<10) scanf("%d",_);}【解析】因为要遍历,所以排除B.C,因为D先加1再取值,丢了a[0][9.3] 以下程序的输出结果是A) 3 B) 4 C) 1 D) 2main(){ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;printf("%d\n",*(p+2)); }【解析】*p=a;p指向首地址,*(p+2))往后移动两个元素,指向3[9.4] 以下程序的输出结果是A) 不确定的值 B) 3 C) 2 D) 1main(){ 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]);}[9.5] 以下程序的输出结果是A)17 B)18 C)19 D)20main(){ 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);}【解析】p=&a[1]那么p指向元素为4,y+=*(p+x);相当于y=1+4+6+8=19[9.6] 以下程序的输出结果是A) 6 B) 8 C) 4 D) 2main(){ int a[]={2,4,6,8},*p=a,i;for(i=0;i<4;i++) a[i]=*p++;printf("%d\n",a[2]);}【解析】p=a,相当于重新把a中的容赋给a本身,所以a[2]=6[9.7] 以下程序的输出结果是A) 720 B) 120 C) 24 D) 6f(int b[],int n){ int i,r=1;for(i=0;i<=n;i++) r=r*b[i];return r;}main(){ int x,a[]={2,3,4,5,6,7,8,9};x=f(a,3);printf("%d\n",x);}【解析】调用x=f(a,3);for循环4次,将前四个元素相乘,即得r=2*3*4*5;[9.8] 以下程序中假设第一个printf语句输出的是194,那么第二个printf语句的输出结果是A) 212 B) 204 C) 1a4 D) 1a6 12main(){ int a[]={1,2,3,4,5,6,7,8,9,0},*p;p=a;printf("%x\n",p);printf("%x\n",p+9); }【解析】因为开场p的地址为194,p+9是指指针向后移动9个元素,而不是9个字节,每个int占2个字节,所以共移动18个字节,1个字节占一个存储单位,%x\n"是16进制,将18转化成16进制是12,所以194+12=2a6[9.9] 以下程序的输出结果是A) 0987654321 B) 4321098765 C) 5678901234 D) 0987651234fun(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},i,*p=a;fun(p,0,3); fun(p,4,9); fun(p,0,9);for(i=0;i<10;i++) printf("%d",*(a+i));}【解析】为了使大家清晰地看出fun(int *s,int n1,int n2)的作用,我自己完善了程序如下:#include <stdio.h>#include <stdlib.h>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},i,*p=a;fun(p,0,3);for(i=0;i<10;i++) printf("%d",*(a+i)); printf("\n");fun(p,4,9);for(i=0;i<10;i++) printf("%d",*(a+i));printf("\n");fun(p,0,9);for(i=0;i<10;i++) printf("%d",*(a+i));printf("\n");}结果如下:其实,fun(p,0,3);就是将a中的前4个元素倒序,fun(p,4,9); 就是将a中的第5个到第10个倒序,最后fun(p,0,9);全部元素倒序。
第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选项正确。
C语言经典编程实例+分析+答案
C语言程序实例+分析+答案【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++)/*以下为三重循环*/ for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}==============================================================【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
C语言知识学习数组理解练习及答案解析
第四部分数组4.1 选择题1. 以下关于数组的描述正确的是(c )。
A. 数组的大小是固定的,但可以有不同的类型的数组元素B. 数组的大小是可变的,但所有数组元素的类型必须相同C. 数组的大小是固定的,所有数组元素的类型必须相同D. 数组的大小是可变的,可以有不同的类型的数组元素2. 以下对一维整型数组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];3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(c )。
A. 整型常量B. 整型表达式C. 整型常量或整型表达式D. 任何类型的表达式4. 以下对一维数组m进行正确初始化的是(c )。
A. int m[10]=(0,0,0,0) ;B. int m[10]={ };C. int m[ ]={0};D. int m[10]={10*2};5. 若有定义:int bb[ 8];。
则以下表达式中不能代表数组元bb[1]的地址的是(c )。
A. &bb[0]+1B. &bb[1]C. &bb[0]++D. bb+16. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是(d )。
A. 3B. 6C. 10D. 207. 若有以下说明:int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a',d,g;则数值为4的表达式是(d )A. a[g-c]B. a[4]C. a['d'-'c']D. a['d'-c]8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入(a )。
#include<stdio.h>main(){int a[10],i=0;while(i<10) scanf("%d",________ );┇}A. a+(i++)B. &a[i+1]C. a+iD. &a[++i]9. 执行下面的程序段后,变量k中的值为(a )。
C语言编程数组应用实例面试题解析
C语言编程数组应用实例面试题解析在面试过程中,经常会遇到关于C语言数组的应用实例题。
掌握数组的使用方法对于想要在面试中脱颖而出的程序员来说至关重要。
下面将以一组常见的C语言数组应用实例面试题为例进行解析,帮助读者更好地理解和掌握数组的使用。
1. 题目一:反转数组题目描述:编写一个函数,实现将给定数组中的元素反转。
题目分析:反转数组是一个常见的面试题,可以通过交换首尾元素的方式实现。
需要注意的是数组的长度以及奇偶性。
解题思路:定义两个指针,一个指向数组的首元素,一个指向数组的尾元素。
通过循环交换两个指针所指向的元素,并且首指针向后移动,尾指针向前移动,直到两个指针相遇。
代码示例:```cvoid reverseArray(int arr[], int length) {int start = 0, end = length - 1;while (start < end) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}}```2. 题目二:合并两个有序数组题目描述:编写一个函数,实现将两个有序数组合并为一个有序数组。
题目分析:合并有序数组需要考虑两个数组的长度以及如何确定元素的插入位置。
解题思路:定义三个指针,一个指向第一个数组的末尾,一个指向第二个数组的末尾,一个指向合并后的数组的末尾。
从后往前遍历两个数组,将较大的元素依次插入合并后的数组中。
代码示例:```cvoid mergeArrays(int arr1[], int length1, int arr2[], int length2, int merged[]) {int i = length1 - 1, j = length2 - 1, k = length1 + length2 - 1;while (i >= 0 && j >= 0) {if (arr1[i] >= arr2[j]) { merged[k] = arr1[i]; i--;} else {merged[k] = arr2[j]; j--;}k--;}while (i >= 0) {merged[k] = arr1[i]; i--;k--;}while (j >= 0) {merged[k] = arr2[j]; j--;k--;}}```3. 题目三:删除重复元素题目描述:编写一个函数,实现从数组中删除重复的元素,并返回删除后的数组长度。
数组c习题答案解析
习题 4一、单项选择题1. 若有说明 int a34;则a数组元素的非法引用是A. a021B. a13C. a4-20D. a04答案 D解析数组下标从0开始;a04的列下标越界..2. 在C++语言中;引用数组元素时;其数组下标的数据类型允许是A. 整型常量B. 整型表达式C. 整型常量或整型表达式D. 任何类型的表达式答案 C3. 以下不正确的定义语句是A. double x5={2.0;4.0;6.0;8.0;10.0};B. int y5={0;1;3;5;7;9};C. char c1={′1′;′2′;′3′;′4′;′5′};D. char c2={′\x10′;′\xa′;′\x8′};答案 B解析初始值的个数大于数组的大小;系统会出现编译错误..4. 对以下说明语句的正确理解是int a10={6;7;8;9;10};A. 将5个初值依次赋给a1至a5B. 将5个初值依次赋给a0至a4C. 将5个初值依次赋给a6至a10D. 因为数组长度与初值的个数不相同;所以此语句不正确答案 B5. 若有说明:int a 4={0;0};则下面不正确的叙述是A. 数组a的每个元素都可得到初值0B. 二维数组a的第一维大小为1C. 当初值的个数能被第二维的常量表达式的值除尽时;所得商数就是第一维的大小D. 只有元素a00和a01可得到初值;其余元素均得不到确定的初值答案 D解析二维数组初始化时;行大小可以省略;被省略的大小根据初值的个数系统来确定;本题中;有2个初值说明是1行4列;所以第一维为1..元素a00和a01赋初值为0 ;其余元素初值系统默认为0..6. 以下能对二维数组c进行正确的初始化的语句是A. int c3={{3};{3};{4}};B. int c3={{3};{3};{4}};C. int c32={{3};{3};{4};{5}};D. int c3={{3};{};{3}};答案 B解析二维数组初始化时;行大小可以省略;列大小不可以省略;所以A答案错误..C答案中初始值行数多于数组大小中的行大小;也是错误的..另外初始化时;初值之间不能有空位置;故D错误..7. 以下不能对二维数组a进行正确初始化的语句是A. int a23={0};B. int a3={{1;2};{0}};C. int a23={{1;2};{3;4};{5;6}};D. int a3={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;fori=1;i<7;i++{t=ci;j=i-1;whilej>=0 && t>cj{cj+1=cj;j--;}cj+1=t;}fori=0;i<7;i++cout<<ci<<'\t';putchar'\n';return 0;}A. 对数组元素的升序排列B. 对数组元素的降序排列C. 对数组元素的倒序排列D. 对数组元素的随机排列答案 B解析每层外层for循环结束会增加对一个元素的排序;确定c0 ;c1的大小顺序;如图4-1所示..图4-1 第一次排序第二次将c2分别与前2两个元素比较;插入最前面;确定c0 ;c1; c2 的大小顺序;如图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 c3B. float c3;4C. double c34D. float c34答案 C12. 已知:int c34;则对数组元素引用正确的是A. c14B. c1.50C. c1+00D. 以上表达都错误答案 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 a3={1;2;3;4;5;6;7};则a数组第一维的大小是________..答案 32. 设有数组定义: char array="China"; 则数组 array所占的空间为________个字节..答案 63. 假定int类型变量占用两个字节;其有定义:int x10={0;2;4};;则数组x在内存中所占字节数是________..答案 204. 下面程序的功能是输出数组s中最大元素的下标;请填空..include<iostream>using namespace std;int main{ int k; p;s={1; -9; 7; 2; -10; 3};forp =0; k =p; p< 6; p++ifsp>sk ________cout<< k<<endl;return 0;}答案 k=p;5. 下面程序是删除输入的字符串中字符′H′;请填空..include<iostream>using namespace std;int main{ char s80;int i;j;getss;fori=j=0;si=′\0′;i++ifsi=′H′{________}sj=′\0′;putss;return 0;}答案 sj++ =si;解析此处相当于补充了2条语句;等价于sj =si; j++;..6. 已知:char a20= "abc";b20= "defghi";则执行cout<<strlenstrcpya;b;语句后的输出结果为________..答案 67. 有如下定义语句:int aa3={12;23;34;4;5;6;78;89;45};;则45在数组aa中的行列坐标各为________..答案 2和28. 若二维数组a有m列;则计算任一元素aij在数组中相对位置的公式为假设a00位于数组的第一个位置上 ________..答案 im+j+19. 定义如下变量和数组:int k;int a33={9;8;7;6;5;4;3;2;1};则语句fork=0;k<3;k++ cout<<akk;的输出结果是________..答案 951解析定义的二维数组可以描述一个方阵:9 8 76 5 43 2 1语句功能是实现该方阵主对角线上元素的输出..10. 已知:char a15;b15={"I love china"};则在程序中能将字符串I love china赋给数组a的语句是________..答案 strcpya;b;三、读程序写结果1. 程序代码如下include<iostream>using namespace std;int main{char arr24;strcpyarr0;"you";strcpyarr1;"me";arr03='&';cout<<arr0<<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=sizeofa;j=strlena;cout<< i <<";"<<j<<endl;return 0;}答案 9;83. 程序代码如下:include<iostream>using namespace std;int main{int i;int a33={1;2;3;4;5;6;7;8;9};fori=0;i<3;i++cout<<a2-ii;return 0;}答案 753解析程序功能是实现一个方阵次对角线上元素的输出..4. 程序代码如下:include<iostream>using namespace std;int main{char a30="nice to meet you";strcpya+strlena/2;"you";cout<<a<<endl;return 0;}答案nice to you5. 程序代码如下:include<iostream>using namespace std;int main{int k30={12;324;45;6;768;98;21;34;453;456};int count=0;i=0;whileki{ifki%2==0||ki%5==0count++;i++;}cout<< count <<";"<<i<<endl;return 0;}答案8;106. 程序代码如下:include<iostream>using namespace std;int main{char a30;b30;int k;getsa;getsb;k=strcmpa;b;ifk>0 putsa;else ifk<0 putsb;return 0;}输入loveChina输出结果是答案love解析 strcmpa;b函数功能是比较a和b字符串的大小;比较是逐个字符的比较;比较方法是ASCII码值做减法;k='l'-'C'>;所以结果输出字符串a..四、编程题1.编程实现功能:删去一维数组中所有相同的数;使之只剩一个..数组中的数已按由小到大的顺序排列;函数返回删除后数组中数据的个数..例如;若一维数组中的数据是:2 2 234 456 6 6 67 789 9 10 10 10删除后;数组中的内容应该是:2 3 4 5 6 7 8 9 10..思路:fun函数的2个形式参数;分别接收数组名;即数组的首地址;和数组中存放的原始数据的个数;fun函数对原始数组按题目处理后;在主函数中输出的数组a就是处理后的数组;这里函数之间参数传递属于地址传递..程序代码如下:include<iostream>using namespace std;const N=80;int funint a; int n{ int i;j=1;fori=1;i<n;i++ifaj-1=ai aj++=ai;return j;}int main{ int aN={ 2;2;2;3;4;4;5;6;6;6;6;7;7;8;9;9;10;10;10}; i; n=19;cout<<"原始数组中的数据是:"<<endl;fori=0;i<19;i++cout<<ai<<" ";n=funa;n;cout<<"\n删除后;数组中的数据是:"<<endl;fori=0;i<n;i++cout<<ai<<" ";cout<<endl;return 0;}2.编程实现功能:从键盘上输入若干个学生的成绩;当输入负数时表示输入结束;计算学生的平均成绩;并输出低于平均分的学生成绩..思路:使用循环输入学生的成绩;注意循环条件有2个;分别是输入成绩个数大于数组的大小和输入成绩为负数时结束;同时记录输入成绩的个数n..结束输入后;计算平均值和筛选小于60分的成绩并输出..程序代码如下:include<iostream>using namespace std;int main{ const N=800;float xN;sum=0;ave;a;int n=0;i;cout<<"输入学生成绩:"<<endl;cin>>a;while a>=0 && n<N{ sum+=a;xn=a;n++;cin>>a;}cout<<"输入的"<<n<<"名学生成绩为:"; for i=0; i<n; i++cout<<xi<<" ";cout<<endl;ave=sum/n;cout<<"平均分:"<<ave<<endl;cout<<"低于平均分的成绩:";for i=0; i<n; i++if xi<ave cout<<xi<<" ";cout<<endl;return 0;}3.编程实现功能:对从键盘上输入的两个字符串进行比较;然后输出两个字符串中第一个不相同字符的ASCII码值之差..例如:输入的两个字符串分别为abcdefg和abceef;则输出为-1..思路:题目要求实现的功能;相当于字符串处理函数strcmp的功能;即:图4-3 字符串比较示意图使用循环逐个比较两个字符串的每个字符;当字符出现不相等时;跳出循求不相同的两个字符的ASCII码值的差输出..程序代码如下:include<iostream>using namespace std;include "string.h"int main{ char str180; str280;c; int i=0;s;gets str1;gets str2;while str1i==str2i && str1i= '\0'i++;s= str1i-str2i;cout<<s<<endl;return 0;}4.编程实现功能:求二维数组周边元素之和..思路:二维数组中的数据可以看成一个二维矩阵;例如下面的二维数组;输出周边元素之和为:sum=48;用两个并列的for循环实现求累加和..1 2 3 42 3 4 53 4 5 64 5 6 7程序代码如下:include<iostream>using namespace std;include "string.h"const M=4;const N=4;int main{ int aMN;i;j;sum=0;for i=0; i<M; i++for j=0; j<N; j++cin>>aij;for i=0; i<N; i++ /求第1行和第4行元素和/{ sum+=a0i;sum+= aM-1i;}for i=1; i<M-1; i++ /求第1列和第4列元素和;但不包括a00; a30; a03; a33四个角上的元素/{ sum+=ai0;sum+= aiN-1;}cout<<"二维数组周边元素之和为:"<<sum<<endl;return 0;}5. 编程求出3阶方阵的两条对角线上元素之和..程序代码如下:include<iostream>using namespace std;int main{ int arr33={0;2;2;3;4;4;5;6;6};a=0;b=0;i;j;fori=0;i<3;i++forj=0;j<3;j++ /求主对角线上元素和/ifi==ja=a+arrij;fori=0;i<3;i++ /求次对角线上元素和/forj=2;j>=0;j--ifi+j==2b=b+ arrij;cout<<"主对角线元素和为:"<<a<<endl;cout<<"次对角线元素和为:"<<b<<endl;return 0;}6.编程序求Fibonacci 数列的前10项;并按每行3个数的格式输出该数列..Fibonacci 数列的定义为:程序代码如下:include<iostream>include<iomanip>using namespace std;int main{ int i;long f10={1;1};for i=2; i<30; i++fi=fi-2+fi-1;for i=0; i<10; i++{ ifi%3==0 cout<<"\n";cout<<setw12<<fi;}1 n=11 n=2fcout<<endl; return 0;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组练习解答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步后的排列41 114 232 423 3【答案】l、2、4、34 用"选择排序法"对n个数据排序,需要进行n-1步。
其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。
现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是______________________。
【分析】开始排序前的排列为:413 2执行第1步后的排列为:143 2执行第2步后的排列为:123 4【答案】1、2、3、45 下列数组定义语句中,正确的是()①int a[][]={1,2,3,4,5,6};②char a[2]「3]='a','b';③int a[][3]= {1,2,3,4,5,6};④static int a[][]={{1,2,3},{4,5,6}};【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④是错误的。
C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也是错误的。
显然备选答案③符合题意。
【答案】③6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句是()①char s[]={‘1','2','3','\0 '};②char s「」={"123"};③char s[]={"123\n"};④char s[4]={'1','2','3'};【分析】备选答案①中省略了数组长度,所以每个元素都赋了初值,共计4个元素,初值依次为'l'、'2'、'3'、'\0',最后一个元素的值为字符串结束标记,所以数组S中存放的是字符串"123",该答案不符合题意(即正确的);备选答案③中直接赋予字符串作为初值所以数组s的长度为4,其中的初值是字符串"123",不符合题意(即正确的);备选答案③中也是给数组s赋予字符串的初值,但是字符串不是"123",而是"123\n",所以该答案符合题意(即错误的);显然答案④也不符合题意(即正确的)。
下面来分析答案④为什么是正确的,该答案给出了数组长度为4,赋初值时仅给前3个元素赋予字符'1 '、'2'、'3',第4个元素没有赋初值,按照C语言的规定,也有初值,且初值为空值,对字符型数组来说,空值就是'\0',即字符率结束标记,所以数组S中存放的也是字符串" 123"。
【答案】③7 设有下列数据定义语句,则数组元素x[i]的值是__________________。
int i=3,x[4]={ 1,2,3};【分析】由于i的初值为3,所以x[i]就是x[3]。
由于数组的下标是从0开始的,所以x[3]实际上是数组x的第4个元素。
从定义语句中可以看出数组x的前3个元素的初值依次为1、2、3,第4个元素没有赋初值,其初值自动设为空值,对整型数组来说,空值是0,显然x[3」的值是0.【答案】08 设有下列数据定义语句,则puts(&s[0][0])的输出结果是__________;puts(s[0]〕输出结果是_____________。
char s[4][5]={{'l','\0'},{"23"},"345","4\0"};【分析】首先分析字符型数组s的初值,s的第1行中存放的字符串是"1"、第2行中存放的符串是"23"、第3行中存放的字符串是"345"、第4行中存放的字符串是"4"。
puts()函数的功能是输出从"参数"处开始存放的字符串中有效字符。
按照上的分析,第1个输出的结果是从"&S[0][0]"开始的字符串,这个地址对应的就是数s的第1行,所以输出结果为1;第2个输出的结果是从“s[]”开始的字符串,这个址对应的也是数组s的第1行,所以输出结果也为1。
【答案】 119 设有下列数据定义语句:char a[4][10]={"11","22","33","44"};则puts(strcat(a[1],a[3]))的输出结果是________________;putS(strcpy(a[0],a[2]))的输出结果是________________。
【分析】字符数组a共有4行,每行存放一个字符串。
这4行的首地址依次为:a[0]、a[1]、a[2]、a[3],从这4个地址开始存放的字符串依次为:"11"、"22"、"33"、"44"。
strcat(a[1],a[3])函数调用的功能是将s[3]处的字符串连接到a[l]的字符串后面,所以执行该函数调用后的a「l」处的字符串为"2244",而该函数的返回值就是a[1]的首地址,puts()函数的功能就是输出这个地址存放的字符串,由此,第1个输出的结果就是:2244。
同样理由可以分析strcpy(a[0],a[2])的功能是将a[2]处的字符串("33")复制到a[0]处,返回a[0]的地址,puts()输出的就是a[0]处的字符串,结果为:33。
【答案】2244 3310 设有下列数据定义语句:char str[2][10]={"abc","ABC"};则printf("%d",strcmp(str[1],str[0]))的输出结果是__________;printf("%d",strcmp(strlwr(str[1],str[0])),str[0]))的输出结果是_______。
【分析】字符型数组str中,从str[0]开始存放的字符串是"abc"、从str[l]开始存放的字符串是"ABC"。
strcmp(str[l],str[0])是比较str[l]和str【0」处的两个字符串的大小,由于"ABC"是小于"abc"的,按照srrcmp函数的功能可知,返回值是一个小于0的整数,这是第1个空的答案。
再来分析第2个空的答案,strlwr(str[l])函数的功能是将str[l]处的字符串写字母改为小写字母,其返回值是修改后字符串的地址。
strcmp(stlwr(sir[1]),str[0]))函数的功能是比较str[l]和str[0]处的字符串,由于str[l]处的字符串已经改为小写字母了,所以和str[0]处的字符串完全相同,返回值是0,这就是第2个空的答案。
[答案]某个小于0的任意整数011 下列程序的功能是读取10个实数,然后依次输出前l个实数和、前2个实数和、…、前9个实数和、前10个实数和。
请填写程序中缺少的语句。
main(){float f[10],X=0.0;int i;for(i=0;i<10;i++)scanf(" %f",&f[i]);for(i=1;i<=10;i++){_______________________printf("sum of NO %2d----%f\n",i,x);}}【分析】浏览程序清单后,可以发现前一个次数型循环是输入10个实数存入数组f中。
后一个次数型循环是计算前i个实数和并存入变量X中,然后再输出这个x的值。
程序中所缺少的语句就是实现"计算前i个实数和并存入变量X中"的。
当i等于1时,x要等于f[0]的值,即f[i-l]的值;当i等于2时,x要等于f[0] +f[l]的值,即f[0]+f[i-1」的值,此时f[0]的值已经计算并存入变量x中;当i等于3时,x要等于f[0]+f[1]+f[2]的值,即f[0]+f[1]+f[i-l]的值,此时f[0]+f[1]的值已经计算并存入变量x中;由此可以推出:前i个值的计算公式为:x=x+f[i-1],将这个表达式组成语句就是需要填写的容。
【答案】x=x+f[i-l];或x+=f[i-l];12 运行下列程序的输出结果是()①111ll②llll③lll④222main(){int a[]={1,2,3,4,5 },i;for(i=1;i<5;i++)printf("%1d",a[i]-a[i一1]);}【分析】首先分析数组a各元素的值,由于是赋初值,很容易看出:a[0]=1、a[1]=2…、a[4]=5。