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