C程序设计(第三版)课后习题参考解答
写一个程序,输入a,b,c三个值,输出其中最大者。 解: main ( )
{int a,b,c,max;
printf(“请输入三个数a,b,c: \\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if (max
max=b; if (max max=c; printf(“ 最大数为:%d ”,max); } 第2章 程序的灵魂——算法 什么叫结构化的算法为什么要提倡结构化的算法 解:由一些基本结构顺序组成的算法称为结构化的算法。由于在基本结构之间不存在非顺序的跳转,流程的转移只存在于一个基本结构范围之内,因而提高了算法的质量。 什么叫结构化程序设计它的主要内容是什么 解:结构化程序就是用高级语言表示的结构化算法。它的主要内容包括“自顶向下,逐步细化”的分析方法和“模块化设计”的解决方法,以及“结构化编码”的实现方法。 第3章 数据类型、运算符与表达式 3.3请将下面各数用八进制和十六进制数表示: (1)10 (2)32 (3)75 (4)-617 (5)-111 (6)2483 (7)-28654 (8)21003 解:(1) (10) 10=(12) 8=(A) 16 (2) (32)10=(40)8=(20) 16 (3) (75)10=(113)8=(4B) 16 (4) (-617)10=(176627)8=(FD97) 16 此题可以这样考虑:带符号数在计算机中采用补码表示,正数的补码与原码相同,负数的补码=模+真值。若使用16位存储,模为2=65536。-617的补码为65536+(-167)=64919=(176627)(FD97)8= 16 16 (5) (-111)10=(177621)8=(FF91) 16 (6) (2483)10=(4663)8=(9B3) 16 (7) (-28654)10=(110022)8=(9012) 16 (8) (21003)10=(51013)8=(520B) 16 3.4将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。 变量的类型 25 -2 32769 int型 long型 sort型 signed char(8位) unsigned int型 unsigned long型 unsigned short型 unsigned char型 注:如果没有学过二进制和补码,此题可以不做。 解:各数据在内存中的存储形式如下表所示: 变量的类型25 -2 32769 int型8 位 00… 0110 15 11 … 1110 31 110 15 100 … 001(溢出) 14 00… 0100 … 001 16 14 100 … 001(溢出) 14 00000001(溢出) 100 … 001 14 00… 0100 … 001 16 14 100 … 001 8 long型 00… 0 24 short型 00… 0 8 signed char(8位) unsigned int型8 00… 011 … 110 15 11 … 110 31 11 … 110 15 unsigned long型 00… 0 24 unsigned short型 00… 0 8 unsigned char型 其中int和short类型,其取值范围是-32768~32767。32769在这两种类型中实际表示负数,它是一个负数的补码,对其再求一次补码可得其真值,即-(65536-32769)=-32767。 char和unsigned char为8位,若将int或long类型数据赋给这种类型,则截取数据低8位。同理,若将long赋给int,则截取低16位。 3.5字符常量和字符串常量有什么区别 解:字符常量是一个字符,用单引号括起来。字符串常量是由0个或若干个字符组合而成,用双引号括起来,存储时自动在字符串最后加一个结束符号’\\0’。 3.6写出以下程序运行的结果: # include<> void main ( ) { char c1=’a’, c2=’b’, c3=’c’, c4=’\\101’, c5=’\\116’; printf (“a%c b%c\\t c%c\\t abc\\n”, c1, c2, c3); printf (“\\t\\b%c %c”, c4, c5); } 解:程序运行的结果为: aa bb cc abc A N 3.7要将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为’C’,’h’,’i’,’n’,’a’,经过运算,使c1,c2,c3,c4,c5的值分别变为’G’,’l’,’m’,’r’,’e’,并输出。 解: main ( ) { char cl=’C’, c2=’h’, c3=’i’, c4=’n’, c5=’a’; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf(“密码是%c%c%c%c%c\\n, c1, c2, c3, c4, c5); } 运行结果: 密码是Glmre 3.8例能否改成如下: main ( ) { int c1, c2; (原为 char c1, c2) c1=97; c2=98; printf (“%c %c\\n”, c1, c2); printf (“%d %d\\n”, c1, c2); } 解:可以。因为在可输出的字符范围内,用整型和用字符型作用相同。 3.9求下面算术表达式的值。 (1) x+a%3*(int)(x+y)%2/4 设x=,a=7,y=4..7 (2) (float)(a+b)/2+(int)x%(int)y 设a=2,b=3,x=,y= 解: (1) (2) 3.10写出程序运行的结果。 main ( ) { int i, j, m, n; i=8; j=10; m=++i; n=j++; printf (“%d, %d, %d, %d”, i, j, m, n); } 解:运行结果为: 9,11,9,10 3.11写出下面赋值的结果。格中写了数值的是要将它赋给其他类型的变量,将所有空格填上赋值后的数值。 int 99 ‘d’ 76 42 ⅹ 65535 char unsigned int float long int 解: 68 int99 100 76 ‘L’ 53 ‘5’ 68 ‘D’ 42 ‘*’ -1 ⅹ 5535 char‘c’ ‘d’ unsigned 99 1 int