2015冬程序设计基础(C)离线作业_第1页
2015冬程序设计基础(C)离线作业_第2页
2015冬程序设计基础(C)离线作业_第3页
2015冬程序设计基础(C)离线作业_第4页
2015冬程序设计基础(C)离线作业_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

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<stdio.h> /*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/int add(int x,int y) int z; z=x+y; re

2、turn 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由几个函数构成?调用了那几个系统函数?此程序中用到了哪几个保留字?哪几个用户自定义标识符?答:文件ex

3、1-1.c由两个函数构成,分别是add()和主函数main()。调用了两个系统函数,分别为scanf和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); 重新运行再输

4、入,回车,得出结果是60程序运行结果,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<stdio.h> /*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/#include<ex1-2-2.c>int main( ) int and(int,int); /* 函数的说明,告诉系统在主函数中要调用and函

5、数 */ 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:文件 新建

6、文件 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您可以输入其它的整数,观察程序的执行

7、结果。答:按照上述步骤,执行后发现程序错误,检查程序,发现两个问题:步骤二中第2句 #include<ex1-2-2.c> 错误, 正确形式应该用双引号: #include"ex1-2-2.c"#include"ex1-2-2.c" 后一行增加 #include"ex1-2-3.c"完整程序运作如下:编译执行,输入20 40回车,得到输入0 和15,回车得到第章输入输出程序设计1 用printf输出一个中空的五角星。答:#include<stdio.h>int main()printf(" *n&qu

8、ot;); printf(" * *n"); printf(" * * n"); printf("* * * * * *n"); printf(" * *n"); printf(" * * n"); printf(" * * * n"); printf(" * * * * n"); printf(" * * * * n"); printf(" * * n"); 2 仿照例子2.2,定义一个字符数组,从键盘输入一字符串

9、,然后输出的程序。#include<stdio.h>int main()char xm80;printf("请输入您的姓名: n");scanf("%s",xm);printf(" 您好,%s 同学,欢迎来到浙江大学。n",xm); return 0; 3 从键盘输入十六进制整数,转化为八进制数输出。#include<stdio.h>int main()int a;printf("请输入一个十六进制整数: ");scanf("%x",&a);printf(&quo

10、t; 转换成八进制输出为: %o n",a); return 0; 4 只定义两个整型数据并赋值,实现两个整型数的互换。#include<stdio.h>int 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,x2); return 0; 5 从键盘上输入一个整数,分别输出8、16进制数的程序。6 从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。#i

11、nclude<stdio.h>int 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 以下程序输出结果是( )。#include<stdio.h>void main() int i=010,j=10; printf

12、("%d,%dn",+i,j- ); 答:结果是 9,108 运行程序,屏幕提示“您是一个学生吗”,您输入y或n进行回答,屏幕输出您的选项。#include<stdio.h>int main()char x;printf("您是一个学生吗?(请输入y/n): ");scanf("%c",&x);if(x='y')printf("您是一个学生。n");else printf("您不是一个学生。n"); return 0; 9 从键盘输入一个角度x,求10*sin

13、(x)的值。#include<stdio.h>#include<math.h>int main()double x,y,z,pi=3.;printf("请输入一个角度x: ");scanf("%lf",&x);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);答:循环了

14、3次#include<stdio.h> 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写出以下程序运行的结果,此程序实现了什么功能?#include<stdio.h>void main() int a10=2,4,0,-5,10,6,-8,9,6,7; int i, count=0; fo

15、r(i=0;i<10;i+) if(ai=0) count+; else continue;printf("%dn ", count);答:运行结果是1,此程序用来统计数组a中0的数量。4写出以下程序的功能。#include<stdio.h>void main()int a10=2,4,0,-5,10,6,-8,9,6,7,tmp,k;for (k=0;k<10/2;k+) tmp=ak; ak=a10-k-1;a10-k-1=tmp;答:数组倒序功能。5写出以下程序运行后的输出结果。#include<stdio.h>void main(

