《程序设计基础C作业答案.docx》由会员分享,可在线阅读,更多相关《程序设计基础C作业答案.docx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序设计根底C作业第章 语言的根本构成一、选择题1 A 是构成C语言程序的根本单位。A函数 B过程 C子程序 D文件2D 是C语言供应的合法的数据类型关键字。AFloat Bsigned Cinteger DChar3以下选项中不合法的用户标识符是 C 。Aabcc Bfile CMain DPRINTF4以下选项中不合法的用户标识符是C 。Al23 Bprintf CA DDim5合法的语言长整型常数是 B 。AL B5712700 C0.054838743 D C语言中,要求运算数必需是整型的运算符是 B 。A% B / C D!以下选项中正确的整型常量是 A 。A12. B20 Cl,0
2、00 D0458以下选项中不正确的实型常量是 D 。A2.607E1 . C77.77 D456e2C语言中运算对象必需是整型的运算符是 B 。A B + C * D % 二、程序调试题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; retur
3、n 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由几个函数构成?调用了那几个系统函数?此程序中用到了哪几个保存字?哪几个用户自定义标识符?步骤3:编译并运行程序,程序运行时输入两个整数,20 40 ,视察程序运行的结果。
4、2 编辑、调试以下程序步骤1:在Visual C+环境下新建文件可用开始程序Microsoft Visual C+6.0 Microsoft Visual C+6.0 文件 新建文件 步骤2:在文本编辑器中输入以下C程序#include /*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/#includeint main( ) int and(int,int); /* 函数的说明,告知系统在主函数中要调用and函数 */ int or(int,int); /* 函数的说明,告知系统在主函数中要调用and函数 */int a,b,c; /* 变量的定义*/scanf(%d %d,&a
5、,&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
6、(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输出一个中空的五角星。2 仿按例子2.2,定义一个字符数组,从键盘输入一字符串,然后输出的程序。3 从键盘输入十六进制整数,转化为八进制数输出。4 只定义两个整型数据并赋值,实现两个整型数的互换。5 从键盘上输入一个整数,分别输出8、16进制数的程序。6 从键盘上输入一
7、个整数,分别输出它的个位数,十位数,百位数。7 以下程序输出结果是 。#includevoid main() int i=010,j=10; printf(%d,%dn,+i,j- ); 8 运行程序,屏幕提示“您是一个学生吗,您输入y或n进展答复,屏幕输出您的选项。9 从键盘输入一个角度x,求10*sin(x)的值。第章循环程序设计1执行语句for(i=0;i+5;);后,变量i 的值是 。A6 B5 C4 D02假设int i=0;以下语句计算1+2+10的是 。Awhiles+=i; Bfor;i=10;i+,s+=iCfor;i=10;s+=i,i+Dfor;i9;i+,s+=i3假设
8、int i,x; 那么语句 for(i=x=0;i9;i+=+x);的循环体要执行 次。10以下不是死循环的语句是 。Afor(;x+); Bwhile(1)x+;Cdoi+;while(1) Dfor(x=-10;x+;)4以下for语句的循环次数是多少?int i,j=3;for(;i=j;i-,j-) printf(%d,i);5下面的语句显示输出6行6列的整数数组h的主对角线上的全部元素,请补充完好:for(int i=0;i ; )printf(%d, )6写出以下程序运行的结果,此程序实现了什么功能?#includevoid main() int a10=2,4,0,-5,10,6
9、,-8,9,6,7; int i, count=0; for(i=0;i10;i+) if(ai=0) count+; else continue;printf(%dn , count);7写出以下程序的功能。#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;8写出以下程序运行后的输出结果。#includevoid main() int i,j; for(i=0;i6;i+) for(j=0;ji;j+)printf( );for(j
10、=0;j2*(5-i)-1;j+)printf(*);printf(n); 9请改正以下程序的错误,改正后的程序写在右边的空白处,并上机调试检验。(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( ) 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;whi
11、le(i=100) ; s=s+i; i+; printf(“1+2+3+.+99+100=%dn,s);10输入一个基数,例如输入9,输出为:求1*3*9的值。输出为:1*3*5*7*9=94511输入一个510之间的整数n,求1!+2!+3!+n!。例如输入5,输出为:1!+2!+3!+5!=15312在屏幕上输出以下内容1 12 123 1234 12345 123456 1234567 12345678 123456789 13求2+4+6+98+100的和,用多种for表达式来完成。14输入一行字符,统计它有多少个字母?第章分支程序设计1输入假设干整数给x,运用if语句输出x确实定值
12、,当输入0时完毕。2输入一批数,输出比相邻数大的数,当输入0时完毕。3将输入字符的大写字符转换成小写字符输出,小写字符原样输出。4输入一批字符,按回车时完毕,统计小写字符、大写字符、数字字符、或其它字符的个数。5编写程序,计算分段函数:6依据输入的百分制按五分制的成果输出。百分制及五分制之间的关系见下表。百分制五分制90 100580 89470 79360 6926017、用switch完成:读入一个实数x,再输入一整数,假设输入是1,那么计算sin(x),假设输入2,那么计算cos(x),假设输入3,那么计算tan(x),假设输入其他值,那么显示错误信息。8、用switch完成:输入星期1
13、 到星期5,输出它们对应的颜色星期1:blue星期2:red星期3:white星期4:yellow星期5:green9、用switch完成:从键盘输入A、B、C、D四个等级中的一个,转化输出等级输出A优秀B良好C中等D及格E不及格第章数组及其应用.从键盘输入12个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。.承受遍历查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找出偶数。用折半查找,在数组aSIZE=2, 3,20,58, 72, 76,78,87,90,900中,找到87,然后进展删除。第章函
14、数及其应用练习及理论一、阅读程序,写出程序运行的结果。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.2阅读程序,写出程序的执行结果。#include vo
15、id 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时进展复制。3写出以下程序的执行结果。#includeint sort(int b,int n,int x)int k;for(k=n-1;k=0;k-)if(bkx)bk+1=bk;e
16、lsebreak;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,即从大到小排序。4写出以下程序的执行结果。#includeint fun(int x) int p; if(x=0|x=1) return
17、 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)=35写出以下程序的执行结果,并说明其作用是什么?#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取余输出。二、程序设计1编
18、写一个函数,计算x的n次的平方。 提示:for(y=1,i=0;in;i+) y=y*x;2编写一个函数,计算对角线上元素之和。提示:for(s=0,i=0;in;i+) for(j=0;jn;j+) if(i=j) s=s+aij; 3编写一个函数int invertchar str ,将一个字符串的内容颠倒过来。提示:先求字符串str的长度n,for(i=0;i=0&stri=9) s=s*10+stri-0; 6用递归的方法编写一个函数sumint n,求1至n的累加和。 提示:f(n)=n+f(n-1) 第章变量存储类型及多文件系统1写出以下程序的执行结果。#includeint x;
19、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的变量。2写出以下程序的执行结果。#include int kk( ) int x = 4 ; static int y ; y = 5 ; x*= 2 ; y*= 2; return(x+y);void main() int j , s =
20、0 ; for ( j = 0 ; j 2 ; j+ ) s = kk ( ); printf( s = % d n ,s );提示:虽然两次调用函数kk(),但变量定义语句static int y ;只执行一次,而变量赋值语句每次都要执行。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( )属于“,号表达式,即两次调用函数
21、t( ),在函数t( )中,y为静态内部变量,因此语句static int y = 4 ;只执行一次。第章文件1下述程序从终端读入文本用$作为文本完毕标记复制到一个名为的新文件中,请补全程序。#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个空格是关闭文件。2下面的程序用来统计文件中字符的个数,请补全程序。#includeint main( ) FILE *fp; lon
22、g 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个空格表示文件没有完毕,循环将持续。. 以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件中,用#作为完毕输入的标记,请补全程序。#includevoid main( ) FILE *fp; char ch,fname10; printf(Input the name
23、 of filen); gets(fname); if(fp= )=NULL) printf(Cannot openn); exit(0); printf(Enter datan); while(ch=getchar( )!=#) fputc( ,fp); fclose(fp);提示:文件名是从键盘读入的,因此文件名是用变量表示的,文件是翻开写。4下述程序从一个二进制文件中读入构造体数据,并把读出的数据显示在屏幕上。请补全程序。#include struct rec int a;float b;void recout(FILE *fp)struct rec r;dofread( (1) ,si
24、zeof(struct rec), (2) ,fp);if( (3) ) (4) ;printf(%d,%f,r.a,r.b);while(1);void main() FILE *fp;fp=fopen(,rb);recout(fp);fclose(fp);提示:在fread语句中,(1)中为存放所读出构造数据的内存地址,当然此数据是赋给变量r,(2)中是读出构造体变量数据的个数,(3)是及循环中止有关的推断,(4)为中止循环。.从键盘输入一个字符串,并逐个将字符串的每个字符传送到磁盘文件l1.txt中,字符串的完毕标记为#。有一文本文件l1.txt,请编写一个程序将文件中的英文字母及数字字
25、符显示在屏幕上。提示:l2.txt中。x从0到360度的sin(x)值写入到文件中,并将大于0的值显示在屏幕上。第章 指针及数组1以下程序输出的结果是 。#include void f(int * x ) *x = 10 ; void main() int a,*p=&a; f(p); printf(%d,+(*p);A输出的值是随机值 B因输出语句错误而不能执行者 C输出值为10 D输出值为11提示:指针x指及指针p指向同一个变量,10赋给指针x所指的地址上的内容,+(*p)是指指针p所指地址上内容+。2以下程序片段中不正确的字符串赋值或初始化方式是 。Achar *str; str=str
26、ing; Bchar str7=s,t,r,i,n,g,0;Cchar str10; str=string; Dchar str =string; 提示:字符串赋值只能在初始化时进展。3如有定义:int x=2,*p=&x;以下哪些表达式的含义是不正确的。A*&p B *&x C&*p D&*x提示:指针可以作取地址运算,变量不能作取内容运算。4如有定义int a5;其中:0i5,不能表示数组元素的是 。A*a+i Ba5 Ca0 Dai提示:数组元素的下标从0开始。5假设有以下定义和语句,int a10,i;且0=i10,那么对数组元素地址的正确表示是 。Aa+ Ba+1 C*a+1 D&a
27、提示:一旦数组定义,数组的首地址是一个常量,不能作+运算,而a+i表示数组第i个元素的地址。 有以下定义及语句,那么对数组a元素的不正确引用的表达式是 。int a;*p2,j;for (j = 0 ; j 4 ; j+)pj=aj;Ap00 B*(a+3)4 C*(p1+2) D*(&a00+3)提示:p为指针数组,此题中aij、pij、*(pi+j)、*(*(p+i)+j)也都能表示数组元素,&a00等同于a0+0。二、程序阅读及填空题1分析以下程序,输出结果是 。#includevoid main() int *p1,x=10; float *p2,y=2.5; p1=&x; p2=&y
28、; printf(%d, %fn,+(*p1), (*p2)+ ); 提示:+都作用在内容上,前一项为哪一项先+再输出,后一项为哪一项先输出再+。2以下程序输出结果是 。#includevoid main() int a =1,2,3,4,5,6,*p=a; printf(%d,%dn,*p,*(p+3);提示:语句*(p+3)+=2;指p+3的地址上的内容加2,然后输出p及p+3的地址上内容。3以下程序输出结果是 。#includevoid main() int a =1,2,3,4,5,6; int x,y,*p; p=&a0; x=*(p+2); y=*(p+4); printf(*p=
29、%d,x=%d,y= %dn,*p,x,y);提示:p+2是指&a2。4以下程序输出结果是 。#includevoid main()int a =10,20,30,40,50,60; int *p;p=a;printf(*%d,n,*p);printf(*%d,n,*(+p);printf(*%d,n,*+p);printf(*%d,n,*(p-);p+=3;printf(*%d,%d n,*p,*(a+3);提示:*(+p)、*+p都表示指针p向大地址方向挪动,然后再取内容,要留意的是后一语句的输出受前一语句的影响。5以下程序输出的结果是 。#include void del( char *
30、str )int a, b ;for(a = b = 0 ; stra!=0; a+ )if(*(str+a)!=c)*(str+b+)=*(str+a);strb=0;void main( )char str =abcdef ;del(str);printf(str =%s , str );提示:在函数del中str+a地址上的内容不为字符c时不复制,事实上是指删除指针str所指的字符串中的字符c。6以下程序输出的结果是 。#include#includevoid fun( char *w ,int m) char s, *p1 , *p2; p1 = w; p2= w+m-1; while
31、(p1p2) s = *p1+; *p1= *p2- ; *p2 = s ;void main( ) char a = ABCDEFG; fun(a ,strlen(a); puts(a); 提示:当执行s=*p1+;语句时,指针p1所指的地址上内容赋给s时,指针p1后移,语句*p1= *p2-;指针p2所指的内容赋给p1所指的地址上后,p2前移后再执行*p2 = s语句。7以下程序输出的结果是( )。#include void main( ) int a33 = 2,0,8,4,6; int i,*p = &a00; for(i = 0;i3;i+) if (i = 0) aii+1=*p+
32、1; else +p; printf(%d,*p); printf(n);提示:当i=0时,把*p+1值3赋给a01,然后输出2,当i=1时,+p后p指向a01,输出a01,当i=2时,+p,指针p指向a02。 8阅读以下程序,把应填的内容写入空格处。本函数是应用二分法查找key值,数组中元素值按递增排序,假设找到key那么返回对应的下标,否那么返回-1。int binary(double a, int n, double key) int low,high,mid;low=0;high=n-1;while (1) mid=(low+high)/2; if(keyamid) (3) ;else
33、 (4) ;return(-1); 提示:用low、high、mid分别表示数组a低地址端、高地址端、中间元素的下标,只要低地址端下标小于高地址端下标循环始终持续,假设中间元素大于所查找的数,表示所查找的数在以low、high为边界的左侧,假设中间元素小于所查找的数,表示所查找的数在以low、high为边界的右侧,如都不是表示已找到。9下述函数从一个数组v中删除值为key的元素。数组的元素个数由指针n指明,请填空。void delnode(double v,int *n)int i,j,k=-1; for(i= (1) ; (2) ;i-) if(vi=key) k+; for(j=i; (3) ;j+) vj=vj+1; if(k=0) *n= (4) 提示:由于在第1个for循环中为i-,因此循环确定是从数组下标最大的元素*n-1开始,循环的条件是i=0,假设找到要删除的元素,后面的元素依次向前移,始终移到最终v*n-1,k标记删除的次数,*n存放最终数组中元素的个数。三、编程题 1用指针的方法编写一函数,交换从键盘读入的两个整型数a,b。提示:void s *p1,int *p2)int temp;temp=*p1;*p1=*p2;*p2=temp;2编写一函数void