高职 C语言程序设计 习题答案.docx
《高职 C语言程序设计 习题答案.docx》由会员分享,可在线阅读,更多相关《高职 C语言程序设计 习题答案.docx(104页珍藏版)》请在冰豆网上搜索。
高职C语言程序设计习题答案
第1章习题
【复习】
1.简要说明计算机语言的发展历程,剖析计算机语言发展的动力以及发展趋势。
答:
计算机语言的发展大致经历了机器语言、汇编语言和高级语言三个阶段,机器语言是一种面向机器的计算机语言,与计算机型号有关,每种计算机只能识别自己的机器语言。
汇编语言用具有一定含义的符号表示机器指令,汇编语言中的汇编指令与机器语言中的机器指令是一一对应的,与机器语言相比,虽然方便编程人员记忆和书写,提高了编程效率,但是汇编语言仍是机器相关的计算机语言。
高级语言的出现,使计算机语言脱离了对计算机硬件的依赖,成为一种接近于人类自然语言的计算机语言,高级语言具有可移植性强、容易学习与记忆、编程效率高等优点,是计算机语言发展史上的一个飞跃。
目前,面向对象编程语言已经成为C、PASCAL等高级语言之后日益成熟并得到广泛应用的计算机语言,将可视化、事件驱动等新技术与计算机语言结合在一起构建的各种集成开发环境已成为应用软件开发的重要工具。
从中可以看出,人类对高效率与高精度计算需求的不断增长,以及人类对编程便利的要求不断提升,已经成为计算机语言发展的强大动力,高效并方便地使用计算机完成计算任务成为计算机语言发展的推动力量,使计算机语言的发展从面向机器逐渐向面向人类转变。
2.简要叙述C程序的构成,并说明一个C程序要正确地运行,必须要有什么函数,该函数在程序中的地位如何?
C语言是一种结构化程序设计语言,具体地说,C语言是一种函数模块式结构的程序设计语言,所有的C程序都是由一个或多个函数构成的。
一个C程序可由一个主函数和若干个其它函数构成。
由主函数调用其他函数,其他函数也可以互相调用。
同一个函数可以被一个或多个函数调用任意多次。
这些函数是由编译系统提供的标准函数或用户自己定义的函数,其中有一个特别的函数“main”我们称之为主函数。
一个C程序要正确地运行,都必须有且只能有一个主函数,主函数是程序运行的入口,C程序从主函数开始执行,并最终从主函数结束。
3.开发一个C程序的一般过程是什么?
答:
开发一个C程序,通常包括程序设计阶段和程序生成阶段。
C程序设计是C程序开发过程中的重要阶段,在这一阶段中,编程人员需要根据实际问题的要求,运用系统化的分析问题的方法与技术,完成解题过程的构思以及解决方案的设计,确定解决该问题的算法,构造相应的数据结构和程序结构。
C程序设计阶段完成以后,要将伪码描述转换成C程序,这是C程序生成阶段的任务,通常要经过程序编辑、程序编译、程序链接和程序运行4个步骤。
4.下列说法正确的是( )。
A.在书写C语言源程序时,每个语句以逗号结束
B.注释时,“/”和“*”号之间可以有空格
C.无论注释内容是多少,在对程序编译时都被忽略
D.C程序每行只能写一个语句
答:
C
5.C语言源程序文件的后缀是( ),经过编译和链接后生成了可执行文件,该文件的后缀是( )。
A..objB..exeC..cD..doc
答:
CB
【应用】
参照例1-1,编写一个C程序,输出以下信息。
要求在VC6.0环境下编辑和运行。
***********************************************************
WelcometoJiLin!
WelcometoChangChun!
***********************************************************
答:
#include
intmain()
{
printf(”******************************************\n”);
printf(”WelcometoJiLin!
WelcometoChangChun!
\n”);
printf(”******************************************\n”);
return0;
}
【探索】
1.从计算机语言的发展历程预测近10年计算机语言的发展趋势。
答:
计算机语言的发展大致经历了机器语言、汇编语言和高级语言三个阶段,高级语言的出现,使计算机语言脱离了对计算机硬件的依赖,成为一种接近于人类自然语言的计算机语言,是计算机语言发展史上的一个飞跃。
目前,面向对象编程语言已经成为结构化高级语言之后日益成熟并得到广泛应用的计算机语言,将可视化、事件驱动等新技术与计算机语言结合在一起构建的各种集成开发环境已成为应用软件开发的重要工具。
从中可以看出,使计算机语言的发展正在从面向机器逐渐向面向人类转变,在近10年中,计算机语言将会朝着编码更容易、编程效率更高、可移植性更强、更接近自然语言、语言构成更符合人类思维方式的方向发展。
2.回文数字的判断问题。
回文数字是这样的一类数字,它们顺着看和倒着看是相同的数,例如121 、12321等。
答:
回文数字的判断问题可以细化为2个子问题:
对给定数字进行变换、判断变换后的数字与原数字是否相等。
可以对子问题1进行进一步细化:
变换的一种方法是将该数的个位数字变换为最高位数字,十位数字变换成次高位数字,依此类推,变换完成后便得到变换后的新数。
第2章习题
【复习】
1.下面的标识符哪些是合法的?
A.1_xB.IntC.ABCD.i_10
E.sum.aF.%abcG._stuH.abcd
答:
CDG
2.C语言的数据类型有哪些?
答:
C语言规定的数据类型较多,通常我们可以将其分为两大类:
基本类型和构造类型,具体数据类型分类如图所示。
3.下面是一段程序:
#defineN10
intmain()
{
intsum;
sum=(20+30)/N;
printf("sum=%d\n",sum);
printf("resultis5\n");
return0;
}
在这段程序中,哪些是常量?
哪些是变量?
答:
常量有:
2030N0
变量有:
sum
4.下面哪些写法是正确的,而且是常量?
A.12B.−.345C.1.23e4D.'OPQ'
E.E10F.0678G.0xabcdefH."\n\\\'\123"
答:
ABCGH
5.字符常量与字符串常量有什么区别?
答:
用一对单引号括起来的单个字符称为字符常量。
字符常量有两种:
一般字符常量和特殊字符常量。
例如:
’a’就是一个字符常量。
用一对双引号括起来的字符序列称为字符串常量。
例如”ChangChun”就是一个字符串常量。
两者的区别:
(1)定界符不同,字符常量用单引号,字符串常量用双引号。
(2)一般来说,字符常量仅能表示单个字符,字符串常量可以表示多个字符。
(3)转义字符是字符常量而不是字符串常量。
6.简述转义字符的用途并用实例加以说明。
答:
通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,其主要用法有以下三个方面:
(1)表示字符常量的单撇号(’)、用于表示字符串常量的双撇号(”)和反斜杠(\);
(2)用反斜杠(\)后面跟某些特定字符表示不可打印的控制字符和特定功能的字符;
(3)用反斜杠(\)后面跟一个八进制或十六进制数表示任意字符,其中八进制或十六进制数表示要表示字符的对应ASCII码值。
例如:
’\n’表示换行操作,’\\’表示要输出一个反斜杠“\”。
7.C语言为什么要规定对所有用到的变量要“先定义,后使用”?
这样做有什么好处?
答:
C语言变量遵循“先定义,后使用”的原则,即变量在使用前,都要求先对其数据类型进行定义。
因为在变量定义时,系统会对变量分配固定的内存,然后按照变量名对其进行访问。
这样做有如下好处:
(1)便于系统对内存空间的管理与使用
(2)通过事先分配内存空间提高程序的运行效率。
8.下面哪个表达式的值为5?
A.19/4B.19.0/4C.(float)19/4D.(int)(19.0/4+0.5)
答:
D
9.指出下面的表达式中,哪些是错误的?
(1)a+b=5
(2)56=a11
(3)i=i++
(4)12
(5)a=5,b=6,c=7
答:
(1)
(2)
10.计算下列表达式的值。
已知int型变量a=5,b=6,c=7,char型变量ch='0',float型变量f=2.1。
(1)(a-b*2)/3
(2)3.2*(a+b+c)
(3)ch+a+f
(4)a+b%3*(int)(b+c)%3/6
答:
(1)-2
(2)57.60000(3)55.10000(4)5
11.写出下面表达式运算后x的值。
设x定义为整型变量,其初值为10。
(1)x+=10
(2)x−=10
(3)x*=5+10
(4)x/=x+x
(5)x+=x−=x*=x
(6)x+=x−=x*x
答:
(1)20
(2)0(3)150(4)0(5)0(6)-180
12.设int型变量a=3,b=4,c=5,则表达式((a+b)>c)&&(b==c)&&a||b+c&&b+c的值是()。
A.0B.1C.2D.3
答:
B
13.如果int型变量i=1,j=2,k=3,l=4,则条件表达式ii:
kk:
l的值是()。
A.1B.2C.3D.4
答:
A
【应用】
1.写出完成下列要求的C语言的合法表达式。
(1)已知半径r,计算球的体积V。
(2)已知3条边长度a、b、c,计算三角形面积S。
(3)已知上底a、下底b和高h,计算梯形面积S。
答:
(1)V=(3/4)*3.14*r*r*r
(2)l=(a+b+c)/2.0,S=sqrt((l-a)*(l-b)*(l-c))
(3)S=(a+b)*h/2.0
【探索】
若变量f已说明为float类型,i为int类型,则下面哪些表达式(或语句)能够实现将f中的数值保留小数点后两位,第三位进行四舍五入的运算?
A.f=(f*100+0.5)/100.0;B.i=f*100+0.5,f=i/100.0;
C.f=(int)(f*100+0.5)/100.0;D.f=(f/100+0.5)*100.0;
答:
BC
第3章习题
【复习】
1.下面的语句段执行后,输出的值是()
inta=3,b=5;
printf("%d,%d",b,a);
A:
53B:
3,5C:
35D:
5,3
答:
D
2.若x=4,y=-2,z=5,则表达式++x-y+z++的值为()
A.10B.11C.12D.13
答:
C
3.以下给定程序的输出结果为()
#include"stdio.h"
intmain()
{
intx=12;
while(x--);
printf("%d",x);
return0;
}
A.-1B.0C.11D.1
答:
A
4.若inti=10;则执行下列语句后,变量i的正确结果是()
switch(i)
{
case9:
i+=1;
case10:
i+=1;
case11:
i+=1;
default:
i+=1;
}
A.10B.11C.12D.13
答:
D
5.C语言允许if-else语句嵌套使用,规定else总是和()配对。
A.其之前最近的ifB.第一个if
C.缩进位置相同的ifD.其之前最近的且尚未配对的if
答:
D
6.把下面的程序补充完整。
程序的功能是交换x和y的值。
#include"stdio.h"
intmain()
{
intx=5,y=3,temp;
(
);
(2);
(3);
printf("%d%d",x,y);
return0;
}
答:
(
)temp=x
(2)x=y
(3)y=temp
7.阅读下面的程序:
#include"stdio.h"
intmain()
{
inta,b,c;
printf("pleaseinput:
\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a
if(bprintf("max=%d\n",c);
else
printf("max=%d\n",b);
elseif(aprintf("max=%d\n",c);
else
printf("max=%d\n",a);
return0;
}
该程序的功能是:
。
答:
找出三个数中的最大数并输出
8.阅读下面的程序:
#include
intmain()
{
intcount,num,total;
count=0;total=0;
while(count<10)
{count++;
printf(“entertheNO.%d=”,count);
scanf(“%d”,&num);
total+=num;
}
printf(“Total=%d\n”,total);
return0;
}
如果用户输入0123456789十个数,则输出结果是:
。
答:
Total=45
【应用】
1.输入一个字符,将其转换成小写字母后输出。
答:
#include
#include
intmain()
{
charc;
printf("请输入一个英文字母:
\n");
scanf("%c",&c);
if(isupper(c))//判断是否为大写字母,是则转换为小写
c=tolower(c);
printf("%c\n",c);
return0;
}
2.编程求1+3+5+…+101的和。
答:
#include
intmain()
{
inti=0,sum=0;
for(i=1;i<=101;i+=2)
{
sum+=i;
}
printf("%d\n",sum);
return0;
}
3.输出下面的图形。
******
******
******
答:
#include
intmain()
{
inti=0,j=0;
for(i=0;i<3;i++)//控制行数,此题打印3行
{
for(j=0;j<2-i;j++)//控制打印的空格数
printf("");
for(j=0;j<6;j++)//控制打印的*数
printf("*");
printf("\n");
}
return0;
}
4.输出9*9口诀。
答:
#include
intmain()
{
inti=0,j=0,k=0;
for(i=1;i<=9;i++)//控制行数
{
for(j=1;j<=i;j++)//控制列数
printf("%d*%d=%d",j,i,i*j);//打印没列的乘法口诀
printf("\n");//换行
}
return0;
}
【探索】
1.爱因斯坦的阶梯问题。
爱因斯坦曾出过这样一道有趣的数学题:
有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;最每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶不剩。
问该阶梯至少有多少阶?
编写一个C程序解决这个问题。
答:
#include
intmain()
{
inti=0;
for(i=7;;i+=7)
{
if(i%2&&i%3==2&&i%5==4&&i%6==5)
{
printf("%d\n",i);
break;
}
}
return0;
}
2.百钱买百鸡问题。
100元钱买100只鸡,公鸡5元1只,母鸡3元1只,小鸡3个1元,编写一个C程序,给出该问题的解决方案。
答:
#include
intmain()
{
intcock,hen,poult;
for(cock=0;cock<=20;cock++)
{
for(hen=0;hen<=33;hen++)
{
poult=100-cock-hen;
if((100-cock-hen)%3==0&&(cock*5+hen*3+poult/3==100))
printf("cock=%d,hen=%d,poult=%d\n",cock,hen,poult);
}
}
return0;
}
3.凯撒密码程序。
通过键盘输入一行字符,以@结束,对输入的字符串进行加密处理。
要求:
a->b,b->c,…,z->a和A->b,B->c,Z->a,其他字符不变。
答:
#include
#include
#include
charc[100],res[100];
voidchange(intlen)
{
inti=0;
for(i=0;i{
if(islower(c[i])&&c[i]<'z')
res[i]=c[i]+1;
if(isupper(c[i])&&c[i]<'Z')
res[i]=c[i]+1;
if(c[i]=='z'||c[i]=='Z')
res[i]='a';
}
}
intmain()
{
inti=0,len=0;
chara;
for(i=0;;i++)
{
scanf("%c",&a);
if(a=='@')break;
elsec[i]=a;
}
len=strlen(c);
change(len);
puts(res);
return0;
}
第4章习题
【复习】
1.在下列关于C函数定义的叙述中,正确的是()。
A.函数可以嵌套定义,但不可以嵌套调用
B.函数不可以嵌套定义,但可以嵌套调用
C.函数不可以嵌套定义,也不可以嵌套调用
D.函数可以嵌套定义,也可以嵌套调用
答:
B
2.以下描述错误的是()。
A.调用函数时,实参可以是表达式
B.调用函数时,实参与形参可以共用内存单元
C.调用函数时,将为形参分配内存单元
D.调用函数时,实参与形参的类型应该一致
答:
B
3.在一个源文件中定义的全局变量的作用域为()。
A.本文件的全部范围
B.本程序的全部范围
C.本函数的全部范围
D.从定义该变量的位置开始到本文件结束为止
答:
D
4.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为()。
A.自动(auto)
B.静态(static)
C.外部(extern)
D.寄存器(register)
答:
A
5.递归函数f(n)=f(n-1)+n(n>1)的递归体是()。
A.f
(1)=0
B.f(0)=1
C.f(n)=f(n-1)+n
D.f(n)=n
答:
C
6.下列程序的输出结果是()。
#include"stdio.h"
fun(inta,intb,intc)
{
c=a*b;
}
intmain()
{
intc;
fun(2,3,c);
printf("%d\n",c);
return0;
}
A.0B.1C.6D.无法确定
答:
D
8.下列程序的输出结果是()。
#include"stdio.h"
intx=1;
func(intx)
{
x=3;
}
intmain()
{
func(x);
printf("%d\n",x);
return0;
}
A.3B.1C.0D.无法确定
答:
B
9.阅读下面的程序:
#include"stdio.h"
intm=5;
intf1()
{
m=m+3;
return(m);
}
intmain()
{
intm=3;
{
intm=10;
m++;
}
f1();
m+=1;
printf("%d\n",m);
return0;
}
该程序的运行结果是:
。
答:
4
10.定义一个递归函数实现f=1+1/2+1/3+…1/n运算,该递归函数的递归出口是,递归体是。
答:
递归出口:
f
(1)=1
递归体:
f(n)=1/n+f(n-1)
【应用】
1.编写一个函数,实现两个字符串的连接。
答:
#include
#include
voidmain()
{
voidlianjie(charc[100],chard[100]);
chara[100],b[100];
printf("请输入第一个字符串:
\n");
gets(a);
printf("请输入第二个字符串:
\n");
gets(b);
lianjie(a,b);
}
voidlianjie(charc[100],chard[100])
{
printf("两个字符串进行连接后:
\n%s\n",strcat(c,d));
}
2.设计一个函数,用于把数字字符串转换成整数,这里假设数