c程序设计 第13章 文件 答案解析.

合集下载

C语言程序设计第三版谭浩强课后习题答案1~13章

C语言程序设计第三版谭浩强课后习题答案1~13章
解: #include <stdio.h> main() { char c1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); } 运行结果: 密码是Glmre
第四章 4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出 格式和结果,请写出程序(包括定义变量类型和设计输出)。
file:///D|/程序设计/C语言程序设计第三版谭浩强课后习题答案1~13章.txt[2010-7-20 10:29:47]
file:///D|/程序设计/C语言程序设计第三版谭浩强课后习题答案1~13章.txt[2010-7-20 10:29:47]
_c1=A_c2=a
4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积Байду номын сангаас圆球体积、圆柱体积。用scanf输入数 据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。
file:///D|/程序设计/C语言程序设计第三版谭浩强课后习题答案1~13章.txt[2010-7-20 10:29:47]
char c1,c2; 与 int c1,c2; 是否无条件的等价? #include"stdio.h" main() {char c1,c2; c1=getchar();c2=getchar(); putchar(c1);putchar(’\n’);putchar(c2);putchar(’\n’); }
请编一程序用赋初值的方法使clc2c3c4c5五个变量的值分别为china经过运算使c1c2c3c4c5分别变为glmre并输出

C第13章答案

C第13章答案

C++习题参考答案第1章面向对象程序设计概论一、名词解释抽象封装消息【问题解答】面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。

面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。

消息是面向对象程序设计用来描述对象之间通信的机制。

一个消息就是一个对象要求另一个对象实施某种操作的一个请求。

