C语言数组试题(5)

2019-05-24 16:20

{ int i,a[3][3]={1,2,3,4,5,6,7,8,9},sum=0; for(i=1;i<=3;i++) sum+=a[i][i]; printf(\ }

解答:C语言中数组元素的下标是从0开始的,所以循环变量i的取值应该是0到2。 答案:

错误行:将语句for(i=1;i<=3;i++) sum+=a[i][i]; 修改为:for(i=0;i<3;i++) sum+=a[i][i]; 5. 程序设计题

(1)输入10个整型数存入一维数组,输出值和下标都为奇数的元素个数。 解答: main()

{ int a[10],i,num=0;

printf(\ for(i=0;i<10;i++) scanf(\ for(i=0;i<10;i++)

if(i%2==1&&a[i]%2==1) num++; printf(\ }

(2)从键盘输入任意10个数并存放到数组中,然后计算它们的平均值,找出其中的最大数和最小数,并显示结果。

解答: main()

{ float a[10],ave=0,max,min; int i;

printf(\ for(i=0;i<10;i++) scanf(\ max=a[0];min=a[0]; for(i=0;i<10;i++) { ave+=a[i];

if(maxa[i]) min=a[i]; }

ave/=10;

printf(\}

(3)有5个学生,每个学生有四门课程,将有不及格课程的学生成绩输出。 解答: main()

{ int a[5][4]={{78,87,93,65}, {66,57,70,86}, {69,99,76,76},

82

{78,59,87,90}, {90,67,97,87}}; int i,j,k;

for(i=0;i<5;i++) for(j=0;j<4;j++) if(a[i][j]<60)

{ printf(\ for(k=0;k<4;k++)

printf(\ printf(\ break; } }

(4)已知两个升序序列,将它们合并成一个升序序列并输出。

解答:用数组a、b分别存放两个已知的升序序列,然后用下列方法将数组a、b中的元素逐个插入到数组c中。

?a[i]c[k]???b[j]a[i]?b[j]a[i]?b[j]

其中i、j、k的初值都为0,插入后k的值加1,i或j的值加1。 main()

{ int a[4]={1,3,5,7}; int b[5]={2,4,6,8,10}; int c[20],i=0,j=0,k=0; while(i<4&&j<5)

if(a[i]

printf(\ printf(\}

(5)从键盘上输入一个字符串,统计字符串中的字符个数。不许使用求字符串长度函数strlen()。 解答:

#include \main()

{ char str[81],*p=str; int num=0;

printf(\ gets(str);

while(*p++) num++;

printf(\

83

}

(6)输入一个字符串存入数组a,对字符串中的每个字符用加3的方法加密并存入数组b,再对b中的字符串解密存入数组c,最后依次输出数组a、b、c中的字符串。

解答:

#include \main()

{ char a[81],b[81],c[81]; char *pa=a,*pb=b,*pc=c; printf(\ gets(a);

while(*pa) {*pb=*pa+3; pa++;pb++;} *pb='\\0'; pb=b;

while(*pb) {*pc=*pb-3; pb++;pc++;} *pc='\\0';

printf(\ printf(\ printf(\}

(7)输入一个字符串,输出每个大写英文字母出现的次数。

解答:定义一个有26个元素的一维整型数组num,依次用来存放各个大写英文字母出现的个数。由于各大写英文字母的ASCII码与'A'的ASCII码的差,正好是用来存放该大写英文字母个数的数组元素的下标,所以,若当前字符*p为大写英文字母,则执行num[*p-'A']++即可使指定的数组元素值加1。

#include \main()

{ char str[81],*p=str; int num[26]={0},i;

printf(\ gets(str); while(*p)

{ if(*p>='A'&&*p<='Z') num[*p-'A']++; p++; }

for(i='A';i<='Z';i++) printf(\ printf(\ for(i=0;i<26;i++)

printf(\ printf(\}

(8)把从键盘输入的字符串逆置存放并输出。

解答:定义两个字符指针变量p和q,分别指向第一个字符和最后一个字符,交换p和q指向的字符,然后 p指向下一个字符,q指向前一个字符,再交换p和q指向的字符,如

84

此下去,直到p>=q为止。

#include \main()

{ char str[81],*p,*q,ch;

printf(\ gets(str); p=str;q=p; while(*q) q++; q--;

while(p

(9)输出4×4阶矩阵的主次对角线元素之和。

解答:矩阵主对角线上的元素,其行标和列标相等,矩阵次对角线上的元素,其行标与列标之和为3,用二维数组a[4][4]来表示4×4阶矩,所以,对满足行标和列标相等或行标与列标之和为3的二维数组元素求和即可。

main()

{ int a[4][4],i,j,sum=0;

printf(\ for(i=0;i<4;i++) for(j=0;j<4;j++)

scanf(\ for(i=0;i<4;i++) for(j=0;j<4;j++) if(i==j||i+j==3) sum+=a[i][j];

printf(\}

(10)统计一个英文句子中含有英文单词的个数,单词之间用空格隔开。

解答:单词的个数可以由空格出现的次数决定(连续的若干空格作为出现一次空格,一行开头的空格不统计在内)。如果当前字符不是空格,而它前面的字符是空格,则表示新单词开始,此时计数器加1。如果当前字符和它前面的字符都不是空格,则意味着仍然是原来单词的继续,计数器不能加1。前一个字符是否为空格,可以用一个变量word来标识,若word=0,则表示前一个字符为空格,若word=1,则表示前一个字符不为空格。

#include \main()

{ char str[81],*p=str; int num=0,word=0;

printf(\ gets(str); while(*p)

{ if(*p==' ') word=0; else if(word==0)

{ num++; word=1;}

85

p++; }

printf(\}

(11)从键盘上输入四个字符串(长度小于80),对其进行升序排序并输出。

解答:利用选择排序法进行排序,用strcmp()函数进行比较,用strcpy()函数进行交换。

#include \#include \main()

{ char str[4][81],temp[81]; int i,j;

printf(\ for(i=0;i<4;i++) gets(str[i]); for(i=0;i<3;i++) for(j=i+1;j<4;j++)

if(strcmp(str[i],str[j])>0) { strcpy(temp,str[i]); strcpy(str[i],str[j]); strcpy(str[j],temp); }

printf(\ for(i=0;i<4;i++) puts(str[i]); }

(12)已知一个排好序的数组,输入一个数,要求按原来排序的规律将它插入到数组中。 解答:从数组的最后一个元素开始,逐个进行输入数和数组元素值的比较,若输入数小于数组元素值(假设原来升序排序),则数组元素值后移一个位置,否则将输入数存入当前数组元素的后一个元素。

main()

{ int a[10]={1,3,5,7,9,11},n=6,i,num; printf(\ scanf(\ i=n-1;

while(a[i]>num&&i>=0) {a[i+1]=a[i];i--;} a[i+1]=num;

printf(\ for(i=0;i<=n;i++) printf(\ printf(\}

(13)编写程序,实现两个字符串的比较。不许使用字符串比较函数strcmp()。

86


C语言数组试题(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:河北省房屋建筑和市政工程施工招标文件范本(三)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: