c语言第七章课后题

合集下载

C语言第七章习题带答案

C语言第七章习题带答案

选择题1.已知:int *p, a;,则语句“p=&a;”中的运算符“&”的含义是( D )。

A.位与运算B.逻辑与运算C.取指针内容D.取变量地址2.已知:int a, x;,则正确的赋值语句是( C )。

A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1, x++, x+2); D.a="good"; 3.已知:int a, *p=&a;,则下列函数调用中错误的是( D )。

A.scanf("%d", &a); B.scanf("%d", p); C.printf("%d", a); D.scanf("%d", *p); 4.已知:char *p, *q;,选择正确的语句( C )。

A.p*=3; B.p/=q; C.p+=3; D.p+=q;5.已知:int x;,则下面的说明指针变量pb的语句( C )是正确的。

A.int pb=&x; B.int *pb=x; C.int *pb=&x; D.*pb=*x;一、选择题1.设有说明int (*ptr)[M];,其中的标识符ptr是( C )。

A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M列的二维数组的一行的指针D.具有M个指针元素的一维数组的指针2.已知:double *p[6];,它的含义是( C )。

A.p是指向double型变量的指针B.p是double型数组C.p是指针数组D.p是数组指针3.已知:char s[10], *p=s,则在下列语句中,错误的语句是( B )。

A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0];4.已知:char s[100]; int i;,则在下列引用数组元素的语句中,错误的表示形式是( D )。

C语言 第7章课后习题

C语言 第7章课后习题
1.用筛选法求100之内的素数。
#include<math.h> #define N 101 main()
{ int i,j,line,a[N];
for(i=2;i<N;i++) { a[i]=i; for(j=2;j<sqrt(N);j++)
{
if(a[i]!=0&&a[j]!=0) if(a[i]%a[j]==0) a[i]=0; } } printf(“\n”); for(i=2,line=0;i<N;i++)
5.将一个数组中的值按逆序重新存放,例如原来的顺序为8,6,5,4, 1。要求改为1,4,5,6,8。 #define N 5 main() { int a[N]={8,6,5,4,1},i,temp; printf("\n初始数组:\n"); for(i=0;i<N;i++) printf(%4d",a[i]); for(i=0;i<N/2;i++) { temp=a[i]; a[i]=a[N-i-1]; a[N-i-i]=temp; } printf("\n交换后的数组:\n"); for(i=0;i<N;i++) printf(%4d",a[i]); }
for(i=0;i<N;i++) printf("%5d",a[i]); printf("\n"); /*排序*/
for(i=0;i<N-1;i++) { for(j=i+1;j<N;j++) if(a[i]>a[j]) temp=a[i]; a[i]=a[min]; a[min]=temp; } /*输出*/ printf("\n 排序结果如下:\n"); for(i=0;i<N;i++) printf("%5d",a[i]); }

C语言程序设计第7~11章习题答案(参考)

C语言程序设计第7~11章习题答案(参考)

一、单项选择题(第192页)1-4.BDCC 5-8.AADA二、填空题(第194页)1. 12481632641282565122. ①a[age]++ ②i=18;i<263. ①break ②i= =84. ①a[i]>b[j] ②i<3 ③j<55. ①b[j]=a[j][0] ②b[j]=a[j][k]6.a[k++]=a[j]第8章一、单项选择题(第241页)1-5.BCCAA DDD 11-15.ACACB二、填空题(第243页)1.看不出原题的意图。

因为要计算1~n的累加和,n应是一个≥1的正整数。

可是题目中却出现了n=0的情况。

除非另加规定当n=0时1~n的累加和为0,或者把原题中的计算式改为计算0~n的累加和。

据此猜测,原题应填为:①return(0) ②return(n+sum(n-1))根据题意,如下程序较为合理:int sum(int n){if(n<=0)return(-1); /* -1是出错标志*/else if(n==1)return(1);else return(n+sum(n-1));}2. ①return(1) ②return(n*facto(n-1))第9章一、单项选择题(第276页)1-5. DCDAC ABC 11-15.AABBB 16-20.DCABD二、填空题(第278页)1.①int * ②*z3.①'\0' ②++4.①q=p+1 ②q<p+n ③*q>max ④*q<min第10章一、单项选择题(第326页)1-5. DDDAA 6-10.AABDC 11-14.CBDC二、填空题(第278页)1.①0x34 ②0x122.ARRAY a[10],b[10],c[10];3.①2 ②34.①ab ②cd5. ①b->day ②(*b).day6. ①ad ②abcdef ③ghimno ④hino7. ①type* ②!=’\n’③p=top8.++p19. ①( struct list *) ②( struct list *) ③return h。