二、填空题(1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。

(2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。

(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。

(4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。

(5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。

三、选择题(至少选一个,可以多选)(1)面向对象程序设计着重于( B )的设计。

A. 对象B. 类C. 算法D. 数据(2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做( C )。

A. 抽象B. 继承C. 封装D. 多态(3)在面向对象程序设计中,类通过( D )与外界发生关系。

A. 对象B. 类C. 消息D. 接口(4)面向对象程序设计中,对象与对象之间的通信机制是( C )。

A. 对象B. 类C. 消息D. 接口(5)关于C++与C语言的关系的描述中,( D )是错误的。

A. C语言是C++的一个子集B. C语言与C++是兼容的C. C++对C语言进行了一些改进D. C++和C语言都是面向对象的【结果分析】C语言是面向过程的。

C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。

(6)面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。

c语言《程序设计基础》课后习题参考答案与解析

c语言《程序设计基础》课后习题参考答案与解析

c语言《程序设计基础》课后习题参考答案与解析《程序设计基础》习题参考答案与部分解析第1章 C 语言概述一、填空a) C源程序的基本单位是函数。

b) 一个C程序中至少应包括一个 main函数。

c) 在C语言中,输出操作是有库函数 printf( )函数完成。

二、单选题1、A2、C3、B解析:第1题答案:A 。

因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。

且到main函数结束。

第2题答案:C 。

因为 main函数没有限制必须位于程序的最前面。

C程序书写自由,一行内可写几个语句。

在对一个C 程序进行编译的过程中,无法检查注释当中的拼写错误。

不过C语言本身并没有输入输出语句,输入输出是由函数完成的。

第3题答案:B。

因为一个C语言程序是由若干个函数组成的。

但至少包含一个main 函数,且main函数的位置不限。

三、编程题1、编写一个输出“Welcome to C!”信息的小程序。

解:程序如下#include “stdio.h”main( ){1printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。

海伦公式为:S?= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。

*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。

*/printf(“area=%f\n”,s1);}2第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A 16、B 17 D解析:1. 答案:C。

(完整版)谭浩强c程序设计课后习题答案

(完整版)谭浩强c程序设计课后习题答案

谭浩强c++程序设计课后答案娄警卫第一章1.5题#include <iostream> using namespace std; int main(){cout<<"This"<<"is"; cout<<"a"<<"C++"; cout<<"program."; return 0;1.6题#include <iostream> using namespace std; int main(){int a,b,c;a=10;b=23;c=a+b;cout<<"a+b="; cout<<c;cout<<endl;return 0;}1.7七题#include <iostream> using namespace std; int main(){int a,b,c;int f(int x,int y,int z); cin>>a>>b>>c;c=f(a,b,c);cout<<c<<endl; return 0;}int f(int x,int y,int z) {int m;if (x<y) m=x;else m=y;if (z<m) m=z;return(m);}1.8题#include <iostream>using namespace std;int main(){int a,b,c;cin>>a>>b;c=a+b;cout<<"a+b="<<a+b<<endl; return 0;}1.9题#include <iostream>using namespace std;int main(){int a,b,c;int add(int x,int y); cin>>a>>b;c=add(a,b);cout<<"a+b="<<c<<endl; return 0;}int add(int x,int y){int z;z=x+y;return(z);}第二章2.3题#include <iostream>using namespace std;int main(){char c1='a',c2='b',c3='c',c4='\101',c5='\116'; cout<<c1<<c2<<c3<<'\n';cout<<"\t\b"<<c4<<'\t'<<c5<<'\n';return 0;}2.4题#include <iostream>using namespace std;int main(){char c1='C',c2='+',c3='+';cout<<"I say: \""<<c1<<c2<<c3<<'\"';cout<<"\t\t"<<"He says: \"C++ is very interesting!\""<< '\n';return 0;}2.7题#include <iostream>using namespace std;int main(){int i,j,m,n;i=8;j=10;m=++i+j++;n=(++i)+(++j)+m;cout<<i<<'\t'<<j<<'\t'<<m<<'\t'<<n<<endl; return 0;}2.8题#include <iostream>using namespace std;int main(){char c1='C', c2='h', c3='i', c4='n', c5='a';c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;cout<<"password is:"<<c1<<c2<<c3<<c4<<c5<<endl;return 0;}第三章3.2题#include <iostream>#include <iomanip>using namespace std;int main ( ){float h,r,l,s,sq,vq,vz;const float pi=3.1415926;cout<<"please enter r,h:";cin>>r>>h;l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vq=3.0/4.0*pi*r*r*r;vz=pi*r*r*h;cout<<setiosflags(ios::fixed)<<setiosflags(ios:: right)<<setprecision(2);cout<<"l= "<<setw(10)<<l<<endl;cout<<"s= "<<setw(10)<<s<<endl;cout<<"sq="<<setw(10)<<sq<<endl;cout<<"vq="<<setw(10)<<vq<<endl;cout<<"vz="<<setw(10)<<vz<<endl;return 0;}3.3题#include <iostream>using namespace std;int main (){float c,f;cout<<"请输入一个华氏温度:";cin>>f;c=(5.0/9.0)*(f-32); //注意5和9要用实型表示,否则5/9值为0cout<<"摄氏温度为:"<<c<<endl;return 0;};3.4题#include <iostream>using namespace std;int main ( ){char c1,c2;cout<<"请输入两个字符c1,c2:";c1=getchar(); //将输入的第一个字符赋给c1c2=getchar(); //将输入的第二个字符赋给c2cout<<"用putchar函数输出结果为:"; putchar(c1);putchar(c2);cout<<endl;cout<<"用cout语句输出结果为:";cout<<c1<<c2<<endl;return 0;}3.4题另一解#include <iostream>using namespace std;int main ( ){char c1,c2;cout<<"请输入两个字符c1,c2:";c1=getchar(); //将输入的第一个字符赋给c1c2=getchar(); //将输入的第二个字符赋给c2cout<<"用putchar函数输出结果为:"; putchar(c1);putchar(44);putchar(c2);cout<<endl;cout<<"用cout语句输出结果为:";cout<<c1<<","<<c2<<endl;return 0;}3.5题#include <iostream>using namespace std;int main ( ){char c1,c2;int i1,i2; //定义为整型cout<<"请输入两个整数i1,i2:";cin>>i1>>i2;c1=i1;c2=i2;cout<<"按字符输出结果为:"<<c1<<" , "<<c2<<endl;return 0;}3.8题#include <iostream>using namespace std;int main ( ){ int a=3,b=4,c=5,x,y;cout<<(a+b>c && b==c)<<endl;cout<<(a||b+c && b-c)<<endl;cout<<(!(a>b) && !c||1)<<endl;cout<<(!(x=a) && (y=b) && 0)<<endl;cout<<(!(a+b)+c-1 && b+c/2)<<endl; return 0;}3.9题include <iostream>using namespace std;int main ( ){int a,b,c;cout<<"please enter three integer numbers:";cin>>a>>b>>c;if(a<b)if(b<c)cout<<"max="<<c;elsecout<<"max="<<b;else if (a<c)cout<<"max="<<c;elsecout<<"max="<<a;cout<<endl;return 0;}3.9题另一解#include <iostream>using namespace std;int main ( ){int a,b,c,temp,max ;cout<<"please enter three integer numbers:";cin>>a>>b>>c;temp=(a>b)?a:b; /* 将a和b中的大者存入temp中*/max=(temp>c)?temp:c; /* 将a和b中的大者与c比较,最大者存入max*/cout<<"max="<<max<<endl;return 0;}3.10题#include <iostream>using namespace std;int main ( ){int x,y;cout<<"enter x:";cin>>x;if (x<1){y=x;cout<<"x="<<x<<", y=x="<<y;}else if (x<10) // 1≤x<10{y=2*x-1;cout<<"x="<<x<<", y=2*x-1="<<y;}else// x≥10{y=3*x-11;cout<<"x="<<x<<",y=3*x-11="<<y;}cout<<endl;return 0;}3.11题#include <iostream>using namespace std; int main (){float score;char grade;cout<<"please enter score of student:"; cin>>score;while (score>100||score<0){cout<<"data error,enter data again.";cin>>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;default:grade='E';}cout<<"score is "<<score<<", grade is "<<grade<<endl;return 0;}3.12题#include <iostream>using namespace std;int main (){long int num;intindiv,ten,hundred,thousand,ten_thousand,pla ce;/*分别代表个位,十位,百位,千位,万位和位数*/cout<<"enter an integer(0~99999):"; cin>>num;if (num>9999)place=5;else if (num>999)place=4;else if (num>99)place=3;else if (num>9)place=2;else place=1;cout<<"place="<<place<<endl;//计算各位数字ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1 000;hundred=(int)(num-ten_thousand*10000-tho usand*1000)/100;ten=(int)(num-ten_thousand*10000-thousan d*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousa nd*1000-hundred*100-ten*10);cout<<"original order:";switch(place){case5:cout<<ten_thousand<<","<<thousand<<","< <hundred<<","<<ten<<","<<indiv<<endl;cout<<"reverse order:";cout<<indiv<<ten<<hundred<<thousand<<ten _thousand<<endl;break;case4:cout<<thousand<<","<<hundred<<","<<ten <<","<<indiv<<endl;cout<<"reverse order:";cout<<indiv<<ten<<hundred<<thousand<<en dl;break;case3:cout<<hundred<<","<<ten<<","<<indiv<<en dl;cout<<"reverse order:";cout<<indiv<<ten<<hundred<<endl;break;case 2:cout<<ten<<","<<indiv<<endl;cout<<"reverse order:";cout<<indiv<<ten<<endl;break;case 1:cout<<indiv<<endl;cout<<"reverse order:";cout<<indiv<<endl;break;}return 0;}3.13题#include <iostream>using namespace std;int main (){ long i; //i为利润floatbonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1; //利润为10万元时的奖金bon2=bon1+100000*0.075; //利润为20万元时的奖金bon4=bon2+100000*0.05; //利润为40万元时的奖金bon6=bon4+100000*0.03; //利润为60万元时的奖金bon10=bon6+400000*0.015; //利润为100万元时的奖金cout<<"enter i:";cin>>i;if (i<=100000)bonus=i*0.1;//利润在10万元以内按10%提成奖金else if (i<=200000)bonus=bon1+(i-100000)*0.075; //利润在10万元至20万时的奖金else if (i<=400000)bonus=bon2+(i-200000)*0.05; //利润在20万元至40万时的奖金else if (i<=600000)bonus=bon4+(i-400000)*0.03; //利润在40万元至60万时的奖金else if (i<=1000000)bonus=bon6+(i-600000)*0.015; //利润在60万元至100万时的奖金elsebonus=bon10+(i-1000000)*0.01; //利润在100万元以上时的奖金cout<<"bonus="<<bonus<<endl;return 0;}3.13题另一解#include <iostream>using namespace std;int main (){long i;float bonus,bon1,bon2,bon4,bon6,bon10; int c;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;cout<<"enter i:";cin>>i;c=i/100000;if (c>10) c=10;switch(c){case 0: bonus=i*0.1; break;case 1: bonus=bon1+(i-100000)*0.075; break;case 2:case3:bonus=bon2+(i-200000)*0.05;break;case 4:case5:bonus=bon4+(i-400000)*0.03;break;case 6:case 7:case 8:case 9: bonus=bon6+(i-600000)*0.015; break;case 10: bonus=bon10+(i-1000000)*0.01;}cout<<"bonus="<<bonus<<endl;return 0;}3.14题#include <iostream>using namespace std;int main (){int t,a,b,c,d;cout<<"enter four numbers:";cin>>a>>b>>c>>d;cout<<"a="<<a<<", b="<<b<<", c="<<c<<",d="<<d<<endl;if (a>b){t=a;a=b;b=t;}if (a>c){t=a; a=c; c=t;}if (a>d){t=a; a=d; d=t;}if (b>c){t=b; b=c; c=t;}if (b>d){t=b; b=d; d=t;}if (c>d){t=c; c=d; d=t;}cout<<"the sorted sequence:"<<endl;cout<<a<<", "<<b<<", "<<c<<", "<<d<<endl; return 0;}3.15题#include <iostream>using namespace std;int main (){int p,r,n,m,temp;cout<<"please enter two positive integer numbers n,m:";cin>>n>>m;if (n<m){temp=n;n=m;m=temp; //把大数放在n中, 小数放在m中}p=n*m; //先将n和m的乘积保存在p中, 以便求最小公倍数时用while (m!=0) //求n和m的最大公约数{r=n%m;n=m;m=r;}cout<<"HCF="<<n<<endl;cout<<"LCD="<<p/n<<endl; // p是原来两个整数的乘积return 0;}3.16题#include <iostream>using namespace std;int main (){char c;int letters=0,space=0,digit=0,other=0;cout<<"enter one line::"<<endl;while((c=getchar())!='\n'){if (c>='a' && c<='z'||c>='A' && c<='Z')letters++;else if (c==' ')space++;else if (c>='0' && c<='9')digit++;elseother++;}cout<<"letter:"<<letters<<", space:"<<space<<", digit:"<<digit<<", other:"<<other<<endl;return 0;}3.17题#include <iostream>using namespace std;int main (){int a,n,i=1,sn=0,tn=0;cout<<"a,n=:";cin>>a>>n;while (i<=n){tn=tn+a; //赋值后的tn为i个a 组成数的值sn=sn+tn; //赋值后的sn为多项式前i项之和a=a*10;++i;}cout<<"a+aa+aaa+...="<<sn<<endl;return 0;}3.18题#include <iostream>using namespace std;int main (){float s=0,t=1;int n;for (n=1;n<=20;n++){t=t*n; // 求n!s=s+t; // 将各项累加}cout<<"1!+2!+...+20!="<<s<<endl;return 0;}3.19题#include <iostream>using namespace std;int main (){int i,j,k,n;cout<<"narcissus numbers are:"<<endl;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)cout<<n<<" ";}cout<<endl;return 0;}3.20题#include <iostream>using namespace std;int main(){const int m=1000; // 定义寻找范围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用来存放尚未求出的因子之和,开始时等于afor (i=1;i<a;i++) // 检查i是否为a 的因子if (a%i==0) // 如果i是a的因子{n++; // n加1,表示新找到一个因子s=s-i; // s减去已找到的因子,s的新值是尚未求出的因子之和switch(n) // 将找到的因子赋给k1,...,k10{case 1:k1=i; break; // 找出的笫1个因子赋给k1case 2:k2=i; break; // 找出的笫2个因子赋给k2case 3:k3=i; break; // 找出的笫3个因子赋给k3case 4:k4=i; break; // 找出的笫4个因子赋给k4case 5:k5=i; break; // 找出的笫5个因子赋给k5case 6:k6=i; break; // 找出的笫6个因子赋给k6case 7:k7=i; break; // 找出的笫7个因子赋给k7case 8:k8=i; break; // 找出的笫8个因子赋给k8case 9:k9=i; break; // 找出的笫9个因子赋给k9case 10:k10=i; break; // 找出的笫10个因子赋给k10}}if (s==0) // s=0表示全部因子都已找到了{cout<<a<<" is a 完数"<<endl;cout<<"its factors are:";if (n>1) cout<<k1<<","<<k2; // n>1表示a至少有2个因子if (n>2) cout<<","<<k3; // n>2表示至少有3个因子,故应再输出一个因子if (n>3) cout<<","<<k4; // n>3表示至少有4个因子,故应再输出一个因子if (n>4) cout<<","<<k5; // 以下类似if (n>5) cout<<","<<k6;if (n>6) cout<<","<<k7;if (n>7) cout<<","<<k8;if (n>8) cout<<","<<k9;if (n>9) cout<<","<<k10;cout<<endl<<endl;}}return 0;}3.20题另一解#include <iostream>using namespace std;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){cout<<m<<" is a完数"<<endl;cout<<"its factors are:";for (i=1;i<m;i++)if (m%i==0) cout<<i<<" ";cout<<endl;}}return 0;}3.20题另一解#include <iostream>using namespace std;int main(){int k[11];int i,a,n,s;for (a=2;a<=1000;a++){n=0;s=a;for (i=1;i<a;i++)if ((a%i)==0){n++;s=s-i;k[n]=i; // 将找到的因子赋给k[1]┅k[10]}if (s==0){cout<<a<<" is a 完数"<<endl;cout<<"its factors are:";for (i=1;i<n;i++)cout<<k[i]<<" ";cout<<k[n]<<endl;}}return 0;}3.21题#include <iostream>using namespace std;int main(){int i,t,n=20;double a=2,b=1,s=0;for (i=1;i<=n;i++){s=s+a/b;t=a;a=a+b; // 将前一项分子与分母之和作为下一项的分子b=t; // 将前一项的分子作为下一项的分母}cout<<"sum="<<s<<endl;return 0;} 3.22题#include <iostream>using namespace std;int main(){int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2; // 第1天的桃子数是第2天桃子数加1后的2倍x2=x1;day--;}cout<<"total="<<x1<<endl;return 0;}3.23题#include <iostream>#include <cmath>using namespace std;int main(){float a,x0,x1;cout<<"enter a positive number:"; cin>>a; // 输入a的值x0=a/2;x1=(x0+a/x0)/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=1e-5);cout<<"The square root of "<<a<<" is "<<x1<<endl;return 0;}3.24题#include <iostream>using namespace std;int main(){int i,k;for (i=0;i<=3;i++) // 输出上面4行*号{for (k=0;k<=2*i;k++)cout<<"*"; // 输出*号cout<<endl; //输出完一行*号后换行}for (i=0;i<=2;i++) // 输出下面3行*号{for (k=0;k<=4-2*i;k++)cout<<"*"; // 输出*号cout<<endl; // 输出完一行*号后换行}return 0;}3.25题#include <iostream>using namespace std;int main(){char i,j,k; /* i是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')cout<<"A--"<<i<<"B--"<<j<<" C--"<<k<<endl;return 0;}第四章4.1题#include <iostream>using namespace std;int main(){int hcf(int,int);int lcd(int,int,int);int u,v,h,l;cin>>u>>v;h=hcf(u,v);cout<<"H.C.F="<<h<<endl;l=lcd(u,v,h);cout<<"L.C.D="<<l<<endl;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);}4.2题#include <iostream>#include <math.h>using namespace std;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;cout<<"input a,b,c:";cin>>a>>b>>c;disc=b*b-4*a*c;cout<<"root:"<<endl;if (disc>0){greater_than_zero(a,b);cout<<"x1="<<x1<<",x2="<<x2<<endl; }else if (disc==0){equal_to_zero(a,b);cout<<"x1="<<x1<<",x2="<<x2<<endl;}else{smaller_than_zero(a,b);cout<<"x1="<<p<<"+"<<q<<"i"<<endl;cout<<"x2="<<p<<"-"<<q<<"i"<<endl;}return 0;}void greater_than_zero(float a,float b) /* 定义一个函数,用来求disc>0时方程的根*/{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);}void equal_to_zero(float a,float b) /* 定义一个函数,用来求disc=0时方程的根*/{x1=x2=(-b)/(2*a);}void smaller_than_zero(float a,float b) /* 定义一个函数,用来求disc<0时方程的根*/{p=-b/(2*a);q=sqrt(-disc)/(2*a);}4.3题#include <iostream>using namespace std;int main(){int prime(int); /* 函数原型声明*/int n;cout<<"input an integer:";cin>>n;if (prime(n))cout<<n<<" is a prime."<<endl;elsecout<<n<<" is not a prime."<<endl;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);}4.4题#include <iostream>using namespace std;int main(){int fac(int);int a,b,c,sum=0;cout<<"enter a,b,c:";cin>>a>>b>>c;sum=sum+fac(a)+fac(b)+fac(c);cout<<a<<"!+"<<b<<"!+"<<c<<"!="<<sum<<e ndl;return 0;}int fac(int n){int f=1;for (int i=1;i<=n;i++)f=f*i;return f;}4.5题#include <iostream>#include <cmath>using namespace std;int main(){double e(double);double x,sinh;cout<<"enter x:";cin>>x;sinh=(e(x)+e(-x))/2;cout<<"sinh("<<x<<")="<<sinh<<endl;return 0;}double e(double x){return exp(x);}4.6题#include <iostream>#include <cmath>using namespace std;int main(){doublesolut(double ,double ,double ,double ); double a,b,c,d;cout<<"input a,b,c,d:";cin>>a>>b>>c>>d;cout<<"x="<<solut(a,b,c,d)<<endl;return 0;}double solut(double a,double b,double c,double d){double 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-5);return(x);}4.7题#include <iostream>#include <cmath>using namespace std;int main(){void godbaha(int);int n;cout<<"input n:";cin>>n;godbaha(n);return 0;}void godbaha(int n){int prime(int);int a,b;for(a=3;a<=n/2;a=a+2){if(prime(a)){b=n-a;if (prime(b))cout<<n<<"="<<a<<"+"<<b<<endl;}}}int prime(int m){int i,k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0) break;if (i>k) return 1;else return 0;}4.8题#include <iostream>using namespace std;int main(){int x,n;float p(int,int);cout<<"input n & x:";cin>>n>>x;cout<<"n="<<n<<",x="<<x<<endl;;cout<<"P"<<n<<"(x)="<<p(n,x)<<endl; return 0;}float p(int n,int x){if (n==0)return(1);else if (n==1)return(x);elsereturn(((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n);}4.9题#include <iostream>using namespace std;int main(){void hanoi(int n,char one,char two,char three);int m;cout<<"input the number of diskes:"; cin>>m;cout<<"The steps of moving "<<m<<" disks:"<<endl;hanoi(m,'A','B','C');return 0;}void hanoi(int n,char one,char two,char three) //将n个盘从one座借助two座,移到three座{void move(char x,char y);if(n==1) move(one,three);else{hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);}}void move(char x,char y){cout<<x<<"-->"<<y<<endl;}4.10题#include <iostream>using namespace std;int main(){void convert(int n);int number;cout<<"input an integer:";cin>>number;cout<<"output:"<<endl;if (number<0){cout<<"-";number=-number;}convert(number);cout<<endl;return 0;}void convert(int n){int i;char c;if ((i=n/10)!=0)convert(i);c=n%10+'0';cout<<" "<<c;}4.11题#include <iostream>using namespace std;int main(){int f(int);int n,s;cout<<"input the number n:";cin>>n;s=f(n);cout<<"The result is "<<s<<endl;return 0;}int f(int n){;if (n==1)return 1;elsereturn (n*n+f(n-1));}4.12题#include <iostream>#include <cmath>using namespace std;#define S(a,b,c) (a+b+c)/2#define AREA(a,b,c)sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c) -c))int main(){float a,b,c;cout<<"input a,b,c:";cin>>a>>b>>c;if (a+b>c && a+c>b && b+c>a)cout<<"area="<<AREA(a,b,c)<<endl; elsecout<<"It is not a triangle!"<<endl; return 0;}4.14题#include <iostream>using namespace std;//#define LETTER 1int main(){char c;cin>>c;#if LETTERif(c>='a' && c<='z')c=c-32;#elseif(c>='A' && c<='Z')c=c+32;#endifcout<<c<<endl;return 0;}4.15题#include <iostream>using namespace std;#define CHANGE 1int main(){char ch[40];cout<<"input text:"<<endl;;gets(ch);#if (CHANGE){for (int i=0;i<40;i++){if (ch[i]!='\0')if (ch[i]>='a'&& ch[i]<'z'||ch[i]>'A'&& ch[i]<'Z')ch[i]+=1;else if (ch[i]=='z'||ch[i]=='Z')ch[i]-=25;}}#endifcout<<"output:"<<endl<<ch<<endl;return 0;}4.16题file#include <iostream>using namespace std;int a;int main(){extern int power(int);int b=3,c,d,m;cout<<"enter an integer a and its power m:"<<endl;cin>>a>>m;c=a*b;cout<<a<<"*"<<b<<"="<<c<<endl;d=power(m);cout<<a<<"**"<<m<<"="<<d<<endl; return 0;}4.16题fileextern int a;int power(int n){int i,y=1;for(i=1;i<=n;i++)y*=a;return y;}第五章5.1题#include <iostream>#include <iomanip>using namespace std;#include <math.h>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; }cout<<endl;for (i=1,n=0;i<=100;i++){if (a[i]!=0){cout<<setw(5)<<a[i]<<" ";n++;}if(n==10){cout<<endl;n=0;}}cout<<endl;return 0;}5.2题#include <iostream>using namespace std;//#include <math.h>int main(){int i,j,min,temp,a[11];cout<<"enter data:"<<endl;for (i=1;i<=10;i++){cout<<"a["<<i<<"]=";cin>>a[i]; //输入10个数}cout<<endl<<"The original numbers:"<<endl;;for (i=1;i<=10;i++)cout<<a[i]<<" "; // 输出这10个数cout<<endl;;for (i=1;i<=9;i++) //以下8行是对10个数排序{min=i;for (j=i+1;j<=10;j++)if (a[min]>a[j]) min=j;temp=a[i]; //以下3行将a[i+1]~a[10]中最小者与a[i] 对换a[i]=a[min];a[min]=temp;}cout<<endl<<"The sorted numbers:"<<endl;for (i=1;i<=10;i++) // 输出已排好序的10个数cout<<a[i]<<" ";cout<<endl;return 0;}5.3题#include <iostream>using namespace std;int main(){int a[3][3],sum=0;int i,j;cout<<"enter data:"<<endl;;for (i=0;i<3;i++)for (j=0;j<3;j++)cin>>a[i][j];for (i=0;i<3;i++)sum=sum+a[i][i];cout<<"sum="<<sum<<endl;return 0;}5.4题#include <iostream>using namespace std;int main(){int a[11]={1,4,6,9,13,16,19,28,40,100};int num,i,j;cout<<"array a:"<<endl;for (i=0;i<10;i++)cout<<a[i]<<" ";cout<<endl;;cout<<"insert data:";cin>>num;if (num>a[9])a[10]=num;else。

浙江农林大学C语言程序设计习题集答案

浙江农林大学C语言程序设计习题集答案

第1~3章C语言概述、算法、数据类型、运算符与表达式一、选择题ACDCB CCDCB D二、填空题1、n=202、a=66,b=E第4章顺序程序设计一、选择题BAAD二、程序阅读1、12 240 122、2,3,2,23、0三、编程1#include <stdio.h>#include <math.h>void main(){float a,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f,b=%f,c=%f,area=%f",a,b,c,area);}2#include <stdio.h>#include <math.h>void main(){float a,b,c,del,x1,x2;scanf("%f,%f,%f",&a,&b,&c);del=b*b-4*a*c;if (del>=0){x1=(-b+sqrt(del))/(2*a);x2=(-b-sqrt(del))/(2*a);printf("x1=%f,x2=%f",x1,x2);}elseprintf("没有实根");}3#include <stdio.h>void main(){int c,f;c=26;f=9.0/5.0*c+32;printf("%d的华氏温度是%d",c,f);}第5章选择结构程序设计一、选择题DBBCDC二、程序阅读1、|a|+|b|=612、PQ3、-14、60~9060error!5、0,16、x+y+z=15三、编程1#include <stdio.h>void main(){int a,b,c,min;scanf("%d,%d,%d",&a,&b,&c);min=a;if (min>b) min=b;if (min>c) min=c;}2#include <stdio.h>void main(){int a;scanf("%d",&a);if(a%3==0 && a%5==0 && a%7==0)printf("yes");elseprintf("no");}3#include <stdio.h>#include <math.h>void main(){float x,y;scanf("%f",&x);if (x<0)y=fabs(x);else if(x>=0 && x<=2)y=sqrt(x+1);else if (x>=2 && x<4)y=pow(x+2,3);elsey=2*x+5;printf("x=%f,y=%f",x,y);}4#include <stdio.h>void main(){float rate,tax,salary;scanf("%f",salary);if(salary<=850)rate=0;else if(salary>1350 && salary<=2850)rate=0.1;else if(salary>2850 && salary<5850)rate=0.15;elserate=0.2;tax=rate*(salary-850);printf("salary=%f,rate=%f,tax=%f",salary,rate,tax);}5#include <stdio.h>void main(){int a,b,sum,n;scanf("%d,%d",a,b);sum=a*a+b*b;if(sum>100){n=sum/100;printf("a*a+b*b=%d,n=%d",sum,n);}elseprintf("a*a+b*b=%d",sum);}第6章循环控制一、填空题:1、222、233、464、117二、选择题:1.C2.D3.B4.B5.B6.C7.C8.C9.B 10.D三、程序阅读:1、输出:332、输出:243、2#4#7#11#16#4、3#2#0#0#1#5、B,A,D,C6、D,A,B,C7、B,C,A,D8、A,D,D,C9、C,C,A10、B,D,A11、A,D,C四、编程1.#include <stdio.h>#include <math.h>void main(){ int x;printf("x sqrt(x)\n");for(x=5;x<=1000;x++)printf("%d %f\n", x, sqrt(x));}2.#include<stdio.h>#include<math.h>main(){int i,flag;double pi,item;i=1;flag=1;pi=0;item=1.0;while(fabs(item)>=0.00001){ item=flag*1.0/i;pi=pi+item;flag=-flag;i=i+2;}pi=pi*4;printf("pi=%f",pi);}3.教材126页例6.84.#include<stdio.h>main(){ int i,num1,num2,num3;num1=1;num2=1;printf("%d %d ",num1,num2);for(i=3;i<=10;i=i+1){num3=num1+num2;printf("%d ",num3);num1=num2;num2=num3;}}第7章数组一、选择题:1. D2.D3.A4.C5.C6.C7.D8.B9.D 10.B 11.D 12.D13.D 14.A 15.B二、程序阅读:1、A,B,B,D2、C,D,A,B4、D,C,A5、C,D6、C,A7、1#2#3#1#1#38、298三、编程:1、#include <stdio.h>void main( ){int mark, a, p, f;a = p = f = 0;printf("Enter scores:");scanf ("%d", &mark);while (mark >0){if(mark >= 85) a++;else if (mark >= 60) p++;else f++;scanf ("%d", &mark);}printf(">=85:%d\n", a);printf("60-84:%d\n", p);printf("<60:%d\n", f);}2、#include <stdio.h>void main( ){ int a[10],count=0,i;float average,sum=0;for(i=0;i<10;i++){ scanf("%d",&a[i]);sum=sum+a[i];}average=sum/10;for(i=0;i<10;i++)if(a[i]>average) count=count+1;printf("平均值为%f 大于平均值的数有%d个",average,count); }3.#include<stdio.h>main( ){ int a[10];printf(“请输入一个正整数n(1<n≤10):”);scanf(“%d”,&n);printf(“请输入数据:”);for (i=0; i<n; i++)scanf("%d",&a[i]);printf("\n");for (j=0; j<n-1; j++) /*确定基准位置*/for(i=j+1; i<n; i++)if (a[j]>a[i]){ t=a[j];a[j]=a[i];a[i]=t; }printf("The sorted numbers: \n");for (i=0; i<n; i++)printf("%d",a[i]);}4.#include <stdio.h>void main(){int a[6][6],n,i,j,x,y,max;printf(“请输入一个正整数n(1≤n≤6):”);scanf(“%d”,&n);printf(“请输入一个n行n列的矩阵:\n”);for (i=0;i<n;i++)for (j=0;j<n;j++)scanf(“%d”,&a[i][j]);max=a[0][0]; x=0;y=0;for (i=0;i<n;i++)for (j=0;j<n;j++)if (fabs(a[i][j])>max) {max=a[i][j];x=i;y=j;}printf(“绝对值最大的元素为:%d,下标分别为:%d,%d\n”,max,x,y); }第8章函数一、选择题(1) A(2) B(3) C(4) B(5) A(6) C(7)i. Bii. Diii. A真诚为您提供优质参考资料,若有不当之处,请指正。

c++课后习题_1-13章答案

c++课后习题_1-13章答案

}
cout<<"third:"<<a<<" "<<b<<" "<<c<<endl;
}
first: 14 4 12 second: 26 4 12 third: 26 3 6
11.给出下列程序的运行结果

