C程序设计第四版习题完整版答案【排版整洁】由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“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 int main(){ printf(“**************************nn”);printf(“
Very Good!nn”);printf(“**************************n”);return 0;}
1-6#include int main(){int a,b,c,max;printf(“please input a,b,c:n”);scanf(“%d,%d,%d”,&a,&b,&c);max=a;if(max
第章最简单的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 #include int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf(“p=%fn”,p);return 0;}
3-2-1 #include #include int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;
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 #include int main(){double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;
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 #include int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;
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 #include int main(){float d=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r))/log10(1+r);printf(“m=%6.2fn”,m);return 0;}
3-4 #include int main(){int c1,c2;c1=197;c2=198;printf(“c1=%c,c2=%cn”,c1,c2);printf(“c1=%d,c2=%dn”,c1,c2);return 0;}
3-5 #include int main(){int a,b;float x,y;char c1,c2;scanf(“a=%d b=%d”,&a,&b);scanf(“%f %e”,&x,&y);scanf(“%c%c”,&c1,&c2);printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn”,a,b,x,y,c1,c2);return 0;}
3-6 #include int main(){char c1='C',c2='h',c3='i',c4='n',c5='a';c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(“pawor is %c%c%c%c%cn”,c1,c2,c3,c4,c5);return 0;} 3-7 #include int main(){float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(“请输入圆半径r,圆柱高h∶”);scanf(“%f,%f”,&r,&h);
//要求输入圆半径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 int main(){ int c1,c2;
//整型定义 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 main(){ char c1,c2;
//定义字符型变量 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 main(){ char c1,c2;
//定义为字符型 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 int main(){ char c1,c2;printf(“请输入两个字符c1,c2:”);c1=getchar();c2=getchar();printf(“用putchar语句输出结果为:”);putchar(c1);putchar(c2);printf(“n”);printf(“用printf语句输出结果为:”);printf(“%c %cn”,c1,c2);return 0;}
第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 int main(){ int a,b,c;printf(“请输入三个整数:”);scanf(“%d,%d,%d”,&a,&b,&c);if(a
4-4-2 #include int main(){ int a,b,c,temp,max;printf(“请输入三个整数:”);scanf(“%d,%d,%d”,&a,&b,&c);temp=(a>b)?a:b;
/*将a和b中的大者存入temp中*/ max=(temp>c)?temp:c;
/*将a和b中的大者与c比较,取最大者*/ printf(“三个整数的最大数是%dn”,max);return 0;}
4-5-2 #include #include #define M 1000 int main(){ int i,k;printf(“请输入一个小于%d的整数i:”,M);scanf(“%d”,&i);while(i>M){printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M);scanf(“%d”,&i);} k=sqrt(i);printf(“%d的平方根的整数部分是:%dn”,i,k);return 0;}
4-5 #include #include #define M 1000 int main(){ int i,k;printf(“请输入一个小于%d的整数i:”,M);scanf(“%d”,&i);if(i>M){printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M);scanf(“%d”,&i);} k=sqrt(i);printf(“%d的平方根的整数部分是:%dn”,i,k);return 0;}
4-6.#include int main(){ int x,y;printf(“输入x:”);scanf(“%d”,&x);if(x
/* x
y=x=%dn“ ,x,y);} else if(x
/* 1=
/* x>=10 */ { y=3*x-11;printf(”x=%d, y=3*x-11=%dn“,x,y);} return 0;}
4-7-1 #include int main(){ int x,y;printf(”enter x:“);scanf(”%d“,&x);y=-1;if(x!=0)if(x>0)y=1;else y=0;printf(”x=%d,y=%dn“,x,y);return 0;}
4-7-2 #include int main(){ int x,y;printf(”please enter x:“);scanf(”%d“,&x);y=0;if(x>=0)if(x>0)y=1;else y=-1;printf(”x=%d,y=%dn“,x,y);return 0;}
4-8 #include int main(){ float score;char grade;printf(”请输入学生成绩:“);scanf(”%f“,&score);while(score>100||score
4-9 #include #include int main(){ int num,indiv,ten,hundred,thousand,ten_thousand,place;位,十位,百位,千位,万位和位数
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 int main(){ int i;double bonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+100000*0.05;bon6=bon4+100000*0.03;bon10=bon6+400000*0.015;printf(”请输入利润i:“);scanf(”%d“,&i);if(i
4-10-2 #include int main(){ int i;double bonus,bon1,bon2,bon4,bon6,bon10;int branch;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;printf(”请输入利润i:“);scanf(”%d“,&i);branch=i/100000;if(branch>10)branch=10;switch(branch){ case 0:bonus=i*0.1;break;case 1:bonus=bon1+(i-100000)*0.075;break;case 2: case 3: bonus=bon2+(i-200000)*0.05;break;case 4: case 5: bonus=bon4+(i-400000)*0.03;break;case 6: case 7: case 8: case 9: bonus=bon6+(i-600000)*0.015;break;case 10: bonus=bon10+(i-1000000)*0.01;} printf(”奖金是 %10.2fn“,bonus);return 0;}
4-11 #include int main(){int t,a,b,c,d;printf(”请输入四个数:“);scanf(”%d,%d,%d,%d“,&a,&b,&c,&d);printf(”a=%d,b=%d,c=%d,d=%dn“,a,b,c,d);if(a>b){ t=a;a=b;b=t;} if(a>c){ t=a;a=c;c=t;} if(a>d){ t=a;a=d;d=t;} if(b>c){ t=b;b=c;c=t;} if(b>d){ t=b;b=d;d=t;} if(c>d){ t=c;c=d;d=t;} printf(”排序结果如下: n“);printf(”%d %d %d %d n“,a,b,c,d);return 0;}
4-12 #include int main(){ int h=10;float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;printf(”请输入一个点(x,y):“);scanf(”%f,%f“,&x,&y);d1=(x-x4)*(x-x4)+(y-y4)*(y-y4);
/*求该点到各中心点距离*/ 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 #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 int main(){ int p,r,n,m,temp;printf(”请输入两个正整数n,m:“);scanf(”%d,%d,“,&n,&m);if(n int main(){ char c;int letters=0,space=0,digit=0,other=0;printf(”请输入一行字符:n“);while((c=getchar())!='n'){ if(c>='a' && c='A' && c='0' && c
5-5 #include int main(){ int a,n,i=1,sn=0,tn=0;printf(”a,n=:“);scanf(”%d,%d“,&a,&n);while(i
5-6 #include int main()
{double s=0,t=1;int n;for(n=1;n int main(){ int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for(k=1;k
5-8 #include int main(){ int i,j,k,n;printf(”parcius numbers are “);for(n=100;n
5-9-1 #define M 1000
/*定义寻找范围*/ #include int main(){ int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for(a=2;a
/* 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 int main(){int m,s,i;for(m=2;m
5-10 #include int main(){ int i,n=20;double a=2,b=1,s=0,t;for(i=1;i
5-11 #include int main(){ double sn=100,hn=sn/2;int n;for(n=2;n
/*第n次落地时共经过的米数*/ hn=hn/2;
/*第n次反跳高度*/ } printf(”第10次落地时共经过%f米n“,sn);printf(”第10次反弹%f米n“,hn);return 0;}
5-12 #include int main(){ int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2;
/*第1天的桃子数是第2天桃子数加1后的2倍.*/ x2=x1;day--;} printf(”total=%dn“,x1);return 0;}
5-13 #include #include int main(){ float a,x0,x1;printf(”enter a positive number:“);scanf(”%f“,&a);x0=a/2;x1=(x0+a/x0)/2;do {x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=1e-5);printf(”The square root of %5.2f is %8.5fn“,a,x1);return 0;}
5-14 #include #include int main(){double x1,x0,f,f1;x1=1.5;do {x0=x1;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x1=x0-f/f1;}while(fabs(x1-x0)>=1e-5);printf(”The root of equation is %5.2fn“,x1);return 0;}
5-15 #include #include int main(){float x0,x1,x2,fx0,fx1,fx2;do {printf(”enter x1 & x2:“);scanf(”%f,%f“,&x1,&x2);fx1=x1*((2*x1-4)*x1+3)-6;fx2=x2*((2*x2-4)*x2+3)-6;}while(fx1*fx2>0);do {x0=(x1+x2)/2;fx0=x0*((2*x0-4)*x0+3)-6;if((fx0*fx1)=1e-5);printf(”x=%6.2fn“,x0);return 0;}
5-16 #include int main(){int i,j,k;for(i=0;i
5-17 #include int main(){ char i,j,k;
/*是a的对手;j是b的对手;k是c的对手*/ for(i='x';i
第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 #include int main(){int i,j,n,a[101];for(i=1;i
6-2 #include int main(){int i,j,min,temp,a[11];printf(”enter data:n“);for(i=1;ia[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;} printf(”nThe sorted numbers:n“);for(i=1;i int main(){ int a[3][3],sum=0;int i,j;printf(”enter data:n“);for(i=0;i int main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};int temp1,temp2,number,end,i,j;printf(”array a:n“);for(i=0;iend)a[10]=number;else {for(i=0;inumber){temp1=a[i];a[i]=number;for(j=i+1;j
6-5 #include #define N 5 int main(){ int a[N],i,temp;printf(”enter array a:n“);for(i=0;i
//循环的作用是将对称的元素的值互换 { 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 #define N 10 int main(){ int i,j,a[N][N];for(i=0;i
6-7 #include int main(){ int a[15][15],i,j,k,p,n;p=1;while(p==1){printf(”enter n(n=1--15):“);scanf(”%d“,&n);if((n!=0)&&(nn)){i=i+2;j=j-1;} else {if(in)j=1;} if(a[i][j]==0)a[i][j]=k;else {i=i+2;j=j-1;a[i][j]=k;} } for(i=1;i
6-8 #include #define N 4 #define M 5
/* 数组为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;ka[k][maxj])
/* 将最大数和其同列元素相比 */ {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 #define N 15 int main(){ int i,number,top,bott,mid,loca,a[N],flag=1,sign;char c;printf(”enter data:n“);scanf(”%d“,&a[0]);i=1;while(i=a[i-1])i++;else printf(”enter this data again:n“);} printf(”n“);for(i=0;i
//top是查找区间的起始位置 bott=N-1;
//bott是查找区间的最末位置
if((numbera[N-1]))//要查的数不在查找区间内 loca=-1;
// 表示找不到 while((!sign)&&(top
6-10 #include int main(){int i,j,upp,low,dig,spa,oth;char text[3][80];upp=low=dig=spa=oth=0;for(i=0;i='A'&& text[i][j]='a' && text[i][j]='0' && text[i][j]
: %dn”,dig);printf(“space
: %dn”,spa);printf(“other
: %dn”,oth);return 0;}
6-11 #include int main(){ char a[5]={'*','*','*','*','*'};int i,j,k;char space=' ';for(i=0;i
“);for(j=1;j
6-12a-c #include int main(){ int j,n;char ch[80],tran[80];printf(”input cipher code:“);gets(ch);printf(”ncipher code :%s“,ch);j=0;while(ch[j]!=' '){ if((ch[j]>='A')&&(ch[j]='a')&&(ch[j]
6-12b #include int main(){int j,n;char ch[80];printf(”input cipher code:n“);gets(ch);printf(”ncipher code:%sn“,ch);j=0;while(ch[j]!=' '){ if((ch[j]>='A')&&(ch[j]='a')&&(ch[j]
6-13
#include int main(){ char s1[80],s2[40];int i=0,j=0;printf(”input string1:“);scanf(”%s“,s1);printf(”input string2:“);scanf(”%s“,s2);while(s1[i]!=' ')i++;while(s2[j]!=' ')s1[i++]=s2[j++];s1[i]=' ';printf(”nThe new string is:%sn“,s1);return 0;}
6-14 #include int main(){ int i,resu;char s1[100],s2[100];printf(”input string1:“);gets(s1);printf(”ninput string2:“);gets(s2);i=0;while((s1[i]==s2[i])&&(s1[i]!=' '))i++;if(s1[i]==' ' && s2[i]==' ')resu=0;else resu=s1[i]-s2[i];printf(”nresult:%d.n“,resu);return 0;}
6-15 #include #include int main(){ char s1[80],s2[80];int i;printf(”input s2:“);scanf(”%s“,s2);for(i=0;i
第7章用函数实现模块化程序设计170 7.1为什么要用函数170 7.2怎样定义函数172 7.2.1为什么要定义函数172 7.2.2定义函数的方法173 7.3调用函数174 7.3.1函数调用的形式174 7.3.2函数调用时的数据传递175 7.3.3函数调用的过程177 7.3.4函数的返回值178 7.4对被调用函数的声明和函数原型179 7.5函数的嵌套调用182 7.6函数的递归调用184 7.7数组作为函数参数192 7.7.1数组元素作函数实参193 7.7.2数组名作函数参数194 7.7.3多维数组名作函数参数197 7.8局部变量和全局变量199 7.8.1局部变量199 7.8.2全局变量200 7.9变量的存储方式和生存期204 7.9.1动态存储方式与静态存储方式204 7.9.2局部变量的存储类别205 7.9.3全局变量的存储类别208 7.9.4存储类别小结212 7.10关于变量的声明和定义214 7.11内部函数和外部函数215 7.11.1内部函数215 7.11.2外部函数215 习题218 7-1-1 #include int main(){int hcf(int,int);int lcd(int,int,int);int u,v,h,l;scanf(”%d,%d“,&u,&v);h=hcf(u,v);printf(”H.C.F=%dn“,h);l=lcd(u,v,h);printf(”L.C.D=%dn“,l);return 0;}
int hcf(int u,int v){int t,r;if(v>u){t=u;u=v;v=t;} while((r=u%v)!=0){u=v;v=r;} return(v);}
int lcd(int u,int v,int h){ return(u*v/h);}
7-1-2 #include int Hcf,Lcd;int main(){void hcf(int,int);void lcd(int,int);int u,v;scanf(”%d,%d“,&u,&v);hcf(u,v);lcd(u,v);printf(”H.C.F=%dn“,Hcf);printf(”L.C.D=%dn“,Lcd);return 0;}
void hcf(int u,int v){int t,r;if(v>u){t=u;u=v;v=t;} while((r=u%v)!=0){u=v;v=r;} Hcf=v;}
void lcd(int u,int v){ Lcd=u*v/Hcf;}
7-2 #include #include float x1,x2,disc,p,q;int main(){void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float);float a,b,c;printf(”input a,b,c:“);scanf(”%f,%f,%f“,&a,&b,&c);printf(”equation: %5.2f*x*x+%5.2f*x+%5.2f=0n“,a,b,c);disc=b*b-4*a*c;printf(”root:n“);if(disc>0){ greater_than_zero(a,b);printf(”x1=%fttx2=%fn“,x1,x2);} else if(disc==0){equal_to_zero(a,b);printf(”x1=%fttx2=%fn“,x1,x2);} else {smaller_than_zero(a,b);printf(”x1=%f+%fitx2=%f-%fin“,p,q,p,q);} return 0;}
void greater_than_zero(float a,float b){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);}
void equal_to_zero(float a,float b){ x1=x2=(-b)/(2*a);}
void smaller_than_zero(float a,float b){ p=-b/(2*a);q=sqrt(-disc)/(2*a);}
7-3 #include int main(){int prime(int);int n;printf(”input an integer:“);scanf(”%d“,&n);if(prime(n))printf(”%d is a prime.n“,n);else printf(”%d is not a prime.n“,n);return 0;}
int prime(int n){int flag=1,i;for(i=2;i
7-4 #include #define N 3 int array[N][N];int main(){ void convert(int array[][3]);int i,j;printf(”input array:n“);for(i=0;i
void convert(int array[][3]){int i,j,t;for(i=0;i #include int main(){void inverse(char str[]);char str[100];printf(”input string:“);scanf(”%s“,str);inverse(str);printf(”inverse string:%sn“,str);return 0;}
void inverse(char str[]){char t;int i,j;for(i=0,j=strlen(str);i
7-6
#include int main(){void concatenate(char string1[],char string2[],char string[]);char s1[100],s2[100],s[100];printf(”input string1:“);scanf(”%s“,s1);printf(”input string2:“);scanf(”%s“,s2);concatenate(s1,s2,s);printf(”nThe new string is %sn“,s);return 0;}
void concatenate(char string1[],char string2[],char string[]){int i,j;for(i=0;string1[i]!=' ';i++)string[i]=string1[i];for(j=0;string2[j]!=' ';j++)string[i+j]=string2[j];string[i+j]=' ';}
7-7 #include int main(){void cpy(char [],char []);char str[80],c[80];printf(”input string:“);gets(str);cpy(str,c);printf(”The vowel letters are:%sn“,c);return 0;}
void cpy(char s[],char c[]){ int i,j;for(i=0,j=0;s[i]!=' ';i++)if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'|| s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U'){c[j]=s[i];j++;} c[j]=' ';}
7-8 #include #include int main(){char str[80];void insert(char []);printf(”input four digits:“);scanf(”%s“,str);insert(str);return 0;}
void insert(char str[]){int i;for(i=strlen(str);i>0;i--){str[2*i]=str[i];str[2*i-1]=' ';} printf(”output:n%sn“,str);} 7-9 #include int letter,digit,space,others;int main(){void count(char []);char text[80];printf(”input string:n“);gets(text);printf(”string:“);puts(text);letter=0;digit=0;space=0;others=0;count(text);printf(”nletter:%dndigit:%dnspace:%dnothers:%dn“,letter,digit,space,others);return 0;}
void count(char str[]){int i;for(i=0;str[i]!=' ';i++)if((str[i]>='a'&& str[i]='A' && str[i]='0' && str [i]
7-10 #include #include int main(){int alphabetic(char);int longest(char []);int i;char line[100];printf(”input one line:n“);gets(line);printf(”The longest word is :“);for(i=longest(line);alphabetic(line[i]);i++)printf(”%c“,line[i]);printf(”n“);return 0;}
int alphabetic(char c){if((c>='a' && c='A'&&c
int longest(char string[]){int len=0,i,length=0,flag=1,place=0,point;for(i=0;i=length){length=len;place=point;len=0;} } return(place);}
7-11 #include #include #define N 10 char str[N];int main(){void sort(char []);int i,flag;for(flag=1;flag==1;){printf(”input string:n“);scanf(”%s“,&str);if(strlen(str)>N)printf(”string too long,input again!“);else flag=0;} sort(str);printf(”string sorted:n“);for(i=0;i
void sort(char str[]){int i,j;char t;for(j=1;jstr[i+1]){t=str[i];str[i]=str[i+1];str[i+1]=t;} }
7-12 #include #include int main(){float solut(float a,float b,float c,float d);float a,b,c,d;printf(”input a,b,c,d:“);scanf(”%f,%f,%f,%f“,&a,&b,&c,&d);printf(”x=%10.7fn“,solut(a,b,c,d));return 0;}
float solut(float a,float b,float c,float d){float x=1,x0,f,f1;do {x0=x;f=((a*x0+b)*x0+c)*x0+d;f1=(3*a*x0+2*b)*x0+c;x=x0-f/f1;} while(fabs(x-x0)>=1e-3);return(x);}
7-13 #include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;
int main(){ int i,j;float h;float s_var(void);float highest();void input_stu(void);void aver_stu(void);void aver_cour(void);input_stu();aver_stu();aver_cour();printf(”n NO.cour1
cour2
cour3
cour4
cour5
avern“);for(i=0;i
NO.%2d
course %2dn”,h,r,c);printf(“variance %8.2fn”,s_var());return 0;}
void input_stu(void){int i,j;for(i=0;i
void aver_stu(void){int i,j;float s;for(i=0;i
void aver_cour(void){int i,j;float s;for(j=0;j
float highest(){float high;int i,j;high=score[0][0];for(i=0;ihigh){high=score[i][j];r=i+1;c=j+1;} return(high);}
float s_var(void){int i;float sumx,sumxn;sumx=0.0;sumxn=0.0;for(i=0;i
7-*14 #include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;int main(){ int i,j;float h;float s_var(void);float highest();void input_stu(void);void aver_stu(void);void aver_cour(void);input_stu();aver_stu();aver_cour();printf(“n NO.cour1
cour2
cour3
cour4
cour5 for(i=0;i
NO.%2d
course %2dn”,h,r,c);printf(“variance %8.2fn”,s_var());return 0;}
void input_stu(void){int i,j;for(i=0;i
void aver_stu(void){int i,j;float s;for(i=0;i
avern“);a_stu[i]=s/5.0;} }
void aver_cour(void){int i,j;float s;for(j=0;j
float highest(){float high;int i,j;high=score[0][0];for(i=0;ihigh){high=score[i][j];r=i+1;c=j+1;} return(high);}
float s_var(void){int i;float sumx,sumxn;sumx=0.0;sumxn=0.0;for(i=0;i #include #define N 10 int main(){void input(int [],char name[][8]);void sort(int [],char name[][8]);void search(int ,int [],char name[][8]);int num[N],number,flag=1,c;char name[N][8];input(num,name);sort(num,name);while(flag==1){printf(”ninput number to look for:“);scanf(”%d“,&number);search(number,num,name);printf(”continue ot not(Y/N)?“);getchar();c=getchar();if(c=='N'||c=='n')flag=0;} return 0;}
void input(int num[],char name[N][8]){int i;for(i=0;i
void sort(int num[],char name[N][8]){ int i,j,min,templ;char temp2[8];for(i=0;inum[j])min=j;templ=num[i];strcpy(temp2,name[i]);num[i]=num[min];strcpy(name[i],name[min]);num[min]=templ;strcpy(name[min],temp2);} printf(”n result:n");for(i=0;i
void search(int n,int num[],char name[N][8]){int top,bott,mid,loca,sign;top=0;bott=N-1;loca=0;sign=1;if((nnum[N-1]))loca=-1;while((sign==1)&&(top
7-16 #include #define MAX 1000 int main(){ int htoi(char s[]);int c,i,flag,flag1;char t[MAX];i=0;flag=0;flag1=1;