C语言数组例题

合集下载

C语言专题编程练习——数组

C语言专题编程练习——数组

编程练习4 ——数组1. 随机数数组输出。

要求:产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。

输出结果:2. 求数组最大值、最小值、总和、平均数。

要求:产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。

求该数组的最大值、最小值、总和和平均值并输出。

输出结果:3. 冒泡法排序。

要求:产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。

按照升序排列并输出。

输出结果:4. 选择法排序。

输出结果:同上5. 比较法排序。

输出结果:同上6. 数组逆序输出要求:产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。

编程将逆序数组输出。

输出结果:7. 数组插数。

要求:产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。

按照升序排列并输出。

再输入一个数,按照原来的规律将其插入并输出。

输出结果:8. 用数组输出Fibonacci数列的前40项。

要求:每行输出5个元素,每个元素10位。

输出结果:(略)9. 用筛选法求100以内的素数。

输出结果:10. 数组查找。

要求:产生一个由15个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。

按照升序排列并输出。

再输入一个数,要求找出该数是数组中的第几个元素,如果不在数组中,输出找不到。

11. 二维数组行列互换。

要求:将一个二维数组(3行4列)的行和列互换(转置),存到另一个二维数组(4行3列)中并输出。

输出结果:12. 编程输出杨辉三角(要求输出10行)。

输出结果:13. 编程输入5阶魔方阵。

输出结果:14. 找出一个二维数组中的鞍点。

要求:即该位置上的元素在该行最大,在该列最小。

可能没有鞍点。

输出结果:15. 输入一行字符,统计大写字母、小写字母、数字、空格以及其他字符个数。

输出结果:16. 编写程序实现strcat函数功能。

输出结果:17. 编写程序实现strcpy函数功能。

C语言练习3(数组)=参考答案

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]B) a[1]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 ).A) a[3]=93;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.数组是数目固定的若干变量的有序集合,数组中各元素的类型可以不同。

C语言 数组有答案

C语言  数组有答案

一、选择题1. 以下对一维整型数组a的正确说明是。

A.int a(10); B.int n=0, a[n];C.int n;scanf(“%d”,&n);int a[n]; D.#define SIZE 10 int a[SIZE]2. 若有说明:int a[10]; ,则对a数组元素的正确引用是。

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

A.int a[10]=(0, 0, 0, 0, 0); B.int a[10]={ };C.double a[ ][4]; D.int a[10]={10*1};4. 以下对二维数组a的正确说明是。

A.int a[3][ ]; B.float a(3,4); C.double a[ ][4]; D.float a(3)(4); 5. 若有说明:int a[3][4]; 则对a数组元素的正确引用是。

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

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,0},{ },{1,1}};7. 下面程序段(每行代码前面的数字表示行号)。

1 int a[3]={3*0};2 int i3 for(i=0; i<3; i++) scanf(“%d”,&a[i]);4 for(i=1; i<3; i++) a[0]=a[0]+a[i];5 printf(“%d\n”,a[0]);A.第1行有错误B.第5行有错误C.第3行有错误D.没有错误8. 若有定义float x[4]={1.3, 2.4, 5.6},y=6; 则错误的语句是。

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;}}。

c语言数组编程题目

c语言数组编程题目

c语言数组编程题目含详解共5道1. 计算数组元素的和编写一个程序,计算给定数组中所有元素的和。

```c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int sum = 0;for (int i = 0; i < n; ++i) {sum += arr[i];}printf("数组元素的和: %d\n", sum);return 0;}```2. 查找数组中的最大值和最小值编写一个程序,查找给定数组中的最大值和最小值。

```c#include <stdio.h>int main() {int arr[] = {5, 2, 8, 1, 4};int n = sizeof(arr) / sizeof(arr[0]);int max = arr[0];int min = arr[0];for (int i = 1; i < n; ++i) {if (arr[i] > max) {max = arr[i];}if (arr[i] < min) {min = arr[i];}}printf("最大值: %d\n", max);printf("最小值: %d\n", min);return 0;}```3. 反转数组元素的顺序编写一个程序,反转给定数组的元素顺序。

```c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int temp;for (int i = 0; i < n / 2; ++i) {temp = arr[i];arr[i] = arr[n - i - 1];arr[n - i - 1] = temp;}printf("反转后的数组: ");for (int i = 0; i < n; ++i) {printf("%d ", arr[i]);}return 0;}```4. 删除数组中的指定元素编写一个程序,删除给定数组中的指定元素。

c语言二维数组经典例题

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语言练习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.数组是数目固定的若干变量的有序集合,数组中各元素的类型可以不同。

c语言经典题目100题

c语言经典题目100题