#include <iostream.h>
#include <iomanip.h>
void main(void)
A)5
B)1
C)3
D)0
19.设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)
&& (n=c>d)运算后,n的值为 B 。//逻辑运算优化的副作用
A)3
B)2
C) 1
D)0
20.设有说明语句:int x=8, float y=8.8; 则下列表达式中错误的是 D
C) Zhao:Hello!How are you?
D) Zhao:Hello!How are you?
Liu:I am fine, Thank you
Liu:I am fine, Thank you
18
24
16 18
3.下列程序的运行结果是 D

#include <iostream.h>
void main(void)
A)1/3
B)1/3.0
C)1%3
D)21/3
27.设有说明语句:int a=9,b=9,c=9; 下列表达式的值分别是 4 27 8 162 。

c程序设计 第13章 文件 答案解析

c程序设计 第13章 文件 答案解析

第十三章例13.1 程序为:#include <stdio.h>#include <stdlib.h>void main(){FILE *fp;char ch,filename[10];scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("cannot open file\n");exit(0);}ch=getchar();ch=getchar();while(ch!='#'){fputc(ch,fp);putchar(ch);ch=getchar();}putchar(10);fclose(fp);}例13.2 程序为:#include <stdio.h>#include <stdlib.h>void main(){FILE *in, *out;char ch,infile[10],outfile[10];printf("Enter the infile name:\n");scanf("%s",infile);printf("Enter the infile name:\n");scanf("%s",outfile);if((in=fopen(infile,"r"))==NULL){printf("cannot open file\n");exit(0);}if((out=fopen(outfile,"w"))==NULL){printf("cannot open file\n");exit(0);}while(!feof(in)) fputc(fgetc(in),out);fclose(in);fclose(out);}注:在该程序的运行中,每复制一次就会产生一个乱码置于最后,并依次叠加。