C语言程序设计第四版第七章答案谭浩强

C语言程序设计第四版第七章答案谭浩强

C语言程序设计第四版第七章答案谭浩强第七章用函数实现模块化程序设计第七章函数7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。

ma某yuehu(m,n)intm,n;{inti=1,t;for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)t=i;}return(t);}minbeihu(m,n)intm,n;{intj;if(m>=n)j=m;elej=n;for(;!(j%m==0&&j%n==0);j++);returnj;}main(){inta,b,ma某,min;printf("entertwonumberi:");canf("%d,%d",&a,&b);ma某=ma某yuehu(a,b);min=minbeihu(a,b);printf("ma某=%d,min=%d\n",ma某,min);}7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。

从主函数输入a、b、c的值。

#include"math.h"floatyihigen(m,n,k)floatm,n,k;{float某1,某2;某1=(-n+qrt(k))/(2某m);某2=(-n-qrt(k))/(2某m);printf("twohigeni某1=%.3fand某2=%.3f\n",某1,某2);}floatdenggen(m,n)floatm,n;{float某;某=-n/(2某m);printf("denggeni某=%.3f\n",某);}第七章用函数实现模块化程序设计float某ugen(m,n,k)floatm,n,k;{float某,y;某=-n/(2某m);y=qrt(-k)/(2某m);printf("two某ugeni某1=%.3f+%.3fiand某2=%.3f-%.3fi\n",某,y,某,y);}main(){floata,b,c,q;printf("inputabci");canf("%f,%f,%f",&a,&b,&c);printf("\n");q=b某b-4某a某c;if(q>0)yihigen(a,b,q);eleif(q==0)denggen(a,b);ele某ugen(a,b,q);}7.3写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。

C语言第七章习题答案

C语言第七章习题答案

7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。

两个整数由键盘输入。

hcf(u,v)int u,v;{ int a,b,t,r;if(u>v){ t=u;u=v;v=t; }a=u;b=v;while((r=b%a)!=0){ b=a;a=r; }return(a);}lcd(u,v,h)int u,v,h;{ 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(u*v/h);}#include <stdio.h>void main(){ 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);}7.2 求方程根float x1,x2,disc,p,q; greater_than_zero(a,b)float a,b;{x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); }equal_to_zero(a,b)float a,b;{ x1=x2=(-b)/(2*a);}smaller_than_zero(a,b)float a,b;{ p=-b/(2*a);q=sqrt(disc)/(2*a);}main(){float a,b,c;printf("n输入方程的系数a,b,c:n");scanf("%f,%f,%f",&a,&b,&c);printf("n 方程是:% 5.2f*x*x+%5.2f*x+%5.2f=0n",a,b,c);disc=b*b-4*a*c;printf("方程的解是:n");if(disc>0){ great_than_zero(a,b);printf("X1=%5.2ftX2=%5.2fnn",x1,x2);}else if(disc==0){zero(a,b);printf("X1=%5.2ftX2=%5.2fnn",x1,x2);}else{small_than_zero(a,b,c);printf("X1=%5.2f+%5.2fitX2=%5.2f-%2.2fin",p,q,p,q);}}7.3 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。

c语言第七章课后题

c语言第七章课后题

一、第七章习题7(p184-p187),7.1-7.7全做,7.8-7.12中选做两道,要求给出程序执行结果。