1.寻找数组中的最大值和最小值2.寻找数组中的中位数3.查找数组中给定元素的索引4.反转数组5.合并两个升序数组6.移位数组7.查找两个数组的交集8.查找两个数组的并集9.查找两个数组的差集10.寻找数组中的众数11.寻找数组中的缺失元素12.寻找数组中的重复元素13.计算数组的和14.计算数组的平均值15.计算数组的方差16.计算数组的标准差17.比较两个数组是否相等18.复制数组19.排序数组20.搜索数组(线性搜索)21.搜索数组(二分搜索)22.插入元素到数组23.删除元素到数组24.更新数组中的元素25.创建动态数组26.释放动态数组27.字符串复制28.字符串连接29.字符串比较30.字符串搜索31.字符串替换32.字符串分割33.字符串反转34.字符串大小写转换35.字符串修剪36.计算字符串长度37.字符串格式化38.链表创建39.链表插入40.链表删除41.链表搜索42.链表反转43.链表排序44.链表合并45.链表复制46.链表释放47.树创建48.树插入49.树删除50.树搜索51.树反转52.树排序53.树合并54.树复制55.树释放56.堆创建57.堆插入58.堆删除59.堆搜索60.堆反转61.堆排序62.堆合并63.堆复制64.堆释放65.图创建66.图插入67.图删除68.图搜索69.图反转70.图排序71.图合并72.图复制73.图释放74.队列创建75.队列插入76.队列删除77.队列搜索78.队列反转79.队列排序80.队列合并81.队列复制82.队列释放83.栈创建84.栈插入85.栈删除86.栈搜索87.栈反转88.栈排序89.栈合并90.栈复制91.栈释放92.哈希表创建93.哈希表插入94.哈希表删除95.哈希表搜索96.哈希表反转97.哈希表排序98.哈希表合并99.哈希表复制100.哈希表释放。

C语言习题集合4(数组)

C语言习题集合4(数组)

第四部分数组4.1 选择题1。

以下关于数组的描述正确的是( ).A. 数组的大小是固定的,但可以有不同的类型的数组元素B. 数组的大小是可变的,但所有数组元素的类型必须相同C。

数组的大小是固定的,所有数组元素的类型必须相同D. 数组的大小是可变的,可以有不同的类型的数组元素2. 以下对一维整型数组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];3。

在C语言中,引用数组元素时,其数组下标的数据类型允许是( )。

A。

整型常量B. 整型表达式C. 整型常量或整型表达式D。

任何类型的表达式4。

以下对一维数组m进行正确初始化的是( )。

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]的地址的是( )。

A. &bb[0]+1 B。

&bb[1] C. &bb[0]++ D. bb+16。

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

3 B。

6 C。

10 D. 207. 若有以下说明:int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a’,d,g;则数值为4的表达式是( )A。

a[g—c] B。

a[4] C。

