第七章 数组

更新时间:2023-03-08 07:10:32 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第七章 数组

数组是程序设计语言中最基本,最重要的组成部分,本章的习题将从C语言数组的基本概念出发,讨论C语言数组的特点和使用方法,并通过典型的例题和常见算法研究数组的一般应用,本章的主要内容包括: ● 数组基本概念。包括:数组的定义,数组的类型,数组维数,体积,数组元素和数组下标的概念,数组

说明,对数组进行初始化的方法,多维数组中元素的排列次序及初始化等问题。

● 字符型数组。包括:字符型数组与其它数组的区别,字符串及其特点,对字符型数组进行初始化,使用

不同的库函数输入输出字符串,对字符串的简单处理(求串长,串复制,串连接,串比较,串反向等) 等。

● 数组与函数之间的关系。包括:将数组作为组与函数之间进行传递等。 ● 常见的使用数组的算法。包括:排序算法,查找算法等。

7.1 选择题

【7.1】错误的说明语句是 。

A) static char word[ ]={‘T’,’u’,’r’,’b’,’o’,’\\0’}; B) static char word[ ]={“Turbo\\0”}; C) static char word[ ]=”Turbo\\0”; D) static char word[ ]=‘Turbo\\0’;

【7.2】已知:char s[5],c;register int b;则调用函数scanf的正确语句是 。

A) scanf(“%s%c”,s,c); B) scanf(“%d%c,&b,&c); C) scanf(“%d%c”,b,&c); D) scanf(“%s%c”,s,&c);

【7.3】要说明一个有10个int元素的数组,应当选择语句 。

A) int a [10]; B) int a[2,5]; C) int a [ ]; D) int *a[10];

【7.4】合法的数组说明语句是 。

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,4,5,};

【7.5】在下述对C语言字符数组的描述中错误的是 。

A) 字符数组可以存放字符串

B) 字符数组中的字符串可以进行整体输入输出

C) 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D) 字符数组的下标从0开始

【7.6】调用strlen(“abcd\\0ef\\0g”)的返回值为 。

A) 4 B) 5 C) 8 D)9

【7.7】 若有以下语句, 则正确的描述是 。 static char x[ ]=”12345”;

static char y[ ]={‘1’,’2’,’3’,’4’,’5’};

A) x数组和y数组的长度相同 B) x数组长度大于y数组长度 C) x数组长度小于y的数组长度 D) x数组等价于y数组

【7.8】已知:char str1[10],str2[10]={“books”};则在程序中能够将字符串“books”赋给数组str1的正确语句是 。

A) str1 = {“Books”}; B) strcpy (str1,str2); C) str1 = str2; D) strcpy (str2,str1);

【7.9】以下程序段的输出是 。

static char a[ ] = “-12345”; int k=0,symbol, m;

if (a[k]==‘+’|| a[k]==‘-’) symbol = (a[k++]==‘+’) ? 1:-1; for (m=0; a[k]>=‘0’&& a[k]<=‘9’;k++) m = m * 10 +a[k]-’0’;

printf(“number=&d\\n”,symbol*m); A) number = -12345 B) number = 12345 C) number = -1000 D) number = 1000

【7.10】若用数组名作为函数调用时的实参,则实际上传递给形参的是 。

A) 数组首地址 B) 数组的第一个元素值 C) 数组中的全部元素的值 C) 数组元素的个数

【7.11】已知:char str1[20]=”abcde”,str2[20]=”xyz”;则执行语句: printf(“&d”,strlen(strcpy(str1,str2))); 输出结果是 。

A) 9 B) 3 C) 5 D) 8

【7.12】下面关于字符串的说明中,错误的是 。

A) char str[7]=”FORTRAN”;

B) char str[ ]=”FORTRAN”; C) char *str =”FORTRAN”;

D) char str[ ]={‘F’,’0’,’R’,’T’, ‘R’,’A’,’N’,’\\0’};

【7.13】已知:

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] );

A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9

【7.14】已知:char str[ ]=”ab\\n\\012\\\\\\””;则执行语句: printf(“&d”,strlen(str)); A) 3 B) 4 C) 6 D) 12

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

A) 整型常量 B) 整型表达式

C) 整型常量或整型表达式 D) 任何类型的表达式

