C语言第七章习题答案
C语言答案谭浩强第7章
C语言答案谭浩强第7章<i>C语言答案谭浩强</i>77.1 100N-S 7.1#include math.hmain(){int i, j, n, a;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;printf(“\n”);for (i=2; i=100; i++){if (a[i]!=0){printf(“%5d”, a[i]);n++;<i>C语言答案谭浩强</i>}if (n%10==0)printf(“\n”);}}2 3 5 7 11 13 17 19 23 2931 37 42 43 47 53 59 61 67 7173 79 83 89 977.2 10 ( )10 a~a a a~a a a~a a~a a a a 10 a a~a a a~a a~a a a a 10 9 a a N-S 7.2main(){int i, j, min, temp, a;printf(“ : \n”);for (i=1; i i++){printf(“a[%d]=”, i);scanf(“%d”, a[i]); /* 10 */}printf(“\n”);for (i=1; i i++)printf(“%5d”, a[i]); /* 10 */printf(“\n”);for (i=1; i i++) /* 7 10 */<i>C语言答案谭浩强</i>{min=i;for (j=i+1; i j++)if (a[min]a[j]) min=j;temp=a[i]; a[i]=a[min]; a[min]=temp; /* a[i+1]~a a[i] */}printf(“ : \n”);for (i=1; i i++)printf(“%5d”, a[i]); /* 10 */}:a=6a=45a=56a=1a=15a=44a=78a=58a=1016 90 45 56 1 15 44 78 58 101 :1 6 15 44 45 56 58 78 90 101 7.3 3 3main(){int a, i, j, sum=0;printf(“ : \n”);for (i=0; i i++)for (j=0; j j++)scanf(“%d”, a[i][j]);for (i=0; i i++)sum+=a[i][i];pr intf(“sum=%5d”, sum);}:1 2 3 4 5 6 7 8 9sum= 157.4N-S 7.3<i>C语言答案谭浩强</i>{int a={1, 4, 6, 9, 13, 16, 19, 28, 40, 100}; int temp1, temp2, number, end, i, j;printf(“a : \n”);for (i=0; i i++)printf(“%5d”, a[i]);printf(“\n”);printf(“ : ”);scanf(“%d”, number);end=a;if (numberend)a=number;else{for (i=0; i i++)if (a[i]number){temp1=a[i]; a[i]=number;for (j=i+1; j j++){temp2=a[j]; a[j]=temp1; temp1=temp2; } }}printf(“ : \n”);for (i=0; i i++)printf(“%5d”, a[i]);}a :1 4 6 9 13 16 19 28 40 100<i>C语言答案谭浩强</i>:51 4 5 6 9 13 16 19 28 40 1007.5 , 8,6,5,4,1 1,4,5,6,8N-S 7.4#define N 5main(){int a[N], i, temp;printf(“ a : \n”);for (i=0; i i++)scanf(“%d”, a[i]);printf(“a :\n”);for (i=0; i i++)printf(“%5d”, a[i]);for (i=0; i i++){temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf(“ a : \n”);for (i=0; i i++)printf(“%5d”, a[i]);printf(“\n”);}a :8 6 5 4 1a :8 6 5 4 1a :1 4 5 6 87.6 ( 10 )11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 ………………<i>C语言答案谭浩强</i> (a+b)113N-S 7.5 1 2 3 n:#define N 11main(){int i, j, a[N][N];for (i=1; i i++){a[i][i]=1;a[i]=1;}for (i=3; i i++)for (j=2; j j++)a[i][j]=a[i-1][j-1]+a[i-1][j]; for (i=1; i i++){for (j=1; j j++)printf(“%6d”, a[i][j]);printf(“\n”);}}11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 17.7<i>C语言答案谭浩强</i>8 1 63 5 74 9 21~n1 12 2 n1 13 1 n 14 n 1 15 nN-S 7.622main(){int a, i, j, k, p, m, n;p=1;while (p==1) /* 1~15 */ {printf(“ n(n=1~15, ): ”);s canf(“%d”,if (n!=0 n=15 n%2!=0)p=0;}for (i=1; i i++) /* */<i>C语言答案谭浩强</i> for (j=1; j i++)a[i][j]=0;j=n/2+1;a[j]=1;for (k=2; k=n*n; k++){i=i-1;j=j+1;if (i1 jn){i=i+2;j=j-1;}else{if (i1) i=n;if (jn) 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 i++) /* */{for (j=1; j i++)printf(“%4d”, a[i][j]);printf(“\n”);}n(n=1~15, ):517 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 97.8N-S 7.7<i>C语言答案谭浩强</i>#define N 10#define M 10main(){int i, j, k, m, n, flag1, flag2, a[N][M], max, maxi, manj; prin tf(“\n n: ”);scanf(“%d”,printf(“\n m: ”);scanf(“%d”,for (i=0; i i++){printf(“ %d ? \n”, i);for (j=0; j j++)scanf(“%d”, a[i][j]);}for (i=0; i i++){for (j=0; j j++)printf(“%5d”, a[i][j]);printf(“\n”);<i>C语言答案谭浩强</i>flag2=0;for (i=0; i i++){max=a[i]; maxj=0;for (j=1; j j++)if (a[i][j]max){max=a[i][j];maxj=j;}for (k=0,flag1=1; kn flag1; k++)if (max a[k][maxj]) flag1=0;if (flag1!=0){printf(“\n %d , %d %d .\n”, i, maxj, max); flag2=1;}}if (flag2==0)printf(“\n !\n”);}(1)n: 3m: 40 ?1 2 3 41 ?4 5 5 62 ?3 5 6 71 2 3 44 5 5 63 5 6 70 , 3 4 .(2)n:3m: 40 ?2 4 90 71 ?3 4 5 82 ?9 1 2 3<i>C语言答案谭浩强</i>2 4 90 73 4 5 89 1 2 3!7.9 159 a~a 1 3 5 7 9 11 13 15 17 3 3 a3 a a=9 a3 3 a a a a a a=5 a3 3 a a a a a a=3N-S 7.8#define N 15main(){int i, j, number, top, bott, mid, loca, a[N], flag=1, sign=1; char c;<i>C语言答案谭浩强</i>printf(“ , :\n”);scanf(“%d”, a);i=1;while (iN){scanf(“%d”, a[i]);if (a[i]a[i-1])i++;elseprintf(“ : ”);}printf(“\n”);printf(“ :\n”);for (i=0; i i++)printf(“%4d”, a[i]);printf(“\n”);flag=1;while (flag){printf(“ :”);scanf(“%d”, number);loca=0;top=0;bott=N-1;if (numbera || numbera[N-1]) loca=-1;while (sign==1 top=bott){mid=(top+bott)/2;if (number==a[mid]){loca=mid;printf(“ %d, %d\n”, number, loca+1); sign=0;}else if (numbera[mid])bott=mid-1;elsetop=mid+1;}if (sign==1 || loca=-1) printf(“ %d.\n”, number); printf(“ (Y/N)?”);scanf(“%c”,if (c== ‘n’ || c== ‘N’)flag=0;}}<i>C语言答案谭浩强</i> , :132:45681223344445565758681 3 4 5 6 8 12 23 34 44 45 56 57 58 68 :77.(Y/N)?y:1212, 7(Y/N)?n7.10 , 3 80N-S 7.9<i>C语言答案谭浩强</i>#include stdio.hmain(){int i, j, upp, low, dig, spa, oth;char text;upp=low=dig=spa=oth=0;for (i=0; i i++){printf(“\n %d : \n”, i+1);gets(text[i]);for (j=0; j80 text[i][j]!= ‘\0’; j++){if (text[i][j]= ‘A’ text[i][j]= ‘Z’)upp++;else if (text[i][j]= ‘a’ text[i][j]= ‘z’)low++;else if (text[i][j]= ‘0’ text[i][j]= ‘9’)dig++;else if (text[i][j]= ‘ ’)spa++;elseoth++;}}for (i=0; i i++) printf(“%s”, text[i]); printf(“ : %d”, upp); printf(“ : %d”, low); printf(“ : %d”, dig); prin tf(“ : %d”, spa); printf(“ : %d”, oth); }1 :I am a student.2 :*****3 :ASDFGI am a student.*****ASDFG: 6: 10: 6: 3:1。
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章课后习题
#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]); }
第七章习题参考答案
2#include<iostream>#include<iomanip>//格式控制必须包含的头文件using namespace std;void main(){ double data[5]={3.333,4.555,21.56789,6.0034,7.9045};for(int i=0;i<5;i++){cout<<setw(6)<<setiosflags(ios::right)<<setprecision(3)<<setiosflags(ios::fixed)<<data[i]<< endl;}}3#include<iostream>#include<iomanip>//格式控制必须包含的头文件using namespace std;void main(){ char c='B';for(int i=1;i<9;i++){cout<<setw(9-i);for(int j=1;j<=2*i-1;j++)cout<<c;cout<<endl;}}4(1)#include<iostream>#include<fstream>using namespace std;void main(){ int x,y;ofstream f1,f2;f1.open("f1.dat");cout<<"请输入20个整数"<<endl;for(int i=1;i<=10;i++){cin>>x;f1<<x<<endl;}f2.open("f2.dat");for(i=1;i<=10;i++){cin>>y;f2<<y<<endl;}f1.close();f2.close();}(2)#include<iostream>#include<fstream>using namespace std;void main(){ int x,y;ifstream f1;ofstream f2;f1.open("f1.dat");if(!f1){cerr<<"f1.dat不存在!"<<endl;}f2.open("f2.dat",ios::app);//追加方式必须先声明ofstream对象,而不是fstream对象if(!f2){cerr<<"f2.dat不存在!"<<endl;}for(int i=1;i<=10;i++){f1>>x;f2<<x<<endl;}f1.close();f2.close();}(3)#include<iostream>#include<fstream>using namespace std;void main(){ fstream f2;f2.open("f2.dat",ios::in);if(!f2){cerr<<"f2.dat不存在!"<<endl;}//读出数据保存在数组x中int x[20];for(int i=0;i<20;i++){f2>>x[i];}//排序int t;for(i=0;i<20;i++){ for(int j=0;j<=19-i;j++){if(x[j]>x[j+1]){t=x[j];x[j]=x[j+1];x[j+1]=t;}}}//写回f2.datofstream f;//需要改变文件流对象为输出,从而可以写数据f.open("f2.dat");for(i=0;i<20;i++)f<<x[i]<<endl;f.close();f2.close();}5(1)#include<fstream>#include<iomanip>#include<string>using namespace std;class Employee{private:int id;string name;int age;int salary;public:Employee(int i,string xm,int a,int s):id(i),name(xm),age(a),salary(s){}int getid(){return id;}string getname(){return name;}int getsalary(){return salary;}int getage(){return age;}};void main(){Employee e1(1,"zhansan",34,2000),e2(2,"lisi",31,2300);//简单起见,只生成了2个对象,同学们可以生成对象数组,提高效率ofstream f;f.open("employee.txt");f<<setw(4)<<e1.getid()<<setw(8)<<e1.getname()<<setw(3)<<e1.getage()<<setw(6)<<e1.get salary()<<endl;f<<setw(4)<<e2.getid()<<setw(8)<<e2.getname()<<setw(3)<<e2.getage()<<setw(6)<<e2.get salary()<<endl;f.close();}(2)#include<iostream>#include<fstream>#include<iomanip>#include<string>using namespace std;void main(){Employee e1(3,"woshi",31,5000),e2(4,"chufang",31,8300);ofstream f;f.open("employee.txt",ios::app);f<<setw(4)<<e1.getid()<<setw(8)<<e1.getname()<<setw(3)<<e1.getage()<<setw(6)<<e1.get salary()<<endl;f<<setw(4)<<e2.getid()<<setw(8)<<e2.getname()<<setw(3)<<e2.getage()<<setw(6)<<e2.get salary()<<endl;f.close();}(3)#include<iostream>#include<fstream>#include<iomanip>#include<string>using namespace std;void main(){ifstream f;f.open("employee.txt");char s[40];for(int i=0;i<20;i++){f.getline(s,40);cout<<s<<endl;;}f.close();}(4)#include<iostream>#include<fstream>#include<iomanip>#include<string>using namespace std;void main(){ifstream f;f.open("employee.txt");//存放文件读出的每一列数据string sid;//要查询的职工号cout<<"请输入职工工号"<<endl;cin>>sid;while(sid!="0"){ int k=-1;string s;//s="";ifstream f;f.open("employee.txt");for(int i=0;i<4;i++)//读4行{for(int j=0;j<4;j++)//每行的4列,对应id,name,age,salary{f>>s;if(s==sid)//sid与id列相等{ cout<<"是第"<<i+1<<"个职工"<<endl;k=i;//标记是第几个人}if (k==i)//按照标记,输出这个职工cout<<s<<endl;}}f.close();if (k==-1)cout<<"没有这个职工"<<endl;cout<<"请输入职工工号"<<endl;cin>>sid;}cout<<"结束"<<endl;}。
C语言答案第7章
第7章[习题7-1]输入3个整数,按从小到大的顺序输出。
/*c7_1.c*/#include <stdio.h>void swap(int *p1,int *p2){i nt p;p=*p1;*p1=*p2;*p2=p;}void main(void){i nt n1,n2,n3;i nt *pointer1,*pointer2,*pointer3;p rintf("请输入三个整数 n1,n2,n3:");s canf("%d,%d,%d",&n1,&n2,&n3);p ointer1=&n1;p ointer2=&n2;p ointer3=&n3;i f(n1>n2) swap(pointer1,pointer2);i f(n1>n3) swap(pointer1,pointer3);if(n2>n3) swap(pointer2,pointer3);p rintf("排序后三个整数为:%d,%d,%d\n",n1,n2,n3);}[习题7-2]编写程序,输入一个十进制的正整数,将其对应的八进制数输出。
/*c7_2.c*/#include<stdio.h>#define N 10void main(void){i nt x;c har *p,result[N];p rintf("输入十进制正整数:");s canf("%d",&x);f or(p=result;x!=0;p++){*p=x%8+'0';x=x/8;}f or(p--;p>=result;p--)putchar(*p);p utchar('\n');}[习题7-3]输入一个字符串,用指针方式逐一显示字符,并求其长度。
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章
/*习题七 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语言理论教材各章后习题参考答案第七章习题
第七章习题参考答案一、选择题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语言答案谭浩强第7章
1 2 3 4 5 6 7 8 9
1 3 6 10 15 21 28 36
1 4 10 20 35 56 84
1 5 15 35 70 126
1 6 21 56 126
1 7 28 84
1 8 36
1 9
1
6
8 3 4
1 5 9
6 7 2 1~ n
2
1 2 3 4 5
1 2 1 1 n
n2
1 n 1 1 1 n 7.6
7
7.1 N-S 100 7.1
#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; printf(“\n”); for (i=2; i<=100; i++) {if (a[i]!=0) {printf(“%5d”, a[i]); n++;
5 4 1 : 8 6 5 a 1 4 5
4 : 6 (
1 8 10 )
7.6 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 5 10 10 ………………
1 5
1
5
( a + b) n
1 2 3 N-S 1 1 3 7.5
: #define N 11 main() {int i, j, a[N][N]; for (i=1; i<N; i++) {a[i][i]=1; a[i][1]=1; } for (i=3; i<N; i++) for (j=2; j<i-1; j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for (i=1; i<N; i++) {for (j=1; j<=i; j++) printf(“%6d”, a[i][j]); printf(“\n”); } } 1 1 1 1 1 1 1 1 1 1 7.7
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]);
(完整版)答案第七章函数..
(完整版)答案第七章函数..第七章函数一、选择题1.以下函数声明正确的是: C 。
(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。
(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。
(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。
4.以下正确的函数形式是: D 。
(1级)A)double fun(int x,int y) B)fun (int x,y){z=x+y;return z;} {int z;return z;}C)fun(x,y) D)double fun(int x,int y){int x,y ; double z; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。
(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。
(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。
(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。
(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。
#include<stdio.h>#include<math.h>void main(){ int number;scanf("%d",&number);if(prime(number))printf("yes");elseprintf("no");}int prime(number)int number;{ int flag=1,n;for(n=2;n<sqrt(number);n++)if(number%n==0)flag=0;return(flag);}7.4 写一个函数,使给定的一个3*3的二维整型数组转置,即行列互换。
#define N 3int array[N][N];convert(array)int array[3][3];{ int i,j,t;for(i=0;i<N;i++)for(j=j+i;j<N;j++){ t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}}main(){int i,j;printf("输入数组元素:n");for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&array[i][j];printf("n数组是:n");for(i=0;i<N;i++){ for(j=0;j<N;i++)printf("%5d",array[i][j]);printf("n");}convert(array);printf("转置数组是:n");for(i=0;i<N;i++){ for(j=0;j<N;j++)printf("%5d",array[i][j]);printf("n");}}7.5 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
#include <stdio.h>#include <strung.h>void main(){char str[100];printf("输入字符串:n");scanf("%s",str);inverse(str);printf("转换后的字符串是: %sn",str);}inverse(str)char str[];{char t;int i,j;for(i=0,j=strlen(str);i<(strlen(str)/2;i++,j--) {t=str[i];str[i]=str[i-1];str[i-1]=t;}}7.6 写出一个函数,将两个字符串连接。
char concatenate(string1,string2,string);char string1[],string2[],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]='';}#include<stdio.h>void main(){char s1[100],s2[100],s[100];printf("n输入字符串1:n");scanf("%s",s1);printf("输入字符串2:n");scanf("%s",s2);concatenate(s1,s2,s);printf("连接后的字符串:%sn",s);}7.8 写一个函数,输入一个4位数字,要求输出这4个数字字符,但是两个数字间空一个空格。
#include<stdio.h>void main(){char str[80];printf("请输入含有四个数字的字符串:n");scanf("%s",str);insert(str);}insert(str)char str[];{int i;for(i=strlen(str);i>0;i--){ str[2*i]=str[i];str[2*i-1]=' ';}printf("n 结果是:n %s",str);}7.9 编写一个函数,由实参传来一个字符串字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
#include<math.h>int alph,digit,space,others;void main(){ char text[80];gets(text);alph=0,digit=0,space=0,others=0;count(text);printf("nalph=%d,digit=%d,space=%d,others=%dn",alph,digit,spac e,others);}count(str)char str[];{ int i;for(i=0;str[i]!='';i++)if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))alph++;else if(str[i]>='0'&&str[i]<='9')digit++;else if(strcmp(str[i],' ')==0)space++;elseothers++;}。