C Primer(第4 版)习题解答

合集下载

C语言程序设计第四版-课后答案解析

C语言程序设计第四版-课后答案解析

C语言程序设计(谭浩强)第四版-课后答案解析(总70页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--第一章程序设计和C语言【第15页】1-5#include <>int main ( ){ printf ("**************************\n\n");printf(" Very Good!\n\n");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<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max);return 0;}第2章算法——程序的灵魂【第36页】暂无答案第3章最简单的C程序设计——顺序程序设计【第82页】3-1#include <>#include <>int main(){float p,r,n;r=;n=10;p=pow(1+r,n);printf("p=%f\n",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=;r3=;r2=;r1=;r0=;p1=p*((1+r5)*5); #include <> #include <>int main(){float d=300000,p=6000,r=,m;m=log10(p/(p-d*r))/log10(1+r);printf("m=%\n",m);return 0;}3-4#include <>int main(){int c1,c2;c1=197;c2=198;printf("c1=%c,c2=%c\n",c1,c2);printf("c1=%d,c2=%d\n",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=%c\n",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("passwor is %c%c%c%c%c\n",c1,c2,c3,c4,c5);return 0;}3-7#include <>int main (){float h,r,l,s,sq,vq,vz;float pi=;printf("请输入圆半径r,圆柱高h∶");scanf("%f,%f",&r,&h); #include <>int main(){ int x,y;printf("输入x:");scanf("%d",&x);if(x<1) /* x<1 */{ y=x;printf("x=%3d, y=x=%d\n" ,x,y);}else if(x<10) /* 1=<x<10 */{ y=2*x-1;printf("x=%d, y=2*x-1=%d\n",x,y);}else /* x>=10 */{ y=3*x-11;printf("x=%d, y=3*x-11=%d\n",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;elsey=0;printf("x=%d,y=%d\n",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=%d\n",x,y); return 0;}4-8#include <>int main(){ float score;char grade;printf("请输入学生成绩:"); scanf("%f",&score);while (score>100||score<0){printf("\n 输入有误,请重输");scanf("%f",&score);}switch((int)(score/10)){case 10:case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;case 5:case 4:case 3:case 2:case 1:case 0: grade='E';}printf("成绩是 %,相应的等级是%c\n ",score,grade);return 0;}4-9#include <>#include <>int main(){int num,indiv,ten,hundred,thousand,ten_thousand,place; .=%d\n",sn); return 0;}5-6#include <>int main(){double s=0,t=1;int n;for (n=1;n<=20;n++){t=t*n;s=s+t;}printf("1!+2!+...+20!=%\n",s);return 0;}5-7#include <>int main(){int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for (k=1;k<=n1;k++) /*计算1到100的和*/{s1=s1+k;}for (k=1;k<=n2;k++) /*计算1到50各数的平方和*/ {s2=s2+k*k;}for (k=1;k<=n3;k++) /*计算1到10的各倒数和*/ {s3=s3+1/k;}printf("sum=%\n",s1+s2+s3);return 0;}5-8#include <>int main(){int i,j,k,n;printf("parcissus numbers are ");for (n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;if (n==i*i*i + j*j*j + k*k*k)printf("%d ",n);}printf("\n");return 0;}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<=M;a++) /* a是2-1000之间的整数,检查它是否完数 */{n=0; /* n用来累计a的因子的个数 */s=a; /* s用来存放尚未求出的因子之和,开始时等于a */for (i=1;i<a;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<1000;m++){s=0;for (i=1;i<m;i++)if ((m%i)==0) s=s+i;if(s==m){printf("%d,its factors are ",m); for (i=1;i<m;i++)if (m%i==0) printf("%d ",i); printf("\n");}}return 0;}5-10#include <>int main(){int i,n=20;double a=2,b=1,s=0,t;for (i=1;i<=n;i++){s=s+a/b;t=a,a=a+b,b=t;}printf("sum=%\n",s);return 0;}5-11#include <>int main(){double sn=100,hn=sn/2;int n;for (n=2;n<=10;n++){sn=sn+2*hn; /*第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=%d\n",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;dox1=(x0+a/x0)/2;}while(fabs(x0-x1)>=1e-5);printf("The square root of % is %\n",a,x1); return 0;}5-14#include <>#include <>int main(){double x1,x0,f,f1;x1=;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 %\n",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)<0){x2=x0;fx2=fx0;}else{x1=x0;}}while(fabs (fx0)>=1e-5);printf("x=%\n",x0);return 0;}5-16#include <>int main(){int i,j,k;for (i=0;i<=3;i++){for (j=0;j<=2-i;j++)printf(" ");for (k=0;k<=2*i;k++)printf("*");printf("\n");}for (i=0;i<=2;i++){for (j=0;j<=i;j++)printf(" ");for (k=0;k<=4-2*i;k++)printf("*");printf("\n");}return 0;}5-17#include <>int main(){char i,j,k; /*是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--%c\nB--%c\nC--%c\n",i,j,k);return 0;}第6章利用数组处理批量数据【第168页】6-1#include <>#include <>int main(){int i,j,n,a[101];for (i=1;i<=100;i++)a[i]=i;a[1]=0;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,n=0;i<=100;i++){ if(a[i]!=0){printf("%5d",a[i]);n++;}if(n==10){printf("\n");n=0;}}printf("\n");return 0;}6-2#include <>int main(){int i,j,min,temp,a[11];printf("enter data:\n");for (i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("\n");printf("The orginal numbers:\n");for (i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for (i=1;i<=9;i++){min=i;for (j=i+1;j<=10;j++)if (a[min]>a[j]) min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThe sorted numbers:\n");for (i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");return 0;}6-3#include <>int main(){int a[3][3],sum=0;int i,j;printf("enter data:\n");for (i=0;i<3;i++)for (j=0;j<3;j++)scanf("%3d",&a[i][j]);for (i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%6d\n",sum);return 0;}6-4#include <>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;i<10;i++)printf("%5d",a[i]);printf("\n");printf("insert data:");scanf("%d",&number);end=a[9];if (number>end)a[10]=number;else{for (i=0;i<10;i++){if (a[i]>number){temp1=a[i];a[i]=number;for (j=i+1;j<11;j++){temp2=a[j];a[j]=temp1;temp1=temp2;}break;}}}printf("Now array a:\n");for (i=0;i<11;i++)printf("%5d",a[i]);printf("\n");return 0;}6-5#include <>#define N 5int main(){ int a[N],i,temp;printf("enter array a:\n");for (i=0;i<N;i++)scanf("%d",&a[i]);printf("array a:\n");for (i=0;i<N;i++)printf("%4d",a[i]);for (i=0;i<N/2;i++) n",number);;printf("continu or not(Y/N)"); scanf(" %c",&c);if (c=='N'||c=='n')flag=0;}return 0;}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<3;i++){ printf("please input line %d:\n",i+1); gets(text[i]);for (j=0;j<80 && 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++;}}printf("\nupper case: %d\n",upp);printf("lower case: %d\n",low);printf("digit : %d\n",dig);printf("space : %d\n",spa);printf("other : %d\n",oth);return 0;}6-11#include <>int main(){ char a[5]={'*','*','*','*','*'};int i,j,k;char space=' ';for (i=0;i<5;i++){ printf("\n");printf(" ");for (j=1;j<=i;j++)printf("%c",space);for (k=0;k<5;k++)printf("%c",a[k]);}printf("\n");return 0;}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]!='\0'){ if ((ch[j]>='A') && (ch[j]<='Z'))tran[j]=155-ch[j];else if ((ch[j]>='a') && (ch[j]<='z')) tran[j]=219-ch[j];elsetran[j]=ch[j];j++;}n=j;printf("\noriginal text:");for (j=0;j<n;j++)putchar(tran[j]);printf("\n");return 0;}6-12b#include <>int main(){int j,n;char ch[80];printf("input cipher code:\n");gets(ch);printf("\ncipher code:%s\n",ch); j=0;while (ch[j]!='\0'){ if ((ch[j]>='A') && (ch[j]<='Z'))ch[j]=155-ch[j];else if ((ch[j]>='a') && (ch[j]<='z')) ch[j]=219-ch[j];elsech[j]=ch[j];j++;}n=j;printf("original text:");for (j=0;j<n;j++)putchar(ch[j]);printf("\n");return 0;}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]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("\nThe new string is:%s\n",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]!='\0'))i++;if (s1[i]=='\0' && s2[i]=='\0')resu=0;elseresu=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<=strlen(s2);i++)s1[i]=s2[i];printf("s1:%s\n",s1);return 0;}第7章用函数实现模块化程序设计【第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);l=lcd(u,v,h);printf("",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("",Hcf);printf("",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: %*x*x+%*x+%=0\n",a,b,c); disc=b*b-4*a*c;printf("root:\n");if (disc>0){greater_than_zero(a,b);printf("x1=%f\t\tx2=%f\n",x1,x2);}else if (disc==0){equal_to_zero(a,b);printf("x1=%f\t\tx2=%f\n",x1,x2);}else{smaller_than_zero(a,b);printf("x1=%f+%fi\tx2=%f-%fi\n",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);elseprintf("%d is not a prime.\n",n);return 0;}int prime(int n){int flag=1,i;for (i=2;i<n/2 && flag==1;i++)if (n%i==0)flag=0;return(flag);}7-4#include <>#define N 3int array[N][N];int main(){ void convert(int array[][3]);int i,j;printf("input array:\n");for (i=0;i<N;i++)for (j=0;j<N;j++)scanf("%d",&array[i][j]);printf("\noriginal array :\n");for (i=0;i<N;i++){for (j=0;j<N;j++)printf("%5d",array[i][j]);printf("\n");}convert(array);printf("convert array:\n");for (i=0;i<N;i++){for (j=0;j<N;j++)printf("%5d",array[i][j]);printf("\n");}return 0;}void convert(int array[][3]){int i,j,t;for (i=0;i<N;i++)for (j=i+1;j<N;j++){t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}}#include <>#include <>int main(){void inverse(char str[]);char str[100];printf("input string:");scanf("%s",str);inverse(str);printf("inverse string:%s\n",str);return 0;}void inverse(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[j-1];str[j-1]=t;}}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 %s\n",s);return 0;}void concatenate(char string1[],char string2[],char string[]) {int i,j;for (i=0;string1[i]!='\0';i++)string[i]=string1[i];for(j=0;string2[j]!='\0';j++)string[i+j]=string2[j];string[i+j]='\0';}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:%s\n",c);return 0;}void cpy(char s[],char c[])for (i=0,j=0;s[i]!='\0';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]='\0';}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%s\n",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;others=0;count(text);printf("\nletter:%d\ndigit:%d\nspace:%d\nothers:%d\n",letter,digit,space,others); return 0;}void count(char str[]){int i;for (i=0;str[i]!='\0';i++)if ((str[i]>='a'&& str[i]<='z')||(str[i]>='A' && str[i]<='Z'))letter++;else if (str[i]>='0' && str [i]<='9')digit++;else if (str[i]==32)space++;elseothers++;}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<='z')||(c>='A'&&c<='z'))return(1);elsereturn(0);}int longest(char string[]){int len=0,i,length=0,flag=1,place=0,point; for (i=0;i<=strlen(string);i++)if (alphabetic(string[i]))if (flag){point=i;flag=0;}elselen++;else{flag=1;if (len>=length){length=len;place=point;len=0;}}return(place);}7-11#include <>#include <>#define N 10char 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!"); elseflag=0;}sort(str);printf("string sorted:\n");for (i=0;i<N;i++)printf("%c",str[i]);printf("\n");return 0;}void sort(char str[]){int i,j;char t;for(j=1;j<N;j++)for (i=0;(i<N-j)&&(str[i]!='\0');i++)if(str[i]>str[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=%\n",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 5float 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 aver\n"); for(i=0;i<N;i++){printf("\n NO %2d ",i+1);for(j=0;j<M;j++)printf("%",score[i][j]);printf("%\n",a_stu[i]);}printf("\naverage:");for (j=0;j<M;j++)printf("%",a_cour[j]);printf("\n");h=highest();printf("highest:% NO. %2d course %2d\n",h,r,c);printf("variance %\n",s_var());return 0;}void input_stu(void){int i,j;for (i=0;i<N;i++){printf("\ninput score of student%2d:\n",i+1);for (j=0;j<M;j++)scanf("%f",&score[i][j]);}}void aver_stu(void){int i,j;float s;for (i=0;i<N;i++){for (j=0,s=0;j<M;j++)s+=score[i][j];a_stu[i]=s/;}}void aver_cour(void){int i,j;float s;for (j=0;j<M;j++){s=0;for (i=0;i<N;i++)s+=score[i][j];a_cour[j]=s/(float)N;}}float highest(){float high;int i,j;high=score[0][0];for (i=0;i<N;i++)for (j=0;j<M;j++)if (score[i][j]>high){high=score[i][j];r=i+1;c=j+1;}return(high);}float s_var(void){int i;float sumx,sumxn;sumx=;sumxn=;for (i=0;i<N;i++){sumx+=a_stu[i]*a_stu[i];sumxn+=a_stu[i];}return(sumx/N-(sumxn/N)*(sumxn/N)); }7-14#include <>#define N 10#define M 5float 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 aver\n"); for(i=0;i<N;i++){printf("\n NO %2d ",i+1);for(j=0;j<M;j++)printf("%",score[i][j]);printf("%\n",a_stu[i]);}printf("\naverage:");for (j=0;j<M;j++)printf("%",a_cour[j]);printf("\n");h=highest();printf("highest:% NO. %2d course %2d\n",h,r,c);printf("variance %\n",s_var());return 0;}void input_stu(void){int i,j;for (i=0;i<N;i++){printf("\ninput score of student%2d:\n",i+1);for (j=0;j<M;j++)scanf("%f",&score[i][j]); }}void aver_stu(void){int i,j;float s;for (i=0;i<N;i++){for (j=0,s=0;j<M;j++)s+=score[i][j];a_stu[i]=s/;}}void aver_cour(void){int i,j;float s;for (j=0;j<M;j++){s=0;for (i=0;i<N;i++)s+=score[i][j];a_cour[j]=s/(float)N;}}float highest(){float high;int i,j;high=score[0][0];for (i=0;i<N;i++)for (j=0;j<M;j++)if (score[i][j]>high){high=score[i][j];r=i+1;c=j+1;}return(high);}float s_var(void){int i;float sumx,sumxn;sumx=;sumxn=;for (i=0;i<N;i++){sumx+=a_stu[i]*a_stu[i];sumxn+=a_stu[i];}return(sumx/N-(sumxn/N)*(sumxn/N)); }7-15#include <>#include <>#define N 10int 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<N;i++){printf("input NO.: ");scanf("%d",&num[i]);printf("input name: ");getchar();gets(name[i]);}}void sort(int num[],char name[N][8]){ int i,j,min,templ;char temp2[8];for (i=0;i<N-1;i++){min=i;for (j=i;j<N;j++)if (num[min]>num[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<N;i++)printf("\n %5d%10s",num[i],name[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 ((n<num[0])||(n>num[N-1]))loca=-1;while((sign==1) && (top<=bott)){mid=(bott+top)/2;if (n==num[mid]){loca=mid;printf("NO. %d , his name is %s.\n",n,name[loca]);sign=-1;}else if (n<num[mid])bott=mid-1;elsetop=mid+1;}if (sign==1 || loca==-1)printf("%d not been found.\n",n);}。

CPrimer中文版(第4版)知识学习记录文本

CPrimer中文版(第4版)知识学习记录文本

C++Primer中文版(第4版)学习笔记调用GNU 或微软编译器调用GNU 编译器的默认命令是g++:$ g++ -o prog1微软编译器采用命令cl 来调用:C:\directory> cl -GX prog1.cppacm pc2编译器搭配下面是pc2配置:(以vc为编译环境)配置环境变量:jdk设置:path=C:\Program Files\Java\jdk1.6.0\bin;vc编译器设置:path=C:\Program Files\Microsoft Visual Studio\VC98\Bin;lib=C:\Program Files\Microsoft Visual Studio\VC98\Lib;include=C:\Program Files\Microsoft Visual Studio\VC98\include环境变量配置完成之后,设置下pc2就ok了!pc2设置如下:compile com line: cl.exe {:mainfile}Executable Filename:{:basename}.exeprogram execution command line:{:basename}.exe做到这些配置,基本上编译就不成问题了!注意,期间可以需要到C:\Program Files\Microsoft Visual Studio\COMMON\Tools路径下拷贝mspdb60.dll到C:\Program Files\Microsoft Visual Studio\VC98\Bin;!这个自己调试就Ok了!访问main 函数的返回值的方式和系统有关。

不论UNIX 还是Windows 系统,执行程序后,必须发出一个适当的echo 命令。

UNIX 系统中,通过键入如下命令获取状态:$ echo $?要在Windows 系统下查看状态,键入C:\directory> echo %ERRORLEVEL%再谈编译编译器的部分工作是寻找程序代码中的错误。

C++Primer中文版_第4版_第七章_函数_习题解答_文字word版

C++Primer中文版_第4版_第七章_函数_习题解答_文字word版

第七章函数题目00What is the difference between a parameter and an argument?形参和实参有什么区别?【解答】形参是在函数定义的形参表中进行定义,是一个变量,其作用域为整个函数。

而实参出现在函数调用中,是一个表达式。

进行函数调用时,用传递给函数的实参对形参进行初始化。

题目01Indicate which of the following functions are in error and why. Suggesthow you might correct the problems.下列哪些函数是错误的?为什么?请给出修改意见。

(a) int f() {string s;// ...return s;}(b) f2(int i) { /* ... */ }(c) int calc(int v1, int v1) /* ... */ }(d) double square(double x) return x * x;【解答】(a)是错误的。

因为函数头中所定义的返回值类型为int,return语句世纪返回的表达式的类型为string,两个类型不同,而string类型又不能隐式转换为int类型。

可修改为:string f(){string s;//…Return s;}(b)是错误的。

因为该函数定义中没有指定返回类型,在标准C++中,定义函数时不指定返回类型是非法的。

可修改为:Int f2(int i){/*…*/}(c)是错误的。

缺少括住函数体在左花括号,而且两个形参不应该同名。

可修改为:Int caic(int v1,intv2){/*…*/}(d)是错误的。

缺少括住函数体的一对花括号。

可修改为:Double square(double x){return x*x;}题目02Write a program to take two int parameters and generate the result ofraising the first parameter to the power of the second. Write a programto call your function passing it two ints. Verify the result.编写一个带有两个int 型形参的函数,产生第一个参数的第二个参数次幂的值。

C++primer中文版第四版 习题答案word版本 第八章

C++primer中文版第四版 习题答案word版本 第八章

第八章标准IO库8.1 假设os是一个ofstream对象,下面程序做了什么?os << “Goodbye!” << endl;如果os 是ostringstream对象呢?或者,os 是ifstream对象呢?答:第一个,向文件中写入“Goodbye”,第二个向string对象中写入“Goodbye”,第三个,如果os是一个ifstream对象,则错误,因为ifstream类中没有定义操作符<< 。

8.2 下面的声明是错误的,指出其错误并改正之: ostream print(ostream os);答:标准库类型不允许做复制或赋值操作。

形参或返回类型不能为流类型,所以上句代码错误,因为它把流类型的对象当做了形参。

应改为传递指向该对象的指针或引用:ostream &print( ostream &os );8.3 编写一个函数,其唯一的形参和返回值都是istream&类型。

该函数应一直读取流直到到达文件的结束符为止,还应将读到的内容输出到标准输出中。

最后,重设流使其有效,并返回该流。

答:// 定义控制台¬应用程序的入口点。

//#include"stdafx.h"#include"stdafx.h"#include<iostream>using namespace std;istream & f( istream & in ){int ival;while ( in >> ival, !in.eof()) // 遇到文件结束符之前一直读入数据{if(in.bad()) // input stream is corrupted; bail out, 流是否已被破坏throw runtime_error("IO stream corrupted");if ( in.fail() ) // bad input{cerr << " bad date, try again:";in.clear( ); // reset the streamin.setstate(istream::eofbit); // 结束死循环continue;}// process inputcout << ival << endl;}in.clear(); // 将n中的所有状态值都设为有效状态return in;}int main(){cout << " Input some words ( ctrl + z to end ):\n";f( cin );system("pause");return0;}8.4 通过cin为实参实现调用来测试上题编写的函数。

C++Primer(第4版)习题解答(非扫描版有目录)

C++Primer(第4版)习题解答(非扫描版有目录)

习题 2.19............................................11 习题 2.20............................................11 习题 2.21............................................11 习题 2.22............................................11 习题 2.23........................................... 12 习题 2.24........................................... 12 习题 2.25........................................... 12 习题 2.26........................................... 12 习题 2.27........................................... 12 习题 2.28........................................... 12 习题 2.29........................................... 13 习题 2.30........................................... 13 习题 2.31........................................... 13 习题 2.32........................................... 14 习题 2.33........................................... 14 习题 3.1 ............................................. 14 习题 3.2 ............................................. 14 习题 3.3 ............................................. 14 习题 3.4 ............................................. 15 习题 3.5 ............................................. 15 习题 3.6 ............................................. 15 习题 3.7 ............................................. 15 习题 3.8 ............................................. 16 习题 3.9 ............................................. 17 习题 3.10........................................... 17 习题 3.11........................................... 17 习题 3.12........................................... 17 习题 3.13........................................... 18 习题 3.14........................................... 19 习题 3.15........................................... 19 习题 3.16........................................... 19 习题 3.17........................................... 20 习题 3.18........................................... 21 习题 3.19........................................... 22 习题 3.20........................................... 22 习题 3.21........................................... 22 习题 3.23........................................... 22 习题 3.24........................................... 22 习题 4.1 ............................................. 23 习题 4.3 ............................................. 23 习题 4.4 ............................................. 23 习题 4.5 ............................................. 24 习题 4.6 ............................................. 24 习题 4.7 ............................................. 24

C++Primer(第4版)习题解答_第十一章

C++Primer(第4版)习题解答_第十一章

第十一章泛型算法1.algorithm头文件定义了一个名为count的函数,其功能类似于find。

这个函数使用一对迭代器和一个值做参数,返回这个值出现的次数的统计结果。

编写程序读取一系列int型数据,并将它们存储到vector对象中然后统计某个指定的值出现了多少次。

// 11.17_11.1_int_to_vector_count.cpp : 定义控制台应用程序的入口点。

//#include"stdafx.h"#include<vector>#include<iostream>#include<algorithm>using namespace std;int _tmain(int argc, _TCHAR* argv[]){cout << "\tInput some int numbers ( ctrl + z to end):\n\t ";vector<int> iVec;int iVal;while ( cin >> iVal )iVec.push_back( iVal );cout << "\n\tInput a num to search in the iVec: ";cin.clear();cin >> iVal;int iCnt = 0;if ( iCnt = count( iVec.begin(), iVec.end(), iVal )){cout << "\n\tThe value " << iVal << " occurs " << iCnt << " times." << endl;}system("pause");return 0;}2.重复前面的程序,但是,将读入的值存储到一个string类型的list对象中。

模拟电子技术基础第四版)习题解答

模拟电子技术基础第四版)习题解答

第1章常用半导体器件自测题一、判断下列说法是否正确,用“×”和“√”表示判断结果填入空内。

(1)在N 型半导体中如果掺入足够量的三价元素,可将其改型为P 型半导体。

( √)(2)因为N 型半导体的多子是自由电子,所以它带负电。

( × )(3)PN 结在无光照、无外加电压时,结电流为零。

( √ )(4)处于放大状态的晶体管,集电极电流是多子漂移运动形成的。

( × )(5)结型场效应管外加的栅一源电压应使栅一源间的耗尽层承受反向电压,才能保R大的特点。

( √ )证其GSU大于零,则其输入电阻会明显变小。

( × )(6)若耗尽型N 沟道MOS 管的GS二、选择正确答案填入空内。

(l) PN 结加正向电压时,空间电荷区将 A 。

A.变窄B.基本不变C.变宽(2)稳压管的稳压区是其工作在 C 。

A.正向导通B.反向截止C.反向击穿(3)当晶体管工作在放大区时,发射结电压和集电结电压应为 B 。

A.前者反偏、后者也反偏B.前者正偏、后者反偏C.前者正偏、后者也正偏(4) U GS=0V时,能够工作在恒流区的场效应管有 A 、C 。

A.结型管B.增强型MOS 管C.耗尽型MOS 管三、写出图Tl.3所示各电路的输出电压值,设二极管导通电压U D=0.7V。

图T1.3解:U O1=1.3V , U O2=0V , U O3=-1.3V , U O4=2V , U O5=1.3V , U O6=-2V 。

四、已知稳压管的稳压值U Z =6V ,稳定电流的最小值I Zmin =5mA 。

求图Tl.4 所示电路中U O1和U O2各为多少伏。

(a) (b)图T1.4解:左图中稳压管工作在击穿状态,故U O1=6V 。

右图中稳压管没有击穿,故U O2=5V 。

五、电路如图T1.5所示,V CC =15V ,β=100,U BE =0.7V 。

试问:(1)R b =50k Ω时,U o=?(2)若T 临界饱和,则R b =?解:(1)26BB BEB bV U I A R μ-==,2.6C B I I mA β==,2O CC C c U V I R V =-=。

C程序设计(第四版)(谭浩强)完整版_课后习题答案.doc

C程序设计(第四版)(谭浩强)完整版_课后习题答案.doc

C程序设计 (第四版 )(谭浩强 )第一章课后习题答案P006 1.1向屏幕输出文字.#include <stdio.h> // 预编译. 代码均调试成功, 若有失误大多不是代码问题. 自已找找. int main(){printf( "Welcome to \n" );return 0; // 与 int main 对应 , 为了程序可移植性, 建议全用int main + return 0;.}P008 1.2求两个数的和.#include <stdio.h>int main(){int a,b,sum;a=5;b=4;sum=a+b;printf( "The sum is %d .\n",sum);return 0;}P008 1.3调用函数比较两个数的大小.<stdio.h>#includeint main(){int max( int x, int y);// 被调用函数在主函数后面, 用前先声明.int a,b,c;.scanf( "%d,%d" ,&a,&b);// 输入时要按格式来, 此处的逗号 , 用空格会发生错误c=max(a,b);//a,b作为实参传入被调用函数中.printf( "The max is %d .\n",c);return 0;}int max( int x, int y) // 定义了两个形参.{int z;//z 属于局部变量, 可与主函数中相同名字.if(x>y)z=x;elsez=y;return (z);//z 作为整个程序的出口值, 赋给主函数中的 c.}P015 0.6三个数的大小.(数字0表示课后练习题)#include <stdio.h>int main(){int a,b,c,d;//d 是用于存储最大值的.int max( int x , int y , int z);// 测试可知 , 在 VS2008中 , 可以不预先声明.printf( "Please input 3 numbers :\n");scanf( "%d %d %d",&a,&b,&c);d=max(a,b,c);// 调用函数中有三个形参, 这里需要传入三个实参, 才可运算 .printf( "The max is :%d .\n",d);// d可以换成max(a,b,c).}int max( int x ,int y , int z){int m;if (x>y && x>z)// 求三者之大的一种方法.m=x;if(y>x && y>z)m=y;if(z>y && z>x)m=z;return (m);// 返回值 m给主函数中的 d.}C程序设计 (第四版 )(谭浩强 )第 2 章课后习题答案算法——程序的灵魂P017 2.1计算机1-5相乘的积.#include <stdio.h>int main(){int i,s=1;// 在执行数值操作前一定要先有个初值.for (i=1;i<6;i++)// 这里是到 6.{s=s*i;// 相乘}printf( "The sum is %d .\n",s);return 0;}#include <stdio.h>// 作出要求 : 换成 1到 11间奇数相乘 .int main(){int i,s=1;// 在执行数值操作前一定要先有个初值.for (i=1;i<12;i++)// 这里是到 , 但题目要求的是取单数. 也可以是 i=i+2{if (i%2!=0)//i对取模,值为非为奇数; 为则为偶数 .s=s*i;elsecontinue ;// 跳过这个 for 循环的这一次, 执行下一次 .}printf( "The sum is %d .\n",s);return 0;}P019 2.2按要求输出80分以上的学生信息.暂时没法做.P019 2.3判断2000-2500年中的闰年,并输出.年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动 1 秒,但是真正的一年是 365.2423 天(目前)。

c++ Primer(第4版)习题解答

c++  Primer(第4版)习题解答
】答解【 。者大较的中数个两的入输户用出输�序程写编 61.1
题习
。致一测预的出给中 41.1 题习与
;1v = rewol { )2v =< 1v( fi ;reppu ,rewol tni reppu 界上为作数的大较、rewol 界下为作数的小较用 // 数个两入读 // ;2v >> 1v >> nic::dts ;2v ,1v tni ;ldne::dts << ":srebmun owt retnE" << tuoc::dts { )(niam tni >maertsoi< edulcni# �下如改修序程 。读阅于便不�起一在连出输的数有所
】答解【 �么什为又�法合不果如�么什为�法合果如�吗法合码代段这
)(niam tni >maertsoi< edulcni# �下如序程的写编环循 elihw 用 } ;0 nruter ;ldne::dts << mus << " si evisulcni 001 ot 05 fo muS" << tuoc::dts ;i =+ mus )i++ ;001 =< i ;05 = i tni( rof ;0 = mus tni { )(niam tni >maertsoi< edulcni# �下如序程的写编环循 rof 用
】答解【 。数作操个一每印打句语的独单用使�序程写重。句语出输的长较条一了用使序程的们我 5.1
题习
} ;0 nruter ;ldne::dts << 2v * 1v << " si " << 2v << " dna " << 1v << " fo tcudorp ehT" << tuoc::dts ;2v >> 1v >> nic::dts ;2v ,1v tni ;ldne::dts << ":srebmun owt retnE" << tuoc::dts { )(niam tni >maertsoi< edulcni#

C Primer(第4 版)习题解答

C   Primer(第4 版)习题解答

C++ Primer(第4 版)习题解答.txt51自信是永不枯竭的源泉,自信是奔腾不息的波涛,自信是急流奋进的渠道,自信是真正的成功之母。

书名:C++ Primer(第4 版)习题解答? 作者:蒋爱军李师贤梅晓勇? 来源:人民邮电出版社? 出版时间:2006 年12 月? ISBN:9787115155108? 定价:45 元内容介绍:C++ Primer(第4 版)是C++大师Stanley B. Lippman 丰富的实践经验和C++标准委员会原负责人JoséeLajoie 对C++标准深入理解的完美结合,更加入了C++先驱Barbara E. Moo 在C++教学方面的真知灼见,C++ Primer(4 版)习题解答2是初学者的最佳C++指南,而且对于中高级程序员,也是不可或缺的参考书。

本书正是这部久负盛名的C++经典教程的配套习题解答。

书中提供了C++ Primer(第4 版)中所有习题的参考答案。

本书对使用C++ Primer(第4 版)学习C++程序设计语言的读者是非常理想的参考书。

C++是一门非常实用的程序设计语言,既支持过程式程序设计,也支持面向对象程序设计,因而也是目前应用极为广泛的一门程序设计语言。

在层出不穷的介绍C++语言的书籍中,C++ Primer 是一本广受欢迎的权威之作。

强大的作者阵容、全面的内容介绍、新颖的组织方式,使之深受C++爱好者的青睐。

本书编者在翻译C++ Primer(第4 版)的过程中也深深地感受到了这一点。

在学习一门程序设计语言的过程中,亲自动手编写代码是一种极其有效的学习方式,可以对语言的理解和应用达到事半功倍的效果,因此,C++ Primer(第4版)中提供了许多习题,以帮助读者加深对书中内容的理解。

本书试图成为C++ Primer(第4 版)的配套书籍,根据C++ Primer(第4 版)中所介绍的内容提供配套习题的解答,书中所给出的“见xx 节”,均指参见C++Primer(第4 版)的相应章节。

C++ Primer 4th 第四章答案

C++ Primer 4th 第四章答案

iter2 = ivec2.begin(); while (*iter1 == *iter2 && iter1 != ivec1.end() && iter2 != ivec2.end()) { ++iter1; ++iter2; } if (iter1 == ivec1.end())//所有元素都相等 cout << "Vector1 is equal to vector2." << endl; else cout << "Vector1 is not equal to vector2." << endl; } return 0; } 习题4.9 编写程序定义一个有10 个int 型元素的数组,并以元素在数组中的位置作为各 元素的初值。 【解答】 //定义一个有10 个int 型元素的数组, //并以元素在数组中的位置(1~10)作为各元素的初值 #include <iostream> #include "windows.h" using namespace std; int main() { const int array_size=10; int ia[array_size]; system("CLS"); for(size_t ix=0;ix!=array_size;ix++) ia[ix]=ix+1; return 0; } 习题4.10 下面提供了两种指针声明的形式,解释宁愿使用第一种形式的原因: int *ip; // good practice int* ip; // legal but misleading 【解答】 第一种形式强调了ip 是一个指针,这种形式在阅读时不易引起误解,尤其 是当一个语句中同时定义了多个变量时。 习题4.11 解释下列声明语句,并指出哪些是非法的,为什么? (a) int* ip; (b) string s, *sp = 0; (c) int i; double* dp = &i; (d) int* ip, ip2; (e) const int i = 0, *p = i;

C语言入门经典(第4版)课后练习参考答案

C语言入门经典(第4版)课后练习参考答案

目录目录 (1)第1章C语言编程 (4)练习1.1 (4)练习1.2 (5)练习1.3 (5)第2章编程初步 (6)习题2.1 (6)习题2.2 (7)习题2.3 (9)习题2.4 (10)第3章条件判断 (12)习题3.1 (12)习题3.2 (14)习题3.3 (19)习题3.4 (21)第4章循环 (24)习题4.1 (24)习题4.2 (26)习题4.4 (27)习题4.5 (29)第5章数组 (31)习题5.1 (31)习题5.2 (33)习题5.3 (35)习题5.4 (36)习题5.5 (39)第6章字符串和文本的应用 (41)习题6.1 (41)习题6.2 (50)习题6.3 (53)习题6.4 (53)第7章指针 (57)习题7.1 (57)习题7.2 (59)习题7.3 (61)习题7.4 (63)习题8.1 (65)习题8.2 (67)习题8.3 (69)习题8.4 (73)第9章函数再探 (79)习题9.1 (79)习题9.2 (80)习题9.3 (83)习题9.4 (85)第10章基本输入输出操作 (87)习题10.1 (87)习题10.2 (89)习题10.3 (91)习题10.4 (92)第11章结构化数据 (95)习题11.1 (95)习题11.2 (99)习题11.3 (103)习题11.5 (114)第12章处理文件 (119)习题12.1 (120)习题12.2 (121)习题12.3 (125)习题12.4 (127)第13章支持功能 (132)习题13.1 (133)习题13.2 (133)习题13.3 (135)《C语言入门经典(第4版)》课后练习参考答案第1章C语言编程练习1.1 编写一个程序,用两个printf()语句别离输出自己的名字和地址。

练习1.2将上一个练习修改成所有的输出只用一个printf()语句。

练习1.3编写一个程序,输出下列文本,格式如下所示:"It's freezing in here," he said coldly.第2章编程初步习题2.1 编写一个程序,提示用户用英寸输入一个距离,然后将该距离值输出为码、英尺和英寸的形式。

C++Primer(第4版)习题解答_十五章

C++Primer(第4版)习题解答_十五章

第十五章面向对象编程1。

什么是虚成员?在类中被声明为virtual的成员,基类希望这种成员在派生类中重定义。

除了构造函数外,任意非static成员都可以为虚成员。

2。

给出protected访问标号的定义。

它与private有何不同?protected为受保护的访问标号,protected成员可以被该类的成员、友元和派生类成员(非友元)访问,而不可以被该类型的普通用户访问。

而private成员,只能被基类的成员和友元访问,派生类不能访问。

3。

定义自己的Item_base类版本。

class Item_base{public:Item_base( const string &book = '', double sales_price = 0.0) :isbn( book ), price( sales_price ) { }string book( ) const{return isbn;}virtual double net_price( size_t n ) c onst{return price * n;}virtual ~Item_base() { }private:string isbn;protected:double price;};4。

图书馆可以借阅不同种类的资料—书、CD、DVD等等。

不同种类的借阅资料有不同的登记、检查和过期规则。

下面的类定义了这个应用程序可以使用的基类。

指出在所有借阅资料中,哪些函数可能定义为虚函数,如果有,哪些函数可能是公共的。

(注:假定LibMember 是表示图书馆读者的类,Date是表示特定年份的日历日期的类。

)class Library{bool check_out( const LibMember& );bool check_in( cosnt LibMember& );bool is_late( const Date& today );double apply_fine();ostream& print( ostream& = count );Date due_date() const;Date date_borrowed() const;string title() const;const LibMember& member() const;};因为有不同的登记、检查、和过期规则,所以bool check_out( const LibMember& );bool check_in( cosnt LibMember& );bool is_late( const Date& today );double apply_fine();ostream& print( ostream& = count );这几个函数应该被定义为虚函数,print函数可能用于打印不同的项目的内同,也定义为虚函数。

C++Primer(第4版)习题解答_第十章

C++Primer(第4版)习题解答_第十章

第十章关联容器1.编写程序读入一些列string和int型数据,将每一组存储在一个pair对象中,然后将这些pair对象存储在vector容器里。

// 11.16_10.1_pair.cpp : 定义控制台应用程序的入口点。

//#include"stdafx.h"#include<iostream>#include<string>#include<vector>#include<utility>using namespace std;int _tmain(int argc, _TCHAR* argv[]){string str;int iVal;cout << "\tInput some pair contents( pair<string, int > ) (^Z to end):\n";vector< pair<string, int> > pairVec;while( cin >> str >> iVal )pairVec.push_back( pair< string, int > ( str, iVal) );cout << "\n\t The content of pairVec is:\n" ;for ( vector< pair<string, int> >::iterator it = pairVec.begin(); it != pairVec.end(); ++it ){cout << it->first << " " << it->second << endl;}system("pause");return 0;}2.在前一题中,至少可使用三种方法创建pair对象。

C++Primer(第4版)习题解答_十二章

C++Primer(第4版)习题解答_十二章

第十二章类和数据抽象12.1 编写一个名为person的类,表示人的名字和地址,使用string来保存每个元素。

答:class person{public:person( string pName, string pAddress ){name = pName;address = pAddress;}private:string name;string address;};12.2 为person提供一个接收两个string参数的构造函数。

见第一题。

12.3 提供返回名字和地址的操作。

这些函数应为const吗?解释你的选择。

在public里添加成员函数:string get_name() const{return name;]string get_address() const{return address;]这两个成员函数不应该修改其操作的对象的数据成员的值,应该声明为const类型。

12.4 指明person的哪个成员应声明为public,哪个成员应声明为private。

解释。

数据成员name和address应为private, 保证只能被类的成员所用,外界不可访问。

成员函数get_name()和get_address() 应声明为public,为外界提供接口访问类的数据成员。

构造函数也应声明为public,以便初始化类的对象。

12.5 C++类支持哪些访问标号?在每个访问标号之后应定义哪种成员?如果有的话,在类的定义中,一个访问标号可以出现在何处以及可出现多少次?约束条件是什么?有public, private, protect。

public后定义可被外界访问的接口,private后定义只能被本类成员函数使用的成员;protect后定义的成员称为受保护成员,只能由本类及本类的子类访问。

访问标号可以出现在任意成员定义之前且次数没有限制。

约束条件是:每个访问标号指定了随后的成员定义级别,这个级别持续有效,直到下一个访问标号出现,或者看到类定义体的右花括号为止。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
会自动连接一些默认库,因此可能有某些所用到的库函数或库类型没பைடு நூலகம்显式指
明相应的头文件。使用其他编译器的读者需特别注意,必要时应加上相应的
#include 指示。
衷心希望本书能对使用C++ Primer(第4 版)学习C++语言的读者有所帮助。
由于编者水平所限,书中不当之处在所难免,恳请读者批评指正。
程序设计,因而也是目前应用极为广泛的一门程序设计语言。
在层出不穷的介绍C++语言的书籍中,C++ Primer 是一本广受欢迎的权威之作。
强大的作者阵容、全面的内容介绍、新颖的组织方式,使之深受C++爱好者的青
睐。本书编者在翻译C++ Primer(第4 版)的过程中也深深地感受到了这一点。
器中编译1.3 节中给出的带有不正确嵌套注释的程序:
#include <iostream>
/*
* comment pairs /* */ cannot nest.
* "cannot nest" is considered source code,
* as is the rest of the program
*/
int main()
{
return 0;
}
编译器会给出如下错误信息:
error C2143: syntax error : missing ';' before '<'
error C2501: 'include' : missing storage-class or type specifiers
8 行)
习题1.8
指出下列输出语句哪些(如果有)是合法的。
std::cout << "/*";
std::cout << "*/";
std::cout << /* "*/" */;
预测结果,然后编译包含上述三条语句的程序,检查你的答案。纠正所遇到的
错误。
【解答】
第一条和第二条语句合法。
sum += i;
【解答】
该循环求-100~100 之间所有整数的和(包括-100 和100)。
sum 的最终值是0。
习题1.10
用for 循环编程,求从50~100 的所有自然数的和。然后用while 循环重写该程
序。
【解答】
用for 循环编写的程序如下:
#include <iostream>
称扩展名)组成。文件后缀通常表明文件的类型,如头文件的后缀可以是.h
或.hpp 等;源文件的后缀可以是.cc 或.cpp 等,具体的后缀与使用的编译器有
关。通常可以通过编译器所提供的联机帮助文档了解其文件命名规范。
习题1.2
修改程序使其返回-1。返回值-1 通常作为程序运行失败的指示器。然而,系统
编 者
2006 年10

