计算机软件基础课后习题答案doc.docx
《计算机软件基础课后习题答案doc.docx》由会员分享,可在线阅读,更多相关《计算机软件基础课后习题答案doc.docx(48页珍藏版)》请在冰豆网上搜索。
计算机软件基础课后习题答案doc
第一章
一、简答题
1.参考书上第五页图1-7
2.因为C语言是强类型语言,语法规定必须先定义后使用,只有先定义,系统才能为其分配存储空间。
3.参考书上第二页
二、填空题
1.算法
2..C,.obj,.exe
3.提出问题,构造模型,选择方法,编写程序,上机调试
4.1
5.sin(35.0)+x*cos(60.0)
6.6
7.0
三、改错题
1.参考书上第二页,算法与程序的区别
2.只能定义为一种类型
3.必须先定义,后使用
4.可以随时修改
5.只有char型变量才只存储一个字节
6.a还是实型变量
7.b中的值不丢失
8.i的类型不变
四、单选
1-5BDCDC6-10DCBBD11-15CBADC16-18AAA
第二章
一、简答
1.参考书上23页
2.while先判断,后执行,dowhile先执行,后判断,循环体至少执行一次
3.参考书上29页
4.continue,结束本次循环
break,结束循环
区别在于,continue只结束本次循环重新进行下次循环,而break结束整个循环
二、填空题
1.顺序结构,选择结构,循环结构
2.ifelse和switch
3.语句1,语句2
4.零
5.break,continue
6.7,0
7.>:
,双目
三、单选
1-5CBDBC6-10DBBDA11-15CBCDA16-20ACAAD21-25ADCCB26-29BCCA
四、程序分析题
1.end1end
2.num%10max=t
3.j%3
4.99
五、编程题
1.
#include
intmain(){
charstr[100];
gets(str);
intn1,n2,n3,n4,i;
n1=n2=n3=n4=0;
for(i=0;str[i]!
='\0';++i){
if(str[i]>='A'&&str[i]<='Z')
++n1;
elseif(str[i]>='a'&&str[i]<='z')
++n2;
elseif(str[i]>='0'&&str[i]<='9')
++n3;
else
++n4;
}
printf("大写字母:
%d\n",n1);
printf("小写字母:
%d\n",n2);
printf("数字字符:
%d\n",n3);
printf("其他字符:
%d\n",n4);
return0;
}
2.
#include
#include
intmain(){
intarray[4],min,max,i;
for(i=0;i<4;++i)
scanf("%d",&array[i]);
min=max=array[0];
for(i=1;i<4;++i){
if(array[i]min=array[i];
elseif(array[i]>max)
max=array[i];
}
printf("min=%d,max=%d\n",min,max);
return0;
}
3.
#include
intmain(){
floatmoney,lixi;
intyear;
scanf("%f%d",&money,&year);
switch(year){
case1:
lixi=money*0.63/100;
break;
case2:
lixi=money*0.66/100;
break;
case3:
lixi=money*0.69/100;
break;
case5:
lixi=money*0.75/100;
break;
case8:
lixi=money*0.84/100;
break;
default:
printf("输入错误\n");
return-1;
}
printf("%f\n",money+lixi);
return0;
}
4.
#include
intmain(){
intx,y;
scanf("%d",&x);
if(x>100)
y=x+8;
elseif(x<-10)
y=-x+8;
else
y=0;
printf("%d\n",y);
return0;
}
5.
#include
intmain(){
inti,j,k,m=3;
for(k=5;k<12;k+=2,--m){
for(i=0;iprintf("");
for(j=0;jprintf("*");
printf("\n");
}
return0;
}
6.
#include
intmain(){
printf("*****\n");
printf("**\n");
printf("**\n");
printf("*************\n");
return0;
}
第三章
一、简答
1.a:
数组名,a[0]:
数组第0号元素,&a[1]数组第1号元素的地址
2.不同,”a”是字符串,末尾有一个’\0’
3.2*3*2=12个字节
二、填空题
1.0
2.按行存放
3.1014
4.str[14]
5.‘\0’
三、改错
1.是0
2.只能是常量
3.一定相同
4.不会给错误信息
5.没有提供字符串类型
6.不等价,”ok”末尾有一个’\0’
四、单选
1-5DBCAC6-10CDDCB11-13CDC
五、程序分析题
1.AzyD
2.123
3.45
4.4somestring*test
5.统计输入字符串中空格的个数3,1
6.maxmaxmin==max
7.aasum/nx[i]8.a[i][j]!
=a[j][i]1
9.j+=2a[i]>a[j]
10.1245600000
1234560000
六、编程题
1.
#include
intmain(intargc,char*argv[]){
inta[11],i,n;
printf("请输入十个递增排列的数列:
");
for(i=0;i<10;++i)
scanf("%d",&a[i]);
printf("请输入要插入的数:
");
scanf("%d",&n);
for(i=9;i>=0&&a[i]>n;--i){
a[i+1]=a[i];
}
a[i+1]=n;
printf("插入后数列为:
");
for(i=0;i<11;++i)
printf("%d",a[i]);
printf("\n");
return0;
}
2.
#include
#include
intmain(intargc,char*argv[]){
chara[100],b[100],min,i;
scanf("%s%s",a,b);
min=0;
for(i=1;a[i]!
='\0';++i){
if(a[min]>a[i])
min=i;
}
strcat(b,a+min+1);
a[min+1]='\0';
strcat(a,b);
printf("%s\n",a);
return0;
}
3.
#include
intmain(intargc,char*argv[]){
chars1[100],chars2[100];
inti;
gets(s1);
gets(s2);
char*string1=s1,*string2=s2;
do{
i=(int)*string1-(int)*string2;
}while(*string1++&&*string2++&&(!
i));
for(i=0;s1[i]!
='\0'&&s2[i]!
='\0'&&s1[i]==s2[i];++i);
printf("%d\n",i);
return0;
}
4.
#include
intmain(intargc,char*argv[]){
chars[100];
inti;
gets(s);
for(i=0;s[i]!
='\0';++i){
if(i==0||(s[i-1]==''&&s[i]>='a'&&s[i]<='z'))
s[i]-=32;
}
puts(s);
return0;
}
5.
#include
intmain(intargc,char*argv[]){
chars1[100],s2[100];
intend,i;
gets(s1);
gets(s2);
for(end=0;s1[end]!
='\0';++end);
for(i=0;s2[i]!
='\0';++i)
s1[end++]=s2[i];
s1[end]='\0';
puts(s1);
return0;
}
第四章
一、简答题
1.参考书上68页,69页,72页
2.函数的返回值,函数的形参
3.实参与形参之间是值传递的关系
二、填空题
1.库用户自定义
2.3
3.gets()
4.strlen()
5.strcpy()
6.全局局部
7.有返回值无返回值
8.return
9.void
10.前
11.调用
三、改错
1.表示不同的变量
2.按照调用的先后顺序执行
3.各自有自己的存储单元
4.可以没有形参
5.分配在动态存储区
6.以该函数定义的返回值为准
7.嵌套调用指函数调用函数
四、单选
1-5BDACC6-10DAACC11-13BCC
五、程序分析题
1.jstr[j-1]
2.本题程序是错的,第五行,for(I=m+1;i++)这里少东西,所以跳过
3.i4.1:
a=1,b=1
2:
a=2,b=2
3:
a=3,b=3
六、编程题
1.
intfun(intyear){
if(year%400==0||(year%4==0&&year%100))
return1;
else
return0;
}
2.
#include
#include
voidfun1(inta,intb,intc){
floatt=sqrt(b*b-4*a*c);
printf("x1=%f,x2=%f\n",(-b+t)/2.0*a,(-b-t)/2.0*a);
}
voidfun2(inta,intb,intc){
printf("x1=x2=%f\n",-b/2.0*a);
}
voidfun3(inta,intb,intc){
printf("该方程没有实根");
}
intmain(intargc,char*argv[]){
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
if(b*b-4*a*c>0)
fun1(a,b,c);
elseif(b*b-4*a*c==0)
fun2(a,b,c);
else
fun3(a,b,c);
return0;
}
3.
#include
#include
intfun(inta[],intn){
inti,j=0;
for(i=1;iif(i%3==0&&i%7==0)
a[j++]=i;
returnj;
}
intmain(intargc,char*argv[]){
inta[100],n,m,i;
scanf("%d",&n);
m=fun(a,n);
for(i=0;iprintf("%f",sqrt(a[i]));
return0;
}
第五章
一、简答
1.不一定,这要看指针的类型,比如int*p,则p+1就增加两个字节
2.定义指针时表示定义的变量是指针类型,引用指针时,表示指针指针指向的变量
3.p+n,p–n,其中n是int类型
二、填空题
1.地址
2.&*
3.指针
4.*p
5.1006
6.malloc
7.a+i*(a+i)
8.3
9.‘b’‘\0’
三、改错题
1.只能存放同类型的变量的地址,比如int*只能存放int型变量的地址
2.这个说法是正确的,没有错误
3.不是,指的是指针所指向的变量的类型
4.只能是同类型的指针或者&a这样的地址值
5.是可以改变的
四、单选
1-5CDDAA6-10BCDDD
五、程序分析题
1.*xt
2.r+b[u]*x
3.10
4.CDG
5.80,-20
6.5
7.55
1711717
六、编程题
1.
#include
intmain(intargc,char*argv[]){
chars[100];
inti;
gets(s);
for(i=0;s[i]!
='\0';++i);
printf("%d\n",i);
return0;
}
2.
#include
intfun(char*s,charc){
intcount=0;
for(;*s!
='\0';++s)
if(*s==c)
++count;
returncount;
}
intmain(intargc,char*argv[]){
chars[100],c;
gets(s);
c=getchar();
printf("%s%c\n",s,c);
printf("%d\n",fun(s,c));
return0;
}
3.
#include
intmain(intargc,char*argv[]){
chars[100];
inti,n1,n2,n3,n4,n5;
n1=n2=n3=n4=n5=0;
gets(s);
for(i=0;s[i]!
='\0';++i){
if(s[i]>='A'&&s[i]<='Z')
++n1;
elseif(s[i]>='a'&&s[i]<='z')
++n2;
elseif(''==s[i])
++n3;
elseif(s[i]>='0'&&s[i]<='9')
++n4;
else
++n5;
}
printf("大写字母:
%d\n",n1);
printf("小写字母:
%d\n",n2);
printf("空格:
%d\n",n3);
printf("数字:
%d\n",n4);
printf("其他字符:
%d\n",n5);
return0;
}
第六章
一、简答题
1
比如定义
structStudent{
charname[100];
intage;
}stu;
则stu.name,stu.age即可引用结构体成员
2.不是必须为所有的成员赋初值,因为语法上没有强制要求。
二、填空题
1.21&a[0]p->xa[1]
2.13
3.“ab”“cd”
三、改错题
1.可以同名
2.可以含有
3.不可以
四、单选题
BACBDD
五、程序分析题
1.Zhao
2.10x
3.200y
4、->.
5、364020
6、max=person[i].agemin=person[i].age
六、编程题
1.
#include
structScore{
floats1;
floats2;
};
intmain(){
structScorestu;
scanf("%f%f",&stu.s1,&stu.s2);
printf("%f\n",(stu.s1+stu.s2)/2.0);
return0;
}
2.
#include
structStudent{
charstuNo[50];//学号
floats1;//期中成绩
floats2;//期末成绩
};
intmain(){
structStudentstu[10];
inti;
for(i=0;i<10;++i)
scanf("%s%f%f",stu[i].stuNo,&stu[i].s1,&stu[i].s2);
for(i=0;i<10;++i){
printf("学号:
%s\n",stu[i].stuNo);
printf("期中成绩:
%f\n",stu[i].s1);
printf("期末成绩:
%f\n",stu[i].s2);
printf("平均成绩:
%f\n",(stu[i].s1+stu[i].s2)/2.0);
}
return0;
}
第七章
一、简答题
1.D代表数据节点的集合,R是D上的关系
2.逻辑结构是数据之间的外在关系,物理结构是数据在计算机内的存储表示
3.参考第二页
4.不是,还于算法的设计有关,一个好的算法可以降低时间复杂度
5.O(n),O(lgn),O(nlgn),O(n的平方+1),O(n3–n2),O(n5),O(2的n次方)
二、填空题
1、逻辑物理逻辑
2、时间复杂度空间复杂度
3、线性表二叉树图
4、线性
5、树型
6、111多多多
7、O(n的平方)
8、O(n)O(n)
三、改错题
1、无关
2、有关
3、无关
4、不是,是外在的关系,与存储结构无关
四、单选
CCBCC6题A选项改为n(n-1)
第八章
一、简答题
1、参考132页、135页、136页
2、参考139页
3、参考139页
4、选择顺序存储结构,因为顺序表是随机存取,访问任意一个元素的时间复杂度为O
(1);
5、选择链式存储,因为链表插入删除的开销小
6、循环单链表,循环双链表
7、单链表无法删除
循环单链表可以删除,时间复杂度为O(n)
循环双链表可以删除,时间复杂度为O
(1)
二、填空题
1、顺序存储链式存储
2、O(n)
3、O(n)O
(1)
4、q->next=p->nextp->next=q
5、p->nexts->datat
6、p->next=head->nexthead->next=p
7、p->next->next
8、head->next=NULL
9、p->priors->next=ps
10、O
(1)
三、改错题
1、一定相邻
2、该说法是正确的
3、该说法是正确的
4、需要移动节点
5、不会发生溢出现象
6、链表
四、单选
AABBABCAB10题为CDABCB
五、程序分析
1、删除单链表
2、p->next!
=q->priorp=p->nextq=q->prior
3、count=0p=p->next
六、程序设计题
1.
#include
#defineMAX100
structLink{
intdata[MAX];
intn;
};
intfindMin(struct