《程序设计基础》作业集答案高涛.docx
《《程序设计基础》作业集答案高涛.docx》由会员分享,可在线阅读,更多相关《《程序设计基础》作业集答案高涛.docx(24页珍藏版)》请在冰豆网上搜索。
《程序设计基础》作业集答案高涛
参考答案
第一章
一.填空题
1.硬件系统、软件系统
2.中央处理器、存储器、输入设备、输出设备
3.系统软件、应用软件
4.说明语句、表达式语句、分支语句、循环语句、控制流程语句
5.数据结构、算法
二.选择题
1C2B3ABCD4AB5C
三.问答题
1.答:
(1)由三种基本控制结构:
顺序结构、选择结构和循环结构。
(2)有限制的使用goto语句。
(3)籍助于结构化程序设计语言来书写。
(4)采用自顶向下,逐步求精或自底向上,逐步积累的程序设计策略。
2.答:
(1)对于变量,先定义其数据类型,再使用。
(2)C程序由函数构成,一个程序至少要有一个以上的函数。
(3)C程序总是从main()函数开始执行。
(4)书写格式自由,在一行可以有若干语句。
(5)数据的输入与输出是通过输入输出函数实现,例如:
scanf(),printf()函数等。
(6)C程序用/**/进行注释。
3.答:
(1)由键盘输入源程序;
(2)经过编辑后生成f.c磁盘文件;
(3)经过编译后生成f.obj文件;
(4)经过连接后形成f.exe文件;
(5)执行。
4.答:
用伪代码描述如下:
开始
for(n=3;n<=100;n++)
{
for(m=2;m<=
;m++)
{n/m的余数=>r;
if(r==0)break;
}
if(m>=
+1)输出n;
}结束
5.答:
描述如下:
第二章
一.填空题
1.常量、整型常量、实型常量、字符型常量
2.变量、先定义
3.单精度、双精度
4.+、-、*、/、%
5.关系表达式、“0”、“1”
二.选择题
1C2B3B4D5B
三.问答题
1.答:
字符常量是一个字符,在程序中字符是用单引号括起来的。
字符串变量由0个或若干个字符组合而成,在程序中字符串是用双引号括起来的,在存储时系统自动在字符串最后面加一个结束符号‘\0’。
2.解:
(1)2.5
(2)3.5
3.解:
运行结果为:
(1)9,11,9,10
(2)
(1)b=2
(2)a=3
(3)c=2
(4)b=4
(5)c=9
4.解:
(1)0
(2)0(3)0(4)1(5)1
5.解:
(1)24
(2)10(3)60
(4)0(5)0(6)0
第三章
一.填空题
1.顺序语句、选择语句、循环语句、转移语句
2.#include“stdio.h”
3.break
4.z=(x>y)?
x:
y;
5.将给定的一个字符常量或字符变量的内容输出到显示器屏幕上
二.选择题
1B2B3B4B5C
三.问答题
1.解:
#include
voidmain()
{
intunits,tens,hundreds,a,b;
printf("Pleaseinputanumber(100~999):
");
scanf("%d",&a);
hundreds=a/100;
tens=(a-hundreds*100)/10;
units=a-hundreds*100-tens*10;
b=100*units+tens*10+hundreds;
printf("afterchange,thenumberis:
%d\n",b);
}
2.解:
#include
voidmain()
{
inta,b,c;
scanf("%d%d%d",a,b,c);
if(a>b)if(b>c)printf("mid=%d\n",b);
elseif(a>c)printf("mid=%d\n",c);
elseprintf("mid=%d\n",a);
elseif(a>c)printf("mid=%d\n",a);
elseif(b>c)printf("mid=%d\n",c);
elseprintf("mid=%d\n",b);
}
3.解:
#include
#include
voidmain()
{
doublea,b,c;/*方程系数*/
doubledisc;/*判别式*/
doublere,im;/*方程实部虚部*/
printf("Entera,b,c:
");
scanf("%lf%lf%lf",&a,&b,&c);
if(a==0.0)
if(b==0.0)
printf("Theequationhasnotsoluble!
\n");
else
printf("Singlerootis%f\n",-c/b);
elseif(c==0.0)
printf("Tworoots:
x1=%lf\tx2=%lf\n",-b/a,0);
else
{
disc=b*b-4*a*c;
re=-b/(2*a);
im=sqrt(fabs(disc))/(2*a);
if(disc>=0.0)
printf("Tworoots:
x1=%f\tx2=%f",re+im,re-im);
else
printf("Twocomplexroots:
x1=%f+i*%f\tx2=%f-i*%f\n",re,im,re,im);
}
}
4.解:
#include
#include
voidmain()
{
inti,j,result;
printf("\n");
for(i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);
}
printf("\n");
}
}
5.答:
#include
voidmain()
{
floata,b;
charoptor;
printf("Pleaseinputthevalueofa,b:
");
scanf("%f%f",&a,&b);
printf("Enteroperator:
");
getchar();
scanf("%c",&optor);
switch(optor)
{
case'+':
printf("%f+%f=%f\n",a,b,a+b);
break;
case'-':
printf("%f-%f=%f\n",a,b,a-b);
break;
case'*':
printf("%f*%f=%f\n",a,b,a*b);
break;
case'/':
if(b==0)printf("cannotadividedby0!
\n");
elseprintf("%f/%f=%f\n",a,b,a/b);
break;
default:
printf("Inputerror!
");
}
}
第四章
一.填空题
1.[0,N-1]
2.1022
3.a[4][5]
4.“string.h”
5.0、‘\0’
二.选择题
1D2A3D4B5C
三.问答题
1.解:
#include
voidmain()
{
inta[15];
inti,j;
a[0]=0;
a[1]=1;
printf("%-4d%-4d",a[0],a[1]);
for(i=2;i<15;i++)
{
a[i]=a[i-1]+a[i-2];
printf("%-4d",a[i]);
}
}
2.解:
#include
voidmain()
{
inta[10];
inti,min,k,temp;
printf("Pleaseinput10integernumbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
min=i;
for(k=i+1;k<10;k++)
{
if(a[k]<=a[min])min=k;
}
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
for(i=0;i<10;i++)
printf("%-4d",a[i]);
}
3.解:
#include
voidmain()
{
inta[10],i,j,temp;
printf("Pleaseinput10integernumbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<10;i++)
printf("%-4d",a[i]);
}
4.解:
#include
voidmain()
{
inta[3][3],sum=0;
inti,j;
printf("enterdata:
\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
sum=sum+a[i][i];
printf("sum=%6d\n",sum);
}
5.解:
#include
voidmain()
{
charstring[81];
inti,num=1;
charc;
gets(string);
for(i=0;(c=string[i]!
='\0');i++)
{
if(string[i]=='')num++;
}
printf("Thereare%dwordsintheline\n",num);
}
第五章
一.填空题
1.函数
2.fun(intx,inty,intz)
3.main()
4.局部静态存储变量、全局静态存储变量
5.内部函数、外部函数
二.选择题
1B2B3C4C5B
三.问答题
1.解:
语法错误有:
(1)主函数中第4行漏写了分号。
(2)形参与实参个数不相等,形参没有定义类型
(3)子函数中n没有定义。
语义错误有:
(1)主函数中x和n没有赋值。
(2)函数调用时,既没有返回值也不是地址调用;程序中没有输出语句,目的
不明确。
正确的程序是:
main()
{
intpower(intx,intn);
intx=2,n=4;
printf("\ns=%d",power(x,n));
}
intpower(intx,intn)
{
inti,p=1;
for(i=1;i<=n;++i)
p=p*x*i;
return(p);
}
2.答:
#include"stdio.h"
floatvolume(a,b,c)
floata,b,c;
{
floatv;
v=a*b*c;
return(v);
}
voidmain()
{
floata,b,c,v;
scanf("%f%f%f",&a,&b,&c);
v=volume(a,b,c);
printf("v=%f",v);
}
3.答:
#include"stdio.h"
floatsum(intn)
{
inti;
floats;
s=0;
for(i=1;i<=n;i++)
{
s+=1/(float)i;
};
returns;
}
voidmain()
{
intn;
floats;
printf("Pleaseinputthevalueofn:
");
scanf("%d",&n);
if(n<=0)
printf("Pleaseinputapositivenumber!
");
else
{
s=sum(n);
printf("sum=%f",s);
}
}
4.答:
运行结果为:
Thevalueofiinmain()beforcallingsqr(x)is25
Callingsqr(x):
sqr(25)=625
Thevalueofiinmain()aftercallingsqr(x)is25
5.答:
#include"stdio.h"
doublexpower(floatx,intn)
{
if(n<=0)
return
(1);
else
return(x*xpower(x,n-1));
}
voidmain()
{
floatx;
intn;
doubler;
scanf("%f%d",&x,&n);
r=xpower(x,n);
printf("Result=%f",r);
}
第六章
一.填空题
1.“指针变量”、空指针
2.s所指向的变量内容加1、取指针变量s加1后的内容、取s的内容后,s再加1
3.a[3]
4.指针
5.指针首地址
6.“单级间址”、“二级间址”
二.选择题
1B2D3D4D
三.问答题
1.答:
intstrlen(s)
char*s;
{
char*p=s;
while(*p!
='\0')
p++;
return(p-s);
}
2.答:
#include
swap(int*p,int*q)
{
inttemp;
temp=*p;
*p=*q;
*q=temp;
}
voidmain()
{
inta,b,*pa,*pb;
printf("Pleaseinput2integernumbers:
");
scanf("%d%d",&a,&b);
pa=&a;
pb=&b;
swap(pa,pb);
printf("%d%d",a,b);
}
3.答:
不行。
C语言规定数组名称代表数组的首地址,也就是说第一个元素的地址是常量,所以在程序中a的值是不能改变的。
修改程序如下:
#include
voidmain()
{
inta[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=0;i<10;i++)
{
printf("%d",*(a+i));
}
}
4答:
运行结果:
(1)12
(2)book
(3)
0022FF40--1
0022FF4C--4
0022FF58--7
0022FF40--10022FF44--20022FF48--3
0022FF4C--40022FF50--50022FF54--6
0022FF58--70022FF5C--80022FF60--9
5答:
#include
intlen(char*p)
{
intn=0;
while(*p!
='\0')
{
n++;
p++;
}
return(n);
}
voidmain()
{
intlength;
char*str[20];
printf("Pleaseinputastring:
\n");
scanf("%s",str);
length=len(str);
printf("thelengthofthestringis%d",length);
}
6.答:
双重指针指的是指向指针型数据的指针类型。
程序如下:
#include
voidmain()
{
inta[2][3]={1,3,5,2,4,6};
int*add[2][3]={*a,*a+1,*a+2,*(a+1),*(a+1)+1,*(a+1)+2};
int**p,i;
p=add[0];
for(i=0;i<6;i++)
{
printf("%d",**p);
p++;
}
getch();
}
运行结果:
135246
第七章
一.填空题
1.结构体
2.pstu->score
3.地址
4.数据、链指针、下一个结点
5.stdlib.h
6.一个一个的输入各结点数据,并建立其前后相链的关系
7.将链表中各结点的数据依次输出
二.选择题
1D2D3B4D5B
三问答题
1.答:
运行结果:
3,a
2.答:
#include"stdio.h"
structperson
{
charname[20];
intcount;
}leader[3]={"Li",0,"Zhang",0,"Wang",0};
main()
{
inti,j;
charleader_name[20];
for(i=1;i<=4;i++)
{
scanf("%s",leader_name);
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
printf("\n");
for(i=0;i<3;i++)
printf("%s:
%d\n",leader[i].name,leader[i].count);
}
3.答:
#include"stdlib.h"
#include"stdio.h"
structlist
{
intdata;
structlist*next;
};
typedefstructlistnode;
typedefnode*link;
voidmain()
{
linkptr,head;
intnum,i;
ptr=(link)malloc(sizeof(node));
ptr=head;
printf("Pleaseinput5numbers===>\n");
for(i=0;i<=4;i++)
{
scanf("%d",&num);
ptr->data=num;
ptr->next=(link)malloc(sizeof(node));
if(i==4)ptr->next=NULL;
elseptr=ptr->next;
}
ptr=head;
while(ptr!
=NULL)
{
printf("Thevalueis===>%d\n",ptr->data);
ptr=ptr->next;
}
}
4.答:
#include"stdio.h"
voidmain()
{
structstudent
{
intnum;
charname[20];
floatscore;
};
structstudentstu[4];
structstudent*p;
inti,temp=0;
floatmax;
for(p=stu;pscanf("%d%s%f",&p->num,p->name,&p->score);
for(max=stu[0].score,i=1;i<4;i++)
if(stu[i].score>max)
{
max=stu[i].score;
temp=i;
}
p=stu+temp;
printf("\nThemaximumscore:
\n");
printf("No.%d\nname:
%s\nscore:
%4.1f\n",p->num,p->name,p->score);
}
模拟试题一
一.选择题
1C2B3D4D5C6D7A8D9A10B
二.程序填空题
1.①:
stdio.h
②:
i=1;i<5;i++
③:
i!
=k&&i!
=j&&j!
=k
2.①:
n=1;n<=20;n++
②:
t*=n;
③:
s+=t;
三.程序设计题
1.答:
#include"stdio.h"
main()
{
inti,j,k,n;
printf("waterflower'snumberis:
\n");
for(n=100;n<1000;n++)
{
i=n/100;//分解出百位
j=n/10%10;//分解出十位
k=n%10;//分解出个位
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}
2.答:
#include"stdio.h"
main()
{
inta[5]={9,6,5,4,1},i,temp;
printf("\noriginalarray:
\n");
for(i=0;i<5;i++)
printf("%4d",a[i]);
for(i=0;i<5/2;i++)
{
temp=a[i];
a[i]=a[5-i-1];
a[5-i-1]=temp;
}
printf("\nsortedarray:
\n");
for(i=0;i<5;i++)
printf("%4d",a[i]);
}
3.答:
#include"stdio.h"
swap(int*p1,int*p2)
{
inttemp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
voidmain()
{
intn1,n2,n3;
int*pointer1,*pointer2,*pointer3;
printf("Pleaseinput3number:
n1,n2,n3:
");
scanf("%d%d%d",&n1,&n2,&n3);
pointer1=&n1;
pointer2=&n2;
pointer3=&n3;
if(n1>n2)swap(pointer1,pointer2);
if(n1>n3)s