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