【7.16】以下对一维整型数组a的正确说明是 。

A) int a(10); B) int n=10,a[n]; C) int n;

scanf(“&d”,&n); int a[n]; D) #define SIZE 10

int a[SIZE];

【7.17】已知:int a[10];则对a数组元素的正确引用是 。 A) a[10] B) a[3.5]

C) a(5) D) a[10-10]

【7.18】在C语言中,一维数组的说明方式为: 类型说明符 数组名 。

A) [常量表达式] B) [整型表达式]

C) [整型常量]或[整型表达式] D) [整型变量]

【7.19】以下对外部的一维数组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.20】以下对二维数组a的正确说明是 。

A) int a[3] [ ]; B) float a(3,4); C) double a[1] [4]; D) float a(3) (4);

【7.21】已知: int a[3][4];则对数组元素引用正确的是 。 A) a[2][4] B) [1,3] C) a[1+1][0] D) a(2) (1)

【7.22】已知:int a[3][4];则对数组元素的非法引用是 。 A) a[0][2*1] B) a[1][3] C) a[4-2][0] D) a[0][4]

【7.23】以下能对外部的二维数组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}};

【7.24】以下不能对二维数组a进行正确初始化的语句是 。

A) int a[2][3] = {0};

B) int a[ ][3] = {{1,2},{0}};

C) int a[2][3] = {{1,2},{3,4},{5,6}}; D) int a[ ][3] = {1,2,3,4,5,6};

【7.25】已知:static int a[3][4]={0};则下面正确的叙述是 。

A) 只有元素a[0][0]可得到初值0 B) 此说明语句是错误的

C) 数组a中每个元素都可得到初值,但其值不一定为0 D) 数组a中每个元素均可得到初值0

【7.26】已知在函数的外面有:int a[ ][4]={0,0};则下面 叙述中错误的是 。

A) 数组 a的每个元素都可得到初值0 B) 二维数组a的第一维大小为1

C) 因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1 D) 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0

【7.27】已知:static int a[3][4];则数组a中各元素 。

A) 可在程序的运行阶段得到初值0 B) 可在程序的编译阶段得到初值0 C) 不能得到确定的初值

D) 可在程序的编译或运行阶段得到初值0

【7.28】以下各组中选项中,均能正确说明二维实型数组a的是 。

A) float a[3][4]; float a[][4];

float a[3][]={{1},{0}}; B) float a(3,4);

float a[3][4];

float a[][]={{0},{0}}; C) float a[3][4];

float a[][4]={{0},{0}};

auto float a[][4]={{0},{0},{0}} E) float a[3][4];

float a[3][]; float a[][4];

【7.29】在C语言中,二维数组元素在内存中的存放顺序是 。

A) 按行存放 B) 按列存放

C) 由用户自己定义 D) 由编译器决定 【7.30】对以下说明语句的正确理解是 。 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) 因为数组长度与初值的个数不相同,所以此语句不正确

【7.31】下列数组说明语句中错误的是 。

A) double x[5] = {2.0,4.0,6.0,8.0,10.0}; B) int y[5] = {0,1,3,5,7,9};

C) char c1[ ] = {‘1’,‘2’,‘3’,‘4’,‘5’}; D) char c2[ ] = {‘\\x10’, ‘\\xa’, ‘\\x8’};

【7.32】已知:int a[ ][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是 。 A) 2 B) 3 C) 4 D)无确定值

【7.33】若二维数组a有m列,则在a[i][j]之前的元素各数为 。 A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+1 【7.34】以下正确的语句是 。

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

#include main ( ) { char str[30];

scanf (“%s”, str); printf (“%s”, str);

}

运行程序,输入:Fortran Language

【7.56】阅读程序,写出执行结果。 #include “stdio.h” main ( ) { char str[30]; gets (str); printf (“%s\\n”, str); {

运行程序,输入:Fortran Language

【7.57】阅读程序,写出执行结果。 #include “stdio.h” func ( int b[ ] ) { int j;

for (j=0; j<4; j++)

b[j]=j;

} main ( ) { int a[4], i; func (a);

for ( i=0; i<4; j++) printf ( “%d”, a[i]); }

【7.58】写出程序的运行结果。 #include #include main ( )