16、) int i,j; for(i=0;i<6;i+) for(j=0;j<i;j+)printf(" ");for(j=0;j<2*(5-i)-1;j+)printf("*");printf("n"); 答:执行结果是一个*组成的倒三角形6请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试检验。(1)#include<stdio.h>void main( ) int i,s;i=1; s=0;while(i<=100); while(i<=100) s=s+i; i+; i+; p

17、rintf(“1+2+3+.+99+100=%dn”,s);(2)#include<stdio.h>void 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)#include<stdio.h>void 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 输入一

18、个基数,例如输入9,输出为:求1*3*9的值。输出为:1*3*5*7*9=945#include<stdio.h>int main()int x,i=1,s=1;printf("请输入一个基数: ");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

19、,输出为:1!+2!+3!+5!=153#include<stdio.h>void 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 ", sum);9在屏幕上输出以下内容1 12 123 1234 12345 #include<stdio.h>void main() in

20、t 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表达式来完成。方法一:#include<stdio.h>void main() int i,sum=0; for(i=2;i<=100;i+=2) sum=sum+i; printf("2+4+6+98+100=%dn",sum);方法二:#include<stdio.h>void main() int i

21、,sum=0; for(i=1;i<=100;i+) if(i%2=0) sum=sum+i; printf("2+4+6+98+100=%dn",sum); 11 输入一行字符,统计它有多少个字母?#include<stdio.h>void main() char str100; int i,j,s=0; printf("请输入一行字符:n"); for(i=1;i<100;i+) stri=getchar(); if(stri='n') break; for(j=1;j<i;j+) if(strj>

22、='a'&&strj<='z')|(strj>='A'&&strj<='Z') s+; printf("字符中有%d个字母。n",s); 第章分支程序设计1输入若干整数给x,使用if语句输出x的绝对值,当输入0时结束。#include<stdio.h>int main()int x;printf("请输入x值: ");scanf("%d",&x);while(x)if(x>0)printf(&qu

23、ot; %d的绝对值是%d 。 n",x,x); elseprintf(" %d的绝对值是%d 。 n",x,-x);printf("请输入x值: ");scanf("%d",&x); return 0; 2 输入一批数,输出比相邻数大的数,当输入0时结束。#include<stdio.h>#define N 1000void main() int numN; int i = 0; int j=1; printf("请输入需要比较的整数,以数字0结尾:n"); scanf("

24、%d", &numi); while(numi!= 0) scanf("%d",&num+i); printf("比相邻数大的数字为:n"); if (i = 1) printf("%d ", num0); if (i>1&& num0>num1) printf("%d ", num0); for(; j<i-1; j+) if (numj>numj-1&&numj>numj+1) printf("%d ",

25、 numj); if(i>1 &&numi-1>numi-2) printf("%d ", numi-1); printf("n");3 将输入字符的大写字符转换成小写字符输出,小写字符原样输出。#include<stdio.h>int main()char s; printf("请输入一串字符:n");while(s=getchar()!='n')if(s>='A'&&s<='Z')s=s+32;putchar(s);

26、printf("n"); return 0;4 输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个数。#include<stdio.h>int main()char s;int dx=0,xx=0,sz=0,qt=0; printf("请输入一串字符:n");while(s=getchar()!='n')if(s>='A'&&s<='Z')dx+;else if(s>='a'&&s<='z&

27、#39;)xx+;else if(s>='0'&&s<='9')sz+;elseqt+;printf("小写字符有%d个,大写字符有%d个,数字字符有%d个,其他字符有%d个。n",xx,dx,sz,qt); return 0;5编写程序,计算分段函数:#include<stdio.h>int main( ) double x,y; while(1) printf("请输入x的值:"); scanf("%lf",&x); if(x<=1) y=x+5