7-1、#include <stdio.h>int Square(int i){return i*i;}int main(){int i=0;i=Square(i);for(; i<3;i++){static int i=1;i+=Square(i);printf("%d,",i);}printf("%d\n",i);return 0;}结果:结果分析:开头定义square()函数功能:计算一个数的平方入口参数:整数x返回值:i*i主函数:i=0;进入循环:静态变量i=1;i=i+square(1)=2;输出2;循环变量i=0+1=1;}int main(){int i;second=0;for(i=0;i<1000000;i++){update(); /*利用循环控制时钟运行时间*/display(); /*显示时,分,秒*/delay(); /*模一尺时间为1秒*/ }return 0;}结果:自动跳出时间7-3、#include <stdio.h>/*max()函数功能:找两个数的最大值入口参数:两个整数a,b返回值:两数的最大值*/int max(int a, int b){int max=0;max = (a>b)?a:b;return max;}void main(){int x=0; /*输入的两个数x,y*/int y=0;int m=0; /*m用于接收max()函数的返回值*/printf("input two integer numbers:");scanf("%d,%d",&x,&y);m=max(x,y);printf("the max number is %d\n",m);}结果:7-4#include <stdio.h>/*LCM()函数功能:计算两个整数的最小公倍数入口参数:两整数a,b返回值:最小公倍数*/int LCM(int a,int b){int i=0; /*循环变量*/int min=0; /*循环寻找范围的最小值*/int max=0; /*循环寻找范围的最大值*/min = (a>b)?a:b; /*最小值为a,b中的最大值*/ max = a*b; /*最大值为a*b*/for (i=min; i<=max; i++){if(i%a==0 && i%b==0)return i;}}void main(){int x; /*键盘输入两整数x,y*/int y;int m; /*m用于接收LCM()函数的返回值*/do{ /*输入整数的合法数据*/ printf("输入两个正整数:");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = LCM(x,y);printf("最小公倍数为:%d\n",m);}结果:7-5、#include <stdio.h>long fact(int n);void main(){int i=0; /*循环变量*/int n=0; /*输入的值*/int m=0; /*接收fact()函数的返回值*/do{printf("input n:");scanf("%d",&n);}while(n<0);for(i=1; i<=n; i++){m=fact(i);printf("%d!=%ld\n",i,m);}}/*fact函数功能:计算n!入口参数:n返回值:n!*/long fact(int n){static long p=1;p=p*n;return p;}结果:7-6、#include <stdio.h>}结果:7-7、(1)穷举法:#include <stdio.h>int Gcd(int a,int b);void main(){int x=0; /*键盘键入两个数*/int y=0;int m=0; /*接收Gcd的返回值*/do{printf("输入两个正数:");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = Gcd(x,y);printf("最大公约数:%d\n",m); }/*Gcd()函数功能:计算两数的最大公约数入口参数:两个正数a,b返回值:最大公约数*/int Gcd(int a,int b){int i=0;int t=0;t=(a<b)?a:b; /*t为a,b中的较小者*/ for(i=t; i>=1; i--){if(a%i==0 && b%i==0)return i;}}结果:(2)欧几里得算法#include <stdio.h>int Gcd(int a,int b);void main(){int x=0; /*键盘键入两个数*/int y=0;int m=0; /*接收Gcd的返回值*/do{printf("输入两个正数:");scanf("%d,%d",&x,&y);}while(x<0 || y<0);m = Gcd(x,y);printf("最大公约数:%d\n",m); }/*Gcd()函数功能:计算两数的最大公约数入口参数:两个正数a,b返回值:最大公约数*/int Gcd(int a,int b){int r=0;r=a%b;if(r!=0){do{a=b;b=r;r=a%b;}while(r!=0);}return b;}结果:(3)递归方法:7-9、#include <stdio.h>/*old()函数功能:计算第i个人的年龄入口参数:人数i返回值:年龄*/int old(int i){if(i==1)return 10;elsereturn old(i-1)+2;}void main(){int x=5; /*人数为5*/int y=0; /*接收old()函数的返回值*/y=old(x);printf("第五个人的年龄为:%d\n",y);}结果:7-10、#include <stdio.h>void main(){int flag=0; /*设置标志变量*/if ((m+n+p+q+r)==sum){flag=1; /*一旦找到就退出循环*/break;}}if(flag==0) /*未找到说明计算错误*/{printf("你算错了!");}else{printf("你想的数是%d %d %d \n",a,b,c);}}结果:二、收集资料并整理,叙述结构化程序设计的基本思想;根据自己的编程,说说你对结构化程序设计的理解。

C语言课后练习题答案第七章

C语言课后练习题答案第七章

C语言课后练习题答案第七章作业六:循环结构程序设计(一)(一)选择题(50分)1.设有程序段int k=10;while(k=0)k=k-1;这下面描述中正确的是_c_。

a)while循环执行10次 b)循环是无限循环c)循环体语句一次也不执行 d)循环体语句执行一次(重要) 2.语句while(!E);中的表达式!E等价于_a_。

