104科技
当前位置: 首页 电脑基础

操作系统原理与实训教程第三版课后答案(谭浩强 C程序设计第三版 课后习题答案)

时间:2024-04-15 作者: 小编 阅读量: 1 栏目名: 电脑基础

0

操作系统这门课一共有多少章节?

这门课一共有11个章节。包括:第一章操作系统概览,第二章进程描述和控制,第三章线程,第四章并发性:互斥和同步,第五章并发:死锁和饥饿,第六章内存管理,第七章虚拟内存,第八章单处理器调度,第九章多处理器和实时调度,第十章I/O管理和磁盘调度,第十一章文件管理,。

谭浩强 C程序设计第三版 课后习题答案

6.7完数
main()
#include M 1000/*定义寻找范围*/
main()
{
int k0,k1,k2,k3,k4,k5,k6,k7,k8,k9;
int i,j,n,s;
for(j=2;j<=M;j++)
{
n=0;
s=j;
for(i=1;i{ if((j%i)==0) { if((j%i)==0) { n++; s=s-i; switch(n)/*将每个因子赋给k0,k1…k9*/ { case 1: k0=i; break; case 2: k1=i; break; case 3: k2=i; break; case 4: k3=i; break; case 5: k4=i; break; case 6: k5=i; break; case 7: k6=i; break; case 8: k7=i; break; case 9: k8=i; break; case 10: k9=i; break; } } } if(s==0) { printf("%d是一个‘完数’,它的因子是",j); if(n>1) printf("%d,%d",k0,k1); if(n>2) printf(",%d",k2); if(n>3) printf(",%d",k3); if(n>4) printf(",%d",k4); if(n>5) printf(",%d",k5); if(n>6) printf(",%d",k6); if(n>7) printf(",%d",k7); if(n>8) printf(",%d",k8); if(n>9) printf(",%d",k9); printf("\n"); } } 方法二:此题用数组方法更为简单. main() { static int k[10]; int i,j,n,s; for(j=2;j<=1000;j++) { n=-1; s=j; for(i=1;i { if((j%i)==0) { n++; s=s-i; k[n]=i;/*将每个因子赋给k0,k1...k9*/ } } if(s==0) { printf("%d是一个完数,它的因子是:",j); for(i=0;i printf("%d,",k[i]); printf("%d\n",k[n]); } } 5.8 有一个分数序列:2/1,3/2,5/3,8/5……求出这个数列的前20项之和. 解: main() { int n,t,number=20; float a=2,b=1,s=0; for(n=1;n<=number;n++) { s=s+a/b; t=a,a=a+b,b=t; } printf("总和=%9.6f\n",s); } 6.9球反弹问题 main() { float sn=100.0,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); } 6.10猴子吃桃 main() { int day,x1,x2; day=9; x2=1; while(day>0) { x1=(x2+1)*2; x2=x1; day--; } printf("桃子总数=%d\n",x1); } 6.14打印图案 main() { int i,j,k; for(i=0;i<=3;i++) { for(j=0;j<=2-1;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"); } 6.15乒乓比赛 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') printf("顺序为:\na-%c\tb--%c\tc--%c\n",i,j,k); } } } } 7.1用筛选法求100之内的素数. /*用筛选法求100之内的素数*/ #include #define N 101 main() {int i,j,line,a[N]; for(i=2;i for(i=2;i for(j=i+1;j {if(a[i]!=0 && a[j]!=0) if(a[j]%a[i]==0) a[j]=0; printf("\n"); for(i=2,line=0;i { if(a[i]!=0) {printf("%5d",a[i]); line++; if(line==10) {printf("\n"); line=0;} } } 7.2用选择法对10个数排序. /*选择法排序.*/ #define N 10 main() { int i,j,min,temp,a[N]; /*输入数据*/ printf("请输入十个数:\n"); for (i=0;i { printf("a[%d]=",i); scanf("%d",&a[i]); } printf("\n"); for(i=0;i printf("%5d",a[i]); printf("\n"); /*排序*/ for (i=0;i { min=i; for(j=i+1;j if(a[min]>a[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } /*输出*/ printf("\n排序结果如下:\n"); for(i=0;i printf("%5d",a[i]); } 7.3对角线和: /*计算矩阵对角线元素之和*/ main() { float a[3][3],sum=0; int i,j; printf("请输入矩阵元素:\n"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%f",&a[i][j]); for(i=0;i<3;i++) sum=sum+a[i][i]; printf("对角元素之和=6.2f",sum); } 7.4插入数据到数组 /*插入数据到数组*/ main() {int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf("初始数组如下:"); for (i=0;i<10;i++) printf("%5d",a[i]); printf("\n"); printf("输入插入数据:"); 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; } } } for(i=0;j<11;i++) printf("a%6d",a[i]); } 7.5将一个数组逆序存放。 /*数组逆序存放*/ #define N 5 main() { int a[N]={8,6,5,4,1},i,temp; printf("\n 初始数组:\n"); for(i=0;i printf("%4d",a[i]); for(i=0;i{ temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf("\n 交换后的数组:\n"); for(i=0;i printf("%4d",a[i]); } 7.6杨辉三角 /*打印杨辉三角形*/ #define N 11 main() { int i,j,a[N][N]; for(i=1;i {a[i][i]=1; a[i][1]=1; } for(i=3;i for(j=2;j<=i-1;j++) a[i][j]=a[i01][j-1]+a[i-1][j]; for(i=1;i { for(j=1;j<=i;j++) printf("%6d",a[i][j]; printf("\n"); } printf("\n"); } 7.8鞍点 /*查找鞍点*/ #define N 10 #define M 10 main() { int i,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj; printf("\n输入行数n:"); scanf("%d",&n); printf("\n输入列数m:"); scanf("%d",&m); for(i=0;i { printf("第%d行?\n",i); for(j=0;j scanf("%d",&a[i][j]; } for(i=0;i { for(j=0;j printf("%5d",a[i][j]); pritf("\n"); } flag2=0; for(i=0;i { max=a[i][0]; for(j=0;j if(a[i][j]>max) { max=a[i][j]; maxj=j; } for (k=0,flag1=1;kif(max>a[k][max]) flag1=0; if(flag1) { printf("\n第%d行,第%d列的%d是鞍点\n",i,maxj,max); flag2=1; } } if(!flag2) printf("\n 矩阵中无鞍点! \n"); } 7.9变量说明:top,bott:查找区间两端点的下标;loca:查找成功与否的开关变量. /*折半查找*/ #include #define N 15 main() { int i,j,number,top,bott,min,loca,a[N],flag; char c; printf("输入15个数(a[i]>[i-1])\n); scanf("%d",&a[0]); i=1; while(i { scanf("%d",&a[i]); if(a[i]>=a[i-1]) i++; esle {printf("请重输入a[i]"); printf("必须大于%d\n",a[i-1]); } } printf("\n"); for(i=0;i printf("%4d",a[i]); printf("\n"); flag=1; while(flag) { printf("请输入查找数据:"); scanf("%d",&number); loca=0; top=0; bott=N-1; if((numbera[N-1])) loca=-1; while((loca==0)&&(top<=bott)) { min=(bott+top)/2; if(number==a[min]) { loca=min; printf("%d位于表中第%d个数\n",number,loca+1); } else if(number bott=min-1; else top=min+1; } if(loca==0||loca==-1) printf("%d不在表中\n",number); printf("是否继续查找?Y/N!\n"); c=getchar(); if(c=='N'||c=='n') flag=0; } } 7.10/*统计字符数*/ main() { int i,j,uppn,lown,dign,span,othn; char text[3][80]; uppn=lown=dign=span=othn=0; for(i=0;i<3;i++) { printf("\n请输入第%d行:\n",i); gets(text[i]); for(j=0;j<80 && text[i][j]!='\0';j++) {if(text[i][j]>='A' && text[i][j]<='Z') uppn+=1; else if(text[i][j]>='a' && text[i][j]<='z') lown+=1; else if(text[i][j]>='1' && text[i][j]<='9') dign+=1; else if(text[i][j]=' ') span+=1; else othn+=1; } } for(i=0;i<3;i++) printf("%s=n",text[i]); printf("大写字母数:%d\n",uppn); printf("小写字母数:%d\n",lown); printf("数字个数:%d\n",dign); printf("空格个数:%d\n",span); printf("其它字符:%d\n",othn); } 7.11/*打印图案*/ main() {static char a[5]={'*','*','*','*','*'}; int i,j,k; char space=' '; for(i=0;i<=5;i++) {printf("\n"); for(j=1;j<=3*i;j++) printf("%lc",space); for(k=0;k<=5;k++) printf("%3c",a[k]; } } 7.12/*译电文*/ #include main() {int i,n; char ch[80],tran[80]; printf("请输入字符:"); gets(ch); printf("\n密码是%c",ch); i=0; while(ch[i]!='\0') {if((ch[i]>='A')&&(ch[i]<='Z')) tran[i]=26+64-ch[i]+1+64; else if((ch[i]>='a')&&(ch[i]<='z')) tran[i]=26+96-ch[i]+1+96; else tran[i]=ch[i]; i++; } n=i; printf("\n原文是:"); for(i=0;i putchar(tran[i]); } 7.13/*连接两个字符串(不用'stract')*/ main() { char s1[80],s2[40]; int i=0,j=0; printf("\n请输入字符串1:"); scanf("%s",s1); printf("\n请输入字符串2:"); scanf("%s",s2); while(s1[i]!='\0') i++; while(s2[j]!='\0') s1[i++]=s2[j++]; s1[i]='\0'; printf("\n连接后字符串为:%s",s1); } 7.14/*字符串比较*/ #include main() {int i,resu; char s1[100],s2[100]; printf("请输入字符串1:\n"); gets(s1); printf("\n 请输入字符串2:\n"); gets(s2); i=0; while((s1[i]==s2[i]) && (s1[i]!='\0'))i++; if(s1[i]=='\0' && s2[i]=='\0')resu=0; else resu=s1[i]-s2[i]; printf(" %s与%s比较结果是%d",s1,s2,resu); } 7.15/*字符串复制*/ #include main() { char from[80],to[80]; int i; printf("请输入字符串"); scanf("%s",from); for(i=0;i<=strlen(from);i++) to[i]=from[i]; printf("复制字符串为:%s\n",to); } 第八章 函数 8.1(最小公倍数=u*v/最大公约数.) 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=%d\n",h); l=lcd(u,v,h); printf("L.C.d=%d\n",l); } {return(u*v/h);} main() {int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("H.C.F=%d\n",h); l=lcd(u,v,h); printf("L.C.D=%d\n",l); } 8.2求方程根 #include 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);
    推荐阅读
  • 零基础电脑初学者入门教程(电脑初学者入门教程)

    完成以上步骤,其实你已经一窥网络的神奇之处。接下来就该自己探索。对电脑基本知识有了了解,这样才能更好的去实际操作中使用。根据自己所要学习的电脑知识进行整理,总结。可以根据书籍来操作,也可以寻找相关的视频教程。打字速度只有不断的练习才能提升。学习电脑是仅仅为了日常的需要,还是要通过掌握电脑相关专业来工作。

  • nova6充电器多少瓦(华为nova6充电头多少瓦)

    华为nova6的充电器功率为40瓦。

  • 怎么用pr给视频加音乐 怎么用pr给视频加音乐

    使用AdobePremierePro给视频添加音乐的步骤如下:1.打开AdobePremierePro软件并导入视频文件:在主界面上选择“文件”菜单,然后选择“导入”>“文件”,浏览和选择要导入的视频文件。可以使用关键帧来创建音量渐变。通过上述步骤,您可以使用AdobePremierePro给视频添加音乐。

  • 京东取消订单券退吗 京东取消订单之后优惠券退么

    根据京东官方的政策,如果您使用了优惠券来下单,然后取消了订单,优惠券通常会被返还给您的京东账户。然而,请注意,不同的优惠券可能有不同的使用规则和退款规定。建议您在取消订单之前查看优惠券的使用说明以获得更准确的信息。

  • 电脑黑屏按哪个键恢复(哪个键使电脑显示器一按就黑屏,再按就又好了)

    华硕笔记本电脑黑屏按什么键恢复1、请尝试按组合功能键调高屏幕亮度,开启/关闭切换显示,避免屏幕亮度过低或因已关闭屏幕而造成电脑黑屏不显示。若BIOS界面黑屏不显示,可能为电脑硬件问题,请携带机台至华硕服务中心进行检测。如果外接显示器也不显示,或者您没有相关显示器设备进行测试,建议您将机台带到华硕服务中心检测确认。

  • 手机伸缩摄像头的弊端(手机伸缩式摄像头容易坏吗)

    摄像头模块可能会因为使用次数过多或不慎碰撞而出现损坏。在摄像头伸出和缩回的过程中,可能会出现延迟和卡顿的现象,影响用户体验。总体而言,手机伸缩式摄像头相对来说容易损坏并且更加脆弱,因此用户在使用时需要谨慎对待,避免频繁震动或碰撞等操作,以延长使用寿命。

  • qq空间可以存多少照片和视频(qq空间里能存多少视频和照片)

    QQ空间没有明确限制存储照片和视频的数量。用户可以根据自己的空间大小、存储设备的容量以及需要存储的其他数据来自由存储照片和视频。

  • 跨区就读的2022年南京鼓楼区户籍小学毕业生电脑派位报名(时间+地点+材料)

    2022年南京鼓楼区户籍小学毕业生电脑派位报名的时间、地点和所需材料如下:时间:报名时间通常在每年的6月份,具体时间以当年鼓楼区教育局的公告为准。地点:南京市鼓楼区教育局材料:1.小学毕业生户籍证明;2.小学毕业证书复印件;3.学生身份证复印件;4.监护人身份证复印件;5.监护人居住证明;6.其他可能需要的材料。具体材料要求以当年鼓楼区教育局的通知为准,建议家长在报名前仔细阅读相关通知并准备好所需材料。

  • 备忘录日期怎么显示 备忘录日期怎么显示月份

    备忘录的日期可以根据个人喜好来进行显示。例如,日期为1号,月份为1月可以显示为“1月1日”。总结来说,备忘录日期的显示方式取决于个人的喜好,可以根据自己的习惯来选择适合自己的日期显示方式。

  • 电脑基础知识全面指南帮你成为电脑领域的专家

    想要成为电脑领域的专家,首先需要全面掌握电脑的基础知识。-学会使用系统工具和软件进行故障排除。-学习并遵守计算机安全和隐私保护的法律法规。通过深入学习和实践这些基础知识,你将逐步成为电脑领域的专家,并能够解决和处理各种电脑相关的问题和挑战。记得保持持续学习的态度,与时俱进,随着技术的发展不断更新和增加你的知识。