28、; else if(x<10) y=2*x; else y=3/(x-10); printf("当x=%lf时,y=%lfn",x,y); return 0;6根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。百分制五分制90 100580 89470 79360 692<601#include<stdio.h>int main( ) int n; while(1) printf("请输入百分制成绩:"); scanf("%d",&n); while(n<0|n>100)

29、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(&

30、quot;%d对应的五分制成绩为:1n",n); return 0;7、 用switch完成:读入一个实数x,再输入一整数,若输入是1,则计算sin(x),若输入2,则计算cos(x),若输入3,则计算tan(x),若输入其他值,则显示错误信息。#include<stdio.h>#include<math.h>int main( ) float x; int n; do printf("请输入一个实数x:"); scanf("%f",&x); printf("请输入一个整数,选择运算方式(1.sinx,

31、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=%fn",x,tan(x);break; default:printf("输入错误!n");break; while(1);return 0;8、用switc

32、h完成:输入星期1 到星期5,输出它们对应的颜色星期1:blue星期2:red星期3:white星期4:yellow星期5:greeninclude<stdio.h>int 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:

33、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不及格#include<stdio.h>int main( ) char degree; printf("请输入等级(用A、B

34、、C、D表示):"); scanf("%c",&degree); switch(degree) case 'A':printf("优秀n");break; case 'B':printf("良好n");break; case 'C':printf("中等n");break; case 'D':printf("合格n");break; case 'E':printf("不及格n")

35、;break; default:printf("输入错误!n");break; return 0;第章数组及其应用.从键盘输入12个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。#include<stdio.h>int main( ) int a12; int i,min,max; printf("请输入12个数:"); for(i=0;i<12;i+) scanf("%d",&ai); min=a0; max=a0; for(i=1;i<12;i+

36、) if(ai>max) max=ai; else if(ai<min) min=ai; printf("最大值为 %d ,最小值为 %d 。n",max,min); return 0;. 采用遍历查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找出偶数。#include<stdio.h>int main( ) int a10=2,3,20,58,72,76,78,87,90,900; int i; printf("数组中的偶数为:"); for(i=0;i<10;i+) if(ai

37、%2=0)printf("%d ",ai); printf("n"); return 0;.采用折半查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找到87,然后进行删除。#include<stdio.h>int 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(

38、high>=low) mid=(low+high)/2; if(amid<found) low=mid; else if(amid>found) high=mid; else break; printf("%d的下标为%d n",found,mid); printf("删除%d后,新数组为:",found); for(i=mid;i<9;i+) ai=ai+1; for(i=0;i<9;i+) printf("%d ",ai); printf(" n"); return 0;第章函数及

39、其应用练习与实践一、阅读程序,写出程序运行的结果。1写出以下程序的执行结果。#include<stdio.h>float aver(int a) int k,sum=0;float ave;for(k=0;k<10;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)就是数组元素b

40、k.答:计算数组b各元素的平均值,运行结果是ave=81.2阅读程序,写出程序的执行结果。#include<stdio.h> 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,s

41、tra就是实参中的数组元素stra,当数组元素不为c时进行复制。 答:程序是删除数组中的c。 运行结果是str =abdef3写出以下程序的执行结果。#include<stdio.h>int sort(int b,int n,int x)int k;for(k=n-1;k>=0;k-)if(bk<x)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;i<5;i+)sort(b,i,ai);for(j=0;j<=i

42、;j+) printf("%d ",bi);printf("n");return 0; 提示:循环体中if(bk<x)bk+1=bk;elsebreak;如果bk<x成立,执行语句bk+1=bk;表示数组元素b向后移,不满足时插入x,即从大到小排序。答:运行结果是5 54 4 41 1 1 11 1 1 1 14写出以下程序的执行结果。#include<stdio.h>int fun(int x) int p; if(x=0|x=1) return 3; else p=x-fun(x-2); return p;int main(

