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语言第七章复习题(含答案)
1.下列对C语言字符数组的描述中错误的是(C )。
(A)字符数组可以存放字符串 (B)字符数组中的字符串可以整体输入、输出(C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值(D)不可以用关系运算符对字符数组中的字符串进行比较2.不能把字符串: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!";3.若有以下说明: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]4.以下程序的输出结果是( B )(A) 20 (B) 21 (C) 22 (D)23main(){ int i, k, a[10], p[3];k=5;for (i=0;i<10;i++) a[i ]=i;for (i=0;i<3;i++) p[i ]=a[i *(i+1)];for (i=0;i<3;i++) k+=p[i] *2;printf("%d\n",k);5.以下程序的输出结果是(C )。
(A) 1,5,9 (B) 1,4,7 (C) 3,5,7 (D)3,6,9main(){ int i, x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++) printf("%d,",x[i][2-i]);6.下面程序运行的结果是( C )。
c语言复习题及答案第七章数组
第七章数组(8学时)学习目的与要求:1、要点掌握一维数组的定义和引用;2、基本掌握二维数组的定义和引用;3、要点掌握字符型数组的定义与引用;4、能正确使用字符串办理函数;5、学会使用数组解决实质问题。
要点:1、一维数组的定义与引用;2、二维数组的定义与引用;3、字符数组的定义与引用;第 1 讲知识归纳:1、一维数组的定义:种类说明符数组名[常量表达式];(1) (1)数组名后一定用方括弧[ ],用其余括弧均错误;(2)方括弧中的常量表达式表示数组的元素个数;(3)方括弧中的常量表达式,一定是能计算出详尽数值,且不改变的常量,不可以是变量;2、一维数组的引用:数组名[下标]for ( i =0 ; i<7 ; i ++ ) printf(“%c” , c1[ i ] );(2) 将整个字符串一次输入输出,用格式符%s ;如:char c1[10];scanf (“ %s”, c1) ;100];D) int N=100;int num[N];(2003 年 9 月)25、有以下程序main(){ char a[ ]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘0’}; int i,j;i=sizeof(a); j=strlen(a);printf( “%d,%d b”i,j);}程序运转后的输出结果是( )。
A) 9,9B) 8,9C) 1,8D) 9, 8(2002 年 9 月)21、 C 22、C 23、D 24、B 25 、D二、填空题1、下边 fun 函数的功能是将形参x 的值变换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为0 的元素中,其余依此类推。
请填空。
fun(int x,int b[]){ int k=0,r;do{ r=x% 2;b[k++]=r;x/= 2 ; } while(x); }(1996 年 4 月)2 22、以下程序用来对从键盘上输入的两个字符串进行比较 , 而后输出两个字符串中第一个不同样字符的 ASCII 码之差。
c语言数组试题及答案
c语言数组试题及答案1. 请编写一个程序,要求用户输入10个整数,然后将其存储在一个数组中,并输出这个数组的内容。
答案:```c#include <stdio.h>int main() {int numbers[10];int i;printf("请输入10个整数:\n");for (i = 0; i < 10; i++) {scanf("%d", &numbers[i]);}printf("数组内容为:\n");for (i = 0; i < 10; i++) {printf("%d ", numbers[i]);}return 0;}```2. 请编写一个程序,要求用户输入一个整数n(n>0),然后分别输入n个整数存储在一个数组中,计算并输出这个数组中所有元素的和。
答案:```c#include <stdio.h>int main() {int n;int numbers[100];int sum = 0;int i;printf("请输入整数n:\n");scanf("%d", &n);printf("请输入%d个整数:\n", n);for (i = 0; i < n; i++) {scanf("%d", &numbers[i]);sum += numbers[i];}printf("数组元素之和为:%d\n", sum);return 0;}```3. 请编写一个程序,要求用户输入一个整数n(n>1),然后分别输入n个整数存储在一个数组中,计算并输出这个数组中最大和最小的元素。
答案:```c#include <stdio.h>int main() {int n;int numbers[100];int max, min;int i;printf("请输入整数n:\n");scanf("%d", &n);printf("请输入%d个整数:\n", n);for (i = 0; i < n; i++) {scanf("%d", &numbers[i]);}max = numbers[0];min = numbers[0];for (i = 1; i < n; i++) {if (numbers[i] > max) {max = numbers[i];}if (numbers[i] < min) {min = numbers[i];}}printf("数组中的最大元素为:%d\n", max);printf("数组中的最小元素为:%d\n", min);return 0;}```4. 请编写一个程序,要求用户输入两个整数m和n(1<=m<=n<=100),然后生成并输出m到n之间(包含m和n)的所有整数。
C程序设计(数组)习题与答案
C程序设计(数组)习题与答案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语言第七章习题答案
7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
两个整数由键盘输入。
hcf(u,v)int u,v;{ int a,b,t,r;if(u>v){ t=u;u=v;v=t; }a=u;b=v;while((r=b%a)!=0){ b=a;a=r; }return(a);}lcd(u,v,h)int u,v,h;{ int u,v,h,l;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("H.C.F=%dn",h);l=lcd(u,v,h);printf("L.C.d=%dn",l);return(u*v/h);}#include <stdio.h>void main(){ int u,v,h,l;scanf("%d,%d",&u,&v);h=hcf(u,v);printf("H.C.F=%dn",h);l=lcd(u,v,h);printf("L.C.D=%dn",l);}7.2 求方程根float x1,x2,disc,p,q; greater_than_zero(a,b)float a,b;{x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); }equal_to_zero(a,b)float a,b;{ x1=x2=(-b)/(2*a);}smaller_than_zero(a,b)float a,b;{ p=-b/(2*a);q=sqrt(disc)/(2*a);}main(){float a,b,c;printf("n输入方程的系数a,b,c:n");scanf("%f,%f,%f",&a,&b,&c);printf("n 方程是:% 5.2f*x*x+%5.2f*x+%5.2f=0n",a,b,c);disc=b*b-4*a*c;printf("方程的解是:n");if(disc>0){ great_than_zero(a,b);printf("X1=%5.2ftX2=%5.2fnn",x1,x2);}else if(disc==0){zero(a,b);printf("X1=%5.2ftX2=%5.2fnn",x1,x2);}else{small_than_zero(a,b,c);printf("X1=%5.2f+%5.2fitX2=%5.2f-%2.2fin",p,q,p,q);}}7.3 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。
C语言第七章习题带答案
选择题1.已知:int *p, a;,则语句“p=&a;”中的运算符“&”的含义是( D )。
A.位与运算B.逻辑与运算C.取指针内容D.取变量地址2.已知:int a, x;,则正确的赋值语句是( C )。
A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1, x++, x+2); D.a="good"; 3.已知:int a, *p=&a;,则下列函数调用中错误的是( D )。
A.scanf("%d", &a); B.scanf("%d", p); C.printf("%d", a); D.scanf("%d", *p); 4.已知:char *p, *q;,选择正确的语句( C )。
A.p*=3; B.p/=q; C.p+=3; D.p+=q;5.已知:int x;,则下面的说明指针变量pb的语句( C )是正确的。
A.int pb=&x; B.int *pb=x; C.int *pb=&x; D.*pb=*x;一、选择题1.设有说明int (*ptr)[M];,其中的标识符ptr是( C )。
A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M列的二维数组的一行的指针D.具有M个指针元素的一维数组的指针2.已知:double *p[6];,它的含义是( C )。
A.p是指向double型变量的指针B.p是double型数组C.p是指针数组D.p是数组指针3.已知:char s[10], *p=s,则在下列语句中,错误的语句是( B )。
A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0];4.已知:char s[100]; int i;,则在下列引用数组元素的语句中,错误的表示形式是( D )。
数组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语言第七章课后习题答案
第七章数组一、选择题:1-5 A、A、D、C、C 6-10 B、D、D、B、A 11-15 D、D、D、D、A16-20 A、C、C、D、B 21-25 C、D、C、C、D二、填空题:1、标识符2、常量、符号常量、变量3、m-1、n-14、字符数组5、数组名6、s[j++]=s[i]7、C1!=C2&&C1= =′′三、阅读程序,写出结果1、 1,2,3,2、 2,3,43、 f4、 -4 0 4 4 35、1 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 1四、编程题:1、#include<stdio.h>#include<conio.h>#define N 10void main(){int a[N],i,max,min,m,n,t;clrscr();for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");max=min=a[0];m=n=0;for(i=1;i<N;i++)if(a[i]>max){max=a[i];m=i;}else if(a[i]<min){min=a[i];n=i;}t=a[m];a[m]=a[n];a[n]=t;for(i=0;i<N;i++)printf("%5d",a[i]);}2、#include<stdio.h>#include<conio.h>#define M 10#define N 6void main(){ float score[M][N],sum,i,j;clrscr();for(i=0;i<M;i++)for(j=0;j<N-1;j++)scanf("%f",&score[i][j]);for(i=0;i<M;i++){sum=0;for(j=0;j<N-1;j++)sum+=score[i][j];score[i][N-1]=sum/(N-1);}printf("output :\n");printf("%8s%8s%8s%8s%8s%8s\n","score1","score2","score3","score4","score5","ave rage");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%8.2f",score[i][j]);printf("\n");}}3、#include<stdio.h>#include<conio.h>#define M 4#define N 4void main(){int a[M][N],i,j,sum=0;for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);for(i=0;i<M;i++){ for(j=0;j<N-1;j++)printf("%5d",a[i][j]);printf("\n");}for(i=0;i<M;i++)for(j=0;j<N;j++)if(i==j) sum+=a[i][j];for(i=0;i<M;i++)for(j=0;j<i;j++)a[i][j]--;for(i=0;i<M;i++)for(j=i+1;j<N;j++)a[i][j]++;printf("\n\n");for(i=0;i<M;i++){ for(j=0;j<N-1;j++)printf("%5d",a[i][j]);printf("\n");}printf("sum=%5d\n",sum);}4、#include<stdio.h>#include<conio.h>#define M 20void main(){int i,n=0;long f[M]={1,1};clrscr();for(i=2;i<M;i++)f[i]=f[i-1]+f[i-2];for(i=0;i<M;i++){printf("%8ld",f[i]);n++;if(n%8==0) printf("\n");}}5、#include<stdio.h>#define M 10void main(){static int a[M]={122,107,96,87,80,56,40,10,8,-20};int x,low,mid,high,found;clrscr();low=0;high=M-1;found=0;printf("Input a number to be searched:");scanf("%d",&x);while(low<=high){mid=(low+high)/2;if(x==a[mid]){found=1;break;}else if(x<a[mid])low=mid+1;elsehigh=mid-1;}if(found==1)printf("The index of %d is %d\n",x,mid);elseprintf("There is not %d\n",x);}6、#include<stdio.h>#include<conio.h>#include<string.h>void main(){char s[80];int i;clrscr();gets(s);for(i=0;i<=strlen(s)/2;i++)if(s[i]!=s[strlen(s)-1-i]) break;if(i<strlen(s)/2) printf("%s is not huiwen.\n",s); else printf("%s is huiwen.\n",s);}7、#include<stdio.h>#include<conio.h>#define M 3#define N 4void main(){int a[M][N],i,j,k,row,colum,flag=0;int max;clrscr();for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);printf("\n\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%6d",a[i][j]);printf("\n");}for(i=0;i<M;i++){max=a[i][0];row=i;colum=0;for(j=1;j<N;j++)if(max<a[i][j]){ max=a[i][j];row=i;colum=j;}for(k=0;k<M;k++)if(a[k][colum]<max) break;if(k>=M){ printf("a[%d][%d]=%d is an'dian.\n",row,colum,max);flag=1;}}if(flag==0)printf("There is not an'dian.\n");}8、#include<stdio.h>#include<conio.h>#include<string.h>#define M 80#define N 40void main(){char str1[M],str2[N];int i,j;clrscr();gets(str1);gets(str2);for(i=strlen(str1),j=0;str2[j]!='\0';i++,j++)str1[i]=str2[j];str1[i]='\0';puts(str1);}9、#include<stdio.h>#include<conio.h>#include<string.h>void main(){char str[80]="\0";char str1[80]="\0",str2[80]="\0";int i,j,flag=1;gets(str);clrscr();puts(str);for(i=0;str[i]!='\0';){ if(str[i]==' ') {flag=0; i++;}else flag=1;if(flag==1)for(j=0;str[i]!=' '&&str[i]!='\0';j++,i++) str2[j]=str[i];str2[j]='\0';if(strlen(str2)>strlen(str1))strcpy(str1,str2);}puts(str1);}10、#include<stdio.h>#include<conio.h>main(){char str[80];int i,count=0;clrscr();gets(str);for(i=0;i<str[i]!='\0';i++)if(str[i]=='a'&&str[i+1]=='b')count++;printf("ab is %d\n",count);}。
C语言程序设计教程 第七章 课后习题参考答案
for(i=0;i<N;i++)
{
printf("%4d",a[i]);
}
bubble_sort(a,N);
printf("\n");
}
void bubble_sort(int a[],int n)
{
int i,j,tmp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
for(i=0;i<n;i++)
{
printf("%-4d",a[i]);
}
}
P1985对称矩阵
#include<stdio.h>
void print(int a[][3],int rows,int cols);
int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int i,j,m=0,n=0;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<M;i++)
m++;
《C语言程序设计教程》(第三版)李凤霞 主编——第七章习题答案
习题七一、单项选择题1、以下程序的输出结果是()。
main(){int i,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=i; /*a: 0 1 2 3 4 5 6 7 8 9 */for(i=0;i<3;i++)p[i]=a[i*(i+1)]; /*p:0 2 6 */for(i=0;i<3;i++)k+=p[i]*2; /* k=5+4+12=21 */printf(“%d\n”,k);}A)20 B)21 C)22 D)232、以下正确的数组定义语句是()。
A)int y[1][4]={1,2,3,4,5}; B)float x[3][ ]={{1},{2},{3}}; C)long s[2][3]={{1},{1,2},{1,2,3}}; D)double t[ ][3]={0};3、以下程序段的输出结果是()。
main(){int m[3][3]={{1},{2},{3}}; m 1 0 0 n 1 2 3int n[3][3]={1,2,3}; 2 0 0 0 0 0printf(“%d\n”,m[1][0]+n[0][0]); 3 0 0 0 0 0printf(“%d\n”,m[0][1]+n[1][0]);}A)0 B)2 C)3 D)10 3 0 24、以下程序的输出结果是()。
main(){int i,x[3][3]={1,2,3,4,5,6,7,8,9}; 1 2 3for(i=0;i<3;i++)printf(“%d,”x[i][2-i]); 4 5 6} 7 8 9A)1,5,9 B)1,4,7 C)3,5,7 D)3,6,95、对以下程序从第一列开始输入数据:2473↙,程序的输出结果是()。
#include “stdio.h”main(){char c;while((c=getchar())!=’\n’){switch (c-‘2’){case 0:case 1:putchar(c+4);case 2:putchar(c+4);break;case 3:putchar(c+3);default:putchar(c+2);}}}A)668977 B}668966 C}66778777 D)66887666、不能正确为字符数组输入数据的是( )。
c语言数组考试题及答案
c语言数组考试题及答案C语言数组考试题及答案一、选择题1. 以下哪个选项是正确的数组声明方式?A. int a[5] = {1, 2, 3, 4, 5};B. int a = [5] = {1, 2, 3, 4, 5};C. int a[5] = {1, 2, 3};D. int a = {1, 2, 3, 4, 5};答案:A2. 对于数组int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 以下哪个表达式是合法的?A. a[10]B. a[-1]C. a[3.5]答案:D3. 假设有数组int a[5] = {1, 2, 3, 4, 5}; 以下哪个表达式可以得到数组a的元素个数?A. sizeof(a) / sizeof(int)B. sizeof(a) / sizeof(char)C. sizeof(a) / sizeof(float)D. sizeof(a) / sizeof(double)答案:A4. 以下哪个选项是正确的二维数组声明方式?A. int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};B. int a[3][2] = {1, 2, 3, 4, 5, 6};C. int a[3][2] = {{1, 2}, {3, 4, 5}, {6, 7}};D. int a[3][2] = {1, 2, 3, 4, 5, 6, 7, 8};5. 对于二维数组int a[3][2] = {{1, 2}, {3, 4}, {5, 6}}; 以下哪个表达式可以得到元素a[1][1]的值?A. a[1][1]B. a[1] + 1C. *(a[1] + 1)D. a[1] * 1答案:A二、填空题1. 假设有数组int a[5] = {10, 20, 30, 40, 50}; 则a[0]的值是______。
答案:102. 对于数组int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 则a[9]的值是______。
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语言程序设计题目及解答-07
一、判断题 (24分)1. 函数的递归调用不过是一个函数直接地调用它自身。
2分2. 在c语言中,在main函数中定义的变量称为全局变量。
2分3. 静态变量和外部变量都是全局变量,它们的存储是静态的。
2分4. 静态局部变量只在本函数内可用。
2分5. 静态外部变量只在本文件内可用。
2分6. 变量根据其作用域的范围可以分作局部变量和全局变量.2分7. 任何数组在使用时必须先定义。
2分8. 如果想使一个数组中全部元素的值为1,可以写成int a[10]={1*10};2分9. 如果定义数组int b[6]={1,2,3,4};则b[6]为0。
2分10. int n=10; int a[n];则数组a有10个元素。
2分11. int b[][3] = {1,2,3,4,5,6,7} ,表示数组b是3行3列的数组。
2分二、选择题 (36分)1.根据下面函数print的定义,选出调用函数print(5378)的值是()。
[A] 2分void print(long n){if (n==0) return ;else{print(n/10);printf("% d", n%10);return ;}}A. 5 3 7 8B. 8 7 3 5C. 3 5 7 8D. 8 7 5 32.根据下面函数f,选出f(f(3))的值是()。
[C] 2分int f(int x){static int k=0;x=x+k;k--;return x;}A. 5B. 3C. 2D. 43.如果在函数中定义一个变量,有关该变量作用域正确的是()。
[A] 2分A. 只在该函数中有效B. 在该文件中有效C. 在本程序中有效D. 为非法变量4.下列叙述中,正确的叙述项是()。
[B] 2分A. 定义函数时,必须要有形参B. 函数中可以没有return语句,也可以有多条return语句C. 函数f可以用f(f(x))形式调用,这种调用形式是递归调用D. 函数必须有返回值5.下列说法正确的是( ) [D] 2分A. 在C语言中,可以使用动态内存分配技术定义元素个数可变的数组B. 在C语言中,数组元素的个数可以不确定,允许随机变动C. 在C语言中,数组元素的数据类型可以不一致D. 在C语言中,定义了一个数组后,就确定了它所容纳的具有相同数据类型元素的个数6.以下能正确定义一维数组的选项是( )。
C语言程序设计(第三版)谭浩强习题与答案 第七章
7.6打印出以下杨辉三角形(要求打印出10行)。
1
11
121
1331
14641
15101051
∶
∶
main()
{ static int m,n,k,b[15][15];
b[0][1]=1;
for(m=1;m<15;m++)
{for(n=1;n<=m;n++)
{ b[m][n]=b[m-1][n-1]+b[m-1][n];
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
或
main()
{static int a[10],i,j,k,t;
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=1;i<=10-j;j++)
if (a[i]>a[i+1])
{ i=i-1;
j=j+1;
if((i<1)&&(j>n))
{ i=i+2;
j=j-1;
}
else
{ Байду номын сангаасf(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
c语言数组考试题及答案
c语言数组考试题及答案一、选择题1. 在C语言中,数组的下标从哪个数字开始?A. 0B. 1C. 2D. 3答案:A2. 下列哪个选项是正确的数组声明?A. int arr[] = {1, 2, 3};B. int arr[5] = {1, 2, 3};C. int arr[5] = {1, 2};D. int arr[] = {1, 2, 3, 4, 5};答案:B3. 若有数组声明 int arr[5] = {1, 2, 3, 4, 5}; 则arr[2]的值是多少?A. 1B. 2C. 3D. 4答案:C二、填空题1. 假设有一个数组声明为 int arr[10] = {0}; 则arr[0]的值是______。
答案:02. 如果声明了一个数组 int arr[5] = {1, 2, 3, 4, 5}; 那么arr 数组的元素个数是______。
答案:5三、简答题1. 请简述C语言中数组的初始化方式有哪些?答案:C语言中数组的初始化方式包括:- 静态初始化:在声明数组时直接指定数组的元素值。
- 动态初始化:在声明数组后,通过循环或逐个赋值的方式初始化数组。
2. 在C语言中,如何访问数组的最后一个元素?答案:可以通过数组的长度减去1来访问数组的最后一个元素,例如对于数组arr,访问最后一个元素的方式是arr[arr.length - 1]。
四、编程题1. 编写一个C语言程序,实现将一个整数数组按照从大到小的顺序排序。
答案:```c#include <stdio.h>void sortDescending(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] < arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}int main() {int arr[] = {4, 2, 3, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);sortDescending(arr, n);for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;}```该程序首先定义了一个排序函数sortDescending,它使用冒泡排序算法将数组从大到小排序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章数组 (8学时)学习目的与要求:1 、重点掌握一维数组的定义和引用;2 、基本掌握二维数组的定义和引用;3 、重点掌握字符型数组的定义与引用;4 、能正确使用字符串处理函数;5 、学会使用数组解决实际问题。
重点:1 、一维数组的定义与引用;2 、二维数组的定义与引用;3 、字符数组的定义与引用;第1讲知识归纳:1、一维数组的定义:类型说明符数组名[ 常量表达式] ;(1) (1)数组名后必须用方括弧[ ] ,用其他括弧均错误;(2) 方括弧中的常量表达式表示数组的元素个数;(3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量;2、一维数组的引用:数组名[ 下标] //下标从0开始,可以是整型常量或整型表达式;(1) 注意:数组元素引用时,不要超出数组范围;如int a[10] ;//可以引用的数组元素为a[0]……a[9] , a[10] 不是本数组元素;3、一维数组的初始化:(1) (1)可以在定义数组后,立刻赋值;如int a [3] = { 1,3, 5} ;但下面这样是错误的:int a[3] ;a = { 1,3, 5} ;(2) (2)可以给数组的部分元素赋值,不赋值的元素,默认值为int 0, char, ‘’, float 0.0 ;如int a [3]= {1,3 } ; //a[0] =1 ; a[1]= 3 ; a[2]= 0 ;(3) 在对数组全部元素赋初值时,可以不指定元素个数;(4) 可以在循环控制下,给数组各元素赋值;如:int a[10] ;for ( i=0 ; i <10 ;i ++ )a [ i ] = i ;基础训练(A)一、选择题1、在c语言中,引用数组元素时,其数组下标的数据类型允许是()。
A)整型常量B)整型表达式C)整型常量或整型表达式D)任何类型的表达式2、要说明一个有10个int元素的数组,应当选择语句()。
A) int a[10]; B) int a(10); C) int a[9] D) int a[11]3、以下对数组的正确定义是:()。
A) float b[5.0] B) float b[5] C) float b(5) D) float 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)因为数组长度与初值的个数不相同,所以此语句不正确5、已知:int a[10];则对a数组元素的正确引用是()。
A) a[10] B) a[3.5] C) a(5) D) a[10-10]6、以下能对一维数组a进行正确初始化的语句是()。
A) int a[10]=(0,0,0,0,0); B)int a[10]={}C) int a[]={0}; D) int a[10]={10*1};7、以下能对一维数组a进行正确初始化的语句是()。
A) A)int a[5]; B)int a[3];a={0,1,2,3,4}; for(i=0;i<3;i++)scanf(“%d”,a);C) int a[3]={0,1,2,3}; D) int a[5];for(i=0;i<5;i++)scanf(“%d”,&a[i]);1、C2、A3、B4、B5、D6、C7、D二、填空题1、构成数组的各个元素必须具有相同的类型。
C语言中数组的下标必须是整正数、0或整型表达式。
如果一维数组的长度为n ,则数组下标的最小值为0,最大值为n-1。
2、在C语言中,一维数组的定义方式为:类型说说明符数组名[常量表达式]。
3、已知数组b定义为int b[ ]={9,6,3};,则b的各元素的值分别是,最小下标是,最大下标的4、在C5、已知数组T为一有10T中的10个元素的值的语句为:for (j=请补充完整下面的语句:for(j=9;j>=0;j- -)三、综合题1、下面程序(,请指出存在错误的行号(3)1 main()2 {3 int a[3]={3*0};4 int i;5 for(i=0;i<3;i++) scanf("%d",&a[i]);6 for(i=1;i<3;i++) a[0]=a[0]+a[i];7 7printf("%d\n",a[0]);8 }2、下面程序(每行程序前面的数字表示行号),请指出存在错误的行号(5)1 1main()2 2{3 3int a[3];4 4int i;5 5scanf(“%d”,&a);6 6for(i=0;i<3;i++) a[0]=a[0]+a[i];7 7printf(“a[0]=%d”,a[0]);8 8}3、下面程序(每行程序前面的数字表示行号),请指出存在错误的行号(7)1 1main()2 2{3 3int a[3];4 4int i;5 5for (i=0;i<3;i++) scanf(“%d”,&a[i]);6 6for(i=1;i<3;i++) a[0]=a[0]+a[i]);7 7printf(“%d\n”,a);8 8}第2讲知识归纳:1、二维数组的定义:类型说明符数组名[ 常量表达式1 ][常量表达式2] ;(1)常量表达式1------可以形象理解为行数;常量表达式2-----可以形象理解为列数;(2) 二维数组中元素存放顺序是:先存放第一行的元素,再存放第二行的元素,依次类推;2、二维数组的引用:数组名[ 下标] [ 下标]//下标从0开始,可以是整型常量或整型表达式;(1) 注意:数组元素引用时,不要超出数组范围;如int a[3 ] [4] ;//可以引用的数组元素为a[0][0]……a[2][3] , a[3][4]不是本数组元素;(2) 可以在循环控制下,给二维数组各元素赋值;如:int a[3] [4];for ( i=0 ; i <3 ;i ++ )for ( j=0 ; j<4;j++)a [ i ] = i * j;3、二维数组的初始化:(1)可以在定义数组后,立刻赋值;如int a [3][4] = { 1,3, 5,7,9,11} ;但下面这样是错误的:int a[3][4] ;a = { 1,3, 5,7,9,11} ;(2) (2)可以给数组的部分元素赋值,不赋值的元素,默认值为int 0, char, ‘’, float 0.0 ;(3) 在对数组全部元素赋初值时,可以省略行数,但不能省略列数;基础练习(A)一、选择题1、在C语言中,二维数组元素在内存中的存放顺序是()。
A)按行存放B)按列存放C)由用户自己定义D)由编译器决定2、以下对二维数组a的正确说明是()。
A)int a[3][] B) float a(3,4) C) double a[1][4] D) float a(3)(4)3、已知:int a[3][4];则对数组元素引用正确的是()。
A)a[2][4] B)a[1,3] C) a[2][0] D) a(2)(1)4、已知:int a[3][4]={0};则下面正确的叙述是()。
A)只有元素a[0][0]可得到初值0B)此说明语句是错误的C)数组a中的每个元素都可得到初值,但其值不一定为0D)数组a中的每个元素均可得到初值05、以下正确的语句是()。
A)int a[1][4]={1,2,3,4,5}; B) float x[3][]={{1},{2},{3}};C) long b[2][3]={{1},{1,2},{1,2,3}}; D) double y[][3]={0};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},{},{1,1}};1、A2、C3、C4、D5、D6、B二、填空题下面的程序是求出数组a的两条对角线上的元素之和。
#include "stdio.h"main(){ int a[3][3]={{1,3,6},{7,9,11},{14,15,17}},sum1=0,sum2=0,i,j;for (i=0;i<3;i++)for (j=0;j<3;j++)if (i==j) sum1=sum1+a[i][j];for (i=0;i<3;i++)for ( ; ; j--)if (i+j==2)sum2=sum2+a[i][j];printf("sum1=%d,sum2=%d\n",sum1,sum2);}1、j=22、j>=i三、编程题1、在一个二维数组中形成并输出如下矩阵:1 2 33 2 11 1 1main(){ int a[5][5],i,j;printf("input 5*5:\n");for (i=0; i<5; i++)for (j=0; j<5; j++)scanf("%d",&a[i][j]);for (i=0;i<5; i++){ for (j=0; j<5; j++)printf("%d",a[i][j]);printf("\n");}}2、有一个3*4的矩阵,求其中的最大元素的值。
main(){ int a[3][4],i,j,max;for (i=0;i<3; i++)for (j=0; j<4; j++)scanf("%d",&a[i][j]);max=a[0][0];for (i=0;i<3;i++)for (j=0;j<4;j++)if (a[i][j]>max) max=a[i][j];printf("max=%d\n",max);}第3讲知识归纳:1、字符数组的定义与引用:类型说明符数组名[ 常量表达式] ;(1) 与一维数组、二维数组定义、引用相同,只是类型说明符固定为:char2、字符数组的初始化:(1)逐字符赋值如char c1 [10] = { ‘W’,’e’,’l’,’c’,’o’,’m’,’e’} ;但下面这样是错误的:char c1 [10] ;c1 = { ‘W’,’e’,’l’,’c’,’o’,’m’,’e’} ;(2) 字符串赋值和字符串结束标志如char c1[10 ] = “ Welcome ” ;但下面这样是错误的:char c1 [10] ;c1 = “ Welcome ” ;注意:系统会自动在字符串末尾加一个结束标志’\0’ , 所以,定义字符数组时需要在字符个数基础上,多定义一个字节存储空间,存放结束标子;3、字符数组的输入输出:(1) 逐个字符输入输出。