昆明理工大学C语言程序设计课后习题答案

昆明理工大学C语言程序设计课后习题答案

昆明理工大学C语言程序设计课后习题答案第1章认识C语言(一)、是非题1.程序是指挥计算机进行各种信息处理任务的一组指令序列。

A.对B.错2.机器语言与硬件平台相关,但汇编语言和硬件平台无关。

A.对B.错3.编译型高级语言明显优于解释型高级语言。

A.对B.错4.C语言把高级语言的基本结构和低级语言的实用性紧密结合起来,不仅适合编写应用软件,而且适于编写系统软件。

A.对B.错5.面向对象的程序设计方法明显优于面向过程的程序设计方法。

A.对B.错6.计算机算法要有一个明确的起点和确定的步骤序列。

A.对B.错7.main函数是C程序的入口,由计算机系统负责调用。

A.对B.错8.在C语言中,同一行上可以写一条或多条语句,但一条语句不能写在多行上。

A.对B.错9.在C语言中,扩展名为.h的文件称为头文件,常用于组织C标准函数库中的函数。

A.对B.错10.注释语句会增加编译结果的复杂性,因此要尽量减少注释语句的数量。

A.对B.错11.声明变量的含义是通知编译系统为变量分配合适大小的存储空间。

A.对B.错12.C语言不允许使用关键字作为变量的名称,但可以使用保留字为变量命名。