{ char str[100] = “How do you do”; strcopy ( str + strlen(str)/2,”es she”); printf (“%s\\n”,str);

}

【7.59】运行下面的程序,如果从键盘上输入字符串“qwerty”和字符串“abcd“,请写出程序的运行结果。

#include strle ( char a [ ], char b [ ] ) { int num=0, n=0;

while ( a[num]!=?\\0? ) num++; while (b[n]) { a[num]=b[n];

num++; n++; }

return ( num );

} main ( )

{ char str1[81], str2[81]; gets (str1); gets (str2);

printf (“%d\\n”, strle (str1, str2 ) ); }

7.3 程序选择填空

【7.60】下面程序输出两个字符串中对应位置相同的字符。请选择填空。 #include char x[ ]=”programming”; char y[ ]=”Fortran”; main ( ) { int i=0;

while ( x[i]!=?\\0? && y[i]!=?\\0? ) if ( x[i]= =y[i] ) printf(“%c”, ① ); else i++;

}

A) x[i++] B) y[++i] C) x[i] D) y[i]

【7.61】有已按升序排好序的字符串a,下面的程序是将字符串s中的每个字符按升序的规则插到数组a中。

#include #include main ( )

{ char a[20] = “cehiknqtw”; char s[ ] = “fbla”;

int i, k, j;

for ( k=0; s[k]!=?\\0?; k++) { j=0;

while ( s[k]>=a[j] && a[j]!=?\\0? ) j++; for ( ① ) ② ; a[j]=[k]; } puts(a);

}

① A) i=stlen(a)+k; j>=j; i-- B) i=strlen(a); i>=j; i-- C) i=j; i<=strlen(a)+k; i++ D) i=j ; i<=strlen(a); i++

② A) a[i]=a[i+1] B) a[i+1]=a[i] C) a[i]=a[i-1] D) a[i-1]=a[i]

【7.62】下面程序的功能是将已按升序排好的两个字符串a和b中的字符按升序归并到字符串c中。 #include #include main ( )

{ char a[ ]=”acegikm”; char b[ ]=”bdfhjlnpq”; char c[80],*p; int i=0, j=0, k=0;

while ( a[i]!=?\\0? && b[j]!=?\\0? ) { if ( a[i]

else { ② } k++;

} c[k]=?\\0?; if ( ③ ) p=b+j; else p=a+i; strcat( c, p);

puts( c );

}

① A) c[k]=a[i]; i++; B) c[k]=a[j]; i++;

C) c[k]=b[i]; j++; D) c[k]=b[j]; j++;

② A) c[k]=a[i]; i++; B) c[k]=a[j]; i++;

C) c[k]=a[i]; j++; D) c[k]=b[j]; j++;

③ A) a[i]= =?\\0? B) a[i]!=?\\0?

C) a[i-1]= =?\\0? D) a[i-1]!=?\\0?

【7.63】下面程序的功能是将字符串 s中所有的字符’c’ 删除。请选择填空。

#include main ( ) { char s[80]; int i, j; gets(s);

for (i=j=0; s[i]!= ?\\0?; i++ ) if ( s[i]!=?c? ) ; s[j]= ?\\0?; puts(s); }

A) s[j++]=s[i] B) s[++j]=s[i] C) s[j]=s[i];j++ D) s[j]=s[i]

【7.64】下面程序的功能是从键盘输入一行字符,统计其中有多少个单词。假设单词之间是以空格分隔。

#include main ( )

{ char s[80],c1,c2=’’; int i=0, num=0; gets(s);

while ( s[i]!=’\\0’) { c1=s[i];

if ( i==0 ) c2=’’; else c2=s[i-1]; if ( ) num++; i++; }

printf(“There are %d words.\\n”,num); }

A) c1==’’&&c2==’’ B) c1!=’’&&c2==’’ C) c1==’’&&c2!==’’ D) c1!=’’&&c2!=’’

【7.65】*口袋中有红,黄,蓝,白,黑色彩球各一个,任意从中取出3个,问:可以有多少种不同(顺序

不限)的取法。下列的程序用来输出全部不同的取法,格式为“第1种“---”。注意:程序中的计次是从1开始,而不是从0开始的。

#include

