程序设计基础(C)离线作业-答案-2017-浙江大学远程教育学院_第1页
程序设计基础(C)离线作业-答案-2017-浙江大学远程教育学院_第2页
程序设计基础(C)离线作业-答案-2017-浙江大学远程教育学院_第3页
程序设计基础(C)离线作业-答案-2017-浙江大学远程教育学院_第4页
程序设计基础(C)离线作业-答案-2017-浙江大学远程教育学院_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.浙江大学远程教育学院程序设计基础(C)课程作业姓名:袁洋学 号:717129012012年级:2017春学习中心:紫金港校区第章 语言的基本构成由add、main、scanf、printf函数组成,调用了scanf、printf两个系统函数。保留字:int、return。自定义标识符:add、a、b、c、x、y、z。第章输入输出程序设计1 用printf输出一个中空的五角星。#includevoid main()printf( * n);printf( * * n);printf( * * n);printf( * * n);printf( * * * * * * * *n); printf

2、( * * n);printf( * * n);printf( * *n);printf( * * * n);printf( * * * * n);printf( * * * * n);printf( * * * * n);2 仿照例子2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。#includevoid main()char charshuz20; puts(gets(charshuz); 3 从键盘输入十六进制整数,转化为八进制数输出。#includevoid main()int shiliu;scanf(%x,&shiliu);printf(%on,shiliu); 4

3、只定义两个整型数据并赋值,实现两个整型数的互换。#includevoid main()int a,b,swap;scanf(%d,%d,&a,&b);printf(a=%d,b=%dn,a,b);swap=a;a=b;b=swap;printf(a=%d,b=%dn,a,b); 5 从键盘上输入一个整数,分别输出8、16进制数的程序。#includevoid main()int a;scanf(%d,&a);printf(%o %xn,a,a); 6 从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。#includevoid main()int integer;doprintf(请输入

4、一个三个数:); scanf(%d,&integer); if (integer=1000) printf(请重新输入,n);while(integer=1000);printf(输入的整数为:%d,百位为:%d,十位为:%d,个位为:%d。n,integer,integer/100,integer%100/10,integer%100%10); 7 以下程序输出结果是( )。#includevoid main() int i=010,j=10; printf(%d,%dn,+i,j- ); 程序输出结果为 9,108 运行程序,屏幕提示“您是一个学生吗”,您输入y或n进行回答,屏幕输出您的选

5、项。#includevoid main()char q;printf(Are you a student ? y/nn); scanf(%c,&q); if(q=y | q=Y) printf(Good good study!n); else if(q=n | q=N)printf(Work hard!n); 9 从键盘输入一个角度x,求10*sin(x)的值。#include#includeint main()float x; scanf(%f,&x); printf(sum is %fn,10*sin(x); 第章循环程序设计1以下for语句的循环次数是多少?int i,j=3;for(;

6、i=j;i-,j-) printf(%d,i);for语句的循环次数为 3 次2下面的语句显示输出6行6列的整数数组h的主对角线上的所有元素,请补充完整:for(int i=0;i6; i+)printf(%d, hij )3写出以下程序运行的结果,此程序实现了什么功能?#includevoid main() int a10=2,4,0,-5,10,6,-8,9,6,7; int i, count=0; for(i=0;i10;i+) if(ai=0) count+; else continue;printf(%dn , count);统计数组a中元素为0的元素个数。4写出以下程序的功能。#i

7、ncludevoid main()int a10=2,4,0,-5,10,6,-8,9,6,7,tmp,k;for (k=0;k10/2;k+) tmp=ak; ak=a10-k-1;a10-k-1=tmp;把数组a里的元素位置倒置,第一个放在最后一个,第二个放在倒数第二个位置。5写出以下程序运行后的输出结果。#includevoid main() int i,j; for(i=0;i6;i+) for(j=0;ji;j+)printf( );for(j=0;j2*(5-i)-1;j+)printf(*);printf(n); *6请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试

