第一篇:C程序设计第四版习题完整版答案【排版整洁】
第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include
Very Good!nn”);printf(“**************************n”);return 0;}
1-6#include 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 3.2.3整型数据44 3.2.4字符型数据47 3.2.5浮点型数据49 3.2.6怎样确定常量的类型51 3.2.7运算符和表达式52 3.3C语句57 3.3.1C语句的作用和分类57 3.3.2最基本的语句——赋值语句59 3.4数据的输入输出65 3.4.1输入输出举例65 3.4.2有关数据输入输出的概念67 3.4.3用printf函数输出数据68 3.4.4用scanf函数输入数据75 3.4.5字符数据的输入输出78习题82 3-1 #include 3-2-1 #include p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次 printf(“p1=%fn”,p1); // 输出按第1方案得到的本息和 printf(“p2=%fn”,p2); // 输出按第2方案得到的本息和 printf(“p3=%fn”,p3); // 输出按第3方案得到的本息和 printf(“p4=%fn”,p4); // 输出按第4方案得到的本息和 printf(“p5=%fn”,p5); // 输出按第5方案得到的本息和 return 0;} 3-2-2 #include p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次 printf(“p1=%fn”,p1); // 输出按第1方案得到的本息和 printf(“p2=%fn”,p2); // 输出按第2方案得到的本息和 printf(“p3=%fn”,p3); // 输出按第3方案得到的本息和 printf(“p4=%fn”,p4); // 输出按第4方案得到的本息和 printf(“p5=%fn”,p5); // 输出按第5方案得到的本息和 return 0;} 3-2-3 #include p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次 printf(“p1=%10.2fn”,p1); // 输出按第1方案得到的本息和 printf(“p2=%10.2fn”,p2); // 输出按第2方案得到的本息和 printf(“p3=%10.2fn”,p3); // 输出按第3方案得到的本息和 printf(“p4=%10.2fn”,p4); // 输出按第4方案得到的本息和 printf(“p5=%10.2fn”,p5); // 输出按第5方案得到的本息和 return 0;} 3-3.#include 3-4 #include 3-5 #include 3-6 #include //要求输入圆半径r和圆柱高h l=2*pi*r; //计算圆周长l s=r*r*pi; //计算圆面积s sq=4*pi*r*r; //计算圆球表面积sq vq=3.0/4.0*pi*r*r*r; //计算圆球体积vq vz=pi*r*r*h; //计算圆柱体积vz printf(“圆周长为: l=%6.2fn”,l);printf(“圆面积为: s=%6.2fn”,s);printf(“圆球表面积为: sq=%6.2fn”,sq);printf(“圆球体积为: v=%6.2fn”,vq);printf(“圆柱体积为: vz=%6.2fn”,vz);return 0;} 3-8-1 #include //整型定义 printf(“请输入两个整数c1,c2:”);scanf(“%d,%d”,&c1,&c2);printf(“按字符输出结果:n”);printf(“%c,%cn”,c1,c2);printf(“按ASCII码输出结果为:n”);printf(“%d,%dn”,c1,c2);return 0;} 3-8-2 #include //定义字符型变量 int i1,i2; //定义整型变量 printf(“请输入两个字符c1,c2:”);scanf(“%c,%c”,&c1,&c2);i1=c1; //赋值给整型变量 i2=c2;printf(“按字符输出结果:n”);printf(“%c,%cn”,i1,i2);printf(“按整数输出结果:n”);printf(“%d,%dn”,c1,c2);return 0;} 3-8-3 #include //定义为字符型 int i1,i2; //定义为整型 printf(“请输入两个整数i1,i2:”);scanf(“%d,%d”,&i1,&i2);c1=i1; c2=i2;printf(“按字符输出结果:n”);printf(“%c,%cn”,c1,c2);printf(“按整数输出结果:n”);printf(“%d,%dn”,c1,c2);return 0;} 3-8 #include 第4章选择结构程序设计85 4.1选择结构和条件判断85 4.2用if语句实现选择结构87 4.2.1用if语句处理选择结构举例87 4.2.2if语句的一般形式 89 4.3关系运算符和关系表达式91 4.3.1关系运算符及其优先次序91 //将整数赋值给字符变量 4.3.2关系表达式92 4.4逻辑运算符和逻辑表达式92 4.4.1逻辑运算符及其优先次序93 4.4.2逻辑表达式94 4.4.3逻辑型变量96 4.5条件运算符和条件表达式97 4.6选择结构的嵌套99 4.7用switch语句实现多分支选择结构102 4.8选择结构程序综合举例105习题111 4-4-1 #include 4-4-2 #include /*将a和b中的大者存入temp中*/ max=(temp>c)?temp:c; /*将a和b中的大者与c比较,取最大者*/ printf(“三个整数的最大数是%dn”,max);return 0;} 4-5-2 #include 4-5 #include 4-6.#include /* x<1 */ { y=x;printf(“x=%3d,y=x=%dn” ,x,y);} else if(x<10) /* 1= /* x>=10 */ { y=3*x-11;printf(“x=%d, y=3*x-11=%dn”,x,y);} return 0;} 4-7-1 #include 4-7-2 #include 4-8 #include 4-9 #include printf(“请输入一个整数(0-99999):”);scanf(“%d”,&num);if(num>9999) //分别代表个 place=5;else if(num>999)place=4;else if(num>99)place=3;else if(num>9)place=2;else place=1;printf(“位数:%dn”,place);printf(“每位数字为:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place){case 5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);printf(“n反序数字为:”);printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand);break;case 4:printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv);printf(“n反序数字为:”);printf(“%d%d%d%dn”,indiv,ten,hundred,thousand);break;case 3:printf(“%d,%d,%d”,hundred,ten,indiv);printf(“n反序数字为:”);printf(“%d%d%dn”,indiv,ten,hundred);break;case 2:printf(“%d,%d”,ten,indiv);printf(“n反序数字为:”);printf(“%d%dn”,indiv,ten);break;case 1:printf(“%d”,indiv);printf(“n反序数字为:”);printf(“%dn”,indiv);break;} return 0;} 4-10-1 #include 4-10-2 #include 4-11 #include 4-12 #include /*求该点到各中心点距离*/ d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);d3=(x-x2)*(x-x2)+(y-y2)*(y-y2);d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);if(d1>1 && d2>1 && d3>1 && d4>1) h=0;/*判断该点是否在塔外*/ printf(“该点高度为 %dn”,h);return 0;} 第5章循环结构程序设计114 5.1为什么需要循环控制114 5.2用while语句实现循环115 5.3用do…while语句实现循环117 5.4用for 语句实现循环120 5.5循环的嵌套124 5.6几种循环的比较125 5.7改变循环执行的状态125 5.7.1用break语句提前终止循环126 5.7.2用continue语句提前结束本次循环127 5.7.3break语句和continue语句的区别128 5.8循环程序举例131习题140 5-2 #include // 程序中用到数学函数fabs,应包含头文件math.n int main(){ int sign=1,count=0; // sign用来表示数值的符号,count用来统计循环次数 double pi=0.0,n=1.0,term=1.0; // pi开始代表多项式的值,最后代表π的值, n代表分母,term代表当前项的值 while(fabs(term)>=1e-8) // 检查当前项term的绝对值是否大于或等于10的(-6)次方 { pi=pi+term; // 把当前项term累加到pi中 n=n+2; // n+2是下一项的分母 sign=-sign; // sign代表符号,下一项的符号与上一项符号相反 term=sign/n; // 求出下一项的值term count++; // count累加1 } pi=pi*4; // 多项式的和pi乘以4,才是π的近似值 printf(“pi=%10.8fn”,pi); // 输出π的近似值 printf(“count=%dn”,count); // 输出循环次数 return 0;} 5-3 #include 5-5 #include 5-6 #include {double s=0,t=1;int n;for(n=1;n<=20;n++){ t=t*n;s=s+t;} printf(“1!+2!+...+20!=%22.15en”,s);return 0;} 5-7 #include 5-8 #include 5-9-1 #define M 1000 /*定义寻找范围*/ #include /* a是2-1000之间的整数,检查它是否完数 */ {n=0; /* n用来累计a的因子的个数 */ s=a; /* s用来存放尚未求出的因子之和,开始时等于a */ for(i=1;i /* 检查i是否a的因子 */ if(a%i==0) /* 如果i是a的因子 */ {n++; /* n加1,表示新找到一个因子 */ s=s-i; /* s减去已找到的因子,s的新值是尚未求出的因子之和 */ switch(n) /* 将找到的因子赋给k1...k9,或k10 */ {case 1: k1=i;break; /* 找出的笫1个因子赋给k1 */ case 2: k2=i;break; /* 找出的笫2个因子赋给k2 */ case 3: k3=i;break; /* 找出的笫3个因子赋给k3 */ case 4: k4=i;break; /* 找出的笫4个因子赋给k4 */ case 5: k5=i;break; /* 找出的笫5个因子赋给k5 */ case 6: k6=i;break; /* 找出的笫6个因子赋给k6 */ case 7: k7=i;break; /* 找出的笫7个因子赋给k7 */ case 8: k8=i;break; /* 找出的笫8个因子赋给k8 */ case 9: k9=i;break; /*找出的笫9个因子赋给k9 */ case 10: k10=i;break; /* 找出的笫10个因子赋给k10 */ } } if(s==0){ printf(“%d ,Its factors are ”,a);if(n>1)printf(“%d,%d”,k1,k2); /* n>1表示a至少有2个因子 */ if(n>2)printf(“,%d”,k3); /* n>2表示至少有3个因子,故应再输出一个因子 */ if(n>3)printf(“,%d”,k4); /* n>3表示至少有4个因子,故应再输出一个因子 */ if(n>4)printf(“,%d”,k5); /* 以下类似 */ if(n>5)printf(“,%d”,k6);if(n>6)printf(“,%d”,k7);if(n>7)printf(“,%d”,k8);if(n>8)printf(“,%d”,k9);if(n>9)printf(“,%d”,k10);printf(“n”);} } return 0;} 5-9-2 #include 5-10 #include 5-11 #include /*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ } printf(“第10次落地时共经过%f米n”,sn);printf(“第10次反弹%f米n”,hn);return 0;} 5-12 #include /*第1天的桃子数是第2天桃子数加1后的2倍.*/ x2=x1;day--;} printf(“total=%dn”,x1);return 0;} 5-13 #include 5-14 #include 5-15 #include 5-16 #include 5-17 #include /*是a的对手;j是b的对手;k是c的对手*/ for(i='x';i<='z';i++)for(j='x';j<='z';j++)if(i!=j)for(k='x';k<='z';k++)if(i!=k && j!=k)if(i!='x' && k!='x' && k!='z')printf(“A--%cnB--%cnC--%cn”,i,j,k);return 0;} 第6章利用数组处理批量数据142 6.1怎样定义和引用一维数组142 6.1.1怎样定义一维数组143 6.1.2怎样引用一维数组元素144 6.1.3一维数组的初始化145 6.1.4一维数组程序举例146 6.2怎样定义和引用二维数组148 6.2.1怎样定义二维数组149 6.2.2怎样引用二维数组的元素150 6.2.3二维数组的初始化151 6.2.4二维数组程序举例152 6.3字符数组154 6.3.1怎样定义字符数组154 6.3.2字符数组的初始化155 6.3.3怎样引用字符数组中的元素155 6.3.4字符串和字符串结束标志156 6.3.5字符数组的输入输出159 6.3.6使用字符串处理函数161 6.3.7字符数组应用举例165习题168 6-1 #include 6-2 #include 6-5 #include //循环的作用是将对称的元素的值互换 { temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;} printf(“nNow,array a:n”);for(i=0;i 6-6 #include 6-7 #include 6-8 #include /* 数组为4行5列 */ int main(){ int i,j,k,a[N][M],max,maxj,flag;printf(“please input matrix:n”);for(i=0;i /* 输入数组 */ for(j=0;j /* 开始时假设a[i][0]最大 */ maxj=0; /* 将列号0赋给maxj保存 */ for(j=0;j /* 找出第i行中的最大数 */ if(a[i][j]>max){max=a[i][j]; /* 将本行的最大数存放在max中 */ maxj=j; /* 将最大数所在的列号存放在maxj中 */ } flag=1; /* 先假设是鞍点,以flag为1代表 */ for(k=0;k /* 将最大数和其同列元素相比 */ {flag=0; /* 如果max不是同列最小,表示不是鞍点令flag1为0 */ continue;} if(flag) /* 如果flag1为1表示是鞍点 */ {printf(“a[%d][%d]=%dn”,i,maxj,max); /* 输出鞍点的值和所在行列号 */ break;} } if(!flag) /* 如果flag为0表示鞍点不存在 */ printf(“It is not exist!n”);return 0;} 6-9 #include //top是查找区间的起始位置 bott=N-1; //bott是查找区间的最末位置 if((numbera[N-1]))//要查的数不在查找区间内 loca=-1;