main ( )

{ int i, j, k, m, n, a[100][3]; m=0;

for ( ① ; i<5; i++) for ( j= ② ; j<5; j++) for ( k= ③ ; k<5; k++) { a[m][0]=i; a[m][1]=j; a[m][2]=k; printf (“\\n第-种: “, ④ ); for ( n=0; n<3; n++) switch ( ⑤ )

{ case 0: printf (“RED ”); break; case 1: printf (“YELLOW”); break; case 2: printf (“BLUE ”); break; case 3: printf (“WHITE “); break; case 4: printf (“BLACK “); break; } m++; } }

① A) i=1 B) i=1; C) i=0 D) i=0; ② A) i B) i+1 C) 0 D) 1 ③ A) j B) j+1 C) 0 D) 1 ④ A) i+1 B) j+1 C) k+1 D) m+1

⑤ A) a[m][n] B) a[m][i] C) a[m][j] D) a[m][k]

【7.66】*某人有5张2分的邮票和5张3分的邮票,问使用这些邮票可以组合出多少种不同面值的邮资。(例如:1张2分邮票加1张3分邮票可以组成5分的邮资;3张2分的邮票或2张3分的邮票都可以组成同样的6分邮资。) #include int a[100]; main ( ) { int I, j, k, s, n=0; for ( I =0 ) ① ;I++)

for ( j =0 ) ② ;j++) {

S = ③ ;

for (k=0; a[k]!=0;k++) if (s==a[k])

④ ;

if ( a[k]==0 && s>0 ) { ⑤ ; n++; } }

prinft ( “\\n%d kinds:”,n): for (k=0;a[k]) printf(“-,”,a[k]); }

① A) i<=2 B) i<2 C) i<=5 D) i<5 ② A) j<=3 B) j<3 C) j<=5 D) j<5

③ A) 5*i+5*j B) 2*i+5*j C) 5*i+3*j D) 2*i+3*j ④ A) a[k]=s B) n=k C) continue D) break

⑤ A) a[k-1]=s B) a[k]=s C) a[k+1]=s D) a[k+2]=s

【7.67】下面的程序是使用冒泡法对输入的10个浮点数从小到大进行排序。排好序的10个数分两行输出。程序如下:

#include main ( ) { ① ; int i, j;

printf (“Input 10 numbers please\\n”); for ( i=0; ② ; i++) scanf (“%f”, &a[i]); printf (“\\n”); for ( i=1; ③ ; i++) for ( j=0; ④ ; j++) if ( ⑤ ) { x=a[j]; ⑥ ; a[j+1]=x; }

printf (“The sorted 10 numbers;\\n”); for ( i=0; ⑦ ; i++ ) { if ( ⑧ )

printf(“\\n”); printf (“%f\\t”,a[i] ); }

printf(“\\n”); }

① A) float a[10],x B) float a[9],x C) int a[10],x D) int a[9],x ② A) i>=10 B) i>=9 C) i<=10 D) i<=9 ③ A) i<=8 B) i>=9 C) i<=9 D) i>=9 ④ A) j<=9 B) j>=9 C) j<=9-i D) j>=9-I

⑤ A) a[j]>a[i] B) a[j]a[j+1] D) a[j]=9 B) i<=10 D) i>=10 ⑧ A) i%5==0 B) i%5!=0 C) i/5==0 D) i/5!=0 7.4程序填空

【7.68】程序读入20个整数,统计非负数个数,并计算非负数之和。

#include “stdio.h” main ( )

{ int i, a[20], s, count; s=count=0; for ( i=0; i<20; i++ ) scanf(“%d”, ① ) for ( i=0; i<20; i++ ) { if ( a[i]<0 ) ② ; s += a[i]; count++; }

printf (“s=%d\\t count=%d\\n”, s, count); }

【7.69】下面的程序是求出数组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 ); }

【7.70】下面的函数invert的功能是将一个字符串的内容颠倒过来。