a)E==0 b)E!=1 c)E!=0 d)E==1while(!e)表明!e==true,因此e==false,也就是e==03.下面程序段的运行结果是_c_。

int n=0;while(n++<=2);printf("%d",n);a)2 b)3 c)4 d)有语法错n=0,n++是先用0去和2比,然后再加1,n变成1。

n=1,n++<=2,1<=2成立,n+1变成2n=2,n++<=2,2<=2成立,n+1变成3n=3,n++<=2,3<=2不成立,n+1变成4,循环结束4.下面程序的运行结果是_c_。

#includemain(){int num=0;while(num<=2){num++;printf("%d\n",num);}}a)1 b)1 c)1 d)12 2 23 345.以下程序段_c_。

x=-1;do{x=x*x;}while(!x);a)是死循环 b)循环执行二次c)循环执行一次 d)有语法错误(二)填空题(30分)1.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。

请填空。

main(){int n=0,c;c=getchar();while(c!=’\n’){if(c>=’0’&&c<=’9’) n++;c=getchar();}printf(“%d\n”,n);}2.下面程序的功能是用"辗转相除法"求两个正整数的最大公约数。

C语言程序设计第四版第七章答案-谭浩强

C语言程序设计第四版第七章答案-谭浩强

C语言程序设计第四版第七章答案-谭浩强第七章函数7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。

maxyueshu(m,n)int m,n;{ int i=1,t;for(;i<=m&&i<=n;i++){if(m%i==0&&n%i==0)t=i;}return(t);}minbeishu(m,n)int m,n;{int j;if(m>=n) j=m;else j=n;for(;!(j%m==0&&j%n==0);j++);return j;}main()整数,输出是否是素数的消息。

psushu(m)int m;{int i=2,t;for(;i<=m;i++)if(m%i==0&&i<m) break;if(m-i==0) t=1;else t=0;return m;}main(){int a,s;printf("enter sushu is \n");scanf("%d",&a);s=psushu(a);if(s==1) printf("a is sushu\n");else printf("s is not sushu\n");}7.4写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