8、检验。(1)#includevoid main( ) int i,s;i=1; s=0;while(i=100); s=s+i; i+; printf(“1+2+3+.+99+100=%dn”,s);改正后:#includevoid main( )int i,s;i=1; s=0;while(i=100)s=s+i;i+;printf(1+2+3+-.+99+100=%dn,s);(2)#includevoid main( ) int i,s;i=1;s=0;while(i=100) s=s+i; i+; printf(“1+2+3+.+99+100=%dn”,s);改正后:#includev

9、oid main( )int i,s;i=1;s=0;while(i=100)s=s+i;i+;printf(1+2+3+-.+99+100=%dn,s); (3)#includevoid main( ) int i=1,s;while(i=100) ; s=s+i; i+; printf(“1+2+3+.+99+100=%dn”,s);改正后:#includevoid main( )int i=1,s=0;while(i=100)s=s+i;i+;printf(1+2+3+-.+99+100=%dn,s); 7 输入一个基数,例如输入9,输出为:求1*3*9的值。输出为:1*3*5*7*9=

10、945#includeint main()int jishu,sum=1,i; do printf(请输入一个奇数: ); scanf(%d,&jishu); while(jishu%2=0); for(i=1;i=jishu;i=i+2) sum=sum*i; printf(n1*3*5*.*%d= %dn,jishu,sum); 8 输入一个510之间的整数n,求1!+2!+3!+n!。例如输入5,输出为:1!+2!+3!+5!=153#includeint main()int i,j,num,sum=0,jiec=1; /jiec存放单个阶乘的值,sum存放所以的阶乘和 dodoprin

11、tf(请输入一个5到10之间的整数: ); scanf(%d,&num); while(num 10); for(i=1;i=num;i+) for(j=1;j=i;j+) jiec=jiec*j;sum=sum+jiec; jiec=1; printf(n1!+2!+3!+.+%d!=%d,num,sum); 9在屏幕上输出以下内容1 12 123 1234 12345 123456 1234567 12345678 123456789 #include int main () char i,j; for(i=0;i9;i+) for(j=1;j=i+1;j+) printf(%d,j);

12、putchar(n); return 0; 10 求2+4+6+98+100的和,用多种for表达式来完成。#includevoidmain()inti,sum=0;for(i=2;i101;i=i+2)sum=sum+i;printf(sumis%dn,sum);或者#includevoidmain()inti,sum=0;for(i=2;i101;i+)if(i%2=0)sum=sum+i;printf(sumis%dn,sum);11输入一行字符,统计它有多少个字母?#includevoidmain()charccc;intnum=0;while(ccc=getchar()!=n)if(

13、ccc=a&ccc=A&ccc=Z)num+;printf(numis%dn,num);第章分支程序设计1输入若干整数给x,使用if语句输出x的绝对值,当输入0时结束。#includevoidmain()intx;doscanf(%d,&x);if(x0)printf(%d的绝对值为:%dn,x,x);elseif(x0)printf(%d的绝对值为:%dn,x,-x);while(x!=0);2 输入一批数,输出比相邻数大的数,当输入0时结束。#includevoidmain()intx=0,last=0;while(1)printf(请输入x值:);scanf(%d,&x);if(x=0)

14、break;if(xlast)printf(x比相邻数大:%d,x);last=x;3 将输入字符的大写字符转换成小写字符输出,小写字符原样输出。#includevoidmain()chars;while(s=getchar()!=n)if(s=A&s=Z)s+=32;putchar(s);4 输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个数。#includevoidmain()chars;intxiaoxie_char=0,daxie_char=0,shuz_char=0,others=0;while(s=getchar()!=n)if(s=A&s=a&s=0&

15、s=9)shuz_char+;elseothers+;printf(这些字符中小写字符为%d,大写字符为%d,数字字符为%d,其他字符为%dn,xiaoxie_char,daxie_char,shuz_char,others);5编写程序,计算分段函数:#includevoidmain()intx,y;scanf(%d,&x);if(x1&x10)y=3/(x-10);printf(x=%d,y=%dn,x,y);6根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。百分制五分制90 100580 89470 79360 692601#includevoidmain()intb