A.对B.错13.符号常量提高了程序的可读性,但降低了程序维护的方便性。

A.对B.错14.变量声明把一个具体的标识符名称和计算机内存中的一个特殊的位置联系起来,同时确定了该位置存储的信息类型。

A.对B.错15. C语言允许在同一条语句中定义多个相同类型的变量,其间用分号进行分隔。

A.对B.错16.在ISO/ANSI 1999规定中,允许将变量声明放在程序中的任何位置。

A.对B.错17.不同类型的数据在内存中所占存储单元的大小不同,内部存储方式不同,取值范围不同,甚至能够参与的运算种类也不相同。

A.对B.错18.有符号和无符号整数的区别仅在于对数据最高位的解释不同。

若最高位解释为数据位,则为signed类型;若最高位解释为符号位,则为unsigned类型。

c程序设计第三版习题参考解答(全)

c程序设计第三版习题参考解答(全)

c程序设计第三版习题参考解答(全) C程序设计第三版习题参考解答本文为《C程序设计第三版习题参考解答》的全文内容。

为了更好地适应题目要求,文章将按照解答问题的方式进行分段,每个问题对应一个小节。

以下是各个问题的解答:第一章:C概述和程序设计基本原则1. 什么是计算机程序?计算机程序是一系列指令的集合,用于告诉计算机执行特定的任务。

它由一系列语句组成,每条语句都包含了计算机可以理解和执行的命令。

2. C语言的起源和发展历程是什么?C语言是由贝尔实验室的Dennis Ritchie于20世纪70年代初开发的一种通用高级编程语言。

C语言基于早期的B语言进行了扩展和改进,成为了应用广泛且高效的编程语言。

3. 编译和解释有什么区别?编译是将源代码一次性转换为机器语言的过程。

它将整个源代码文件编译成可执行文件,然后可以直接在计算机上运行。

解释是逐行解析源代码并立即执行的过程。

解释器逐行读取源代码并将其转换为机器代码,然后立即执行转换后的代码。

4. C程序的一般结构是什么样的?C程序的一般结构包括预处理指令、函数声明、全局变量声明、main函数以及其他函数的定义。

预处理指令用于包含头文件、定义宏等。

函数声明用于声明函数的名称和参数。

全局变量声明用于声明全局变量。

main函数是C程序的入口点,也是程序执行的起始位置。

第二章:C基本语法和数据类型1. C中的注释有哪些类型?在C中,注释分为单行注释和多行注释。

单行注释以"//"开头,多行注释以/*开头,以*/结尾。

2. 什么是变量?变量是在程序中用来存储数据的存储区域。

每个变量都有一个名称和一个数据类型,可以通过变量名来引用它所存储的数据。

3. C语言中的常量有哪些类型?C语言中的常量分为整型常量、实型常量、字符常量和字符串常量。

整型常量表示整数值,实型常量表示实数值,字符常量表示单个字符,字符串常量表示一串字符。

4. C语言中的运算符有哪些类型?C语言中的运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符、自增自减运算符等。

C程序设计(第四版)谭浩强-课后习题标准答案-共章

C程序设计(第四版)谭浩强-课后习题标准答案-共章

C程序设计(第四版)谭浩强-课后习题标准答案-共章C程序设计(第四版)谭浩强-课后习题答案-共章————————————————————————————————作者:————————————————————————————————日期:第1章程序设计和C语言11.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51.4.1最简单的C语言程序举例61.4.2C语言程序的结构101.5运行C程序的步骤与方法121.6程序设计的任务141-5 #includeint main ( ){ printf ("**************************\n\n");printf(" Very Good!\n\n");printf ("**************************\n");return 0;}1-6#includeint 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)< bdsfid="88" p=""></b)<>max=b;if (max<c)< bdsfid="91" p=""></c)<>max=c;printf("The largest number is %d\n",max); return 0;}第2章算法——程序的灵魂16 2.1什么是算法16 2.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用N S流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3C语句573.3.1C语句的作用和分类573.3.2最基本的语句——赋值语句593.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念673.4.3用printf函数输出数据683.4.4用scanf函数输入数据753.4.5字符数据的输入输出78习题823-1 #include#includeint main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include#includeint main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5); // 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次p5=p*pow(1+r0/4,4*5); // 存活期存款。

C程序设计(谭浩强第三版)课后答案完整版

