C程序设计(第三版)课后习题参考解答
1.6 写一个程序,输入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<b)
max=b;
if (max<c)
max=c;
printf(“ 最大数为:%d ”,max);
}
第2章 程序的灵魂——算法
2.1 什么叫结构化的算法?为什么要提倡结构化的算法?
解:由一些基本结构顺序组成的算法称为结构化的算法。由于在基本结构之间不存在非顺序的跳转,流程的转移只存在于一个基本结构范围之内,因而提高了算法的质量。
2.7 什么叫结构化程序设计?它的主要内容是什么?
解:结构化程序就是用高级语言表示的结构化算法。它的主要内容包括“自顶向下,逐步细化”的分析方法和“模块化设计”的解决方法,以及“结构化编码”的实现方法。
第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位存储,模为216=65536。-617的补码为65536+(-167)=64919=(176627)8=(FD97)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型 | 00… 0 8 位 | 111111*********0 15 | 100 … 001(溢出) 14 |
long型 | 00… 0 24 | 11 … 1110 31 | 00… 0100 … 001 16 14 |
short型 | 00… 0 8 | 111111*********0 15 | 100 … 001(溢出) 14 |
signed char(8位) | 00000001(溢出) | ||
unsigned int型 | 00… 0 8 | 11 … 110 15 | 100 … 001 14 |
unsigned long型 | 00… 0 24 | 11 … 110 31 | 00… 0100 … 001 16 14 |
unsigned short型 | 00… 0 8 | 11 … 110 c 字符串截取15 | 100 … 001 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<stdio.h>
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例2.6能否改成如下:
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=2.5,a=7,y=4..7
(2)(float)(a+b)/2+(int)x%(int)y
设a=2,b=3,x=3.5,y=2.5
解:
(1)2.5
(2)3.5
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 | 42 | |||||
char | ‘d’ | ⅹ | |||||
unsigned int | 76 | 65535 | |||||
float | 53.65 | ||||||
long int | 68 | ||||||
解:
int | 99 | 100 | 76 | 53 | 68 | 42 | -1 |
char | ‘c’ | ‘d’ | ‘L’ | ‘5’ | ‘D’ | ‘*’ | ⅹ |
unsigned int | 99 | 1 | 5535 | ||||
float | 99.000000 | 100.000000 | 76.000000 | 53.65 | 68.000000 | 42. | .000000 |
long int | 99 | 1 | 5535 | ||||
3.12 出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。
(1)a+=a (2)a-=2
(3)a*=2+3 (4)a/=a+a
(5)a%=(n%=2),n的值等于5 (6)a+=a-=a*=a
解:
(1)24 (2)10
(3)60 (4)0
(5)0 (6)0
第4章 最简单的C程序设计——顺序程序设计
4.4 若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,n=128765,c1=’a’,c2=’b’,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
要求输出的结果如下:
a=□3□□b=□4□□c=□5
x= 1.200000,y= 2.400000,z= -3.600000
x+y=□3.60□□y+z=-1.20□□z+x=-2.40
u= □51247□□n=□□□128765
c1=’a’□or□97(ASCII)
c2=’b’□or□98(ASCII)
解:
main ( )
{
int a,b,c;
long int u,n;
float x,y,z;
char c1,c2;
a=3;b=4;c=5;
x=1.2;y=2.4;z= -3.6;
u=51247;n=128765;
c1=’a’;c2=’b’;
printf(“\n”);
printf(“a=%2d□□b=%2d□□c=%2d\n”,a,b,c);
printf(“x=%.6f,y=%.6f,z=%.6f\n”,x,y,z);
printf(“x+y=□%.2f□□y+z=%.2f□□z+x=%.2f\n”,x+y,y+z,z+x);
printf(“u=%6ld□□n=%9ld\n”,u,n);
printf(“c1=’%c’ or %d(ASCII)\n”,c1,c1);
printf(“c2=’%c’ or %d(ASCII)\n”,c2,c2);
}
4.5请写出下面程序的输出结果:
main ( )
{ int a=5,b=7;
float x=67.8564,y=-789.124;
char c=’A’;
long n=1234567;
unsigned u=65535;
printf(“%d%d\n”,a,b);
printf(“%3d%3d\n”,a,b);
printf(“%f,%f\n”,x,y);
printf(“%-10f,%-10f\n”,x,y);
printf(“%8.2f, %8.2f,%4f, %4f, %3f, %3f\n”,x,y,x,y,x,y);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论