a['d'—’c'] D. a['d'-c]8。

以下程序段给数组所有的元素输入数据,请选择正确答案填入( )。

#include〈stdio。

h〉main(){int a[10],i=0;while(i〈10) scanf(”%d",________ );┇}A。

数组c语言试题库及答案

数组c语言试题库及答案

数组c语言试题库及答案1. 请解释C语言中数组的概念。

答:在C语言中,数组是一种数据结构,它允许将多个相同类型的数据项存储在连续的内存位置。

数组可以是一维的,也可以是多维的。

2. 如何声明一个整型数组?答:声明一个整型数组的语法是 `int array_name[size];`,其中`array_name` 是数组的名字,`size` 是数组中元素的数量。

3. 请写出一个程序,用于计算一个整型数组中所有元素的和。

```c#include <stdio.h>int main() {int array[] = {1, 2, 3, 4, 5};int sum = 0;for(int i = 0; i < 5; i++) {sum += array[i];}printf("Sum of array elements: %d\n", sum);return 0;}```4. 如果一个数组的元素数量是动态的,应该如何声明?答:在C语言中,可以使用指针来处理动态数组。

声明方式为`int *array_name;`,然后在程序中使用 `malloc` 或 `calloc` 函数分配内存。

5. 请解释数组的索引。

答:数组的索引是从0开始的,它表示数组中元素的位置。

例如,对于一个名为 `array` 的数组,`array[0]` 是数组的第一个元素。

6. 如何初始化一个整型数组?答:可以使用花括号 `{}` 来初始化数组,例如 `int array[] = {1, 2, 3, 4, 5};`。

7. 请写出一个程序,用于交换数组中的两个元素。

```c#include <stdio.h>int main() {int array[] = {1, 2, 3, 4, 5};int temp;int index1 = 1; // 第二个元素int index2 = 3; // 第四个元素temp = array[index1];array[index1] = array[index2];array[index2] = temp;for(int i = 0; i < 5; i++) {printf("%d ", array[i]);}return 0;}```8. 在C语言中,数组的元素可以是什么数据类型?答:数组的元素可以是任何数据类型,包括整型、浮点型、字符型、结构体等。

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

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

一、单选题1、下列描述中不正确的是()A.字符串的结束符是'\0'。

B.可以对字符型数组进行整体输入、输出。

C.字符型数组中能存放字符串。

D.字符串函数声明在ctype.h中。

正确答案:D2、下面是有关C语言字符数组的描述,其中错误的是()A.不可以用赋值语句给字符数组名赋字符串B.可以用输入语句把字符串整体输入给字符数组C.字符数组只能存放字符串D.字符数组中的内容不一定是字符串正确答案:C3、下面是对数组s的初始化操作,其中不正确的是()A.char s[5]= " ";B.char s[5]={'a'};C.char s[5]={"a"};D.char s[5]= "abcdef";正确答案:D4、下面叙述正确的是()A.字符串"123 "与"123"相等。

B.字符串"123"小于字符串"2"。

C.两个字符串所包含的字符个数不相同时,才能进行大小比较。

D.字符个数多的字符串比字符个数少的字符串大。

正确答案:B5、下面程序段的输出结果是()char a[7]=“123456”;char b[4]=”ABC”;strcpy(a,b);printf(“%c”,a[5]);A.\0B.C.5D.6正确答案:D6、以下对二维数组a的正确说明是__。

A.double a[1][4];B.float a(3)(4);C. floatf a(3,4);D. int a[3][];正确答案:A7、以下能对二维数组a进行正确初始化的语句是__。

A. int a[][3]={{1,2,3},{4,5,6}};B.int a[2][]={{1,0,1},{5,2,3}};C.int a [2][4]={{1,2,3},{4,5},{6}};D. int a[][3={{1,0,1},{},{1,1}};正确答案:A8、若有说明: int a[3][4]={0};则下面正确的叙述是__。

C语言数组百道练习题含答案

C语言数组百道练习题含答案

C) int a(10);
D)#define SIZE 10
int a[SIZE];
6.3 若有说明:int a[10];则对数组元素的正确引用是 D 。 A)a[10] B)a[3,5] C)a(5) D)a[10-10]
6.4 在 C 语言中,一维数组的定义方式为:类型说明符 数组名 D 。
A)[常量表达式]
6.18 下面程序有错误的行是 D (行前数字表示行号)。
1 main() 2{ 3 int a[3]={0}; 4 int i; 5 for(i=0;i<3;i++) scanf("%d",&a[i]); 6 for(i=1;i<4;i++) a[0]=a[0]+a[i]; 7 printf("%d\n",a[0]); 8}
C)因为二维数组 a 中第二维大小的值除初值个数的商为 0,故数组 a 的行数为 1
D)只有元素 a[0][0]和 a[0][1]可得到初值 0,其余元素均得不到初值 0
6.13 若有说明:static int a[3][4];则数组中各元素 B 。
A)可在程序的运行阶段得到初值 0
B)可在程序的编译阶段得到初值 0
} } A) 1 1 1 1 1
11111 11111 11111 11111
B) 0 0 0 0 1 00010 00100 01000 10000
C) 1 0 0 0 0 01000 00100 00010 00001
D) 1 0 0 0 1 01010 00100 01010 10001
6.28 下面程序的运行结果是 C 。
A。 for(k=0;k<3;k++) printf("%d ",a[k][2-k]); A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7

C语言数组练习

C语言数组练习

C语言数组练习一填空题1.构成数组的各个元素必须具有相同的______。

2.C语言数组的下标总是从开始,不可以为负数。

3.字符串是以为结束标志的一维字符数组。

4.有定义:char a[]=””;则a数组的长度是。

5.若有以下定义:int a[10];,则数组a元素下标的上限为______,下限为______. 6.在C语言中,数组int a[5];的首地址是。

7.数组名定名规则和变量名相同,遵循定名规则。

8.对于一维数组的定义“类型说明符数组名[常量表达式]”,其中常量表达式可以包括和,不能包含。

9.在C语言中,引用数组只能通过来实现,而不能通过整体引用来实现。

如引用数组int a[5];第四个元素为。

10、char str1[15]=“zhongguo”,数组str1所占的内存空间为个字节。

11.构成数组的各个元素必须具有相同的。

12、有数组的定义int str[ ]={0,1,2,3,4};该数组长度为______________。

13.有数组定义float kk[5];则将第一个元素赋值为 5.0的语句为____________;将第二个元素值为12.3的语句为______________,将一、二两个元素的和赋给最后一个元素的语句为_________________________________ 14.一维数组元素的下标最小值从_______________开始,定义一个数组为int x[8];的数组长度为________________.引用最后一个元素的为_____________________。

15、在数组中int score[10]={1、2、3、4、5}中,元素个数有______________个,其中score[8]的值为______________。

二选择题1.对两个数组a和b进行如下初始化char a[]="ABCDEF";char b[]={'A','B','C','D','E','F'};则以下叙述正确的是________。

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

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