43、)printf("n%d",fun(9);return 0; 提示:fun(9)=9-fun(7),.,fun(1)=3答:运行结果是75写出以下程序的执行结果,并说明其作用是什么?#include<stdio.h>int 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取余输出,然后

44、数据依次出栈对8取余输出。答:运行结果是1432二、程序设计1编写一个函数,计算x的n次的平方。 提示:for(y=1,i=0;i<n;i+) y=y*x;#include<stdio.h> int xn( int x,int n) int i,y ; for(y=1,i=0 ; i<n; i+) y=y*x;return y;int main( )int x,n;long int y; while(1) printf("请输入x的值:" ); scanf("%d",&x); printf("请输入n的值:&qu

45、ot; ); scanf("%d",&n); y=xn(x,n); printf("y=xn=%ld n",y ); return 0;2编写一个函数,计算对角线上元素之和。提示:for(s=0,i=0;i<n;i+) for(j=0;j<n;j+) if(i=j) s=s+aij; #include<stdio.h> #define SIZE 100int trisum( int aSIZESIZE,int n) int i,j,s ; for(i=0,s=0; i<n; i+) for(j=0 ; j<n;

46、 j+) if(i=j) s=s+aij;return s;int main( )int aSIZESIZE;int i,j,n;while(1)printf("Please input the size:" );scanf("%d",&n);printf("Please input the numbers:" );for(i=0; i<n; i+) for(j=0 ; j<n; j+) scanf("%d",&aij);printf("Sum of diagonal elem

47、ents is %d n",trisum(a,n);return 0;3编写一个函数int invert(char str ),将一个字符串的内容颠倒过来。提示:先求字符串str的长度n,for(i=0;i<n/2;i+)ai与an-1-i交换#include<stdio.h> #include<string.h> #define SIZE 100int diandao( char str) int i,n ; char temp; n=strlen(str); for(i=0 ; i<=n/2; i+) temp=stri; stri=strn-

48、1-i; strn-1-i=temp; puts(str);return 0;int main( )char strSIZE;int i;while(1)printf("请输入一个字符串: " );gets(str);printf("颠倒后的字符串为: ");diandao(str);printf("n" );return 0;4编写函数,删除字符串中,从指定位置m开始的n个字符。删除成功,函数返回被删除字符串;否则返回空的值。提示:for(k=m , i=0 ; stri ; i+) strm+i=strm+n+i; strm+i=

49、0;#include<stdio.h> #define SIZE 100char *delet(char str,int m,int n) int i; for(i=0 ; strm-1+n+i!='0' i+) strm-1+i=strm-1+n+i; strm-1+i='0' return str;int main( )char strSIZE;int i,m,n;printf("请输入一个字符串: n" );gets(str);printf("请问要从第几个字符开始删除? ");scanf("%

50、d",&m);printf("请问要删除几个字符? ");scanf("%d",&n);printf("删除后的内容为:%s n",delet(str,m,n);return 0;5编写一个程序,从键盘输入的字符串,删去非数字字符,转换成整型数输出。 提示:for(s=0 , i=0 , j=0 ; stri;i+) if(stri>=0&&stri<=9) s=s*10+stri-0; #include<stdio.h> #include<string.h>

51、; #define SIZE 100int convert(char str) int i; long int s; for(i=0,s=0; stri!='0' i+) if(stri<='9'&&stri>='0') s=10*s+stri-'0' return s;void main( )char strSIZE;while(1)printf("请输入一个字符串: " );gets(str);printf("删去非数字字符,转换后的整型数为:%d n",co

52、nvert(str);6用递归的方法编写一个函数sum(int n),求1至n的累加和。 提示:f(n)=n+f(n-1) #include<stdio.h> int sum(int n) int s;if(n<=1)s=1;elses=n+sum(n-1); return s;void main( )int n;while(1)printf("请输入n: " );scanf("%d",&n);printf("当n=%d时,1至n的累加和为:%d n",n,sum(n);第章变量存储类型与多文件系统1写出以下

53、程序的执行结果。#include<stdio.h>int 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<stdio.h>

温馨提示

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

评论

0/150

提交评论