第七章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语言版 第2版)》(严蔚敏 著)第七章练习题答案
《数据结构(C语言版第2版)》(严蔚敏著)第七章练习题答案第7章查找1.选择题(1)对n个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为()。
A.(n-1)/2B.n/2C.(n+1)/2D.n答案:C解释:总查找次数N=1+2+3+…+n=n(n+1)/2,则平均查找长度为N/n=(n+1)/2。
(2)适用于折半查找的表的存储方式及元素排列要求为()。
A.链接方式存储,元素无序B.链接方式存储,元素有序C.顺序方式存储,元素无序D.顺序方式存储,元素有序答案:D解释:折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
(3)如果要求一个线性表既能较快的查找,又能适应动态变化的要求,最好采用()查找法。
A.顺序查找B.折半查找C.分块查找D.哈希查找答案:C解释:分块查找的优点是:在表中插入和删除数据元素时,只要找到该元素对应的块,就可以在该块内进行插入和删除运算。
由于块内是无序的,故插入和删除比较容易,无需进行大量移动。
如果线性表既要快速查找又经常动态变化,则可采用分块查找。
(4)折半查找有序表(4,6,10,12,20,30,50,70,88,100)。
若查找表中元素58,则它将依次与表中()比较大小,查找结果是失败。
A.20,70,30,50B.30,88,70,50C.20,50D.30,88,50答案:A解释:表中共10个元素,第一次取⎣(1+10)/2⎦=5,与第五个元素20比较,58大于20,再取⎣(6+10)/2⎦=8,与第八个元素70比较,依次类推再与30、50比较,最终查找失败。
(5)对22个记录的有序表作折半查找,当查找失败时,至少需要比较()次关键字。
A.3B.4C.5D.6答案:B解释:22个记录的有序表,其折半查找的判定树深度为⎣log222⎦+1=5,且该判定树不是满二叉树,即查找失败时至多比较5次,至少比较4次。
(6)折半搜索与二叉排序树的时间性能()。
C语言题库第7章宏定义与预处理√
第七章宏定义与预处理一.单项选择1. 以下程序的运行结果是( D )。
#include<stdio.h>#define ADD(x) x+xint main ( ){int m=1,n=2,k=3,sum ;sum = ADD(m+n)*k ;printf(“%d\n”,sum) ;return 0;}A.18B.9C.12D.102. 以下程序的运行结果是( C )。
#include<stdio.h>#define MIN(x,y) (x)>(y) ? (x) : (y)int main ( ) {int i=10, j=15 , k;k = 10*MIN(i,j);printf(“%d\n”,k);return 0;}A.15B.100C.10D.1503. 以下程序的运行结果是( A )。
#include<stdio.h>#define X 5#define Y X+1#define Z Y*X/2int main ( ) {int a=Y;printf(“%d\n”,Z);printf(“%d\n”,--a);return 0;}A.75B.125C.76D.1264. 以下程序的运行结果是( C )。
#include<stdio.h>#define DOUBLE(r) r*rint main ( ) {int x=1,y=2,t;t = DOUBLE(x+y) ;printf (“%d\n”,t); return 0;}A.7B.6C.5D.85. 在“文件包含”预处理命令形式中,当#include后面的文件名用””(双引号)括起时,寻找被包含文件的方式是( C )。
A.仅仅搜索源程序所在目录B.直接按系统设定的标准方式搜索目录C.先在源程序所在目录中搜索,再按系统设定的标准方式搜索D.仅仅搜索当前目录6. 若有定义#define N 2#define Y(n) ((N+1)*n)则执行语句z=2*(N+Y(5));后,z的值为( C )。
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。
第7章习题答案
1. #include <stdio.h> void main( ) { int i,a[5]; for(i=0;i<5;i++) scanf(“%d”,&a[i]); printf(“\n”); for(i=0;i<5;i++) if(a[i]>0) printf("%4d",a[i]); } 2 #include <stdio.h> void main( ) { int i,j,a[10],t; for(i=0;i<10;i++) scanf("%d",&a[i]); for(j=1;j<10;j++) for(i=0;i<=9-j;i++) if(a[i]>a[i+1]) { t=a[i+1]; a[i+1]=a[i]; a[i]=t; } for(i=0;i<10;i++) printf("%5d",a[i]); } 3 #include <stdio.h> void main( ) { int i,j,k,max,min; static int a[5]; for(i=0;i<5;i++) scanf(“%d”,&a[i]); max=min=a[0]; j=k=0; for(i=0;i<5;i++)
/*用循环控制变量 i 控制数组的下标*/
/*假定第一个元素既是最大的,也是最小的*/ /*对分别记录最大,最小元素下标的变量 j,k 初始化*/
PDF 文件使用 "pdfFactory Pro" 试用版本创建
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语言谭浩强答案
7.1用筛法求100之内的素数。
解:所谓“筛法”指的是“Eratosthenes筛法”。
Eratosthenes是古希腊的著名数学家。
他采用的方法是:在一张纸上写下1~1000之间的全部整数,然后逐个判断它们是否素数,找出一个非素数就把它挖掉,最后剩下的就是素数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2728 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 …具体做法如下:先将1挖掉(因为1不是素数)。
用2去除它后面的各个数,把能被2整除的数(如4,6,8…)挖掉,即把2的倍数挖掉。
用3去除它后面各数,把3的倍数挖掉。
分别用4,5…各数作为除数去除这些数以后的各数。
这个过程一直进行到在除数后面的数已全被挖掉为止。
例如在上表中1~50范围内的素数,要一直进行到除数为47为止。
事实上,这一过程可以简化。
如果需要找1~n数)即可。
例如对1~50,只需进行到将7上面的算法可表示为:挖去1;用刚才被挖去的数的下一个数p去除p后面的各数,把p的倍数挖掉;检查p n=1000,则检查p<31否),如果是,则返回(2)继续执行,否则就结束;纸上剩下的就是素数。
解题的基本思路有了,但要变成计算机的操作,还要作进一步的分析。
如怎样判断一个数是否已被“挖掉”,怎样找出某一个数p的倍数,怎样打印出未被挖掉的数。
可以设一个数组a,a[1]到a[100]的值分别是1,2,3,…100。
然后用上述方法将非素数“挖去”。
如果一个数被认为是非素数,就将它的值变为零,最后将不为零的数组元素输出,就是所求的素数表。
程序如下:#include <math.h>main ( ){int i,j,n,a[101];for (i=1;i<=100;i++)a[i] =i;for (i=2;i<sqrt(100);i++)for (j=i+1;j<=100;j++){if (a[i]!=0 && a[j]!=0)if (a[j]%a[i]==0)a[j]=0; } /*非素数,赋值为0,“挖掉”*/printf(“\n”);for (i=2,n=0;i<=100;i++){ if (a[i]!=0){printf(“%5d”,a[i]);n++; }if (n==10) /*此处if 语句的作用是在输出10个数后换行*/{ printf (“\n”);n=0; }}}运行结果:2 3 5 7 11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 89 977.2用选择法对10个整数排序(从小到大)。
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写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。
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;i=1<3成立静态变量i=i+square (2) =2+4=6 ;输出6;循环变量i=i+1=2;I=2<3 成立静态变量( i 保持原值) i=6 ;i=i+square ( 6) =6+36=42 ;输出 42;循环变量i=i+1=3 ;I=3<3 不成立退出循环输出循环变量i=37-2 、#include <stdio.h>int hour,minute,second; /* 定义全局变量 */ voidupdate(){second ++;if(second == 60){second=0;minute++;}if(minute==60){minute=0 ;hour++;}if(hour==24)hour=0;}void display(){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++){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>long fact(int n);void main(){int i=0; /* 循环变量*/int n=0; /* 输入的值*/int m=0; /* 接收 fact()函数的返回值*/long s=0; /*所求最终结果*/do{printf("input n:");scanf("%d",&n);}while(n<0);for(i=1; i<=n; i++){m=fact(i);s=s+m;}printf("1!+2!+...+n! = %ld\n",s);}/*fact 函数功能:计算 n!入口参数:n返回值:n!*/long fact(int n){static long p=1;p=p*n;return p;}结果: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)递归方法:#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){if (a==b)/* 递归出口 */return a;else{if(a>b)return Gcd(a-b,b);elsereturn Gcd(b,b-a);}}结果: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; /* 设置标志变量*/int a=0;/* 百位 */int b=0;/* 十位 */int c=0;/* 个位*/int m=0;/* 代表 acb*/int n=0;/* 代表 bac*/int p=0;/* 代表 bca*/int q=0;/* 代表 cab*/int r=0;/* 代表 cba*/int i=0;/* 从 100~999 中找 abc*/ int sum=0; /* 观众计算得结果*/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;if ((m+n+p+q+r)==sum){flag=1;/* 一旦找到就退出循环*/break;}}if(flag==0)/* 未找到说明计算错误 */{printf(" 你算错了!");}else{printf(" 你想的数是 %d %d %d \n",a,b,c);}}结果:二、收集资料并整理,叙述结构化程序设计的基本思想;根据自己的编程,说说你对结构化程序设计的理解。
【免费下载】c语言程序设计课后习题答案 第7章
/*习题七 2*/ #include<stdio.h> main() {
int x,n,a[10],i,j,max; printf("输入 n:\n"); scanf("%d",&n); printf("输入%d 个整数:\n",n); for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf(" %d ",a[i]); printf("\n"); }
/*练习 7-11*/ #include<stdio.h> main() {
char str[80]; int i,j,count=0; printf("输入一个以回车符结束的字符串:\n"); i=0; while((str[i]=getchar())!='\n')
putchar(str[j]); printf("\n");
}
/*习题七 1*/ #include<stdio.h> main() {
int x,y,n,a[10],i,min,max; printf("输入 n:\n"); scanf("%d",&n); printf("输入%d 个整数:\n",n); for(i=0;i<n;i++)
i++; str[i]='\0'; printf("再输入一个(); for(j=0;j<=i-1;j++)
if(str[80]==str[j]) count++;
C语言程序设计(第3版)第7章补充习题及答案
第7章补充习题及答案习题7.1 选择题(1) 表达式iA<iB||~iC&iD的运算顺序是A. ~, &, <, ||B. ~, ||, &, <C. ~, &, ||, <D. ~, <, &, ||(2) 以下叙述不正确的是A. 表达式iA&=iB等价于iA=iA&iBB. 表达式iA|=iB等价于iA=iA|iBC. 表达式iA!=iB 等价于iA=iA!iBD. 表达式iA^=iB等价于iA=iA^iB(3) 设有以下语句:char iData1=3, iData2=4, iData3 ;iData3 = iData1^iData2<<2;则z的二进制值是。
A. 00010100B. 00011011C. 00011100D. 000110007.2 填空题(1) 在C语言中,&运算符作为单目运算符时表示的是运算;作为双目运算符时表示的是。
(2) 测试char型变量第6位是否为1的表达式是(设最右位是第1位)。
(3) 设二进制数iData1的值是11001101,若想通过iData1&iData2运算使iData1中的低4位不变,高4位清零,则iData2的二进制数是。
(4) 设iData1=10100011,若要通过iData1^iData2使iData1的高4位取反,低4位不变,则iData2的二进制数是。
答案7.1 选择题(1) 表达式iA<iB||~iC&iD的运算顺序是 AA. ~, &, <, ||B. ~, ||, &, <C. ~, &, ||, <D. ~, <, &, ||(2) 以下叙述不正确的是 CA. 表达式iA&=iB等价于iA=iA&iBB. 表达式iA|=iB等价于iA=iA|iBC. 表达式iA!=iB 等价于iA=iA!iBD. 表达式iA^=iB等价于iA=iA^iB(3) 设有以下语句:char iData1=3, iData2=4, iData3 ;iData3 = iData1^iData2<<2;则z的二进制值是 C 。
C语言理论教材各章后习题参考答案第七章习题
第七章习题参考答案一、选择题7.1 答案:C7.2 答案:C7.3 答案:D7.4 答案:C7.5 答案:D二、读程序回答问题7.6 答案:B7.7 答案:C7.8 答案:D7.9 答案:A7.10 答案:C7.11 答案:D7.12 答案:C7.13 答案:C三、编写程序7.14 参考源程序如下:/* 习题7.14参考源程序*/#include<stdio.h>int N1=50,N2=10;long add(int m){static long s=0;s=s+m;return(s);}long mul(int m){static long p=1;p=p*m;return(p);}main(){int i;long sum,product;for(i=1;i<=N1;i++)sum=add(i);printf("1+2...+%d=%ld\n", N1, sum);for(i=1;i<=N2;i++)product=mul(i);printf("1*2...*%d=%ld\n", N2, product);}7.15 求素数的算法比较简单,本题主要考察通过外部变量来传递数据。
参考源程序中使用两个外部变量分别来存放素数的个数和素数的和。
参考源程序如下:参考源程序如下:/* 习题7.15参考源程序*/#include<math.h>#include<stdio.h>int n=0;long sum;void count(int n1,int n2){int i,j;int k;int flag=1;for(i=n1;i<=n2;i++){k=sqrt(n2);for(j=2;j<=k;j++)if(i%j==0) {flag=0; break;}if(flag){n++; sum+=i;}flag=1;}}main(){int n1=10,n2=100;count(n1,n2);printf("%d prime numbers, total is %d\n",n,sum);}。
明解C语言入门篇第七章答案
明解C语⾔⼊门篇第七章答案练习7-1#include <stdio.h>int main() {int n;printf("%d\t%d\t%d\n", sizeof1,sizeof(unsigned)-1,sizeof n+2 ); //此⾏显⽰结果为 4 3 6 因为1的字节就是为4,⽽-1的字节也是4再减去-1所以显⽰为3,最后是n+2为6printf("%d\t%d\t%d\n", sizeof +1, sizeof(double) - 1, sizeof(n + 2));//此⾏显⽰结果是 4 7 4 因为1的字节是4,double的字节长是8 -1是7,把(n+2)括起来之后使其为⼀个值,所以是4;printf("%d\t%d\t%d\n", sizeof - 1, sizeof((double)-1), sizeof (n + 2.0) );//此⾏结果是 4 8 8 因为1的字节是4,把double-1都括起来之后,就是double类型字节为8,同理最后也是8}练习7-2#include <stdio.h>#include<math.h>int main() {unsigned int number;int x;int i;int number1;printf("请输⼊初始值:" );scanf("%d", &number);number1 = number;printf("左移多少位:");scanf("%d", &x);number <<= x;printf("左移后的值:%d",number);putchar('\n');for (i = 0; i < x; i++) {number1 *= 2;}printf("乘以2的指数幂的值:%d", number1);}#include <stdio.h>#include<math.h>int main() {unsigned int number;int x;int i;int number1;printf("请输⼊初始值:" );scanf("%d", &number);number1 = number;printf("右移多少位:");scanf("%d", &x);number >>= x;printf("右移后的值:%d",number);putchar('\n');for (i = 0; i < x; i++) {number1 /= 2;}printf("除以2的指数幂的值:%d", number1);}练习7-3#include <stdio.h>#include<math.h>unsigned rrotate(unsigned x,int n){x >>=n;}int main() {unsigned int number;int x;printf("请输⼊初始值:");scanf("%d", &number);printf("右移多少位:");scanf("%d", &x);printf("右移后的值:%d", rrotate(number, x)); }#include <stdio.h>#include<math.h>unsigned lrotate(unsigned x,int n){x <<=n;return x;}int main() {unsigned int number;int x;printf("请输⼊初始值:");scanf("%d", &number);printf("左移多少位:");scanf("%d", &x);printf("左移后的值:%d", lrotate(number, x)); }练习7-4unsigned set(unsigned x, int pos){unsigned mask = (1u << pos);x = (mask | x);return x;}//将第pos位设置为1unsigned reset(unsigned x, int pos) {unsigned mask = 1u;if (x & (1u<<pos))return (x ^ (1u << pos));elsereturn x;}//将第pos为设置为0unsigned inverse(unsigned x, int pos) {unsigned mask = 1u << pos;x = (x ^ mask);return x;}//将第pos位取反练习7-5unsigned set_n(unsigned x, int pos, int n) {for (i = 0; i < n - pos; i++) {unsigned mask = (1u << (pos + i));x = (mask | x);}return x;}//⼀个位段都设置为1unsigned reset_n(unsigned x, int pos, int n) {unsigned mask = 1u;int i;for (i = 0; i < n-pos; i++) {if (x & (1u<<pos+i))x= (x ^ (1u << pos+i));}return x;}//⼀个位段都设置为0unsigned inverse_n(unsigned x, int pos, int n) {int i;unsigned mask = 1u;for (i = 0; i < n - pos; i++) {x = (x ^ (mask << pos + i));}return x;}//⼀个位段都取反练习7-6#include <stdio.h>// 显⽰unsigned类型的值最⼤值,同时验证最⼤值+1是0. int main() {unsigned a = 0;while (++a > 0);printf("%u", a - 1);putchar('\n');printf("%u", a);}练习7-7#include <stdio.h>int main() {float a;double b;long double c;scanf("%f",&a);printf("a=%f", a);putchar('\n');scanf("%lf", &b);printf("b=%f", b);putchar('\n');scanf("%lf", &c);printf("c=%f", c);}练习7-8#include <stdio.h>int main() {float a;double b;long double c;printf("%d,%d,%d",sizeof(a), sizeof(b), sizeof(c)); }练习7-9#include <stdio.h>#include<math.h>int main() {double m;double x;printf("正⽅形的⾯积是:");scanf("%lf", &m);printf("边长是:%.2f", sqrt(m));}练习7-10#include <stdio.h>int main(void){float x;int i;float m = 0.0;for (i = 0; i <= 100; i++) {x = i / 100.0;printf("x=%f x=%f\n",m,x);m += 0.01;}return0;}练习7-11#include <stdio.h>int main(void){float x;int i;float m = 0.0;float sum1 = 0;float sum2 = 0;for (i = 0; i <= 100; i++) {x = i / 100.0;printf("x=%f x=%f\n",m,x);m += 0.01;sum1 += m;sum2 += x;}printf("%f,%f", sum1, sum2);return0;}。
《C语言程序设计教程》(第三版)李凤霞 主编——第七章习题答案
习题七一、单项选择题1、以下程序的输出结果是()。
main(){int i,k,a[10],p[3];k=5;for(i=0;i<10;i++)a[i]=i; /*a: 0 1 2 3 4 5 6 7 8 9 */for(i=0;i<3;i++)p[i]=a[i*(i+1)]; /*p:0 2 6 */for(i=0;i<3;i++)k+=p[i]*2; /* k=5+4+12=21 */printf(“%d\n”,k);}A)20 B)21 C)22 D)232、以下正确的数组定义语句是()。
A)int y[1][4]={1,2,3,4,5}; B)float x[3][ ]={{1},{2},{3}}; C)long s[2][3]={{1},{1,2},{1,2,3}}; D)double t[ ][3]={0};3、以下程序段的输出结果是()。
main(){int m[3][3]={{1},{2},{3}}; m 1 0 0 n 1 2 3int n[3][3]={1,2,3}; 2 0 0 0 0 0printf(“%d\n”,m[1][0]+n[0][0]); 3 0 0 0 0 0printf(“%d\n”,m[0][1]+n[1][0]);}A)0 B)2 C)3 D)10 3 0 24、以下程序的输出结果是()。
main(){int i,x[3][3]={1,2,3,4,5,6,7,8,9}; 1 2 3for(i=0;i<3;i++)printf(“%d,”x[i][2-i]); 4 5 6} 7 8 9A)1,5,9 B)1,4,7 C)3,5,7 D)3,6,95、对以下程序从第一列开始输入数据:2473↙,程序的输出结果是()。
#include “stdio.h”main(){char c;while((c=getchar())!=’\n’){switch (c-‘2’){case 0:case 1:putchar(c+4);case 2:putchar(c+4);break;case 3:putchar(c+3);default:putchar(c+2);}}}A)668977 B}668966 C}66778777 D)66887666、不能正确为字符数组输入数据的是( )。
C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第七章 课后答案
#include <stdio.h>
void main()
{
int i,n;
double a[10],sum=0;
printf("Enter n :"); /*输入一个正整数n */
scanf("%d",&n);
printf("Enter %d numbers :\n",n); /*输入n个数,存储在数组a中*/
/*按逆序输出n个数*/
for(i=0;i<n;i++)
printf("%8d",a[n-1-i]);
printf("\n");
}
练习7-4
#include <stdio.h>
void main()
{
int i,index,max,n,a[10],temp;
printf("Enter n :"); /*输入一个正整数n */
else printf("NO\n");
}
习题7-6
#include <stdio.h>
void main()
{
int i,j;
char str[80];
/*输入一个以回车结束的字符串*/
printf("Enter a string: ");
i=0;
while((str[i]=getchar())!='\n')
scanf("%d",&a[i][j]);
/*判断a[n][n]是否上三角矩阵,当flag=1,表示上三角矩阵,当flag=0,表示非上三角矩阵*/
C语言程序设计(第三版)谭浩强习题与答案 第七章
7.6打印出以下杨辉三角形(要求打印出10行)。
1
11
121
1331
14641
15101051
∶
∶
main()
{ static int m,n,k,b[15][15];
b[0][1]=1;
for(m=1;m<15;m++)
{for(n=1;n<=m;n++)
{ b[m][n]=b[m-1][n-1]+b[m-1][n];
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
或
main()
{static int a[10],i,j,k,t;
for(i=1;i<11;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)
for(i=1;i<=10-j;j++)
if (a[i]>a[i+1])
{ i=i-1;
j=j+1;
if((i<1)&&(j>n))
{ i=i+2;
j=j-1;
}
else
{ Байду номын сангаасf(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else
{ i=i+2;
j=j-1;
a[i][j]=k;
C语言程序设计教程 第七章 课后习题参考答案
}
}
void print(int a[][N],int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}
void sum(int a[][N],int b[][N],int m,int n)
print(a,size);
reverse(a,size);
printf("\n");
return 0;
}
void print(int a[],int n)
{
int i;
printf("原:\n");
for(i=0;i<n;i++)
{
printf("%-4d",a[i]);
}
printf("\n");
for(i=0;i<n;i++)
input(b,M,N);
print(b,M,N);
printf("A+B=\n");
sum(a,b,M,N);
return 0;
}
void input(int a[][N],int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);