一、单选题1、下列描述中不正确的是()A.字符串的结束符是B.可以对字符型数组进行整体输入、输出。

C.字符型数组中能存放字符串。

D.字符串函数声明在ctype.h中。

正确答案:D2、下面是有关C语言字符数组的描述,其中错误的是()A.不可以用赋值语句给字符数组名赋字符串B.可以用输入语句把字符串整体输入给字符数组C.字符数组只能存放字符串D.字符数组中的内容不一定是字符串正确答案:C3、下面是对数组s的初始化操作,其中不正确的是()A.char s[5]="B.char s[5]={'a'};C.char s[5]={"a"};D.char s[5]= "abcdef";正确答案:D4、下面叙述正确的是()A.字符串“123 “与“123”相等。

B.字符串“123”小于字符串C.两个字符串所包含的字符个数不相同时,才能进行大小比较。

正确答案:BD.字符个数多的字符串比字符个数少的字符串大。

5、下面程序段的输出结果是()char a[7]=''123456w;char b[4]=〃ABC〃;strcpy(a z b);printfC'%c w z a[5]);A.\0B.C.5D.6正确答案:D6、以下对二维数组a的正确说明是一。

A.double a[l][4];B.float a(3)(4);C.floatf a(3,4);D.int a[3][];正确答案:A7、以下能对二维数组a进行正确初始化的语句是A. Int a[][3]={{l/2,3},(4,576}};B.int a⑵口={{1,0,1},{5,2,3}};C.int a ⑵[4]={{1,2,3},{4,5},{6}};D. int a[][3={{l/0/l},{},{l,l});正确答案:A8、若有说明:int a[3][4]={0};则下面正确的叙述是A.数组a中各元素都可得到初值,但其值不一定为0。

C语言数组选择题(新)五篇

C语言数组选择题(新)五篇

C语言数组选择题(新)五篇第一篇:C语言数组选择题(新)1、以下定义语句中,错误的是________。

A)int a[]={1,2};B)char a[]={“test”};C)char s[10]={“test”};D)int n=5,a[n];D2、以下对一维数组a进行正确初始化的是__________。

A)int a[10]=(0,0,0,0,0);B)int a[10]={ };C)int a[ ]={0};D)int a[10]={ 10*2};C3、以下对二维数组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}};B4、在定义int a[5][4];之后,对a的引用正确的是________。

A)a[2][4]B)a[1,3] C)a[4][3]D)a[5][0] C5、以下给字符数组str定义和赋值正确的是________。

A)char str[10];str={“China!”};B)char str[ ]={“China!”};C)char str[10];strcpy(str,“abcdefghijkl”);D)charstr[10]={“abcdefghijkl”};B6、以下一维数组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];D7、在执行语句:int a[ ][3]={1,2,3,4,5,6};后,a[1][0]的值是________。

A)4B)1 C)2D)5 A8、当接受用户输入的含有空格的字符串时,应使用________函数。

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

