12程序设计基础C离线作业答案_第1页
12程序设计基础C离线作业答案_第2页
12程序设计基础C离线作业答案_第3页
12程序设计基础C离线作业答案_第4页
12程序设计基础C离线作业答案_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计基础(c)作业第章 语言的基本构成、程序调试题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; return z; int main( ) int add(int,int); /* 函数的说明,告诉系统在主函

2、数中要调用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由几个函数构成?由2个函数构成调用了那几个系统函数?调用2个系统函数,分别是scanf和printf此程序中用到了哪几个保留字?哪几个用户自定义标识符?保留字:int,return 自定义表示符:z,x,y,a

3、,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<stdio.h> /*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/#include<ex1-2-2.c>int main( ) int and(int,int);

4、 /* 函数的说明,告诉系统在主函数中要调用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=%

5、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=12

6、0 | 40=1您可以输入其它的整数,观察程序的执行结果。3 03 && 0=03 | 0=0第章输入输出程序设计1 用printf输出一个中空的五角星。#include <stdio.h>void main()printf("t * n");printf("t * * n");printf("t * * n");printf("t* * * * * * * * n");printf("t * * n");printf("t * * n");pri

7、ntf("t * * n");printf("t * * * n");printf("t * * * * n");printf("t* *n");2 仿照例子2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。#include <stdio.h>int main()char s255;printf("请输入:");scanf("%s",s);printf("你输入的是:%sn",s);return 0;3 从键盘输入十六进制整数,转化

8、为八进制数输出。#include <stdio.h>int main()int a;printf("请输入一个十六进制数:");scanf("%x",&a);printf("这个数转化为八进制数为%on",a);return 0;4 只定义两个整型数据并赋值,实现两个整型数的互换。#include <stdio.h>int main()int a = 10; int b = 20;a = ab;b = ba;a = ab;printf("a = %d , b = %dn",a,b);

9、return 0;5 从键盘上输入一个整数,分别输出8、16进制数的程序。#include <stdio.h>int main()int a;printf("请输入一个十进制数:");scanf("%d",&a);printf("这个数转化为八进制数为%on",a);printf("这个数转化为八进制数为%xn",a);return 0;6 从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。#include<stdio.h>int main()int a;scanf(&quo

10、t;%d",&a);printf("百位数为%dn",a/100);printf("十位数为%dn",a%100/10);printf("个位数为%dn",a%10);return 0;7 以下程序输出结果是( 9,10 )。#include<stdio.h>void main() int i=010,j=10; printf("%d,%dn",+i,j- ); 8 运行程序,屏幕提示“您是一个学生吗”,您输入y或n进行回答,屏幕输出您的选项。#include<stdio.h&g

11、t;int 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<stdio.h>#include <math.h>int main()int a;scanf("%d",&a)

12、;double r = 10 * sin(a);printf("%fn",r);return 0;第章循环程序设计-4以下for语句的循环次数是多少?int i,j=3;for(;i=j;i-,j-) printf("%d",i);执行了3次-5下面的语句显示输出6行6列的整数数组h的主对角线上的所有元素,请补充完整:for(int i=0;i< 6 ; i+ )printf("%d", hii )-6写出以下程序运行的结果,此程序实现了什么功能?#include<stdio.h>void main() int a1

13、0=2,4,0,-5,10,6,-8,9,6,7; int i, count=0; for(i=0;i<10;i+) if(ai=0) count+; else continue;printf("%dn ", count);该程序实现的功能为:计算数组a中包含几个0-7写出以下程序的功能。#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;此程序实现功能:将数组颠倒-8写出

14、以下程序运行后的输出结果。#include<stdio.h>void main() 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"); 输出倒三角形* * * * *9请改正下列程序的错误,改正后的程序写在右边的空白处,并上机调试检验。(1)#include<stdio.h>void main( ) int i,s;i=1; s=0;#includ

15、e<stdio.h>void main( ) int i,s;i=1; s=0;while(i<=100) s=s+i; i+; printf(“1+2+3+.+99+100=%dn”,s);while(i<=100); s=s+i; i+; printf(“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; i+;printf(“1+2+3+.+99+100=%dn”,s);while(i<=100) s=s+i

16、; i+; printf(“1+2+3+.+99+100=%dn”,s);(3)#include<stdio.h>void main( )int s = 0; int i=1,s;while(i<=100) ; s=s+i; i+; printf(“1+2+3+.+99+100=%dn”,s);10输入一个基数,例如输入9,输出为:求1*3*9的值。输出为:1*3*5*7*9=945#include<stdio.h>int main()int a,b;b = 1;scanf("%d",&a);for(int i = 1;i <=

17、a; i+=2)b = b * i;printf("%dn",b);return 0;11输入一个510之间的整数n,求1!+2!+3!+n!。例如输入5,输出为:1!+2!+3!+5!=153#include<stdio.h>int 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",

18、c); return 0;12在屏幕上输出以下内容1 12 123 1234 12345 123456 1234567 12345678 123456789 #include<stdio.h>int main()for(int a = 1; a <= 9; a+)for(int b = 1; b <= a; b+)printf("%d",b);printf("n");return 0;13求2+4+6+98+100的和,用多种for表达式来完成。#include<stdio.h>int main()int sum =

19、0;for(int a = 2; a <= 100; a+=2)sum += a;printf("%d",sum);return 0;14输入一行字符,统计它有多少个字母?#include<stdio.h>int main()int count = 0;char s255;scanf("%s",s);for(int i = 0; i < 255; i+)if(si >= 'a' && si <= 'z' | si >= 'a' &&

20、si <= 'z')count+;printf("%d",count);return 0;第章分支程序设计1输入若干整数给x,使用if语句输出x的绝对值,当输入0时结束。#include<stdio.h>int main()int x;scanf("%d",&x);for (;x;scanf("%d",&x)if ( x > 0)printf("%dn",x);elseprintf("%dn",-x);return 0;2输入一批数,输出比

21、相邻数大的数,当输入0时结束。#include<stdio.h>int 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将输入字符的大写字符转换成小写字符输出,小写字符原样输出。#include<stdio.h>int main()char c;while (c = getchar() != 'n')if (

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

23、= 'a' && c <= 'z')xx+;else if (c >= '0' && c <= '9')sz+;elseqt+;printf("包含大写字母%d个,小写字母%d个,数字%d个,其他字符%d个.n",dx,xx,sz,qt);return 0;5编写程序,计算分段函数:#include<stdio.h>int main()double x,y;scanf("%f",&x);if (x <= 1)y =

24、x + 5;else if (x < 10)y = 2 * x;elsey = 3/(x-10);printf("%f",y);return 0;6根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。百分制五分制90 100580 89470 79360 692<601#include<stdio.h>int main()int a;scanf("%d",&a);if (a > 90)printf("5n");else if (a > 80)printf("4n&q

25、uot;);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<stdio.h>#include <math.h>int main()int a,b;scanf("%d,%d"

26、;,&a,&b);switch(a)case 1:printf("y=sin(x)=%f",sin(b);break;case 2:printf("y=cos(x)=%f",cos(b);break;case 3 :printf("y=tan(x)=%f",tan(b);break;default:printf("error");break;return 0;8、用switch完成:输入星期1 到星期5,输出它们对应的颜色星期1:blue星期2:red星期3:white星期4:yellow星期5:g

27、reen#include<stdio.h>int main()int a;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;d

28、efault:printf("errorn");break;return 0;9、用switch完成:从键盘输入a、b、c、d四个等级中的一个,转化输出等级输出a优秀b良好c中等d及格e不及格#include<stdio.h>int main()char a;scanf("%s",&a);switch(a)case 'a':printf("优秀n");break;case 'b':printf("良好n");break;case 'c':print

29、f("中等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,找出最大和最小数。#include<stdio.h>int main()int a12;for (int i = 0; i <

30、 12; i+)scanf("%d",&ai);int max=a0,min=a0;for (int j = 1; j < 12; j+)if (aj > 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<stdio.h>#define size 100int main()int asiz

31、e = 2,3,20,58,72,76,78,87,90,900;for (int i = 0; i < 10; i+)if (ai % 2 = 0)printf("%dt",ai);return 0;.采用折半查找,在数组asize=2, 3,20,58, 72, 76,78,87,90,900中,找到87,然后进行删除。#include<stdio.h>#define size 11#define found 87int main()int asize = 2, 3,20,58, 72, 76,78,87,90,900;int low = 0,high

32、 = size-1,mid;mid = (low + high) / 2;while (low < high)if (amid < found)low = mid;mid = (high + low) / 2;else if (amid > found)high = mid;mid = (high + low) / 2;elsebreak;for (int j = mid; j < 9; j+)aj=aj+1;return 0;第章函数及其应用练习与实践一、阅读程序,写出程序运行的结果。1写出以下程序的执行结果。#include<stdio.h>float

33、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)就是数组元素bk.81.0000002阅读程序,写出程序的执行结果。#include<stdio.h> void abc( char s

34、tr )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写出以下程序的执行结果。#include<stdio.h>int sor

35、t(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;j+) printf("%d ",bi);printf("n");return 0; 提示:循环体中if(bk<x)bk+1=bk;elsebreak;如果bk&

36、lt;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( )printf("n%d",fun(9);return 0; 提示:fun(9)=9-fun(7),.,fun(1)=375写出以下程序的执行结果,并说明其作用是什么?#include<stdio.

37、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取余输出,然后数据依次出栈对8取余输出。1432 二、程序设计1编写一个函数,计算x的n次的平方。 提示:for(y=1,i=0;i<n;i+) y=y*x;#include<stdio.h>int main( )int x,n,y,

38、i;scanf("%d%d",&x,&n);for(y=1,i=0;i<n;i+)y = y * x;printf("%d的%d次方是:%dn",x,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>int main( )int a1010;int i = 0,j=0;int sum = 0;for (i = 0; i < 10; i+)for(

39、j = 0;j < 10; j+)aij = (i+1)*(j+1);printf("%dt",aij);printf("n");for (i=0;i<10;i+)for (j=0;j<10;j+)if (i = j)sum += aij;printf("对角线和为%dn",sum);return 0;3编写一个函数int invert(char str ),将一个字符串的内容颠倒过来。提示:先求字符串str的长度n,for(i=0;i<n/2;i+)ai与an-1-i交换#include<stdio.h

40、>int 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+

41、) strm+i=strm+n+i; strm+i=0;#include<stdio.h>int main( )char str255;int index,num;gets(str);scanf("%d,%d",&index,&num);int i=0,j = 0;char ch;for (;(ch=stri)!='0'i+);for (j = 0;j<num;j+)strj = strindex+j;strj = '0'if (index > i)str0 = '0'puts(str)

42、;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>int main( )char str255;gets(str);int i=0,j = 0;int s = 0;char ch;for (;(ch=stri)!='0'i+)if (ch >= '0' && ch <= '9

43、')s = s * 10 + ch - '0'printf("%dn",s);return 0;6用递归的方法编写一个函数sum(int n),求1至n的累加和。 提示:f(n)=n+f(n-1) #include<stdio.h>int sum(int n) int a = 0;if (n = 1)a = 1;elsea = n + sum(n - 1);return a;int main( )int n;scanf("%d",&n);int s = sum(n);printf("%dn"

44、,s);return 0;第章变量存储类型与多文件系统1写出以下程序的执行结果。#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的变

45、量。1,1 2写出以下程序的执行结果。#include<stdio.h> 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写出以下程序的执行结果。#

46、include<stdio.h> 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的

47、新文件中,请补全程序。#include <stdio.h>int main()file *fp;char cx;if(fp=fopen( "out.dat","a+" )=null)return 0;while(cx=getchar( )!='$')fputc(cx,fp); fclose(fp) ;return 1;提示:第1个空格是打开文件读,第2个空格是关闭文件。2下面的程序用来统计文件中字符的个数,请补全程序。#include<stdio.h>int main( ) file *fp; long num=0

48、; if(fp=fopen("fname.dat","r")=null) printf("can't open file!n");exit(0); while( !feof(fp) ) fgetc(fp); num+; printf("num=%dn",num); fclose(fp); return 1; 提示:第1个空格表示文件没有结束,循环将持续。. 以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件中,用#作为结束输入的标志,请补全程序。#include<stdio

49、.h>void main( ) file *fp; char ch,fname10; printf("input the name of filen"); gets(fname); if(fp= fopen( "out.dat","a+" ) )=null) printf("cannot openn"); exit(0); printf("enter datan"); while(ch=getchar( )!='#') fputc( ch ,fp); fclose(fp);

50、提示:文件名是从键盘读入的,因而文件名是用变量表示的,文件是打开写。4下述程序从一个二进制文件中读入结构体数据,并把读出的数据显示在屏幕上。请补全程序。#include <stdio.h>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;fp=fopen(&q

51、uot;file.dat","rb");recout(fp);fclose(fp);提示:在fread语句中,(1)中为存放所读出结构数据的内存地址,当然此数据是赋给变量r,(2)中是读出结构体变量数据的个数,(3)是与循环中止有关的判断,(4)为中止循环。.从键盘输入一个字符串,并逐个将字符串的每个字符传送到磁盘文件"l1.txt"中,字符串的结束标记为"#"。#include <stdio.h>#include <stdlib.h>void main() file *fp;char ch;fp=f

52、open("11.txt","ab+");if (fp = null)printf("open file failed!");exit(0);while (ch = getchar() != '#')fputc(ch,fp);fclose(fp);有一文本文件l1.txt,请编写一个程序将文件中的英文字母及数字字符显示在屏幕上。提示:#include <stdio.h>#include <stdlib.h>void main() file *fp;char ch;fp=fopen("11.txt","rb");if (fp = null)printf("open file failed!");exit(0);while (!feof(fp)ch = fgetc(fp);if (ch >= 'a' && ch <= 'z' | ch >= 'a' && ch <= 'z' | ch >= '0' && ch <= 

温馨提示

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

评论

0/150

提交评论