《2015冬程序设计基础(C)离线作业(共65页).doc》由会员分享,可在线阅读,更多相关《2015冬程序设计基础(C)离线作业(共65页).doc(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上浙江大学远程教育学院程序设计基础(C)课程作业姓名:夏林学 号:1年级:2015年秋学习中心:洞头学习中心第章 语言的基本构成程序调试题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 mai
2、n( ) 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()。调用了两个系统函数,分别为sc
3、anf和printf。程序中用到如下几个保留字:int, return。使用了如下几个用户自定义标示符:x, y, z, a, b, c.步骤3:编译并运行程序,程序运行时输入两个整数,20 40 ,观察程序运行的结果。答:问题出在main函数第5行这句: scanf(%d %dn,&a,&b); 对于scanf函数内有”n”,直接回车是无效的,建议去掉“n”: 变成: scanf(%d %d,&a,&b); 重新运行再输入,回车,得出结果是60程序运行结果,20+40=602 编辑、调试以下程序步骤1:在Visual C+环境下新建文件可用开始程序Microsoft Visual C+6.0
4、 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); /* 函数调用 */ print
5、f(%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; retur
6、n c;步骤5:点击编译图标,编译程序1-2.c 步骤4:点击执行图标 ,执行程序1-2.c ,当程序运行时,键盘输入20 40,按回车。20 4020 & 40=120 | 40=1您可以输入其它的整数,观察程序的执行结果。答:按照上述步骤,执行后发现程序错误,检查程序,发现两个问题:步骤二中第2句 #include 错误, 正确形式应该用双引号: #includeex1-2-2.c#includeex1-2-2.c 后一行增加 #includeex1-2-3.c完整程序运作如下:编译执行,输入20 40回车,得到输入0 和15,回车得到第章输入输出程序设计1 用printf输出一个中空的五
7、角星。答:#includeint main()printf( *n); printf( * *n); printf( * * n); printf(* * * * * *n); printf( * *n); printf( * * n); printf( * * * n); printf( * * * * n); printf( * * * * n); printf( * * n); 2 仿照例子2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。#includeint main()char xm80;printf(请输入您的姓名: n);scanf(%s,xm);printf( 您
8、好,%s 同学,欢迎来到浙江大学。n,xm); return 0; 3 从键盘输入十六进制整数,转化为八进制数输出。#includeint main()int a;printf(请输入一个十六进制整数: );scanf(%x,&a);printf( 转换成八进制输出为: %o n,a); return 0; 4 只定义两个整型数据并赋值,实现两个整型数的互换。#includeint main()int x,x1=158,x2=476;printf(交换前 x1= %d ,x2=%d n,x1,x2); x=x1;x1=x2;x2=x; printf(交换后 x1= %d ,x2=%d n,x1
9、,x2); return 0; 5 从键盘上输入一个整数,分别输出8、16进制数的程序。6 从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。#includeint main()int x,x0,y1,y2,y3;printf(请输入一个三位整数: );scanf(%d,&x);x0=x;y1=x%10;x=x/10; y2=x%10;x=x/10; y3=x%10;printf( %d的个位数为%d ,十位数为%d,百位数为%d 。 n,x0,y1,y2,y3); return 0; 7 以下程序输出结果是( )。#includevoid main() int i=010,j=10;
10、 printf(%d,%dn,+i,j- ); 答:结果是 9,108 运行程序,屏幕提示“您是一个学生吗”,您输入y或n进行回答,屏幕输出您的选项。#includeint main()char x;printf(您是一个学生吗?(请输入y/n): );scanf(%c,&x);if(x=y)printf(您是一个学生。n);else printf(您不是一个学生。n); return 0; 9 从键盘输入一个角度x,求10*sin(x)的值。#include#includeint main()double x,y,z,pi=3.;printf(请输入一个角度x: );scanf(%lf,&x
11、);y=x*pi/180;z=10*sin(y); printf( 10*sin(x)值为 %lf 。 n,z); return 0; 第章循环程序设计1以下for语句的循环次数是多少?int i,j=3;for(;i=j;i-,j-) printf(%d,i);答:循环了3次#include int main() int i,j=3; for(;i=j;i-,j-) printf(%d,i); return 0;2下面的语句显示输出6行6列的整数数组h的主对角线上的所有元素,请补充完整:for(int i=0;i 6 ; i+ )printf(%d, hii )3写出以下程序运行的结果,此程
12、序实现了什么功能?#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);答:运行结果是1,此程序用来统计数组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写出以下
13、程序运行后的输出结果。#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请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试检验。(1)#includevoid main( ) int i,s;i=1; s=0;while(i=100); while(i=100) s=s+i; i+; i+; printf(“1+2+3+.+99+100=%dn”,s);(2)#includev
14、oid main( ) int i,s;i=1;s=0;while(i=100) s=s+i; s=s+i; i+; i+; printf(“1+2+3+.+99+100=%dn”,s);(3)#includevoid main( ) int i=1,s; int i=1,s=0;while(i=100) ; 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 x,i=1,s=1;printf(请输入一个
15、基数: );scanf(%d,&x); printf(%d,i);for(i=3;i=x;i+=2)s*=i; printf(*%d,i);printf( = %d n,s); return 0; 8 输入一个510之间的整数n,求1!+2!+3!+n!。例如输入5,输出为:1!+2!+3!+5!=153#includevoid main() int i,n; long int a=1,sum=0; printf(请输入一个510之间的整数n:n); scanf(%d,&n); for(i=1;i=n;i+) a*=i; sum=sum+a; printf(1!+2!+3!+n!=%ldn ,
16、 sum);9在屏幕上输出以下内容1 12 123 1234 12345 #includevoid main() int i,j; for(i=0;i=9;i+) for(j=1;j=i;j+)printf(%d,j); printf(n ); 10 求2+4+6+98+100的和,用多种for表达式来完成。方法一:#includevoid main() int i,sum=0; for(i=2;i=100;i+=2) sum=sum+i; printf(2+4+6+98+100=%dn,sum);方法二:#includevoid main() int i,sum=0; for(i=1;i=1
17、00;i+) if(i%2=0) sum=sum+i; printf(2+4+6+98+100=%dn,sum); 11 输入一行字符,统计它有多少个字母?#includevoid main() char str100; int i,j,s=0; printf(请输入一行字符:n); for(i=1;i100;i+) stri=getchar(); if(stri=n) break; for(j=1;j=a&strj=A&strj=Z) s+; printf(字符中有%d个字母。n,s); 第章分支程序设计1输入若干整数给x,使用if语句输出x的绝对值,当输入0时结束。#includeint
18、main()int x;printf(请输入x值: );scanf(%d,&x);while(x)if(x0)printf( %d的绝对值是%d 。 n,x,x); elseprintf( %d的绝对值是%d 。 n,x,-x);printf(请输入x值: );scanf(%d,&x); return 0; 2 输入一批数,输出比相邻数大的数,当输入0时结束。#include#define N 1000void main() int numN; int i = 0; int j=1; printf(请输入需要比较的整数,以数字0结尾:n); scanf(%d, &numi); while(nu
19、mi!= 0) scanf(%d,&num+i); printf(比相邻数大的数字为:n); if (i = 1) printf(%d , num0); if (i1& num0num1) printf(%d , num0); for(; jnumj-1&numjnumj+1) printf(%d , numj); if(i1 &numi-1numi-2) printf(%d , numi-1); printf(n);3 将输入字符的大写字符转换成小写字符输出,小写字符原样输出。#includeint main()char s; printf(请输入一串字符:n);while(s=getcha
20、r()!=n)if(s=A&s=Z)s=s+32;putchar(s);printf(n); return 0;4 输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个数。#includeint main()char s;int dx=0,xx=0,sz=0,qt=0; printf(请输入一串字符:n);while(s=getchar()!=n)if(s=A&s=a&s=0&s=9)sz+;elseqt+;printf(小写字符有%d个,大写字符有%d个,数字字符有%d个,其他字符有%d个。n,xx,dx,sz,qt); return 0;5编写程序,计算分段函数:#
21、includeint main( ) double x,y; while(1) printf(请输入x的值:); scanf(%lf,&x); if(x=1) y=x+5; else if(x10) y=2*x; else y=3/(x-10); printf(当x=%lf时,y=%lfn,x,y); return 0;6根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。百分制五分制90 100580 89470 79360 692601#includeint main( ) int n; while(1) printf(请输入百分制成绩:); scanf(%d,&n); w
22、hile(n100) printf(请重新输入分数(0100之间):); scanf(%d,&n); if(n=90) printf(%d对应的五分制成绩为:5n,n); else if(n=80) printf(%d对应的五分制成绩为:4n,n); else if(n=70) printf(%d对应的五分制成绩为:3n,n); else if(n=60) printf(%d对应的五分制成绩为:2n,n); else printf(%d对应的五分制成绩为:1n,n); return 0;7、 用switch完成:读入一个实数x,再输入一整数,若输入是1,则计算sin(x),若输入2,则计算co
23、s(x),若输入3,则计算tan(x),若输入其他值,则显示错误信息。#include#includeint main( ) float x; int n; do printf(请输入一个实数x:); scanf(%f,&x); printf(请输入一个整数,选择运算方式(1.sinx,2.cosx,3.tanx):); scanf(%d,&n); switch(n) case 1:printf(x=%f,sinx=%fn,x,sin(x);break; case 2:printf(x=%f,cosx=%fn,x,cos(x);break; case 3:printf(x=%f,tanx=%f
24、n,x,tan(x);break; default:printf(输入错误!n);break; while(1);return 0;8、用switch完成:输入星期1 到星期5,输出它们对应的颜色星期1:blue星期2:red星期3:white星期4:yellow星期5:greenincludeint main( ) int x; do printf(请输入星期几(用数字15表示):); scanf(%d,&x); switch(x) case 1:printf(星期1:bluen);break; case 2:printf(星期2:redn);break; case 3:printf(星期3
25、:whiten);break; case 4:printf(星期4:yellown);break; case 5:printf(星期5:greenn);break; default:printf(输入错误!n);break; while(1);return 0;9、用switch完成:从键盘输入A、B、C、D四个等级中的一个,转化输出等级输出A优秀B良好C中等D及格E不及格#includeint main( ) char degree; printf(请输入等级(用A、B、C、D表示):); scanf(%c,°ree); switch(degree) case A:printf(优秀n
26、);break; case B:printf(良好n);break; case C:printf(中等n);break; case D:printf(合格n);break; case E:printf(不及格n);break; default:printf(输入错误!n);break; return 0;第章数组及其应用.从键盘输入12个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。#includeint main( ) int a12; int i,min,max; printf(请输入12个数:); for(i=0;i12;i+) sc
27、anf(%d,&ai); min=a0; max=a0; for(i=1;imax) max=ai; else if(aimin) min=ai; printf(最大值为 %d ,最小值为 %d 。n,max,min); return 0;. 采用遍历查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找出偶数。#includeint main( ) int a10=2,3,20,58,72,76,78,87,90,900; int i; printf(数组中的偶数为:); for(i=0;i10;i+) if(ai%2=0)printf(%d ,ai);
28、 printf(n); return 0;.采用折半查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找到87,然后进行删除。#includeint main( ) int a10=2,3,20,58,72,76,78,87,90,900; int i,mid,low=0,high=9,found; printf(输入要查找的数:); scanf(%d,&found); while(high=low) mid=(low+high)/2; if(amidfound) high=mid; else break; printf(%d的下标为%d n,found
29、,mid); printf(删除%d后,新数组为:,found); for(i=mid;i9;i+) ai=ai+1; for(i=0;i9;i+) printf(%d ,ai); printf( n); 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,
30、98,76,78,45,88,81,92,85;ave=aver(b);printf(ave=%fn,ave);提示:数组b的首地址传递给形参a,*(a+k)就是数组元素bk.答:计算数组b各元素的平均值,运行结果是ave=81.2阅读程序,写出程序的执行结果。#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
31、;提示:数组str的首地址传递给形参str,stra就是实参中的数组元素stra,当数组元素不为c时进行复制。 答:程序是删除数组中的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+) pri
32、ntf(%d ,bi);printf(n);return 0; 提示:循环体中if(bkx)bk+1=bk;elsebreak;如果bkx成立,执行语句bk+1=bk;表示数组元素b向后移,不满足时插入x,即从大到小排序。答:运行结果是5 54 4 41 1 1 11 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
33、)=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;#include int xn( int x,int n) int i,y ; for(y=1,i=0 ; in; i+) y=y*x;return y;int main( )int x,n;long int y; while(1) printf(请输入x的值: ); scanf(%d,&x); printf(请输入n的值: ); scanf(%d,&n); y=xn(x,n); printf(y=xn=%ld n,y ); return 0;2编写一个函数,计算对角线上元素之和。提示:for(s=0,i=0;in;i+) f