16、aifen,wufen;printf(请输入百分制成绩:);scanf(%d,&baifen);wufen=baifen/10;switch(wufen)case10:case9:printf(相对应的5分制:5n);break;case8:printf(相对应的5分制:4n);break;case7:printf(相对应的5分制:3n);break;case6:printf(相对应的5分制:2n);break;default:printf(相对应的5分制:1n);7、 用switch完成:读入一个实数x,再输入一整数,若输入是1,则计算sin(x),若输入2,则计算cos(x),若输入3,则

17、计算tan(x),若输入其他值,则显示错误信息。#include#includevoidmain()floatx;intz;printf(pleaseinputarealnumber:);scanf(%f,&x);printf(pleaseinputainteger:);scanf(%d,&z);switch(z)case1:printf(%5fn,sin(x);break;case2:printf(%5fn,cos(x);break;case3:printf(%5fn,tan(x);break;default:printf(dateerror!n);8、用switch完成:输入星期1 到星期

18、5,输出它们对应的颜色星期1:blue星期2:red星期3:white星期4:yellow星期5:green#includevoidmain()inti;printf(Pleaseinputadate:n);scanf(%d,&i);switch(i)case1:printf(星期一:bluen);break;case2:printf(星期二:redn);break;case3:printf(星期三:whiten);break;case4:printf(星期四:yellown);break;case5:printf(星期五:greenn);break;default:printf(n);9、用

19、switch完成:从键盘输入A、B、C、D四个等级中的一个,转化输出等级输出A优秀B良好C中等D及格E不及格#includevoidmain()chari;printf(Pleaseinputachar:n);scanf(%c,&i);switch(i)caseA:printf(优秀n);break;caseB:printf(良好n);break;caseC:printf(中等n);break;caseD:printf(及格n);break;caseE:printf(不及格n);break;default:printf(deteerror);第章数组及其应用.从键盘输入12个数,分别为:900

20、,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。#includevoidmain()intshuzu12=900,2,3,58,34,76,87,72,90,20,78,30,i,max=shuzu0,min=shuzu0;for(i=0;imax)max=shuzui;elseif(shuzuimin)min=shuzui;printf(maxis%d,minis%dn,max,min);. 采用遍历查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找出偶数。#includevoidmain()inti,a10=2,3

21、,20,58,72,76,78,87,90,900;for(i=0;i10;i+)if(ai%2=0)printf(%3d,ai);.采用折半查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找到87,然后进行删除。#include#defineSIZE10voidmain()intaSIZE=2,3,20,58,72,76,78,87,90,900,i,j,low=0,high=SIZE-1;i=(low+high)/2;while(high=low)if(ai87)high=i;i=(low+high)/2;elsebreak;for(j=i;jSI

22、ZE-1;j+)aj=aj+1;第章函数及其应用练习与实践一、阅读程序,写出程序运行的结果。1写出以下程序的执行结果。#includefloat aver(int a) int k,sum=0;float ave;for(k=0;k10;k+) sum+=*(a+k); ave=(float)sum/10;return (ave);int main( ) float ave;static b=78,89,98,76,78,45,88,81,92,85;ave=aver(b);printf(ave=%fn,ave);提示:数组b的首地址传递给形参a,*(a+k)就是数组元素bk.运行的结果为:a

23、ve=81.0000002阅读程序,写出程序的执行结果。#include void abc( char str )int a, b ;for(a = b = 0 ; stra!=0; a+ )if(stra!= c)strb+ = stra;strb=0;int main( )char str =abcdef ;abc(str);printf(str =%s , str );return 0;提示:数组str的首地址传递给形参str,stra就是实参中的数组元素stra,当数组元素不为c时进行复制。程序运行的结果为:str=abdef3写出以下程序的执行结果。#includeint sort(