Void invert ( char str [ ] ) { int i, j, ① ;

for (i=0,j=strlen(str) ② ;i

}

【7.71】以下程序是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不同字符的ASCII码之差.例如:输入的两个字符串分别为”abcdefg”和”abceef”,则第一个不同的字符为’d’和’e’,输出为-1.

#include “stdio.h” main ( )

{ char strl[100],str2[100],c; int I ,s;

printf (“Enter string 1:”); gets(str1); printf (“Enter string 2:”); gets(str2); i =0;

While ((str1[i]==str2[i] && strt1[i]!= ① )) i++; s= ② ;

printf(“%d\\n”,s); }

【7.72】*从键盘上输入若干(不超过100个)学生的成绩,计算出平均成绩,并输出低于平均分的学生的成绩,用输入负数结束输入.

#include “stdio.h” main ( )

{ float x[1000], sum=0, ave, a; int n=0, i;

printf (“Enter mark:” ); scanf (“%f”, &a); while (a>0 && n<1000 ) { sum += ① ; x[n] = ② ; n++;

scanf (“%f”, &a); } ave = ③ ; printf (“Output:\\n”); printf (“ave=%f\\n”,ave); for ( i=0; i

【7.73】*求所有不超过200的N值,N的平方是具有对称性质的回文数。所谓回文数就是将一个数从左向右读与从右向左读是一样的,例如:34543和1234321都是回文数

例如:满足题意要求的数有:N=11,11=121;N=111,111=12321。 #include main ( )

{ int m[16], n, i, t, count=0; long a, k;

printf (“Result is:\\n”); for ( n=10; n<200; n++ ) { k = 0; t = 1; a = n*n;

for ( i=1; a!=0; i++ ) { ① ; a / = 10; }

for ( ; i>1; i-- ) { k += m[i-1]*t; ② ; } if ( ③ )

2

2

printf( “-: d d\\n”, ++count, n, n*n); } }

【7.74】*下面的函数是在二维数组中产生如下形式得杨辉三角形。

1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 …… …… #define N 11 yahui (int a[ ][N]) { int i, j; for(i=1; i

for ( ① ; i

【7.75】下面的函数fun的功能是将形参x的值转换成二进制数,所得二进制数的每一位放在一维数组中返回,二进制的最低位放在下标为0的元素中,其它以此类推。

fun ( int x, int b[ ]) { int k=0, r; do

{ r=x% ① ; b[k++] = r; x /= ② ; } while (x); }

【7.76】*以下程序可以将从键盘上输入的十进制数(long型)以二进制,八进制或十六进制数的形式输出。

#include main ( )

{ char b[16]={?0?, ?1?, ?2?, ?3?, ?4?, ?5?, ?6?, ?7?, ?8?, ?9?, ?A?, ?B?, ?C?, ?D?, ?E?, ?F?}; int c[64], d, i=0, base; long n;

printf (“Enter a number:”); scanf (“”, &n);

printf (“Enter new base:”); scanf(“%d”, &base); do

{ c[i] = ① ; i++; n=n/base; } while ( n!=0 );

printf (“Transmite new base:\\n”); for ( --i; i>=0; --i ) { d = c[i];

printf (“%c”, b ② ); } }

【7.77】下列程序最多从键盘输入99个字符,遇到’\\n’后则退出,遇到空格则换成字符‘#’,对其它字符依次原样送入数组c中。

#include”stdio.h” main ( ) { int i; char ch, c[100]; for ( i=0; ① ; i++ )

{ if ( (ch=getchar( ) ) = = ?\\n? ) ② ; if ( ch = = ? ? ) ③ ; c[i]=ch; }

c[i]= ?\\0? ; puts(c); }

【7.78】下面的程序将一个无符号整数转换为二进制表示存入字符数组中。 #include”stdio.h” main ( )

{ char bin[20]; unsigned n, i=0; printf (“Input a data”); scanf(“%d”, &n); do

{ bin[i++] = ① ; } while ( (n/=2)!=0) ② ; reverse(bin);

puts(bin); }

reverse (char s[ ] ) { int temp, i, j;

for ( i=0, j=strlen(s)-1; i

s[i]=s[j]; s[j]=temp;

} }

【7.79】下面的函数itoh(n,s)完成将无符号十进制整数转换成十六进制表示,并存入字符串组S中。程序中用到的函数reverse(char s[ ])是一个将字符串置逆的函数(参见【4.78】)。

itoh (unsigned n, char s[ ] ) { int h, i=0; do { h=n;

s[i++] = (h<=9) ? h+‘0’: ① ;

} while ((n/=16)!=0);

② ;

reverse(s); }

【7.80】函数expand(char s[ ], char t[ ])在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义字符表示,即用’\\n’表示换行符,用’\\t’表示制表符。

expand ( char s[ ], char t[ ] ) { int i, j;

for ( i=j=0; s[i]!=‘\\0‘;i++ ) switch(s[i])

{ case ?\\n?: t[ ① ] = ② ; t[j++] = ?n?; break;

case ?\\t?: t[ ③ ] = ④ ; t[j++] =?t?; break;

default: t[ ⑤ ] = s[i]; break; } t[j] = ⑥ ; }

【7.81】函数 squeez (char s[ ], char c )的功能是删除字符串s中所出现的与变量c相同的字符。 squeez ( char s[ ], char c ) { int i, j;

for ( i=j=0; ① ; i++ ) if ( s[i]!=c ) ② ; s[j] = ?\\0?; }

【7.82】函数index(char s[ ], char t[ ])检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则送回-1。 index ( char s[ ], char t[ ] ) { int i, j, k;

for (i=0; s[i]!=’\\0’; i++) { for ( j=i, k=0; ① && s[j]= =

t[k]; j++,k++);

if ( ② )

return (i);

} return(-1);

}

7.5编写程序

【7.83】反向输出有5个元素的int数组中各个元素的值。 【7.84】在一个二维数组中形成并输出如下矩阵: 1 1 1 1 1 2 1 1 1 1 A= 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1

【7.85】求矩阵A(2 * 3)的转置矩阵B(3 * 2)。

A=

1 2 3 4 5 6

1 4

B=

2 5

3 6

【7.86】某班期终考试科目为高等数学(MT),英语(EN)和物理(PH),有30人参加考试。为评定奖学金,要求统计并输出一个表格,表格内容包括学号,各科分数,总分和平均分,并标出三门课均在90分以上者(该栏标志输出为”Y”,否则为”N”),表格形式如下:

NO MT EN PH SUM V >90

-----------------------------------------------------------------------

1 97 87 92 276 92 N 2 92 91 90 273 91 Y 3 90 81 82 253 84 N …..

可以将学生的学号和各科成绩放在数组a[30][4]中,然后进行统计处理。 【7.87】有一个3 * 4的矩阵,求其中的最大元素的值。 【7.88】编写程序实现将字符串str2拷贝到字符串str1。

【7.89】输入英文的星期几,查找星期表后输出对应的数字。具体的算法是:若发现与表中某项相同,则输出该字符串在表中的位置(序号);若查到表尾仍不相同,则输出错误信息。设星期表的内容如下图所示。

sunday mondy tuesday wednesday 0 1 2 3 4 5

6

【7.90】编写一个C函数,实现保留小数点后第N-1位,从第N位四舍五入。用该函数对数组a[5]中的各元素从小数点后第2位开始四舍五入。 thursday 【7.91】编写一个交换变量值的C函数,交换数组a和数组b中的对应元素。

friday 【7.92】给定一维数组a,求a中各元素的平均值。

【7.93】给定某年某月,将其转换成这一年的第几天并输出。

【7.94】如果一个正整数等于其各个数字的立方和,则该数称为阿姆

saturday 333

斯特朗数(亦称为自恋性数)。如407=4+0+7就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。

7.6 思考题

【7.95】写出下面给出的数组说明中所定义的数组名、类型、维数、数组体积,并给出各数组元素在计算机中占用存储单元的情况。 int x[4]={1,2,3,4};

float y[3][4]={1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8}; int z[2][2][3]={1,2,3,4,5,6,7,8,9,10,11,12};

int i[2][3]={{},{4,5,6}}, j[2][2][2]={{},{3,4},{},{7,8}}; char c1[10]={“happy”}, c2[][3]={{“ * ”},{* *},{ * }}; 【7.96】设有两个数组被说明为: char a[10],b[10];

以下标1到9的顺序,它们分别被赋值为:

a:‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’ b:‘2’,‘4’,‘7’,‘1’,‘3’,‘6’,‘1’,‘3’,‘3’

执行下面C程序段后其输出结果是什么?设程序中出现的变量已在前面说明为: char subst; int i; for (i=1;i<=9;i++) { subst=a[i]; a[i]=b[10-i]; b[10-i]= subst }

for (i=1;i<=9;i++) printf(“%d,a[i]”);

printf(“\\n%d%d%d”,b[1] ,b[2] ,b[3]);

【7.97】设某班50人,写一程序统计某一单科成绩各分数的分布人数,每人的成绩随机输入,并要求按下面

格式输出统计结果(“*”表示实际分布人数。)

0 -- 39 * 40 --49 ** 50 --59 ***** ??

90 --100 ****

【7.98】输入二维数组a[3][5],打印其中最小值和最大值及其对应的行列位置。 【7.99】输入5×5的数组,编写程序实现:

(1) 求出对角线上各元素

的和;

(2) 求出对角线上行、列下

标均为偶数的各元素的积。

(3) 找出对角线上其值最大

的元素和它在数组中的位置。

【7.100】找出一个二维数组中的鞍点,即该位置上的元素是该行一的最大值,是该列上的最小值。二维数组也可能没有鞍点。

【7.101】简单的密码加密程序。其加密过程是先定义一张字母加密对照表。

输入 输出 输入 输出 a d i a b w k b c k ; c d ; w e e i

将需要加密的一行文字输入加密程序,程序根据加密表中的对应关系,可以

很简单地将输入的文字加密输出,对于表中未出现的字符则不加密。 【7.102】*使用二维数组输入:”BASIC”,”ADA”,”Pascal”,”C”, ”Fortran”,将它们按从小到大的顺序排列后输出。

【7.103】已知某运动会上女子百米运动员决赛成绩。要求编写程序,按成绩排序并按名次输出排序结果,包括名次,运动员号,成绩三项内容。

【7.104】将矩阵A[2][3]的六个元素送入矩阵A[3][2]中,使其顺时针旋转90度。例:

1 2 3 4 1 a= b= 5 2 4 5 6 6 3

【7.105】从1981年开始到2000年止,我们将遇到多小个素数年号?

【7.106】输入10个人的序号或成绩,对成绩从小到大进行排序,输出排序后的序号和成绩。

【7.107】*从键盘上任意输入若干个整数(少于50),当遇到-1时停止,对输入数据从小到大排序后输出。 【7.108】*对数组A中的N(0

相同的整数要具有相同的编号。例如:

A(5,3,4,7,3,5,6) 则输出为: (3,1,2,5,1,3,4)

【7.109】*现将不超过2000的所有素数从小到大排成一行,第二行上的每个数都等于它“右肩”上的素数与“左肩”上的素数之差。请编程求出:第二行数中是否存在这样的若干个连续的整数,它们的和正好是1898?假如存在的话,又有几种这样的情况?

第一行:2 3 5 7 11 13 17 ?? 1979 1987 1993 第二行: 1 2 2 4 2 4 ?? 8 6

【7.110】*下面是5*5的螺旋方阵。请编程生成n*n(n<10)阶方阵。

1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9

【7.111】*下面是5*5的螺旋方阵。请编程生成n*n(n<10)阶方阵。

25 24 23 22 21 10 9 8 7 20 11 2 1 6 19 12 3 4 5 18 13 14 15 16 17

相同的整数要具有相同的编号。例如:

A(5,3,4,7,3,5,6) 则输出为: (3,1,2,5,1,3,4)

【7.109】*现将不超过2000的所有素数从小到大排成一行,第二行上的每个数都等于它“右肩”上的素数与“左肩”上的素数之差。请编程求出:第二行数中是否存在这样的若干个连续的整数,它们的和正好是1898?假如存在的话,又有几种这样的情况?

第一行:2 3 5 7 11 13 17 ?? 1979 1987 1993 第二行: 1 2 2 4 2 4 ?? 8 6

【7.110】*下面是5*5的螺旋方阵。请编程生成n*n(n<10)阶方阵。

1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9

【7.111】*下面是5*5的螺旋方阵。请编程生成n*n(n<10)阶方阵。

25 24 23 22 21 10 9 8 7 20 11 2 1 6 19 12 3 4 5 18 13 14 15 16 17

本文来源:https://www.bwwdw.com/article/g7c.html

Top