第七章 数组 下载本文

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人,写一程序统计某一单科成绩各分数的分布人数,每人的成绩随机输入,并要求按下面