24、int b,int n,int x)int k;for(k=n-1;k=0;k-)if(bkx)bk+1=bk;elsebreak;bk+1=x;return 0; int main( )int i,j;static int a5=8,5,4,1,6;int b8;b0=a0;for(i=1;i5;i+)sort(b,i,ai);for(j=0;j=i;j+) printf(%d ,bi);printf(n);return 0; 提示:循环体中if(bkx)bk+1=bk;elsebreak;如果bkx成立,执行语句bk+1=bk;表示数组元素b向后移,不满足时插入x,即从大到小排序。程序运行

25、的结果为:554441111111114写出以下程序的执行结果。#includeint fun(int x) int p; if(x=0|x=1) return 3; else p=x-fun(x-2); return p;int main( )printf(n%d,fun(9);return 0; 提示:fun(9)=9-fun(7),.,fun(1)=3程序运行的结果为:75写出以下程序的执行结果,并说明其作用是什么?#includeint f(int n)if(n=10)f(n/10);printf(%d,n%8);return 0;int main( )f(1234);printf(n

26、);return 0; 提示:在函数f中,程序运行借助了堆栈,依次入栈的数据分别为1234、123、12,最后n=1,n对8取余输出,然后数据依次出栈对8取余输出。程序运行的结果为:1432作用:10进制转换为8进制.二、程序设计1编写一个函数,计算x的n次的平方。 提示:for(y=1,i=0;in;i+) y=y*x;#includeintf(intx,intz)intsum=1,i;for(i=0;iz;i+)sum=sum*x;returnsum;voidmain()intjishu,num,y;printf(pleaseinputajishu:);scanf(%d,&jishu);p

27、rintf(pleaseinputanum:);scanf(%d,&num);y=f(jishu,num);printf(%d,y);2编写一个函数,计算对角线上元素之和。提示:for(s=0,i=0;in;i+) for(j=0;jn;j+) if(i=j) s=s+aij; #includeintsum(inta6,intx,inty)intsum=0,i,j;for(i=0;ix;i+)for(j=0;jy;j+)if(i=j)sum=sum+aij;elsecontinue;returnsum;voidmain()inti,j,a66;for(i=0;i6;i+)for(j=0;j6;