int zhuangzhi(b)int b[3][3];{int i,j,t;for(i=0;i<3;i++)for(j=0;j>=i&&j<3-i;j++){t=b[i][j];b[i][j]=b[j][i];b[j][i]=t;}}main(){int a[3][3];int i,j;for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(" %d",a[i][j]);printf("\n");}zhuangzhi(a);for(i=0;i<3;i++){for(j=0;j<3;j++)printf(" %d",a[i][j]);printf("\n");}}7.5写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*/
int max(int a, int b)
{
int max=0;
max = (a>b)?a:b;
return max;
}
void main()
{
int x=0; /*输入的两个数x,y*/
int y=0;
int m=0; /*m用于接收max()函数的返回值*/
printf("input two integer numbers:");
return Gcd(b,b-a);
}
}
结果:
7-9、
#include <stdio.h>
/*old()函数
功能:计算第i个人的年龄
入口参数:人数i
返回值:年龄
*/
int old(int i)
{
if(i==1)
return 10;
else
return old(i-1)+2;
}
void main()
{
do{
printf("input n:");
scanf("%d",&n);
}while(n<0);
for(i=1; i<=n; i++)
{
m=fact(i);
printf("%d!=%ld\n",i,m);
}
}
/*fact函数
功能:计算n!
入口参数:n
返回值:n!
*/
long fact(int n)
功能:计算两数的最大公约数
入口参数:两个正数a,b
返回值:最大公约数
*/
int Gcd(int a,int b)
{
int r=0;
r=a%b;
if(r!=0)
{
do{
a=b;
b=r;
r=a%b;
}while(r!=0);
}
return b;
}
结果:
(3)递归方法:
#include <stdio.h>
printf("最大公约数:%d\n",m);
}
/*Gcd()函数
功能:计算两数的最大公约数
入口参数:两个正数a,b
返回值:最大公约数
*/
int Gcd(int a,int b)
{
if (a==b) /*递归出口*/
return a;
else
{
if(a>b)
return Gcd(a-b,b);
else
m = LCM(x,y);
printf("最小公倍数为:%d\n",m);
}
结果:
7-5、
#include <stdio.h>
long fact(int n);
void main()
{
int i=0; /*循环变量*/
int n=0; /*输入的值*/
int m=0; /*接收fact()函数的返回值*/
{
int x=0; /*键盘键入两个数*/
int y=0;
int m=0; /*接收Gcd的返回值*/
do{
printf("输入两个正数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
m = Gcd(x,y);
printf("最大公约数:%d\n",m);
}
/*Gcd()函数
(2)、模块的实现细节对外不可见——信息隐藏。
外部:关心做什么;内部:关心怎么做。
实质:把不需要调用者知道的信息都封装在模块内部,是模块的实现细节对外不可见。
3、设计好模块接口
(1)、接口指罗列出一个模块的所有的与外部打交道的变量等
(2)、定义好后不要轻易改动。
(3)、在模块开头(文件的开头)进行函数声明。
{
update(); /*利用循环控制时钟运行时间*/
display(); /*显示时,分,秒*/
delay(); /*模一尺时间为1秒*/
}
return 0;
}
结果:
自动跳出时间
7-3、
#include <stdio.h>
/*max()函数
功能:找两个数的最大值
入口参数:两个整数a,b
返回值:两数的最大值
模块化程序设计:
1、定义:将系统划分为若干个子系统,任务划分为若干个子任务,本质思想就是实现不同层次的数据或过程的抽象过程。
2、模块分解的基本原则
(1)、保证模块的相对独立性——高聚合、低耦合。
高聚合:模块内部的联系越紧密越好,就是使模块的功能要相对独立和单一。
低耦合:模块之间的联系越松越好,就是使模块之间的接口越简单越好。
{
int i=0; /*循环变量*/
int min=0; /*循环寻找范围的最小值*/
int;b)?a:b; /*最小值为a,b中的最大值*/
max = a*b; /*最大值为a*b*/
for (i=min; i<=max; i++)
{
if(i%a==0 && i%b==0)
int Gcd(int a,int b);
void main()
{
int x=0; /*键盘键入两个数*/
int y=0;
int m=0; /*接收Gcd的返回值*/
do{
printf("输入两个正数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
m = Gcd(x,y);
4、结构化程序设计思想:
(1)、逐步求精:将一个完整的、较复杂的问题分解成若干个相对独立的、较为简单的子问题,若这些子问题还较为复杂可再分解它们,直到能够容易的用某种高级语言表达为止。
(2)、自底向上:先编写出基础程序段,然后再扩大、扩充和升级。
(3)、自顶向下:先写出结构简单的、清晰的主程序来表达整个问题;在此问题中包含的复杂子问题用子程序来实现;直到每个细节都可用高级语言表达为止。
int x=5; /*人数为5*/
int y=0; /*接收old()函数的返回值*/
y=old(x);
printf("第五个人的年龄为:%d\n",y);
}
结果:
7-10、
#include <stdio.h>
void main()
{
int flag=0; /*设置标志变量*/
int a=0; /*百位*/
{
printf("%d : %d : %d\n",hour,minute,second);
}
void delay()
{
int t;
for (t=0;t<100000000;t++); /*用循环体为空语句的循环实现延时*/
}
int main()
{
int i;
second=0;
for(i=0;i<1000000;i++)
3、结构化程序设计也是模块化程序设计的一种,增强可读性。
return i;
}
}
void main()
{
int x; /*键盘输入两整数x,y*/
int y;
int m; /*m用于接收LCM()函数的返回值*/
do{ /*输入整数的合法数据*/
printf("输入两个正整数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
总结:逐步求精技术-------是一种由不断的自底向上修正的所补充的自顶向下的程序设计方法。其特点:
<1>、程序结构清晰、容易阅读、容易修改
<2>、可简化程序的正确性验证,可减少程序调试的时间和复杂度。
5、用逐步求精实现技术求解问题的步骤为:
<1>、对实际问题进行全局性分析、决策,确定数学模型。
<2>、确定程序的总体结构,将整个问题分解成若干个相对独立的子问题。
printf("说出你的计算结果:");
scanf("%d",&sum);
for(i=100;i<=999;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
m=a*100+c*10+b;
n=b*100+a*10+c;
p=b*100+c*10+a;
q=c*100+a*10+b;
r=c*100+b*10+a;
printf("输入两个正数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
m = Gcd(x,y);
printf("最大公约数:%d\n",m);
}
/*Gcd()函数
功能:计算两数的最大公约数
入口参数:两个正数a,b
返回值:最大公约数
*/
int Gcd(int a,int b)
{
static long p=1;
p=p*n;
相关文档
最新文档