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

下载本文档

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

文档简介

浙江大学远程教育学院程序设计基础(C)课程作业姓名:学 号:年级:学习中心:第章 语言的基本构成程序调试题1 编辑、调试以下程序步骤1:在Visual C+环境下新建文件可用开始程序Microsoft Visual C+6.0 Microsoft Visual C+6.0 文件 新建文件 C+ Sourse File,输入文件名ex1-1.c,程序代码如下:include /*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/int add(int x,int y) int z; z=x+y; return z; int main( ) int add(int,int); /* 函数的说明,告诉系统在主函数中要调用add函数 */int a,b,c; /* 变量的定义*/scanf(%d %dn,&a,&b);c=add(a,b); /* 函数调用 */ printf(%d+%d=%dn,a,b,c); /* 调用系统输出函数printf,%d为格式控制符,依次用后面的变量值填充,以整数形式输出 */请思考文件ex1-1.c由几个函数构成?调用了那几个系统函数?此程序中用到了哪几个保留字?哪几个用户自定义标识符?答:文件ex1-1.c由两个函数构成,分别是add()和主函数main()。调用了两个系统函数,分别为scanf和printf。程序中用到如下几个保留字:int, return。使用了如下几个用户自定义标示符:x, y, z, a, b, c.步骤3:编译并运行程序,程序运行时输入两个整数,20 40 ,观察程序运行的结果。答:程序运行结果,20+40=602 编辑、调试以下程序步骤1:在Visual C+环境下新建文件可用开始程序Microsoft Visual C+6.0 Microsoft Visual C+6.0 文件 新建文件 C+ Sourse File,输入文件名ex1-2.c步骤2:在文本编辑器中输入以下C程序#include /*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/#includeint main( ) int and(int,int); /* 函数的说明,告诉系统在主函数中要调用and函数 */ int or(int,int); /* 函数的说明,告诉系统在主函数中要调用and函数 */int a,b,c; /* 变量的定义*/scanf(%d %d,&a,&b);c=and(a,b); /* 函数调用 */ printf(%d & %d=%dn,a,b,c); /*调用系统输出函数printf,%d为格式控制符,依次用后面的变量值填充,以整数形式输出 */c=or(a,b); /* 函数调用 */ printf(%d | %d=%dn,a,b,c); 步骤3:文件 新建文件 C+ Sourse File,输入文件名ex1-2-2.c,源程序代码为:int and(int a,int b) int c; c=a&b; return c;步骤4:文件 新建文件 C+ Sourse File,输入文件名ex1-2-3.c,源程序代码为:int or(int a,int b) int c; c=a|b; return c;步骤5:点击编译图标,编译程序1-2.c 步骤4:点击执行图标 ,执行程序1-2.c ,当程序运行时,键盘输入20 40,按回车。20 4020 & 40=120 | 40=1您可以输入其它的整数,观察程序的执行结果。第章输入输出程序设计1 用printf输出一个中空的五角星。源程序:#include void main()printf(t * n);printf(t * * n);printf(t * * n);printf(t* * * * * * * * n);printf(t * * n);printf(t * * n);printf(t * * n);printf(t * * * n);printf(t * * * * n);printf(t* *n);2 仿照例子2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。源程序:#include int main()char s255;printf(请输入:);scanf(%s,s);printf(你输入的是:%sn,s);return 0;3 从键盘输入十六进制整数,转化为八进制数输出。源程序:#include int main()int a;printf(请输入一个十六进制数:);scanf(%x,&a);printf(转化为八进制数为%on,a);return 0;4 只定义两个整型数据并赋值,实现两个整型数的互换。源程序:#include int main()int a = 5; int b = 3;printf(现在的数a = %d , b = %dn,a,b);a = ab;b = ba;a = ab;printf(交换之后a = %d , b = %dn,a,b);return 0;5 从键盘上输入一个整数,分别输出8、16进制数的程序。源程序:#include int main()int a;printf(请输入一个十进制数:);scanf(%d,&a);printf(这个数转化为八进制数为%on,a);printf(这个数转化为八进制数为%xn,a);return 0;6 从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。源程序:#includeint main()int a;scanf(%d,&a); printf(您输入的数字为%dn,a);printf(百位数为%dn,a/100);printf(十位数为%dn,a%100/10);printf(个位数为%dn,a%10);return 0;7 以下程序输出结果是( )。#includevoid main() int i=010,j=10; printf(%d,%dn,+i,j- ); 答:9,108 运行程序,屏幕提示“您是一个学生吗”,您输入y或n进行回答,屏幕输出您的选项。源程序:#includeint main()char s;printf(你是学生吗(Y/N):);scanf(%s,&s);if(s = Y | s = y)printf(你是学生n); elseprintf(你不是学生n);return 0;9 从键盘输入一个角度x,求10*sin(x)的值。源程序:#include#includeint main() int a;double r;printf(请输入角度:);scanf(%d,&a); r=10*sin(a);printf(%fn,r);return 0;第章循环程序设计1以下for语句的循环次数是多少?int i,j=3;for(;i=j;i-,j-) printf(%d,i);答:3次2下面的语句显示输出6行6列的整数数组h的主对角线上的所有元素,请补充完整:for(int i=0;i ; )printf(%d, )答:for(int i=0;i 6 ; i+ )printf(%d, hii )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写出以下程序的功能。#includevoid 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;答:此程序实现功能:将数组颠倒。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请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试检验。#includevoid main( ) int i,s;i=1; s=0;while(i=100) s=s+i; i+; printf(“1+2+3+.+99+100=%dn”,s);(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);(2)#includevoid main( )while(i=100) s=s+i; i+;printf(“1+2+3+.+99+100=%dn”,s); 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 s = 0; int i=1,s;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=945源程序:#includeint main()int a,b;b = 1;scanf(%d,&a);for(int i = 1;i = a; i+=2)b = b * i;printf(%dn,b);return 0;8 输入一个510之间的整数n,求1!+2!+3!+n!。例如输入5,输出为:1!+2!+3!+5!=153源程序:#includeint main()int a,b,c;b = 1;c = 0;scanf(%d,&a);for(int i = 1; i = a; i+)for(int j = 1; j = i; j+)b = b * j;c = c + b;b = 1;printf(%dn,c); return 0;9在屏幕上输出以下内容1 12 123 1234 12345 123456 1234567 12345678 123456789 源程序:#includeint main()for(int a = 1; a = 9; a+)for(int b = 1; b = a; b+)printf(%d,b);printf(n);return 0;10 求2+4+6+98+100的和,用多种for表达式来完成。源程序:#includeint main() int sum = 0;for(int a = 2; a = 100; a+=2) sum += a;printf(%dn,sum);return 0;11输入一行字符,统计它有多少个字母?源程序:#includeint main()int count = 0;char s255;scanf(%s,s);for(int i = 0; i = a & si = A & si = Z)count+;printf(%d,count);return 0;第章分支程序设计1输入若干整数给x,使用if语句输出x的绝对值,当输入0时结束。源程序:#includeint main()int x;scanf(%d,&x);for (;x;scanf(%d,&x)if ( x 0)printf(绝对值是%dn,x);elseprintf(绝对值是%dn,-x);return 0;2 输入一批数,输出比相邻数大的数,当输入0时结束。源程序:#includeint main()int a;int b = 0;scanf(%d,&a);b = a;for (;a;scanf(%d,&a)if (a b) printf(%dt,a);b = a;return 0;3 将输入字符的大写字符转换成小写字符输出,小写字符原样输出。源程序:#includeint main()char c;while (c = getchar() != n)if (c = A & c = Z)c+=32;putchar(c);printf(n);return 0;4 输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个数。源程序:#includeint main()char c;int dx = 0,xx = 0,sz = 0,qt = 0;while (c = getchar() != n)if (c = A & c = a & c = 0 & c = 9)sz+;elseqt+;printf(包含大写字母%d个,小写字母%d个,数字%d个,其他字符%d个.n,dx,xx,sz,qt);return 0;5编写程序,计算分段函数:源程序:#includeint main()float x,y;scanf(%f,&x);if(x=1)y=x+5;else if(x10)y=x*2;elsey=3/(x-10);printf(%f,y);return 0;6根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。百分制五分制90 100580 89470 79360 692601源程序:#includeint main()int a;scanf(%d,&a);if (a=90)printf(5n);else if (a=80)printf(4n);else if (a=70)printf(3n);else if (a=60)printf(2n);elseprintf(1n);return 0;7、 用switch完成:读入一个实数x,再输入一整数,若输入是1,则计算sin(x),若输入2,则计算cos(x),若输入3,则计算tan(x),若输入其他值,则显示错误信息。源程序:#include#include int main()int a;float b;printf(请输入实数:);scanf(%f,&b);printf(请选择整数1 or 2 or 3:);scanf(%d,&a);switch(a)case 1:printf(y=sin(x)=%fn,sin(b);break;case 2:printf(y=cos(x)=%fn,cos(b);break;case 3 :printf(y=tan(x)=%fn,tan(b);break;default:printf(errorn);break;return 0;8、用switch完成:输入星期1 到星期5,输出它们对应的颜色星期1:blue星期2:red星期3:white星期4:yellow星期5:green源程序:#includeint main()int a;printf(今天星期几?);scanf(%d,&a);switch(a)case 1:printf(星期一:bluen);break;case 2:printf(星期二:redn);break;case 3:printf(星期三:whiten);break;case 4:printf(星期四:yellown);break;case 5:printf(星期五:greenn);break;default:printf(errorn);break;return 0;9、用switch完成:从键盘输入A、B、C、D四个等级中的一个,转化输出等级输出A优秀B良好C中等D及格E不及格源程序:#includeint main()char a;printf(请输入等级n);scanf(%s,&a);switch(a)case A:printf(优秀n);break;case B:printf(良好n);break;case C:printf(中等n);break;case D:printf(及格n);break;case E:printf(不及格n);break;default:printf(errorn);break;return 0;第章数组及其应用.从键盘输入12个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。源程序:#includeint main()int a12;for (int i = 0; i 12; i+)printf(请输入第%d个数:n,i+1);scanf(%d,&ai);int max=a0,min=a0;for (int j = 1; j max)max = aj;if (aj min)min = aj;printf(最大值为%d,最小值为%dn,max,min);return 0;. 采用遍历查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找出偶数。源程序:#include#define SIZE 100int main()int aSIZE = 2,3,20,58,72,76,78,87,90,900;printf(其中偶数是);for (int i = 0; i 10; i+)if (ai % 2 = 0)printf(%dt,ai);printf(n);return 0;.采用折半查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找到87,然后进行删除。源程序:#include#define SIZE 11#define FOUND 87int main()int aSIZE = 2, 3,20,58, 72, 76,78,87,90,900;int low = 0,high = SIZE-1,mid;mid = (low + high) / 2;while (low high)if (amid FOUND)high = mid;mid = (high + low) / 2;elsebreak;for (int j = mid; j 9; j+)aj=aj+1;return 0;第章函数及其应用练习与实践一、阅读程序,写出程序运行的结果。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.答: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(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,即从大到小排序。答:5 5 4 4 4 1 1 1 1 1 1 1 1 14写出以下程序的执行结果。#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);return 0; 提示:在函数f中,程序运行借助了堆栈,依次入栈的数据分别为1234、123、12,最后n=1,n对8取余输出,然后数据依次出栈对8取余输出。答:1432二、程序设计1编写一个函数,计算x的n次的平方。 提示:for(y=1,i=0;in;i+) y=y*x;源程序:#includeint main( )int x,n,y,i;scanf(%d,&x);scanf(%d,&n);for(y=1,i=0;in;i+)y = y * x;printf(%d的%d次方是:%dn,x,n,y);return 0;2编写一个函数,计算对角线上元素之和。提示:for(s=0,i=0;in;i+) for(j=0;jn;j+) if(i=j) s=s+aij; 源程序:#includeint main( )int a1010;int i = 0,j=0;int sum = 0;for (i = 0; i 10; i+)for(j = 0;j 10; j+)aij = (i+1)*(j+1);printf(%dt,aij);printf(n);for (i=0;i10;i+)for (j=0;j10;j+)if (i = j)sum += aij;printf(对角线和为%dn,sum);return 0;3编写一个函数int invert(char str ),将一个字符串的内容颠倒过来。提示:先求字符串str的长度n,for(i=0;in/2;i+)ai与an-1-i交换源程序:#includeint invert(char str)char ch;int i;for (i = 0;(ch=stri) != 0;i+);for (int j = 0; j i/2; j+)ch = strj;strj = stri-1-j;stri-j-1 = ch;puts(str);return 0;int main( )char str255;gets(str);invert(str);return 0;4编写函数,删除字符串中,从指定位置m开始的n个字符。删除成功,函数返回被删除字符串;否则返回空的值。提示:for(k=m , i=0 ; stri ; i+) strm+i=strm+n+i; strm+i=0;源程序:#includeint main( )char str255;int index,num;gets(str);printf(第几个开始:);scanf(%d,&index);printf(删除几个字符:);scanf(%d,&num);int i=0,j = 0;char ch;for (;(ch=stri)!=0;i+);for (j = 0;j i)str0 = 0;printf(被删除字符是:);puts(str);return 0;5编写一个程序,从键盘输入的字符串,删去非数字字符,转换成整型数输出。 提示:for(s=0 , i=0 , j=0 ; stri;i+) if(stri=0&stri=9) s=s*10+stri-0; 源程序:#includeint main( )char str255;printf(请输入:);gets(str);int i=0,j = 0;int s = 0;char ch;for (;(ch=stri)!=0;i+)if (ch = 0 & ch = 9)s = s * 10 + ch - 0;printf(删除非数字字符后:%dn,s);return 0;6用递归的方法编写一个函数sum(int n),求1至n的累加和。 提示:f(n)=n+f(n-1) 源程序:#includeint sum(int n) int a = 0;if (n = 1)a = 1;elsea = n + sum(n - 1);return a;int main( )int n;printf(从1至n的累加和,请输入n:);scanf(%d,&n);int s = sum(n);printf(从1至n的累加和为:%dn,s);return 0;第章变量存储类型与多文件系统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+);中使用的是刚刚定义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 = 18 3写出以下程序的执行结果。#include int t( ) 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 cx;if(fp=fopen( (1) )=NULL)return 0;while(cx=getchar( )!=$)fputc(cx,fp); (2) ;return 1;提示:第1个空格是打开文件读,第2个空格是关闭文件。答:(1) out.dat,a+ (2) fclose(fp)2下面的程序用来统计文件中字符的个数,请补全程序。#includeint main( ) FILE *fp; long num=0; if(fp=fopen(fname.dat,r)=NULL) printf(Cant open file!n);exit(0); while( (1) ) fgetc(fp); num+; printf(num=%dn,num); fclose(fp); return 1; 提示:第1个空格表示文件没有结束,循环将持续。答:(1) !feof(fp). 以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件中,用#作为结束输入的标志,请补全程序。#includevoid main( ) FILE *fp; char ch,fname10; printf(Input the name of filen); gets(fname); if(fp= )=NULL) printf(Cannot openn); exit(0); printf(Enter datan); while(ch=getchar( )!=#) fputc( ,fp); fclose(fp);提示:文件名是从键盘读入的,因而文件名是用变量表示的,文件是打开写。答:(1)fopen( out.dat,a+ ) (2)ch4下述程序从一个二进制文件中读入结构体数据,并把读出的数据显示在屏幕上。请补全程序。#include struct rec int a;float b;void recout(FILE *fp)struct rec r;dofread( (1) ,sizeof(struct rec), (2) ,fp);if

温馨提示

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

评论

0/150

提交评论