28、j+)aij=i+j*2;printf(sumis%dn,sum(a,6,6);3编写一个函数int invert(char str ),将一个字符串的内容颠倒过来。提示:先求字符串str的长度n,for(i=0;in/2;i+)ai与an-1-i交换#include#includeintinvert(charstr)intn,i;chartemp;n=strlen(str);for(i=0;in/2;i+)temp=stri;stri=strn-1-i;strn-1-i=temp;voidmain()charstr20;scanf(%s,str);invert(str);puts(str);

29、4编写函数,删除字符串中,从指定位置m开始的n个字符。删除成功,函数返回被删除字符串;否则返回空的值。提示:for(k=m , i=0 ; stri ; i+) strm+i=strm+n+i; strm+i=0;#include#include#includechar*func(charstr,intm,intn)if(strlen(str)m+n)returnNULL;char*buffer=newcharn+1;memset(buffer,0,n+1);intk,i;for(k=m,i=0strii+)if(i=0&stri=9) s=s*10+stri-0; #includevoidm

30、ain()inti,j,n,s=0;charsss30;scanf(%s,sss);for(i=0,j=0;sssi;i+)if(sssi=0&sssi=9)s=s*10+sssi-0;sssj=sssi;j+;sssj=0;puts(sss);putchar(n);printf(Thesis%dn,s);6用递归的方法编写一个函数sum(int n),求1至n的累加和。 提示:f(n)=n+f(n-1) #includeintsum(intn)int_sum;if(n=1)_sum=1;else_sum=n+sum(n-1);return_sum;voidmain()int_sum,n;do

31、printf(Pleaseinputanum(=1):);scanf(%d,&n);while(n1);_sum=sum(n);printf(Sumis%dn,_sum);第章变量存储类型与多文件系统1写出以下程序的执行结果。#includeint x;void fun( )printf(%d ,x+);void main( )int x=1;extern int x;printf(%d,+x);fun( );提示:在函数fun中及语句块extern int x;printf(%d,+x);中使用的x是外部变量,在语句块:if(x=1)int x=2;printf(%d,x+);中使用的是刚刚

32、定义x=2的变量。程序的执行结果为:1,12写出以下程序的执行结果。#include int kk( ) int x = 4 ; static int y ; y = 5 ; x*= 2 ; y*= 2; return(x+y);void main() int j , s = 0 ; for ( j = 0 ; j 2 ; j+ ) s = kk ( ); printf( s = % d n ,s );提示:虽然两次调用函数kk(),但变量定义语句static int y ;只执行一次,而变量赋值语句每次都要执行。程序的执行结果为:s=183写出以下程序的执行结果。#include int t

33、( ) int x = 0 ; static int y = 4 ; y += +x ; return x+y;void main( ) printf(%d n,( t( ), t( ) );提示:语句printf(%d n,(t( ), t( );中(t( ),t( )属于“,”号表达式,即两次调用函数t( ),在函数t( )中,y为静态内部变量,因而语句static int y = 4 ;只执行一次。程序的执行结果为:7第章文件1下述程序从终端读入文本(用$作为文本结束标志)复制到一个名为out.dat的新文件中,请补全程序。#include int main()FILE *fp;char

34、 cx;if(fp=fopen( out.dat, w )=NULL)return 0;while(cx=getchar( )!=$)fputc(cx,fp);fclose(fp) ;return 1;提示:第1个空格是打开文件读,第2个空格是关闭文件。2下面的程序用来统计文件中字符的个数,请补全程序。#includeint main( ) FILE *fp; long num=0; if(fp=fopen(fname.dat,r)=NULL) printf(Cant open file!n);exit(0); while( feof(fp) fgetc(fp); num+; printf(n

35、um=%dn,num); fclose(fp); return 1; 提示:第1个空格表示文件没有结束,循环将持续。. 以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件中,用#作为结束输入的标志,请补全程序。#includevoid main( ) FILE *fp; char ch,fname10; printf(Input the name of filen); gets(fname); if(fp= fopen(fname10,w)=NULL) printf(Cannot openn); exit(0); printf(Enter datan); while

36、(ch=getchar( )!=#) fputc( ch ,fp); fclose(fp);提示:文件名是从键盘读入的,因而文件名是用变量表示的,文件是打开写。4下述程序从一个二进制文件中读入结构体数据,并把读出的数据显示在屏幕上。请补全程序。#include struct rec int a;float b;void recout(FILE *fp)struct rec r;dofread( &r ,sizeof(struct rec), 1 ,fp);if( feof(fp) break;printf(%d,%f,r.a,r.b);while(1);void main() FILE *fp

37、;fp=fopen(file.dat,rb);recout(fp);fclose(fp);提示:在fread语句中,(1)中为存放所读出结构数据的内存地址,当然此数据是赋给变量r,(2)中是读出结构体变量数据的个数,(3)是与循环中止有关的判断,(4)为中止循环。.从键盘输入一个字符串,并逐个将字符串的每个字符传送到磁盘文件l1.txt中,字符串的结束标记为#。#include#includeintmain()FILE*fp;charch;if(fp=fopen(11.txt,w)=NULL)printf(cannotopenthisfilen);exit(0);while(ch=getcha

38、r()!=#)fputc(ch,fp);fclose(fp);return0; 有一文本文件l1.txt,请编写一个程序将文件中的英文字母及数字字符显示在屏幕上。#include#includeintmain()FILE*fp;charch;if(fp=fopen(11.txt,r)=NULL)printf(cannotopenthisfilen);exit(0);while(!feof(fp)if(ch=fgetc(fp)=a&(ch=fgetc(fp)=A&(ch=fgetc(fp)=0&(ch=fgetc(fp)=9)putchar(ch);fclose(fp);return0; 把文本文件l1.txt中的数字字符复制到文本文件l2.txt中。#include#includeintmain()FILE*fp,*fp1;longnum=0;inti=0,t=0;charch;chardata1000;if(fp=fopen(l1.txt,r)=NULL)printf(Cantopenfile!n);while(!feof(fp)ch=fgetc(fp);datai=ch;i+;datai=0;fclose(fp);if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论