6.1.1 Fibonacci数列/* Fibonacci数列递推求解 */main(){int k,n; long s,f[50];printf("求数列的第n项与前n项和,请输入n:");scanf("%d",&n);f[1]=1;f[2]=1;s=2; /* 数组元素与和变量赋初值 */ for(k=3;k<=n;k++){f[k]=f[k-1]+f[k-2]; /* 实施递推 */s+=f[k];} /* 实施求和 */printf("F数列第%d项为:%ld\n",n,f[n]);printf("F数前%d项之和为:%ld\n",n,s);}6.1.2 幂序列/* 幂序列程序 */main(){int k,n; long a,b,s,f[100];printf("求数列的第n项与前n项和,请输入n:");scanf("%d",&n);a=2;b=3;s=0;for(k=1;k<=n;k++){if(a<b){f[k]=a;a=a*2;} /* 用2的幂给f[k]赋值 */else {f[k]=b;b=b*3;} /* 用3的幂给f[k]赋值 */ s+=f[k];}printf("数列的第%d项为:%ld\n",n,f[n]);printf("数列的前%d项之和为:%ld\n",n,s);}6.1.3 双关系递推数列/* 双关系2x+1,3x+1递推 */main(){int n,i,j,h,m[1500];m[1]=1;scanf("%d",&n);for(i=1;i<=n;i++){m[2*i]=2*m[i]+1;m[2*i+1]=3*m[i]+1;for(j=i+2;j<=2*i+1;j++){if(m[i+1]>m[j]) /* m(i+1)与m(j)比较 */{h=m[j]; m[j]=m[i+1];m[i+1]=h;} /* 交换,使m(i +1)最小 */if(m[i+1]==m[j])m[j]=20000+j;}} /* 置m(j)为一出界大数,以避免重复 */for(i=1;i<=n;i++){printf(" %4d",m[i]);if(!(i%10)) printf("\n");}}6.1.4 复杂递推数列/* 2x+3y递推程序 */main(){int m,n,t,k,i,h,j,w,a[30000];printf("\n input m:");scanf("%d",&m);a[1]=1;a[2]=2;t=2;n=0;for(k=2;k<=m;k++){for(i=1;i<=k-1;i++){w=2*a[k]+3*a[i];if(w<=m && a[k]!=a[i]) a[++t]=w;/* 判断 w是否为递推项 */w=2*a[i]+3*a[k];if(w<=m && a[k]!=a[i]) a[++t]=w;}} /* 判断 w是否为递推项 */for(j=1;j<=m;j++){for(k=1;k<=t;k++)if(a[k]==j){n++;printf("%4d(%3d) ",j,n);break;}}printf("\n n=%d",n);}6.2.1 折叠方阵/* 层叠方阵 */main(){ int a,i,j,m,n,x,y,z[20][20];printf("输入方阵的行数m:\n");scanf("%d",&m);printf("输入方阵的起始数a:\n");scanf("%d",&a);z[1][1]=a;n=a;for(i=2;i<=m;i++){x=1;y=i;n++;z[x][y]=n; /* 每一层的起始元素赋值*/while(x<i){n++;x++;z[x][y]=n;} /* 每一层的纵元素赋值*/while(y>1){n++;y--;z[x][y]=n;} /* 每一层的横元素赋值*/}for(x=1;x<=m;x++){for(y=1;y<=m;y++)printf("%4d",z[x][y]); /* 循环打印层叠方阵 * /printf("\n"); }}6.2.2 矩阵的和与转置main(){ int i,j,m,n,x,y,a[4][5],b[4][5];printf("输入a矩阵:\n");for(i=1;i<=3;i++)for(j=1;j<=4;j++)scanf("%d",&a[i][j]); /* 输入a矩阵的元素 */ printf("输入b矩阵:\n");for(i=1;i<=3;i++)for(j=1;j<=4;j++)scanf("%d",&b[i][j]); /* 输入b矩阵的元素 */ printf("a矩阵:\n");for(i=1;i<=3;i++){{for(j=1;j<=4;j++)printf("%3d",a[i][j]);} /* 打印a矩阵 */ printf("\n"); }printf("b矩阵:\n");for(i=1;i<=3;i++){{for(j=1;j<=4;j++)printf("%3d",b[i][j]);} /* 打印b矩阵 */printf("\n");}printf("a,b矩阵之和:\n");for(i=1;i<=3;i++){{for(j=1;j<=4;j++)printf("%4d",a[i][j]+b[i][j]);} /* 计算并打印a+b 的元素 */printf("\n");}printf("a矩阵的转置:\n");for(j=1;j<=4;j++) /* 打印a矩阵的转置 */{{for(i=1;i<=3;i++)printf("%4d",a[i][j]);}printf("\n");}}6.2.3 矩阵的积/* 求a,b矩阵的积 */main(){ int i,j,k,d,a[4][5],b[5][3];printf("输入a矩阵:\n");for(i=1;i<=3;i++)for(j=1;j<=4;j++)scanf("%d",&a[i][j]); /* 输入a矩阵的元素 */printf("输入b矩阵:\n");for(i=1;i<=4;i++)for(j=1;j<=2;j++)scanf("%d",&b[i][j]); /* 输入b矩阵的元素 */printf("a矩阵:\n");for(i=1;i<=3;i++){{for(j=1;j<=4;j++)printf("%3d",a[i][j]);} /* 打印a矩阵 */printf("\n"); }printf("b矩阵:\n");for(i=1;i<=4;i++){{for(j=1;j<=2;j++)printf("%3d",b[i][j]);} /* 打印b矩阵 */printf("\n");}printf("a,b矩阵之积:\n");for(i=1;i<=3;i++){{for(j=1;j<=2;j++){for(d=0,k=1;k<=4;k++)d+=a[i][k]*b[k][j]; /* 求和计算积矩阵元素d (i,j) */printf("%6d",d);}} /* 打印a,b积矩阵元素d */printf("\n");}}6.2.4 杨辉三角形3.程序设计与运行/* 杨辉三角形 */main(){int n,i,j,k,a[20][20];scanf("%d",&n);for(i=1;i<=n;i++){a[i][1]=1;a[i][i]=1;} /* 确定初始条件 */for(i=3;i<=n;i++)for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j]; /* 递推得到每一数组元素 */for(i=1;i<=n;i++) /* 控制输出n行 */{printf("\n");for(k=1;k<=40-3*i;k++) printf(" ");for(j=1;j<=i;j++) /* 控制输出第i行的i个数组元素 */printf("%6d",a[i][j]);}}6.3.1 猴子爬山/* 猴子爬山n级,一步跨1级或3级台阶 */main(){int k,n;long f[1000];printf("请输入台阶总数n:");scanf("%d",&n);f[1]=1;f[2]=1;f[3]=2; /* 数组元素赋初值 */for(k=4;k<=n;k++)f[k]=f[k-1]+f[k-3]; /* 按递推关系实施递推 */printf("s=%ld",f[n]);}6.3.2 整币兑零main(){int x,f,t,n;x=0;for(t=0;t<=50;t++) /* 变量t为2元币的张数*/ for(f=0;f<=20;f++) /* 变量f为5元币的张数*/ {n=100-f*5-t*2; /* 变量n为1元币的张数*/if(n>=0) x++;} /* 变量n为非负时,用x统计兑零种数 */printf("%d",x);}6.3.3 整数拆分/* 连续数1-ms组合ss */#include <stdio.h>#define MAXN 100int a[MAXN],t,n=0;comb(int m,int k,int s) /* 建立递归函数comb(m, k, s) */{int i,j;for(i=m;i>=k;i--){a[k]=i;if(k>1)comb(i-1,k-1,s);else {for(t=0,j=a[0];j>0;j--)t=t+a[j];if(t==s) {n++;printf(“%d=”,s); /* 满足条件时输出*/for(j=a[0];j>1;j--){printf("%2d+",a[j]); }printf("%2d\n",a[1]); }}}}main(){int ms,ss,i,h,k,wmin,wmax;scanf("%d,%d",&ms,&ss);for(h=0,i=1;i<=ms;i++){h=h+i;if(h>ss) {wmax=i-1;break;}}for(h=0,i=1;i<=ms;i++){h=h+(ms-i+1);if(h>ss) {wmin=i-1;break;}}for(k=wmin;k<=wmax;k++){a[0]=k;comb(ms,k,ss);}printf("n=%d\n",n); } /* 输出拆分种数n */6.4.1 分类统计main(){int k,m,sm,i,j,h,t,f[1000],s[9],n[9],d[10][100];float x;sm=0;printf("请输入m个分数:\n");scanf("%d",&m);for(k=1;k<=m;k++){printf("请输入第%d个数:",k);scanf("%d",&f[k]);sm+=f[k]; /* sm统计总分 */t=f[k]/10;if(t<6) t=5;if(t>9) t=9; /* 计算确定分类号t */s[t]+=f[k]; n[t]++; d[t][n[t]]=f[k];}printf("所有%d个原始数据为:\n",m);for(k=1;k<=m;k++){printf("%4d",f[k]); /* 每行10个打印原始数据*/if(k%10==0) printf("\n");}printf("\n");for(t=5;t<=9;t++)for(i=1;i<=n[t]-1;i++) /* 分段按逐个比较法从小到大排序 */for(j=i+1;j<=n[t];j++)if(d[t][i]>d[t][j]){h=d[t][i];d[t][i]=d[t][j];d[t][j]=h;}for(t=9;t>=5;t--){printf("%d段共%3d个数据,从小到大依次为:",t,n[t]);for(k=1;k<=n[t];k++)printf("%4d",d[t][k]);x=(float)s[t]/n[t];printf(", 该段平均分为:%8.2f\n",x);}x=sm/m;printf("所有%d个数据的平均值为:%8.2f\n",m,x); }6.4.2 大赛现场统分/* 竞赛现场统分排序 */#include<stdio.h>#include<math.h>main(){int i,j,n,m,u,sh[40];float max,min,uf,sf[40], f[40][20];printf("请输入选手个数(1<n<40):");scanf("%d",&n);printf("请输入评委个数(2<m<20):");scanf("%d",&m);for(i=1;i<=n;i++) /* 现场为选手评分,报分 */{printf("\n第%d个上场选手编号为:",i);scanf("%d",&sh[i]);sf[i]=0;max=0;min=10000; /* 数组元素与变量赋初值 */for(j=1;j<=m;j++){printf("第%d个评委评分为:",j);scanf("%f",&f[i][j]);sf[i]+=f[i][j];if(max<f[i][j]) max=f[i][j];if(min>f[i][j]) min=f[i][j];}printf("\n去掉一个最高分:%.2f",max);printf("\n去掉一个最低分:%.2f",min);sf[i]=(sf[i]-max-min)/(m-2); /* 计算第i个选手的最后得分 */printf("\n编号为%d号选手",sh[i]);printf("最后得分为:%.2f\n",sf[i]);}for(i=1;i<=n-1;i++) /* 选手最后得分按冒泡法排序,打印名次表 */for(j=1;j<=n-i;j++)if(sf[j]<sf[j+1]){uf=sf[j];sf[j]=sf[j+1];sf[j+1]=uf; /* 交换sf 同时交换sh */u=sh[j];sh[j]=sh[j+1];sh[j+1]=u;}printf("\n 参赛选手得分名次表:"); /* 输出名次表 */printf("\n选手编号得分名次");for(i=1;i<=n;i++)printf("\n %d %.3f %d",sh[i],sf[i],i);printf("\n");printf("\n\n竞赛现场统分结束,谢谢!\n");}6.4.3 数制转换/* 十进制整数转换为P进制 */main(){long n;int c,m,k,p,s[100];char r[16];r[10]='A';r[11]='B';r[12]='C';r[13]='D';r[14]='E';r[15]='F';m=0;printf("\n请输入十进制数n:");scanf("%ld",&n);printf("\n请输入转换数制p(2-16):");scanf("%d",&p);printf("(%ld)10=(",n);while(n!=0){c=n%p;n=n/p;m++;s[m]=c;} /* 实施除P取余*/for(k=m;k>=1;k--) /* 从后往前逐位打印输出 */if(s[k]>9) printf("%c",r[s[k]]); /* 超过9时打印相应字母 */else printf("%d",s[k]);printf(")%d\n",p);}/* 十进制小数转换为P进制 */main(){float n;int c,m,k,p,t,s[100];char r[16];r[10]='A';r[11]='B';r[12]='C';r[13]='D';r[14]='E';r[15]='F';m=0;printf("\n请输入十进制纯小数n:");scanf("%f",&n);printf("\n请输入转换数制p(2-16):");scanf("%d",&p);printf("\n请输入最多转换的位数t:");scanf("%d",&t);printf("(%f)10=(0.",n);while(n!=0 && m<t){n=n*p;c=n;n=n-c;m++;s[m]=c;} /* 实施乘P取整 */ for(k=1;k<=m;k++) /* 从前往后逐位打印输出 */if(s[k]>9) printf("%c",r[s[k]]); /* 每一位超过9时打印相应字母 */else printf("%d",s[k]);printf(")%d\n",p);}6.4.4 真分数序列/* 求分母为[a,b]的最简真分数的增序列 */main(){int a,b,k,n,i,j,h,t,u,c[3000],d[3000];scanf("%d,%d",&a,&b); /* 输入区间的上下限*/scanf("%d",&k); /* 输入指定序号k */n=0;for(j=a;j<=b;j++){for(i=1;i<=j-1;i++){for(t=0,u=2;u<=i;u++)if(j%u==0 && i%u==0) {t=1;break;} /* 分子分母有公因数舍去 */if(t==0) {n++;c[n]=i;d[n]=j;}}}for(i=1;i<=n-1;i++) /* 应用冒泡法排序 */for(j=1;j<=n-i;j++)if(c[j]*d[j+1]>c[j+1]*d[j]) /* 若c(j)/d(j)>c(j+1)/d(j+1),交换 */{h=c[j];c[j]=c[j+1];c[j+1]=h;h=d[j];d[j]=d[j+1];d[j+1]=h;}printf("n=%d \n",n);printf("%d:%d/%d \n",k,c[k],d[k]);}6.5.1 优美乘积main(){long int x,y,t,i,k,m[4],f[11],a,b,c,n=0;for(a=2;a<=98;a++)for(b=102;b<=9876;b++) /* 对a,b 实施穷举 */{c=a*b;m[1]=a;m[2]=b;m[3]=c;for(i=0;i<=9;i++) f[i]=0;for(k=1;k<=3;k++){y=m[k];while(y>0){x=y%10;f[x]=f[x]+1;y=y/10;}} /* 分离数字,f 数组统计 */for(t=0,i=0;i<=9;i++)if(f[i]!=1) t=1; /* 检验数字0--9各只出现一次 */if(t==0){printf("%3ld*%4ld=%5ld ",a,b,c);n++; /* 用n 统计个数 */if(n%4==0) printf("\n");}}printf("\n n=%d.\n",n);}6.5.2 优美和/* 优美和程序 */main(){int a,b,c,x,y,t,i,k,m[4],f[11],n=0;for(a=10;a<=987;a++)for(b=102;b<=9876;b++) /* 对a,b 实施穷举 */{c=a+b;m[1]=a;m[2]=b;m[3]=c;for(i=0;i<=9;i++) f[i]=0;for(k=1;k<=3;k++){y=m[k];while(y>0){x=y%10;f[x]=f[x]+1;y=y/10;}} /* 分离数字,用f 数组统计 */for(t=0,i=0;i<=9;i++)if(f[i]!=1) t=1; /* 检验数字0——9是否各出现一次 */if(t==0 && a<b){printf("%3d+%4d=%4d ",a,b,c);n++; /* 打印,用n 统计个数 */if(n%5==0) printf("\n");}}printf("\n n=%d.\n",n);}6.5.3 桥本等式/* 桥本等式探求 */main(){ int g,i,j,k,n,a[10]; long m1,m2,m3;i=1;a[1]=1;n=0;while (1){g=1;for(k=i-1;k>=1;k--)if(a[i]==a[k]) g=0; /* 两数相同,标记g=0 */if(i==9 && g==1 && a[1]<a[4]){m1=a[2]*10+a[3];m2=a[5]*10+a[6];m3=a[8]*10+a[9];if(a[1]*m2*m3+a[4]*m1*m3==a[7]*m1*m2) /* 判断是否满足等式 */{n++;printf("(%2d). ",n);printf("%d/%ld+%d/",a[1],m1,a[4]);printf("%ld=%d/%ld\n",m2,a[7],m3);}}if(i<9 && g==1) {i++;a[i]=1;continue;} /* 不到9个数,往后继续 */for(j=1;j<=9;j++)if(a[i]==9 && i>1) i--;else break; /* 往前返回 */if(a[i]==9 && i==1) break;else a[i]++; /* 至第1个数为9,结束 */}}6.6.1 阶乘的右边非零位/* 求n!右边第一个非零数字 */main(){int n,k;long f[1000];f[1]=1;printf("n=");scanf("%d",&n);for(k=2;k<=n;k++){f[k]=(f[k-1]*k); /* 实施递推 */while(f[k]%10==0)f[k]=f[k]/10; /* 除去f[k]的右边零 */f[k]=f[k]%10000;} /* 取f[k]右边四位 */printf("\n f[%d]=%d ",n,f[n]%10);}6.6.2 筛法求素数/* 筛法求指定区间上的素数 */#include"math.h"main(){ long int c,d,i,j,k;static long int a[11000];int e,n;printf("求区间[c,d]上的素数\n");printf("请输入 c,d(c>2):");scanf("%ld,%ld",&c,&d);if (c%2==0) c++;e=(d-c)/2;i=1; /* 确定区间上e+1个奇数 */while (i<=sqrt(d)) /* 在[c,d]中筛选素数 */{i=i+2;j=i;while (j<=d){j=j+2*i; if(j>=c) a[(j-c)/2]=-1;}} /* 筛去标记-1 */for(n=0,k=0;k<=e;k++)if(a[k]!=-1) /* 输出所得素数 */{n++; printf("%ld ",c+2*k);if(n%10==0) printf("\n");}printf("\n[%ld,%ld]共%d个素数.\n",c,d,n);}6.6.3 最小的连续n个合数/* 求最小的连续n个合数*/#include"math.h"main(){ long int c,d,f,g,i,j,k,m,x;long int a[11000];int e,n,s,u,t;printf("求最小的n个连续合数,");printf("输入n(2--100):");scanf("%d",&n);c=3;d=c+20000;u=1;f=2;t=0;while (u) /* 在[c,d]中筛选素数 */{for(i=0;i<=10999;i++) a[i]=0;e=(d-c)/2;i=1;while (i<=sqrt(d)){i=i+2;g=2*(c/(2*i))+1;if(g*i>d) continue;if(g==1) g=3;j=i*g;while (j<=d){if(j>=c) a[(j-c)/2]=-1; /* 筛去标记-1 */j=j+2*i;}}for(u=1,k=0;k<=e;k++){if(a[k]!=-1){m=c+2*k; /* m即筛选所得素数 */if(m-f>=n+1 && t==0) /* 寻求最小的n个连续素数 */{printf("最小的%d个连续合数为:",n);printf("[%ld,%ld]",f+1,f+n);t=1;}f=m;}}c=m;d=c+20000;} /* 最大素数m赋给c,继续探求 */}6.6.4 圆周率π的高精度计算/* 高精度计算圆周率π */#include "math.h"main(){float s;int b,x,n,c,i,j,d,l,a[5000];printf("\n 输入精确位数:");scanf("%d",&x);for (s=0,n=1;n<=5000;n++) /* 累加确定计算的项数 */{s=s+log((2*n+1)/n);if (s/log(10)>x) break;}for (i=0;i<=x+1;i++) a[i]=0;for (c=1,j=n;j>=1;j--) /* 按公式分步计算 */{d=2*j+1;for (i=0;i<=x;i++){a[i]=c/d; c=(c%d)*10+a[i+1];}a[x+1]=c/d;for (b=0,i=x+1;i>=0;i--){a[i]=a[i]*j+b; b=a[i]/10;a[i]=a[i]%10;}a[0]=a[0]+1;c=a[0];}for (b=0,i=x+1;i>=0;i--){a[i]=a[i]*2+b; b=a[i]/10;a[i]=a[i]%10;}printf("\n pi=%d.",a[0]); /* 遂位输出计算结果 */for (l=10,i=1;i<=x;i++){ printf("%d",a[i]);l++;if (l%10==0) printf(" ");if (l%50==0) printf("\n");}}。

相关文档
最新文档