程序设计基础(C)作业答案(带原题)_第1页
程序设计基础(C)作业答案(带原题)_第2页
程序设计基础(C)作业答案(带原题)_第3页
程序设计基础(C)作业答案(带原题)_第4页
程序设计基础(C)作业答案(带原题)_第5页
已阅读5页,还剩39页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

程序设计基础(C)作业答案(带原题)程序设计基础(C)作业答案(带原题)程序设计基础(C)作业答案(带原题)xxx公司程序设计基础(C)作业答案(带原题)文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度《程序设计基础(C)》作业C语言的基本构成一、选择题1.(A)是构成C语言程序的基本单位。(A)函数 (B)过程(C)子程序 (D)文件2.(B)是C语言提供的合法的数据类型关键字。(A)Float (B)signed(C)integer (D)Char3.以下选项中不合法的用户标识符是(A)。(A)abc.c (B)file(C)Main (D)PRINTF4.以下选项中不合法的用户标识符是(AB)。(A)l23 (B)printf(C)A$ (D)Dim5.合法的C语言长整型常数是(A)。(A)0L (B)5712700(C) (D)6.C语言中,要求运算数必须是整型的运算符是(A)。(A)% (B)/(C)< (D)!7.以下选项中正确的整型常量是(B)。(A)12. (B)-20(C)l,000 (D)04588.以下选项中不正确的实型常量是(B)。(A)-1 (B).(C) (D)456e-29.C语言中运算对象必需是整型的运算符是(D)。(A)\ (B)+(C)* (D)%二、程序调试题编辑、调试以下程序步骤1:在VisualC++环境下新建文件可用[开始]→[程序]→[MicrosoftVisualC++]→[MicrosoftVisualC++]→[文件]→[新建]→[文件]→[C++SourseFile],输入文件名,程序代码如下:#include<>/*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/intadd(intx,inty){intz;z=x+y;returnz;}intmain(){intadd(int,int);/*函数的说明,告诉系统在主函数中要调用add函数*/inta,b,c;/*变量的定义*/scanf("%d%d\n",&a,&b);c=add(a,b);/*函数调用*/printf("%d+%d=%d\n",a,b,c);/*调用系统输出函数printf,%d为格式控制符,依次用后面的变量值填充,以整数形式输出*/}请思考文件由几个函数构成由个函数构成调用了那几个系统函数调用2个系统函数,分别是scanf和printf此程序中用到了哪几个保留字哪几个用户自定义标识符保留字:int,return自定义表示符:z,x,y,a,b,c步骤3:编译并运行程序,程序运行时输入两个整数,2040,观察程序运行的结果。20+40=60编辑、调试以下程序步骤1:在VisualC++环境下新建文件可用[开始]→[程序]→[MicrosoftVisualC++]→[MicrosoftVisualC++]→[文件]→[新建]→[文件]→[C++SourseFile],输入文件名步骤2:在文本编辑器中输入以下C程序#include<>/*文件预处理,包含标准输入输出库,程序可调用输入、输出函数*/#include<1-2-2>intmain(){intand(int,int);/*函数的说明,告诉系统在主函数中要调用and函数*/intor(int,int);/*函数的说明,告诉系统在主函数中要调用and函数*/inta,b,c;/*变量的定义*/scanf("%d%d",&a,&b);c=and(a,b);/*函数调用*/printf("%d&&%d=%d\n",a,b,c);/*调用系统输出函数printf,%d为格式控制符,依次用后面的变量值填充,以整数形式输出*/c=or(a,b);/*函数调用*/printf("%d||%d=%d\n",a,b,c);}步骤3:[文件]→[新建]→[文件]→[C++SourseFile],输入文件名1-2-2,源程序代码为:intand(inta,intb){intc;c=a&&b;returnc;}步骤4:[文件]→[新建]→[文件]→[C++SourseFile],输入文件名1-2-intor(inta,intb){intc;c=a||b;returnc;}步骤5:点击编译图标,编译程序步骤4:点击执行图标,执行程序,当程序运行时,键盘输入2040,按回车。204020&&40=120||40=1您可以输入其它的整数,观察程序的执行结果。303&&0=03||0=0第2章输入输出程序设计用printf输出一个中空的五角星。#include<>voidmain(){ 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");}仿照例子,定义一个字符数组,从键盘输入一字符串,然后输出的程序。 #include<> intmain(){ chars[255]; printf("请输入:"); scanf("%s",s); printf("你输入的是:%s\n",s); return0; }从键盘输入十六进制整数,转化为八进制数输出。 #include<> intmain(){ inta; printf("请输入一个十六进制数:"); scanf("%x",&a); printf("这个数转化为八进制数为%o\n",a); return0; }只定义两个整型数据并赋值,实现两个整型数的互换。 #include<> intmain(){ inta=10; intb=20; a=a^b; b=b^a; a=a^b; printf("a=%d,b=%d\n",a,b); return0; }从键盘上输入一个整数,分别输出8、16进制数的程序。 #include<> intmain(){ inta; printf("请输入一个十进制数:"); scanf("%d",&a); printf("这个数转化为八进制数为%o\n",a); printf("这个数转化为八进制数为%x\n",a); return0; }从键盘上输入一个整数,分别输出它的个位数,十位数,百位数。 #include<> intmain() { inta; scanf("%d",&a); printf("百位数为%d\n",a/100); printf("十位数为%d\n",a%100/10); printf("个位数为%d\n",a%10); return0; }以下程序输出结果是(9,10)。#include<>voidmain(){inti=010,j=10;printf("%d,%d\n",++i,j--);}运行程序,屏幕提示“您是一个学生吗”,您输入’y’或’n’进行回答,屏幕输出您的选项。 #include<> intmain() { chars; printf("你是学生吗(Y/N):"); scanf("%s",&s); if(s=='Y'||s=='y') { printf("你是学生~~\n"); } else { printf("你不是学生~~\n"); } return0; }从键盘输入一个角度x,求10*sin(x)的值。 #include<> #include<> intmain() { inta; scanf("%d",&a); doubler=10*sin(a); printf("%f\n",r); return0; }第3章循环程序设计1.执行语句for(i=0;i++<5;);后,变量i的值是(A)。(A)6 (B)5 (C)4 (D)02.若inti=0;下列语句计算1+2+…+10的是(C)。(A)while(s+=i); (B)for(;i<=10;i++,s+=i)(C)for(;i<=10;s+=i,i++) (D)for(;i<9;i++,s+=i)3.若inti,x;则语句for(i=x=0;i<9;i+=++x);的循环体要执行(4)次。10.以下不是死循环的语句是(D)。(A)for(;;x++); (B)while(1){x++};(C)do{i++;}while(1) (D)for(x=-10;x++;)4.以下for语句的循环次数是多少inti,j=3;for(;i=j;i--,j--)printf("%d",i);执行了3次5.下面的语句显示输出6行6列的整数数组h的主对角线上的所有元素,请补充完整:for(inti=0;i<6;i++)printf("%d",h[i][i])6.写出以下程序运行的结果,此程序实现了什么功能#include<>voidmain(){inta[10]={2,4,0,-5,10,6,-8,9,6,7};inti,count=0;for(i=0;i<10;i++)if(a[i]==0)count++;elsecontinue;printf("%d\n",count);}该程序实现的功能为:计算数组a中包含几个07.写出以下程序的功能。#include<>voidmain(){inta[10]={2,4,0,-5,10,6,-8,9,6,7},tmp,k;for(k=0;k<10/2;k++){tmp=a[k];a[k]=a[10-k-1];a[10-k-1]=tmp;}}此程序实现功能:将数组颠倒8.写出以下程序运行后的输出结果。#include<>voidmain(){inti,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<>voidmain(){inti,s;i=1;s=0;#include<>voidmain()#include<>voidmain(){inti,s;i=1;s=0;while(i<=100){s=s+i;i++;}printf(“1+2+3+….+99+100=%d\n”,s);}s=s+i;i++;printf(“1+2+3+….+99+100=%d\n”,s);}(2)#include<>voidmain(){inti,s;i=1;s=0;while(i<=100){s=s+i;while(i<=100){s=s+i;i++;}printf(“1+2+3+….+99+100=%d\n”,s);s=s+i;i++;printf(“1+2+3+….+99+100=%d\n”,s);}(3)#include<>voidmain()ints=0;ints=0;inti=1,s;while(i<=100);{s=s+i;i++;}printf(“1+2+3+….+99+100=%d\n”,s);}10.输入一个基数,例如输入9,输出为:求1*3*……*9的值。输出为:1*3*5*7*9=945 #include<> intmain() { inta,b; b=1; scanf("%d",&a); for(inti=1;i<=a;i+=2){ b=b*i; } printf("%d\n",b); return0; }11.输入一个5~10之间的整数n,求1!+2!+3!+…+n!。例如输入5,输出为:1!+2!+3!+…+5!=153 #include<> intmain() { inta,b,c; b=1; c=0; scanf("%d",&a); for(inti=1;i<=a;i++) { for(intj=1;j<=i;j++) { b=b*j; } c=c+b; b=1; } printf("%d\n",c); return0; }12.在屏幕上输出以下内容11212312341234512345612345679#include<>intmain(){ for(inta=1;a<=9;a++) { for(intb=1;b<=a;b++) { printf("%d",b); } printf("\n"); } return0;}13.求2+4+6+……+98+100的和,用多种for表达式来完成。 #include<> intmain() { intsum=0; for(inta=2;a<=100;a+=2) { sum+=a; } printf("%d",sum); return0; }14.输入一行字符,统计它有多少个字母 #include<>intmain(){ intcount=0; chars[255]; scanf("%s",s); for(inti=0;i<255;i++) { if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') { count++; } } printf("%d",count); return0;}第4章分支程序设计1.输入若干整数给x,使用if语句输出x的绝对值,当输入0时结束。#include<>intmain(){ intx; scanf("%d",&x); for(;x;scanf("%d",&x)) { if(x>0) { printf("%d\n",x); } else { printf("%d\n",-x); } } return0;}2.输入一批数,输出比相邻数大的数,当输入0时结束。#include<>intmain(){ inta; intb=0; scanf("%d",&a); b=a; for(;a;scanf("%d",&a)) { if(a>b) { printf("%d\t",a); } b=a; } return0;}3.将输入字符的大写字符转换成小写字符输出,小写字符原样输出。#include<>intmain(){ charc; while((c=getchar())!='\n') { if(c>='A'&&c<='Z') { c+=32; } putchar(c); } return0;}4.输入一批字符,按回车时结束,统计小写字符、大写字符、数字字符、或其它字符的个数。#include<>intmain(){ charc; intdx=0,xx=0,sz=0,qt=0; while((c=getchar())!='\n') { if(c>='A'&&c<='Z') { dx++; } elseif(c>='a'&&c<='z') { xx++; } elseif(c>='0'&&c<='9') { sz++; } else { qt++; } } printf("包含大写字母%d个,小写字母%d个,数字%d个,其他字符%d个.\n",dx,xx,sz,qt); return0;}5.编写程序,计算分段函数:#include<>intmain(){ doublex,y; scanf("%f",&x); if(x<=1) { y=x+5; } elseif(x<10) { y=2*x; } else { y=3/(x-10); } printf("%f",y); return0;}6.根据输入的百分制按五分制的成绩输出。百分制与五分制之间的关系见下表。百分制五分制90~100580~89470~79360~692<601#include<>intmain(){ inta; scanf("%d",&a); if(a>90) { printf("5\n"); } elseif(a>80) { printf("4\n"); } elseif(a>70) { printf("3\n"); } elseif(a>60) { printf("2\n"); } else { printf("1\n"); } return0;}7、用switch完成:读入一个实数x,再输入一整数,若输入是1,则计算sin(x),若输入2,则计算cos(x),若输入3,则计算tan(x),若输入其他值,则显示错误信息。#include<>#include<>intmain(){ inta,b; scanf("%d,%d",&a,&b); switch(a) { case1:printf("y=sin(x)=%f",sin(b));break; case2:printf("y=cos(x)=%f",cos(b));break; case3:printf("y=tan(x)=%f",tan(b));break; default:printf("error");break; } return0;}8、用switch完成:输入星期1到星期5,输出它们对应的颜色星期1:blue星期2:red星期3:white星期4:yellow星期5:green#include<>intmain(){ inta; scanf("%d",&a); switch(a) { case1:printf("星期一:blue\n");break; case2:printf("星期二:red\n");break; case3:printf("星期三:white\n");break; case4:printf("星期四:yellow\n");break; case5:printf("星期五:green\n");break; default:printf("error\n");break; } return0;}9、用switch完成:从键盘输入A、B、C、D四个等级中的一个,转化输出等级输出A优秀B良好C中等D及格E不及格#include<>intmain(){ chara; 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("error\n");break; } return0;}第5章数组及其应用1.从键盘输入12个数,分别为:900,2,3,58,34,76,87,72,90,20,78,30,找出最大和最小数。#include<>intmain(){ inta[12]; for(inti=0;i<12;i++) { scanf("%d",&a[i]); } intmax=a[0],min=a[0]; for(intj=1;j<12;j++) { if(a[j]>max) { max=a[j]; } if(a[j]<min) { min=a[j]; } } printf("最大值为%d,最小值为%d\n",max,min); return0;}2.采用遍历查找,在数组a[SIZE]={2,3,20,58,72,76,78,87,90,900}中,找出偶数。#include<>#defineSIZE100intmain(){ inta[SIZE]={2,3,20,58,72,76,78,87,90,900}; for(inti=0;i<10;i++) { if(a[i]%2==0) { printf("%d\t",a[i]); } } return0;}3.采用折半查找,在数组a[SIZE]={2,3,20,58,72,76,78,87,90,900}中,找到87,然后进行删除。#include<>#defineSIZE11#defineFOUND87intmain(){ inta[SIZE]={2,3,20,58,72,76,78,87,90,900}; intlow=0,high=SIZE-1,mid; mid=(low+high)/2; while(low<high) { if(a[mid]<FOUND) { low=mid; mid=(high+low)/2; } elseif(a[mid]>FOUND) { high=mid; mid=(high+low)/2; } else break; } for(intj=mid;j<9;j++) { a[j]=a[j+1]; } return0;}第6章函数及其应用练习与实践一、阅读程序,写出程序运行的结果。1.写出以下程序的执行结果。#include<>floataver(inta[]){intk,sum=0;floatave;for(k=0;k<10;k++)sum+=*(a+k);ave=(float)sum/10;return(ave);}intmain(){floatave;staticb[]={78,89,98,76,78,45,88,81,92,85};ave=aver(b);printf("ave=%f\n",ave);}提示:数组b的首地址传递给形参a,*(a+k)就是数组元素b[k].2.阅读程序,写出程序的执行结果。#include<>voidabc(charstr[]){inta,b;for(a=b=0;str[a]!='\0';a++)if(str[a]!='c’)str[b++]=str[a];str[b]='\0';}intmain(){charstr[]="abcdef";abc(str);printf("str[]=%s",str);return0;}提示:数组str的首地址传递给形参str,str[a]就是实参中的数组元素str[a],当数组元素不为’c’时进行复制。str[]=abdef3.写出以下程序的执行结果。#include<>intsort(intb[],intn,intx){intk;for(k=n-1;k>=0;k--)if(b[k]<x)b[k+1]=b[k];elsebreak;b[k+1]=x;return0;}intmain(){inti,j;staticinta[5]={8,5,4,1,6};intb[8];b[0]=a[0];for(i=1;i<5;i++){sort(b,i,a[i]);for(j=0;j<=i;j++)printf("%d",b[i]);printf("\n");}return0;}提示:循环体中if(b[k]<x)b[k+1]=b[k];elsebreak;如果b[k]<x成立,执行语句b[k+1]=b[k];表示数组元素b向后移,不满足时插入x,即从大到小排序。554441111111114.写出以下程序的执行结果。#include<>intfun(intx){intp;if(x==0||x==1)return3;elsep=x-fun(x-2);returnp;}intmain(){printf("\n%d",fun(9));return0;}提示:fun(9)=9-fun(7),...,fun(1)=375.写出以下程序的执行结果,并说明其作用是什么#include<>intf(intn){ if(n>=10) f(n/10); printf("%d",n%8); return0; }intmain(){ f(1234); printf("\n"); return0;}提示:在函数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<>intmain(){ intx,n,y,i; scanf("%d^%d",&x,&n); for(y=1,i=0;i<n;i++) { y=y*x; } printf("%d的%d次方是:%d\n",x,n,y); return0;}2.编写一个函数,计算对角线上元素之和。提示:for(s=0,i=0;i<n;i++)for(j=0;j<n;j++)if(i==j)s=s+a[i][j];#include<>intmain(){ inta[10][10]; inti=0,j=0; intsum=0; for(i=0;i<10;i++) { for(j=0;j<10;j++) { a[i][j]=(i+1)*(j+1); printf("%d\t",a[i][j]); } printf("\n"); } for(i=0;i<10;i++) { for(j=0;j<10;j++) { if(i==j) { sum+=a[i][j]; } } } printf("对角线和为%d\n",sum); return0;}3.编写一个函数intinvert(charstr[]),将一个字符串的内容颠倒过来。提示:先求字符串str的长度n,for(i=0;i<n/2;i++){a[i]与a[n-1-i]交换}#include<>intinvert(charstr[]){ charch; inti; for(i=0;(ch=str[i])!='\0';i++); for(intj=0;j<i/2;j++) { ch=str[j]; str[j]=str[i-1-j]; str[i-j-1]=ch; } puts(str); return0;}intmain(){ charstr[255]; gets(str); invert(str); return0;}4.编写函数,删除字符串中,从指定位置m开始的n个字符。删除成功,函数返回被删除字符串;否则返回空的值。提示:for(k=m,i=0;str[i];i++)str[m+i]=str[m+n+i];str[m+i]=’\0’#include<>intmain(){ charstr[255]; intindex,num; gets(str); scanf("%d,%d",&index,&num); inti=0,j=0; charch; for(;(ch=str[i])!='\0';i++); for(j=0;j<num;j++) { str[j]=str[index+j]; } str[j]='\0'; if(index>i) { str[0]='\0'; } puts(str); return0;}5.编写一个程序,从键盘输入的字符串,删去非数字字符,转换成整型数输出。提示:for(s=0,i=0,j=0;str[i];i++)if(str[i]>=’0’&&str[i]<=’9s=s*10+str[i]-‘0’#include<>intmain(){ charstr[255]; gets(str); inti=0,j=0; ints=0; charch; for(;(ch=str[i])!='\0';i++) { if(ch>='0'&&ch<='9') { s=s*10+ch-'0'; } } printf("%d\n",s); return0;}6.用递归的方法编写一个函数sum(intn),求1至n的累加和。提示:f(n)=n+f(n-1)#include<>intsum(intn){ inta=0; if(n==1) { a=1; } else { a=n+sum(n-1); } returna;}intmain(){ intn; scanf("%d",&n); ints=sum(n); printf("%d\n",s); return0;}第7章变量存储类型与多文件系统1.写出以下程序的执行结果。#include<>intx;voidfun(){printf("%d",x++);}voidmain(){intx=1;{externintx;printf("%d,",++x);}fun();}提示:在函数fun中及语句块{externintx;printf("%d,",++x);}中使用的x是外部变量,在语句块:if(x==1){intx=2;printf("%d,",x++);}中使用的是刚刚定义x=2的变量。1,12.写出以下程序的执行结果。#include<>intkk(){intx=4;staticinty;y=5;x*=2;y*=2;return(x+y);}voidmain(){intj,s=0;for(j=0;j<2;j++)s=kk();printf("s=%d\n",s);}提示:虽然两次调用函数kk(),但变量定义语句staticinty;只执行一次,而变量赋值语句每次都要执行。S=183.写出以下程序的执行结果。#include<>intt(){intx=0;staticinty=4;y+=++x;returnx+y;}voidmain(){printf("%d\n",(t(),t()));}提示:语句printf("%d\n",(t(),t()));中(t(),t())属于“,”号表达式,即两次调用函数t(),在函数t()中,y为静态内部变量,因而语句staticinty=4;只执行一次。7第8章文件1.下述程序从终端读入文本(用$作为文本结束标志)复制到一个名为的新文件中,请补全程序。#include<>intmain(){FILE*fp;charcx;if((fp=fopen("","a+"))==NULL)return0;while((cx=getchar())!='$')fputc(cx,fp);fclose(fp);return1;}提示:第1个空格是打开文件读,第2个空格是关闭文件。2.下面的程序用来统计文件中字符的个数,请补全程序。#include<>intmain(){FILE*fp;longnum=0;if((fp=fopen("","r"))==NULL){printf("Can'topenfile!\n");exit(0);}while(!feof(fp)){fgetc(fp);num++;}printf("num=%d\n",num);fclose(fp);return1;}提示:第1个空格表示文件没有结束,循环将持续。3.以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符,依次存放到该文件中,用#作为结束输入的标志,请补全程序。#include<>voidmain(){FILE*fp;charch,fname[10];printf("Inputthenameoffile\n");gets(fname);if((fp=fopen("","a+"))==NULL){printf("Cannotopen\n");exit(0);}printf("Enterdata\n");while((ch=getchar())!='#')fputc(ch,fp);fclose(fp);}提示:文件名是从键盘读入的,因而文件名是用变量表示的,文件是打开写。4.下述程序从一个二进制文件中读入结构体数据,并把读出的数据显示在屏幕上。请补全程序。#include<>structrec{inta;floatb;};voidrecout(FILE*fp){structrecr;do{fread(&r,sizeof(structrec),1,fp);if(feof(fp))break;printf("%d,%f",,;}while(1);}voidmain(){FILE*fp;fp=fopen("","rb");recout(fp);fclose(fp);}提示:在fread语句中,(1)中为存放所读出结构数据的内存地址,当然此数据是赋给变量r,(2)中是读出结构体变量数据的个数,(3)是与循环中止有关的判断,(4)为中止循环。5.从键盘输入一个字符串,并逐个将字符串的每个字符传送到磁盘文件""中,字符串的结束标记为"#"。#include<>#include<>voidmain(){ FILE*fp; charch; fp=fopen("","ab+"); if(fp==NULL) { printf("Openfilefailed!"); exit(0); } while((ch=getchar())!='#') { fputc(ch,fp); } fclose(fp);}6.有一文本文件,请编写一个程序将文件中的英文字母及数字字符显示在屏幕上。提示:#include<>#include<>voidmain(){ FILE*fp; charch; fp=fopen("","rb"); if(fp==NULL) { printf("Openfilefailed!"); exit(0); } while(!feof(fp)) { ch=fgetc(fp); if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'||ch>='0'&&ch<='9') { putchar(ch); } } fclose(fp);}7.把文本文件中的数字字符复制到文本文件中。#include<>#include<>voidmain(){ FILE*fin,*fout; charch; fin=fopen("","rb"); fout=fopen("","ab+"); if(fin==NULL||fout==NULL) { printf("Openfilefailed!"); exit(0); } while(!feof(fin)) { ch=fgetc(fin); if(ch>='0'&&ch<='9') { fputc(ch,fout); } } fclose(fin); fclose(fout);}8.x从0到360度的sin(x)值写入到文件中,并将大于0的值显示在屏幕上。#include<>#include<>#include<>#definePIvoidmain(){ FILE*fp; doubley; fp=fopen("","ab+"); if(fp==NULL) { printf("Openfilefailed!"); exit(0); } for(inti=0;i<=360;i++) { y=sin(PI*i/180); fprintf(fp,"%lf\n",y); if(y>0) { fprintf(stdout,"%lf\n",y); } } fclose(fp);}指针与数组1.下列程序输出的结果是(D)。#include<>voidf(int*x){*x=10;}voidmain(){inta,*p=&a;f(p);printf("%d",++(*p));}(A)输出的值是随机值 (B)因输出语句错误而不能执行者(C)输出值为10 (D)输出值为11提示:指针x指与指针p指向同一个变量,10赋给指针x所指的地址上的内容,++(*p)是指指针p所指地址上内容++。2.下列程序片段中不正确的字符串赋值或初始化方式是(C)。(A)char*str;str="string";(B)charstr[7]={'s','t','r','i','n','g','\0'};(C)charstr[10];str="string";(D)charstr[]="string";提示:字符串赋值只能在初始化时进行。3.如有定义:intx=2,*p=&x;以下哪些表达式的含义是不正确的。D(A)*&p(B)*&x(C)&*p(D)&*x提示:指针可以作取地址运算,变量不能作取内容运算。4.如有定义inta[5];(其中:0<=i<5),不能表示数组元素的是(B)。(A)*(a+i)(B)a[5](C)a[0](D)a[i]提示:数组元素的下标从0开始。5.若有以下定义和语句,inta[10],i;且0<=i<10,则对数组元素地址的正确表示是(D)。(A)a++(B)(a+1)(C)*(a+1)(D)&a提示:一旦数组定义,数组的首地址是一个常量,不能作++运算,而a+i表示数组第i个元素的地址。6.有以下定义及语句,则对数组a元素的不正确引用的表达式是(A)。inta[4][5];*p[2],j;for(j=0;j<4;j++)p[j]=a[j];(A)p[0][0] (B)*(a+3)[4](C)*(p[1]+2) (D)*(&a[0][0]+3)提示:p为指针数组,此题中a[i][j]、p[i][j]、*(p[i]+j)、*(*(p+i)+j)也都能表示数组元素,&a[0][0]等同于a[0]+0。二、程序阅读与填空题1.分析下列程序,输出结果是()。#include<>voidmain(){int*p1,x=10;float*p2,y=;p1=&x;p2=&y;printf("%d,%f\n",++(*p1),(*p2)++);}提示:++都作用在内容上,前一项是先++再输出,后一项是先输出再++。11,2.下列程序输出结果是()。#include<>voidmain(){inta[]={1,2,3,4,5,6},*p=a;printf("%d,%d\n",*p,*(p+3));}提示:语句*(p+3)+=2;指p+3的地址上的内容加2,然后输出p及p+3的地址上内容。1,43.下列程序输出结果是()。#include<>voidmain(){inta[]={1,2,3,4,5,6};intx,y,*p;p=&a[0];x=*(p+2);y=*(p+4);printf("*p=%d,x=%d,y=%d\n",*p,x,y);}提示:p+2是指&a[2]。*p=1,x=3,y=54.下列程序输出结果是()。#include<>voidmain(){inta[]={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向大地址方向移动,然后再取内容,要注意的是后一语句的输出受前一语句的影响。*10*20*30*30;*50,405.下列程序输出的结果是()。#include<>voiddel(char*str){inta,b;for(a=b=0;str[a]!='\0';a++)if(*(str+a)!='c’)*(str+b++)=*(str+a);str[b]='\0';}voidmain(){charstr[]="abcdef";del(str);printf("str[]=%s",str);}提示:在函数del中str+a地址上的内容不为字符’c’时不复制,实际上是指删除指针str所指的字符串中的字符’c’。str[]=abdef6.以下程序输出的结果是()。#include<>#include<>voidfun(char*w,intm){chars,*p1,*p2;p1=w;p2=w+m-1;while(p1<p2){s=*p1++;*p1=*p2--;*p2=s;}}voidmain(){chara[]="ABCDEFG";fun(a,strlen(a));puts(a);}提示:当执行s=*p1++;语句时,指针p1所指的地址上内容赋给s时,指针p1后移,语句*p1=*p2--;指针p2所指的内容赋给p1所指的地址上后,p2前移后再执行*p2=s语句。AGAAGAG7.以下程序输出的结果是()。#include<>voidmain(){inta[3][3]={{2,0,8},{4},{6}};inti,*p=&a[0][0];for(i=0;i<3;i++){if(i==0)a[i][i+1]=*p+1;else++p; printf("%d",*p); }printf("\n");}提示:当i=0时,把*p+1值3赋给a[0][1],然后输出2,当i=1时,++p后p指向a[0][1],输出a[0][1],当i=2时,++p,指针p指向a[0][2]。2388.阅读以下程序,把应填的内容写入空格处。本函数是应用二分法查找key值,数组中元素值按递增排序,若找到key则返回对应的下标,否则返回-1。intbinary(doublea[],intn,doublekey){intlow,high,mid;low=0;high=n-1;whilelow<high{mid=(low+high)/2;if(key<a[mid])high=mid;elseif(key>a[mid])lo

温馨提示

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

最新文档

评论

0/150

提交评论