习题 1.1
查看所用的编译器文档,了解它所用的文件命名规范。编译并运行本节的main
程序。
C++ Primer(4 版)习题解答
3
【解答】
一般而言,C++编译器要求待编译的程序保存在文件中。C++程序中一般涉及两
类文件:头文件和源文件。大多数系统中,文件的名字由文件名和文件后缀(又
? 定价:45 元
内容介绍:
C++ Primer(第4 版)是C++大师Stanley B. Lippman 丰富的实践经验和C++标准委员会原负责人Josée
Lajoie 对C++标准深入理解的完美结合,更加入了C++先驱Barbara E. Moo 在C++教学方面的真知灼见,
C++ Primer(4 版)习题解答
while (i >= 0) {
std::cout << i << " ";
C++ Primer(4 版)习题解答
9
--i;
}
return 0;
}
用for 循环编写的程序如下:
#include <iostream>
int main()
{
for (int i = 10; i >= 0; --i)
int main()
{
int sum = 0;
for (int i = 50; i <= 100; ++i)
sum += i;
std::cout << "Sum of 50 to 100 inclusive is "
<< sum << std::endl;
return 0;
C++ Primer(4 版)习题解答
有采用编译器的默认扩展名.h)。为了节省篇幅,有些程序中将类的定义与使
用类的主函数放在同一实现文件中。包含主函数的源文件根据习题编号命名。
大多数模板的定义都没有区分头文件和实现文件(因为编者所用的编译器支持
模板的包含编译模型)。另外,使用Visual C++ .NET 2003 编译器的默认设置
一般放在while 语句之前,循环控制变量的修改一般放在循环体中,形式上不
如for 语句简洁,但它比较适用于循环次数不易预知的情况(用某一条件控制
循环)。两种形式各有优点,但它们在功能上是等价的,可以相互转换。
习题1.13
编译器不同,理解其诊断内容的难易程度也不同。编写一些程序,包含本小节
int v1, v2;
std::cin >> v1 >> v2;
std::cout << "The product of " << v1 << " and " << v2
<< " is " << v1 * v2 << std::endl;
return 0;
}
习题1.5
我们的程序使用了一条较长的输出语句。重写程序,使用单独的语句打印每一
“再谈编译”部分讨论的那些常见错误。研究编译器产生的信息,这样你在编
译更复杂的程序遇到这些信息时不会陌生。
【解答】
C++ Primer(4 版)习题解答
10
对于程序中出现的错误,编译器通常会给出简略的提示信息,包括错误出现的
文件及代码行、错误代码、错误性质的描述。如果要获得关于该错误的详细信
<< sum << std::endl;
return 0;
}
习题1.11
用while 循环编程,输出10~0 递减的自然数。然后用for 循环重写该程序。
【解答】
用while 循环编写的程序如下:
#include <iostream>
int main()
{
int i = 10;
std::cout << i << " ";
return 0;
}
习题1.12
对比前面两个习题中所写的循环。两种形式各有何优缺点?
【解答】
在for 循环中,循环控制变量的初始化和修改都放在语句头部分,形式较简洁,
且特别适用于循环次数已知的情况。在while 循环中,循环控制变量的初始化
}
习题1.6
解释下面的程序段:
std::cout << "The sum of " << v1;
<< " and " << v2;
<< " is " << v1 + v2
<< std::endl;
这段代码合法吗?如果合法,为什么?如果不合法,又为什么?
【解答】
这段代码不合法。
注意,第1、2、4 行的末尾有分号,表示这段代码包含三条语句,即第1、2 行
return 0;
}
习题1.4
我们的程序利用内置的加法操作符“+”来产生两个数的和。编写程序,使用乘
法操作符“*”产生两个数的积。
【解答】
#include <iostream>
C++ Primer(4 版)习题解答
4
int main()
{
std::cout << "Enter two numbers:" << std::endl;
中所介绍的内容提供配套习题的解答,书中所给出的“见xx 节”,均指参见C++
Primer(第4 版)的相应章节。
本书中给出的程序均已通过Microsoft Visual C++ .NET 2003 的编译。源文件
(实现文件)以.cpp 为扩展名,头文件为了与此对应采用.hpp 为扩展名(而没
相关文档
最新文档