C程序设计(谭浩强第三版)课后答案完整版
{ )(niam )IICSA(89_ro_ˊbˊ=2c )IICSA(79_ro_ˊaˊ=1c 04.2-=x+z_ _02.1-=z+y_ _006.3_=y+x 000006.3-=z,000004.2=y,000002.1=x 5_=c_ _4_=b_ _3_=a 。 �出输计设和型类量变义定括包�序程出写请�果结和式格出输下以到得想 。 ’b’=2c� ’a’=1c�567821=n�47215=u�6.3-=z�4.2=y�2.1=x�5=c�4=b�3=a 若 4�4 章四第 0 )6( 0 )5( 0 )4( 06 )3( 01 )2( 42 )1( �解 a=*a=-a=+a�6� 5 于等值的 n�)2=%n(=%a �5� a+a=/a�4� 3+2=*a �3� 2=-a �2� a=+a�1� 。量变型整为义定已都 n 和 a 设。21=a 来原设�值的 a 后算运式达表面下出写 21.3 01�9�11�9 �解 } ;)n,m,j,i,”d%,d%,d%,d%“(ftnirp ;++j=n ;i++=m ;01=j ;8=i ;n,m,j,i tni{ )(niam 。果结的行运序程出写 01.3 5.3�2� 5.2�1� 5.2=y,5.3=x,3=b,2=a 设 y)tni(%x)tni(+2/)b+a()taolf(�2� 7.4=y,7=a,5.2=x 设 4/2%)y+x()tni(*3%a+x�1� 。值的式达表术算面下求 9.3 ermlG 是码密 �果结行运 } ;)5c,4c,3c,2c,1c,"n\c%c%c%c%c%是码密"(ftnirp ;4=+5c ;4=+4c ;4=+3c ;4=+2c ;4=+1c ;’a’=5c,’n’=4c,’i’=3c,’h’=2c,’C’=1c rahc {

C++程序设计第三版(谭浩强)第十三章习题答案

C++程序设计第三版(谭浩强)第十三章习题答案

C++程序设计第三版(谭浩强)第十三章习题答案13.1 题另一解#include#includeusing namespace std;void input(double a,double b,double c){cout<<"please input a,b,c:";cin>>a>>b>>c;}void area(double a,double b,double c){double s,area;if (a+b<=c)cerr<<"a+b<=c,error!"<<endl;else if(b+c<=a)cerr<<"b+c<=a,error!"<<endl;else if (c+a<=b)cerr<<"c+a<=b,error!"<<endl;else{s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<"area="<<area<<endl;}}int main(){double a=2,b=3,c=5;input(a,b,c);area(a,b,c);return 0;}13.2 题#include#includeusing namespace std;int main(){float a[5];cout<<"input data:";for(int i=0;i<5;i++)cin>>a[i];cout<<setiosflags(ios::fixed)<<setprecision(2); for(i=0;i<5;i++)cout<<setw(10)<<a[i]<<endl;return 0;}13.2 题另一解#includeusing namespace std;int main(){float a[5];int i;cout<<"input data:";for(i=0;i<5;i++)cin>>a[i];cout.setf(ios::fixed);cout.precision(2);for(i=0;i<5;i++){cout.width(10);cout<<a[i]<<endl;}return 0;}13.3 题#include#includeusing namespace std;int main(){for(int n=1;n<8;n++)cout<<setw(20-n)<<<setw(2*n-1)<<setfill('b')<<"b"<<endl;return 0;}13.4 题#include#includeusing namespace std; //VC++ 6.0 要此行//fun1 函数从键盘输入 20 个整数,分别存放在两个磁盘文件中void fun1(){int a[10];ofstream outfile1("f1.dat"),outfile2("f2.dat"); //分别定义两个文件流对象if(!outfile1) //检查打开 f1.dat 是否成功{cerr<<"open f1.dat error!"<<endl;exit(1);}if(!outfile2) //检查打开 f2.dat 是否成功{cerr<<"open f2.dat error!"<<endl;exit(1);}cout<<"enter 10 integer numbers:"<<endl;for(int i=0;i<10;i++) //输入 10 个数存放到 f1.dat文件中{cin>>a[i];outfile1<<a[i]<<" ";}cout<<"enter 10 integer numbers:"<<endl;for(i=0;i<10;i++) //输入10个数存放到f2.dat文件中{cin>>a[i];outfile2<<a[i]<<" ";}outfile1.close(); //关闭 f1.dat 文件outfile2.close(); //关闭 f2.dat 文件}//从 f1,dat 读入 10 个数,然后存放到 f2.dat 文件原有数据的后面void fun2(){ifstream infile("f1.dat"); //f1.dat 作为输入文件if(!infile){cerr<<"open f1.dat error!"<<endl;exit(1);}ofstream outfile("f2.dat",ios::app);//f2.dat 作为输出文件,文件指针指向文件尾,向它写入的数据放在原来数据的后面if(!outfile){cerr<<"open f2.dat error!"<<endl;exit(1);}int a;for(int i=0;i<10;i++){infile>>a; //磁盘文件 f2.dat 读入一个整数outfile<<a<<" ";="" f2.dat="" 中}infile.close();outfile.close();}//从 f2.dat 中读入 20 个整数,将它们按从小到大的顺序存放到f2.datvoid fun3(){ifstream infile("f2.dat"); //定义输入文件流 infile,以输入方式打开 f2.datif(!infile){cerr<<"open f2.dat error!"<<endl;exit(1);</endl;</a<<"></endl;</endl;</a[i]<<"></endl;</a[i]<<"></endl;</endl;</endl;</setw(2*n-1)<<setfill('b')<<"b"<<endl;</setw(20-n)<</a[i]<<endl;}</setw(10)<<a[i]<<endl;</setiosflags(ios::fixed)<<setprecision(2); </area<<endl;}</endl;</endl;</endl;。

《c++程序设计》谭浩强_答案第13章

《c++程序设计》谭浩强_答案第13章

《C++程序设计》谭浩强答案第13章13.1 题#in elude <iostream> #inClude <Cmath> using namespaCe std;int main() {double a,b,C,s,area; Cout<<"please input a,b,C:"; Cin>>a>>b>>C;if (a+b<=C)Cerr<<"a+b<=C,error!"<<endl; else if(b+C<=a)Cerr<<"b+C<=a,error!"<<endl; else if (C+a<=b)Cerr<<"C+a<=b,error!"<<endl; else {s=(a+b+C)/2;area=sqrt(s*(s-a)*(s-b)*(s-C)); Cout<<"area="<<area<<endl;} return 0;13.1 题另一解#inClude <iostream>#include <cmath> using namespace std;void input(double a,double b,double c){cout<<"please input a,b,c:";cin>>a>>b>>c;void area(double a,double b,double c) {double s,area;if (a+b<=c) cerr<<"a+b<=c,error!"<<endl;else if(b+c<=a) cerr<<"b+c<=a,error!"<<endl; else if (c+a<=b) cerr<<"c+a<=b,error!"<<endl; else {s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<"area="<<area<<endl;} } int main() {double a=2,b=3,c=5;input(a,b,c);area(a,b,c);return 0;}13.2 题#include <iostream> #include <iomanip> using namespace std; int main(){float a[5];cout<<"input data:";for(int i=0;i<5;i++)cin>>a[i];cout<<setiosflags(ios::fixed)<<setprecision(2);for(i=0;i<5;i++)cout<<setw(10)<<a[i]<<endl;return 0;13.2 题另一解#include <iostream> using namespace std; int main(){float a[5];int i;cout<<"input data:";for(i=0;i<5;i++)cin>>a[i];cout.setf(ios::fixed);cout.precision(2);for(i=0;i<5;i++){cout.width(10);cout<<a[i]<<endl;}} return 0;13.3 题#include <iostream> #include <iomanip> using namespace std;int main()for(int n=1;n<8;n++)cout<<setw(20-n)<<setfill(' ')<<" " //nm<<setw(2*n-1)<<setfill('B')<<"B"<<endl;return 0;13.4 题#include <iostream>#include <fstream>using namespace std; //VC++ 6.0 要此行//fun1 函数从键盘输入 20 个整数,分别存放在两个磁盘文件中void fun1(){int a[10];ofstream outfile1("f1.dat"),outfile2("f2.dat"); // 对象{cerr<<"open f1.dat error!"<<endl;exit(1);if(!outfile1) //检查打开 f1.dat 是否成功分别定义两个文件流if(!outfile2) // 检查打开 f2.dat 是否成功{cerr<<"open f2.dat error!"<<endl;exit(1);cout<<"enter 10 integer numbers:"<<endl;{cin>>a[i];outfile1<<a[i]<<" ";}cout<<"enter 10 integer numbers:"<<endl;{cin>>a[i];outfile2<<a[i]<<" ";}// 从 f1,dat 读入 10 个数,然后存放到 f2.dat 文件原有数据的后面void fun2(){ifstream infile("f1.dat"); //f1.dat if(!infile){cerr<<"open f1.dat error!"<<endl;exit(1);ofstream outfile("f2.dat",ios::app);for(int i=0;i<10;i++) // 输入 10 个数存放到 f1.dat 文件中for(i=0;i<10;i++) // 输入 10 个数存放到 f2.dat 文件中outfile1.close(); // 关闭 f1.dat 文件outfile2.close(); // 关闭 f2.dat 文件作为输入文件//f2.dat 作为输出文件,文件指针指向文件尾,向它写入的数据放在原来数据的后面if(!outfile){cerr<<"open f2.dat error!"<<endl;exit(1);int a;for(int i=0;i<10;i++){infile>>a; // 磁盘文件f2.dat 读入一个整数outfile<<a<<" "; // 将该数存放到f2.dat 中infile.close();outfile.close();// 从f2.dat 中读入20个整数,将它们按从小到大的顺序存放到f2.dat voidfun3() f2.dat{ifstream infile("f2.dat"); // 定义输入文件流infile ,以输入方式打开if(!infile){cerr<<"open f2.dat error!"<<endl;exit(1);int a[20];int i,j,t;从磁盘文件 f2.dat 读入 20 个数放在数组 a 中for(j=0;j<19-i;j++) if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}ofstream outfile("f2.dat",ios::out); // f2.dat有内容删除if(!outfile){cerr<<"open f2.dat error!"<<endl;exit(1);}cout<<"data in f2.dat:"<<endl;for( i=0;i<20;i++)cout<<endl;outfile.close();int main()fun2();fun3();return 0;13.5 题#include <iostream>for(i=0;i<20;i++)for(i=0;i<19;i++) // 用起泡法对 20 个数排序infile>>a[i]; // infile.close(); // 关闭输入文件 f2.dat作为输出文件,文件中原 {outfile<<a[i]<<" "; // 向 f2.dat 输出已排序的20 个数 cout<<a[i]<<" ";} // 同时输出到显示器{fun1(); // 分别调用 3 个函数#include <fstream>using namespace std;struct staff{int num;char name[20];int age;double pay;};int main(){staffstaf[7]={2101,"Li",34,1203,2104,"Wang",23,674.5,2108,"Fun",54, 778,3006,"Xue",45,476.5,5101,"Ling",39,656.6},staf1;fstream iofile("staff.dat",ios::in|ios::out|ios::binary);if(!iofile){cerr<<"open error!"<<endl;abort();int i,m,num;cout<<"Five staff :"<<endl;for(i=0;i<5;i++){cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].pay<<endl;iofile.write((char *)&staf[i],sizeof(staf[i]));}cout<<"please input data you want insert:"<<endl;for(i=0;i<2;i++){cin>>staf1.num>>>>staf1.age>>staf1.pay;iofile.seekp(0,ios::end);iofile.write((char *)&staf1,sizeof(staf1));}iofile.seekg(0,ios::beg);for(i=0;i<7;i++){iofile.read((char *)&staf[i],sizeof(staf[i]));cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].pay<<endl;bool find;cout<<"enter number you want search,enter 0 to stop.";cin>>num;while(num){find=false;iofile.seekg(0,ios::beg);for(i=0;i<7;i++){iofile.read((char *)&staf[i],sizeof(staf[i]));if(num==staf[i].num){m=iofile.tellg();cout<<num<<" is No."<<m/sizeof(staf1)<<endl;cout<<staf[i].num<<" "<<staf[i].name<<" "<<staf[i].age<<" "<<staf[i].pay<<endl;find=true;break;if(!find)cout<<"can't find "<<num<<endl;cout<<"enter number you want search,enter 0 to stop.";cin>>num;iofile.close();return 0;13.6 题#include <iostream>#include <strstream>using namespace std;struct student{int num;char name[20];double score;};int main(){studentstud[3]={1001,"Li",78,1002,"Wang",89.5,1004,"Fun",90},stud1[3];char c[50];int i;ostrstream strout(c,50);for(i=0;i<3;i++)strout<<stud[i].num<<" "<<stud[i].name<<""<<stud[i].score<<" ";strout<<ends;cout<<"array c:"<<endl<<c<<endl<<endl;istrstream strin(c,50);for(i=0;i<3;i++)strin>>stud1[i].num>>stud1[i].name>>stud1[i].score;cout<<"data from array c to array stud1:"<<endl;for(i=0;i<3;i++)cout<<stud1[i].num<<" "<<stud1[i].name<<""<<stud1[i].score<<endl;cout<<endl;return 0;13.6 题另一题#include <iostream>#include <strstream>using namespace std;struct student{int num;char name[20];double score;};int main(){int i;studentstud[3]={1001,"Li",78,1002,"Wang",89.5,1004,"Fun",90},stud1[3];char c[50];strstream strio(c,50,ios::in|ios::out);for(i=0;i<3;i++)strio<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<" ";strio<<ends;cout<<"array c:"<<endl<<c<<endl<<endl;for(i=0;i<3;i++)strio>>stud1[i].num>>stud1[i].name>>stud1[i].score;cout<<"data from array c to array stud1:"<<endl;for(i=0;i<3;i++)cout<<stud1[i].num<<" "<<stud1[i].name<<""<<stud1[i].score<<endl;cout<<endl;return 0;}。

C语言程序设计第三版谭浩强课后习题答案解析[完整版]

C语言程序设计第三版谭浩强课后习题答案解析[完整版]

1.5#include <stdio.h>void main(){printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");printf(" Very good! \n");printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");}1.6#include <stdio.h>void main(){float max(float x,float y,float z);float a,b,c;printf("请分别输入a,b,c:\n");scanf("%f,%f,%f",&a,&b,&c);printf("max=%f",max(a,b,c));}float max(float x,float y,float z){float m,n;m=x>y? x: y;n=m>z? m: z;return(n);}3.6#include <stdio.h>void main(){char c1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;printf(“a%c b%c\tc%c\tabc\n”,c1,c2,c3);printf(“\t\b%c %c\n”,c4,c5);}3.9.1#include <stdio.h>void main(){double x=2.5,y=4.7,z;int a=7;z=x+a%3*(int)(x+y)%2/4;printf("该表达式的值为:%f",z);}3.9.2#include <stdio.h>void main(){int a=2,b=3;float x=3.5,y=2.5,z;z=(float)(a+b)/2+(int)x%(int)y;printf("该表达式的值为:%f",z);}4.5#include <stdio.h>void main(){int a=5,b=7;double x=67.8564,y=-789.124;char c='A';long n=1234567;unsigned u=65535;printf("%d%d\n",a,b);printf("%3d%3d\n",a,b);printf("%f,%f\n",x,y);printf("%-10f,%-10f\n",x,y);printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);printf("%e,%10.2e\n",x,y);printf("%c,%d,%o,%x\n",n,n,n);printf("%ld,%lo,%x\n",n,n,n);printf("%u,%o,%x,%d\n",u,u,u,u);printf("%s,%5.3s\n","COMPUTER","COMPUTER"); }4.6#include <stdio.h>void 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);}4.7#include<stdio.h>void main(){int a,b;float x,y,z;char c1,c2;scanf("%5d%5d",&a,&b);scanf("%f%f%*f%f",&x,&y,&z);scanf("%c%c",&c1,&c2);}4.8#include <stdio.h>#define pi 3.14void main(){float r,h,l,s1,s2,v1,v2;printf("请输入r,h的值:\n");scanf("%f,%f",&r,&h);l=2*pi*r;s1=pi*r*r;s2=4*s1;v1=4/3*pi*r*r*r;v2=s1*h;printf("圆周长为:%.2f\n",l);printf("圆面积为:%.2f\n",s1);printf("圆球表面积为:%.2f\n",s2); printf("圆球体积为:%.2f\n",v1); printf("圆柱体积为:%.2f\n",v2);}5.5 #include <stdio.h>void main(){float x,y;printf("请输入x的值:\n");scanf("%f",&x);if(x<1)y=x;elseif(x>=1&&x<10)y=2*x-1;elsey=3*x-11;printf("x与y的值分别为:\n%f,%f",x,y); printf("\n");}5.6 #include <stdio.h>void main(){float b;int a;printf("请输入该同学的成绩:\n");scanf("%f",&b);while (b<0||b>100){printf("输入有误,请重新输入:\n");scanf("%f",&b);}a= int(b/10);if(a<6) a=5;switch(a){case 10:case 9: printf("该同学为等级:A");break;case 8: printf("该同学为等级:B");break;case 7: printf("该同学为等级:C");break;case 6: printf("该同学为等级:D");break;case 5: printf("该同学为等级:E");break;}}#include <stdio.h>#include <math.h>void main(){int x,y,m,n,i=1,j=0;printf("请给出一个不多于5位的正整数:\n");scanf("%d",&x);while(x<=0||x>=100000){ printf("输入有误\n请给出一个不多于5位的正整数:\n");scanf("%d",&x);}for(n=0;n<5;n++){y=int(x/pow(10,n));if(y>0&&y<10)m=n+1;}printf("它是%d位数\n",m);printf("从高到低位依次为\n");do{printf(" %d",int(x/pow(10,m-i))%10);i++;}while(m-i>=0);printf("\n逆序输出为\n");do{printf(" %d",int(x/pow(10,j))%10);j++;}while(j-m<0);printf("\n");}6.1输入两个正整数m和n,求其最大公约数和最小公倍数。

C++Primer第5版第十三章课后练习答案

C++Primer第5版第十三章课后练习答案

C++Primer第5版第⼗三章课后练习答案练习13.1如果⼀个构造函数的第⼀个参数是⾃⾝类类型的引⽤,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。

在⽤=定义变量时使⽤;将对象作为实参传递给⼀个⾮引⽤形参时;从⼀个返回类型⾮引⽤的函数返回⼀个对象;⽤花括号列表初始化⼀个数组中的元素或⼀个聚合类中的成员练习13.2因为参数⽤来初始化的参数是⾮引⽤类型,为了调⽤拷贝构造函数我们必须拷贝它的实参,但为了拷贝实参,我们⼜需要调⽤拷贝构造函数导致⽆限循环练习13.3当我们拷贝StrBlob时,StrBlob的shared_ptr成员的use_count会加⼀。

当我们复制StrBlobPtr时,StrBlobPtr的weak_ptr成员use_count不会更改。

练习13.4Point global;Point func(Point p) // (1) foo_bar函数的参数为⾮引⽤类型,需拷贝,使⽤拷贝构造函数{Point local = p, * heap = new Point(global);//(2)local = p,将p拷贝给local(3)* heap = local,将local拷贝给heap指定的地址*heap = local;Point pa[4] = { local,*heap }; //(4)(5)Point pa[4] = { local,*heap }; ,将local和* heap拷贝给数组的前两位元素return *heap; //(6)return* heap;}练习13.5class HasPtr{public:HasPtr(const std::string &s=std::string()):ps(new std::string(s)),i(0){}HasPtr(HasPtr &hp):ps(new std::string(*hp.ps)),i(hp.i){}private:std::string* ps;int i;};练习13.6拷贝赋值运算符重载赋值运算符“=”,名为operator=,接受⼀个与所在类相同类型的参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第十三章例13.1 程序为:#include <stdio.h>#include <stdlib.h>void main(){FILE *fp;char ch,filename[10];scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("cannot open file\n");exit(0);}ch=getchar();ch=getchar();while(ch!='#'){fputc(ch,fp);putchar(ch);ch=getchar();}putchar(10);fclose(fp);}例13.2 程序为:#include <stdio.h>#include <stdlib.h>void main(){FILE *in, *out;char ch,infile[10],outfile[10];printf("Enter the infile name:\n");scanf("%s",infile);printf("Enter the infile name:\n");scanf("%s",outfile);if((in=fopen(infile,"r"))==NULL){printf("cannot open file\n");exit(0);}if((out=fopen(outfile,"w"))==NULL){printf("cannot open file\n");exit(0);}while(!feof(in)) fputc(fgetc(in),out);fclose(in);fclose(out);}注:在该程序的运行中,每复制一次就会产生一个乱码置于最后,并依次叠加。

这不是个优秀的程序。

13.5.1 rewind函数:#include <stdio.h>void main(){FILE *fp1,*fp2;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");while(!feof(fp1)) putchar(getc(fp1));rewind(fp1);while(!feof(fp1)) putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);}例13.5#include<stdlib.h>#include<stdio.h>struct student_type{char name[10];int num;int age;char sex;}stud[10];void main(){int i;FILE *fp;if((fp=fopen("file22.c","rb"))==NULL){printf("can not open file\n");exit(0);}for(i=0;i<10;i+=2){fseek(fp,i*sizeof(struct student_type),0);fread(&stud[i],sizeof(struct student_type),1,fp);printf("%s %d %d %c\n",stud[i].name,stud[i].num,stud[i].age,stud[i].sex);}fclose(fp);}注:这个程序是对的,但常用于处理二进制文件,因为文本文件要发生字符转换,计算位置时常发生混乱。

习题13.1 对c文件操作有些什么特点?什么是缓冲文件系统?什么是非缓冲文件系统?这两者的缓冲区有什么区别?答:c语言把文件看作是一个字符的序列级,即由一个一个字符的数据顺序组成。

根据数据的组织形式,可以分为:ASCII文件(文本文件)和二进制文件。

一个c文件是一个字节流或二进制流(流式文件)。

它允许对文件存取一个字符,这就增加了处理的灵活性。

缓冲文件系统:是指系统自动在内存中为每一个正在使用的文件开辟一个缓冲区,如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,然后再从缓冲区逐个地将数据送到程序数据区中去。

非缓冲文件系统:是指系统不自动开辟确定大小的缓冲区,而有程序为每个文件设定缓冲区。

用缓冲文件系统进行的输入输出又称高级磁盘输入输出,用非缓冲文件系统进行的输入输出又称为低级输出输入系统。

ANSI C标准不采用非缓冲文件系统,而只采用缓冲文件系统,即既用缓冲文件系统处理文本文件,也用它处理二进制文件,也就是将缓冲文件系统扩充为可以处理二进制文件。

13.2 什么是文件型指针?通过文件型指针访问文件有什么好处?答:缓冲文件系统中,关键的概念是“文件指针”。

每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字,文件的状态及文件当前位置等)。

这些信息是保存在一个结构体变量中的。

该结构体类型是由系统定义的,取名为FILE。

这和一般使用指针变量的好处是一样的。

13.3 对文件的打开和关闭的含义是什么?为什么要打开和关闭文件?答:打开的含义:带回指向a1文件的指针赋给fp,这样fp就和文件a1联系上了。

或者说,fp指向a1文件。

在使用完一个文件后应该关闭它,以防止它再被误用。

“关闭”就是文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其联系的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。

13.4 程序为:#include <stdio.h>#include <stdlib.h>void main(){FILE *fp;char ch,filename[10];printf("please input the name of the file:\n");scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("cannot open file\n");exit(0);}printf("please a string:\n");ch=getchar();if('a'<=ch&&ch<='z')ch=ch-32;while(ch!='!'){fputc(ch,fp);putchar(ch);ch=getchar();if('a'<=ch&&ch<='z')ch=ch-32;}putchar(10);fclose(fp);}13.5 程序为:#include <stdio.h>#include <stdlib.h>#include <string.h>void main(){FILE *fp;char a[100];if((fp=fopen("test.c","r"))==NULL){printf("文件打开错误");exit(0);}int i=0;a[i]=fgetc(fp);while(a[i]!=EOF){putchar(a[i]);i++;a[i]=fgetc(fp);}putchar('\n');fclose(fp);if((fp=fopen("test1.c","r"))==NULL){printf("文件打开错误");exit(0);}while(a[i]!=EOF){putchar(a[i]);i++;a[i]=fgetc(fp);}a[i]='\0';putchar('\n');fclose(fp);int n=i;int k;char t;for(i=0;i<n-1;i++){k=i;for(int j=i+1;j<n;j++){if(a[k]>a[j]) k=j;}if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}}if((fp=fopen("test2.c","w"))==NULL) {printf("文件打开错误");exit(0);}i=0;while(i<n){fputc(a[i],fp);putchar(a[i]);i++;}fclose(fp);putchar('\n');}注:这个程序将处理数组的排序问题和文件读取的问题结合起来了。

从而解决了这个题目。

13.6 程序为:(这个程序不难,自己编的,对其中文件类型和它和结构体数组之间信息的转换有了较深的认识)#include<stdio.h>#define SIZE 5struct student_type{int num;char name[10];float score1;float score2;float score3;float avg;}stud[SIZE];void save(){FILE *fp;int i;if((fp=fopen("stu_list.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i;for(i=0;i<SIZE;i++){scanf("%d%s%f%f%f",&stud[i].num,stud[i].name,&stud[i].score1,&stud[i].score2,&stud[i].s core3);stud[i].avg=(stud[i].score1+stud[i].score2+stud[i].score3)/3;}save();fp=fopen("stu_list.c","rb");for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(student_type),1,fp);printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n",stud[i].num,stud[i].name,stud[i].sc ore1,stud[i].score2,stud[i].score3,stud[i].avg);}}13.7 程序为:#include<stdio.h>#define SIZE 5struct student_type{int num;char name[10];float score1;float score2;float score3;float avg;}stud[SIZE];void save(){FILE *fp;int i;if((fp=fopen("stu_sort.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i,j;struct student_type temp;fp=fopen("stu_list.c","rb");for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(student_type),1,fp);}for(i=0;i<SIZE-1;i++)for(j=i+1;j<SIZE;j++){if(stud[i].avg>stud[j].avg){temp=stud[i];stud[i]=stud[j];stud[j]=temp;}}save();fp=fopen("stu_sort.c","rb");for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(student_type),1,fp);printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n",stud[i].num,stud[i].name,stud[i].sc ore1,stud[i].score2,stud[i].score3,stud[i].avg);}}13.9程序为:(这个题的程序要建立在前面那些程序的基础之上)#include<stdio.h>#define SIZE 5struct student_type{int num;char name[10];float score1;float score2;float score3;float avg;}stud[SIZE+1];void save(){FILE *fp;int i;if((fp=fopen("stu_sort.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE+1;i++)if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i,j;struct student_type temp,another;scanf("%d%s%f%f%f",&another.num,,&another.score1,&another.score2,&another.s core3);another.avg=(another.score1+another.score2+another.score3)/3;fp=fopen("stu_list.c","ab");fwrite(&another,sizeof(student_type),1,fp);fclose(fp);fp=fopen("stu_list.c","rb");for(i=0;i<SIZE+1;i++){fread(&stud[i],sizeof(student_type),1,fp);}for(i=0;i<SIZE;i++)for(j=i+1;j<SIZE+1;j++){if(stud[i].avg>stud[j].avg){temp=stud[i];stud[i]=stud[j];stud[j]=temp;}}fclose(fp);save();fp=fopen("stu_sort.c","rb");for(i=0;i<SIZE+1;i++){fread(&stud[i],sizeof(student_type),1,fp);printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n",stud[i].num,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].avg);}fclose(fp);}13.8 程序为:(由上题易得该程序,这里建立的新文件的名字为:students.c)#include<stdio.h>#define SIZE 5struct student_type{int num;char name[10];float score1;float score2;float score3;float avg;}stud[SIZE+1];void save(){FILE *fp;int i;if((fp=fopen("students.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE+1;i++)if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i,j;struct student_type temp,another;scanf("%d%s%f%f%f",&another.num,,&another.score1,&another.score2,&another.s core3);another.avg=(another.score1+another.score2+another.score3)/3;fp=fopen("stu_list.c","ab");fwrite(&another,sizeof(student_type),1,fp);fclose(fp);fp=fopen("stu_list.c","rb");for(i=0;i<SIZE+1;i++){fread(&stud[i],sizeof(student_type),1,fp);}for(i=0;i<SIZE;i++)for(j=i+1;j<SIZE+1;j++){if(stud[i].avg>stud[j].avg){temp=stud[i];stud[i]=stud[j];stud[j]=temp;}}fclose(fp);save();fp=fopen("students.c","rb");for(i=0;i<SIZE+1;i++){fread(&stud[i],sizeof(student_type),1,fp);printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n",stud[i].num,stud[i].name,stud[i].sc ore1,stud[i].score2,stud[i].score3,stud[i].avg);}fclose(fp);}13.10 程序为:#include<stdio.h>#define SIZE 1struct employee_type{ char name[10];int num;int age;char sex[5];char health[10];int salary;char adress[10];char edu[10];}emp[SIZE];struct wage_type{char name[10];int salary;}emp1[SIZE];void save(){FILE *fp;int i;if((fp=fopen("employee_list.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&emp[i],sizeof(employee_type),1,fp)!=1)printf("file write error");fclose(fp);}void save1(){FILE *fp;int i;if((fp=fopen("employee_list1.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&emp1[i],sizeof(wage_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i;for(i=0;i<SIZE;i++){scanf("%s%d%d%d%s%s%s%s",emp[i].name,&emp[i].num,&emp[i].age,&emp[i].salary,em p[i].adress,emp[i].edu,emp[i].health,emp[i].sex);printf("%s %d %d %d %s %s %s %s\n",emp[i].name,emp[i].num,emp[i].age,emp[i].salary,e mp[i].adress,emp[i].edu,emp[i].health,emp[i].sex);}save();fp=fopen("employee_list.c","rb");for(i=0;i<SIZE;i++){fread(&emp[i],sizeof(employee_type),1,fp);for(int j=0;j<10;j++)emp1[i].name[j]=emp[i].name[j];emp1[i].salary=emp[i].salary;}save1();for(i=0;i<SIZE;i++){fread(&emp1[i],sizeof(wage_type),1,fp);printf("%s %d\n",emp1[i].name,emp1[i].salary);}}注意:这个程序的编写不难,主要是在于用scanf函数读入数据时的一些细节问题。

相关文档
最新文档