C语言实验指导与习题参考答案含运.docx
《C语言实验指导与习题参考答案含运.docx》由会员分享,可在线阅读,更多相关《C语言实验指导与习题参考答案含运.docx(63页珍藏版)》请在冰豆网上搜索。
C语言实验指导与习题参考答案含运
习题参考答案以及附录
2010年3月28日
3.1C语言初步
1.选择题
题号
答案
题号
答案
题号
答案
题号
答案
题号
答案
(1)
B
(2)
D
(3)
C
(4)
B
(5)
D
(6)
C
(7)
A
(8)
B
(9)
A
(10)
B
(11)
B
(12)
B
(13)
A
(14)
D
2.填空题
题号
答案
(1)
中级语言、低级语言、高级语言、系统程序、应用程序
(2)
scanf、printf
(3)
函数
(4)
main
(5)
关键字
(6)
标识符是字母、下划线和数字的排列,但必须用字母或下划线开头。
(7)
以符号/*(书上漏掉一空)作为开始标记,以*/符号作为结束标记。
3.简答题
(1)机器语言、汇编语言、高级语言各有什么特点?
Ø机器语言:
是二进制代码形式表示的机器基本指令的集合。
Ø汇编语言:
用助记符代表机器指令的编程语言。
Ø高级语言:
采用类似自然语言的抽象的编程语言。
在一定程度上与机器无关,给编程带来了极大方便。
但是计算机不能直接识别,需经过翻译才能执行。
(2)程序翻译的方式有哪两种?
各有哪些特点?
Ø将高级语言程序翻译为目标程序,有编译(Compile)与解释(Interpretation)两种方法。
Ø使用编译方法翻译高级语言程序时,需要用到一个称为“编译程序”的软件。
编译过程包括翻译和查错两个功能。
包括:
词法分析、语法和语义分析、生成目标程序、优化目标程序。
Ø解释也是将高级语言源程序翻译为机器指令的一种方式,但它与编译方式不同,不是把整个高级语言源程序一起翻译成一个目标程序。
而是翻译一句,执行一句,不产生整个的目标程序。
(3)常见的程序设计有哪些结构?
Ø常见的程序设计主要有顺序结构、分支结构(选择结构)、循环结构。
(4)什么是结构化程序设计?
Ø结构化程序设计以模块功能和处理过程设计为主的详细设计为基本原则。
它主要采用自顶向下、逐步求精的设计方法,使用三种基本控制结构(顺序、选择、循环)编制程序。
(5)C语言具有哪些特点?
C语言相对于其它语言有很多的优点,概括来讲,其主要特点如下:
●语言简洁紧凑
●表达能力强
●数据结构丰富
●结构化程序设计语言
●可直接对硬件进行操作
●执行效率高
●可移植性好(与汇编语言比
(6)C语言程序具有哪些基本组成部分?
C语言程序一般由:
编译预处理语句、自定义类型或全局变量定义、main函数、标准库函数与自定义函数组成。
(7)C语言程序的书写规则主要有哪些?
●代码必须符合语法规则,标识符一般用小写字母,大小写敏感
●尽量不把多条语句写在程序的同一行上
●适当地可使用空行和空格,增强程序的可读性
●常用缩进书写格式,使得程序结构清晰
●增加相应的输入输出提示信息,增强程序运行的友好性
●函数体内采用分层缩进和模块化的书写方式,增强代码的可维护性
(8)一个C语言应用程序上机过程一般要经过哪几个步骤?
简述各步的作用。
一个C语言应用程序上机过程一般要经过4个重要的步骤:
编辑(edit)、编译(Compile)、连接(Link)、装入执行(load&excute)。
●第1个步骤作用是编辑文件,这是用编辑器程序(editorprogram)完成的。
●第2个步骤作用是将C程序预处理并翻译为机器语言代码(也称为目标码)。
●第3个步骤作用是将目标码与库函数代码连接起来,生产可执行程序exe文件。
●第4个步骤作用是把.exe程序放进内存中,在CPU控制下逐条指令地执行程序,最终得到结果。
4.编程题
说明:
由于同一题目解题方法有多种,故正确答案有多种,以下答案仅供参考。
(1)编写一个C语言应用程序,其功能是显示以下图形。
#
##
###
####
#####
#include
voidmain()
{
printf("#\n");
printf("##\n");
printf("###\n");
printf("####\n");
printf("#####\n");
}
(2)编写C语言程序,运行后输出以下信息。
**************************
欢迎进入C语言的天地!
**************************
#include
voidmain()
{
printf("**************************\n");
printf("欢迎进入C语言的天地!
\n");
printf("**************************\n");
}
(3)编写一个程序,在屏幕上输出你的姓名。
#include
voidmain()
{
printf("张小五\n");
}
3.2数据类型、运算符与表达式
1.选择题
题号
答案
题号
答案
题号
答案
题号
答案
题号
答案
(1)
B
(2)
A
(3)
B
(4)
A
(5)
A
(6)
C
(7)
C
(8)
A
(9)
B
(10)
D
(11)
C
(12)
A
(13)
A
(14)
C
(15)
D
(16)
C
(17)
D
(18)
D
2.填空题
题号
答案
(1)
2、1
(2)
#define符号常量
(3)
类型变量;
(4)
1、0
(5)
使用“#define符号常量”的形式,其中符号一般用大写
(6)
unsignedint、double、char
(7)
++、&&
(8)
1、0
(9)
1
(10)
1.0
(11)
5、5、3
(12)
(x>20)&&(x<30)||(x<-100)
(13)
1、0、1、1(更正:
第四个表达式少括号,应该为b==(a=2))
(14)
2.5
(15)
!
a&&!
b
(16)
4,10,6
(17)
3,3
(18)
a*1.0/(b*c)
3.简答题
(1)C语言主要有哪些常用的运算符,这些运算符的优先级是怎么划分的?
C语言常见与常用的运算符有如下:
●算术运算符:
用于各类数值运算。
包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
●关系运算符:
用于比较运算。
包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!
=)六种。
●逻辑运算符:
用于逻辑运算。
包括与(&&)、或(||)、非(!
)三种。
●位操作运算符:
参与运算的量,按二进制位进行运算。
包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
●赋值运算符:
用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
●条件运算符:
这是一个三目运算符,用于条件求值(?
:
)。
●逗号运算符:
用于把若干表达式组合成一个表达式(,)。
C语言常见与常用的运算符优先级:
总体上,关系运算符的优先级低于算术运算符;关系运算符的优先级高于赋值运算符;逻辑运算符中优先级顺序为!
→&&→||,且!
高于算术运算符,&&,||低于关系运算符。
详细的优先级排列见如下表格,从高到低:
优先级
性质
运算符
意义
结合性
1(最高)
()
括号,最高优先级,内层更高
lefttoright
从左至右
[]
下标运算符
.
结构体成员运算符
->
指向结构体成员
2
!
逻辑非运算
righttoleft
从右至左
~
按位取非运算
-
负号
++
自增一
--
自减一
&
取变量地址
*
取指针所指空间的值
(type)
强制类型
sizeof
取字节数目
3
*
乘
lefttoright
从左至右
/
除
%
按模取余
4
+
加
lefttoright
从左至右
-
减
5
<<
向左移位(向高位移)
lefttoright
从左至右
>>
向右移位(向低位移)
6
<
小于
lefttoright
从左至右
<=
小于等于
>
大于
>=
大于等于
7
==
等于
lefttoright
从左至右
!
=
不等于
8
&
按位与
lefttoright
从左至右
9
^
按位异或
lefttoright
从左至右
10
|
按位或
lefttoright
从左至右
11
&&
逻辑与
lefttoright
从左至右
12
||
逻辑或
lefttoright
从左至右
13
?
:
条件运算符
righttoleft
从右至左
14
=
右值赋给左值
righttoleft
从右至左
+=
左值与右值完成相关运算后再赋给左值。
-=
*=
/=
%=
|=
^=
&=
>>=
<<=
15(最低)
逗号运算符(表达式结果为最后一个表达式的结果)
lefttoright
从左至右
(2)用户标识符在命名时,应注意哪几个方面?
用户为程序中的变量、常量、数组、函数、文件和类型等数据所起的名字称为标识符。
标识符是字母、下划线和数字的排列,但必须用字母或下划线“_”开头。
标识符大小写敏感,一般使用小写字母。
标准C对标识符的规定最长可允许32个字符。
用户定义的标识符不能与系统的关键字有冲突。
(3)C语言的表达式有哪些?
它跟语句有什么关系?
C语言的表达式主要有:
算术表达式、关系表达式、逻辑表达式、赋值表达式、条件表达式、逗号表达式等。
表达式跟语句的关系:
表达式加上分号后就构成语句。
(4)C语言的数据类型有哪些?
各有什么特点?
C语言的数据类型主要有:
各有什么特点(略):
见教材,主要从它们占用的存储空间长度,存储格式、运算特点方面回答。
4.编程题
说明:
由于同一题目解题方法有多种,故正确答案有多种,以下答案仅供参考。
(1)编写一个程序,将大写字母转换为小写字母。
#include
voidmain()
{
charch;
printf("请输入一个合法的大写字母:
\n");
ch=getchar();
if(ch>=’A’&&ch<=’Z’)
ch=ch+’a’-‘A’;
printf("转换后的字母为:
%c\n",ch);
}
(2)设inti=12,j=25,k=56;,编写程序分别输出以下表达式的值及输出表达式执行前后变量i、j、k的值。
①(++i)*(++j)*(++k)②(i++)*(++j)*(k++)
③i=i+j,j=j+k,k=k+i④!
(i=j)&&(j=k)
#include
voidmain()
{
inti,j,k;
intr1,r2,r3,r4;/*存放表达式运算结果*/
i=12,j=25,k=56;/*表达式①计算前变量初始值*/
printf("表达式①执行之前i=%d,j=%d,k=%d\n",i,j,k);
r1=(++i)*(++j)*(++k);
printf("表达式①=%d\n",r1);
printf("表达式①执行之后i=%d,j=%d,k=%d\n\n",i,j,k);
i=12,j=25,k=56;/*表达式②计算前变量初始值*/
printf("表达式②执行之前i=%d,j=%d,k=%d\n",i,j,k);
r2=(i++)*(++j)*(k++);
printf("表达式②=%d\n",r2);
printf("表达式②执行之后i=%d,j=%d,k=%d\n\n",i,j,k);
i=12,j=25,k=56;/*表达式③计算前变量初始值*/
printf("表达式③执行之前i=%d,j=%d,k=%d\n",i,j,k);
r3=(i=i+j,j=j+k,k=k+i);
printf("表达式③=%d\n",r3);
printf("表达式③执行之后i=%d,j=%d,k=%d\n\n",i,j,k);
i=12,j=25,k=56;/*表达式④计算前变量初始值*/
printf("表达式④执行之前i=%d,j=%d,k=%d\n",i,j,k);
r4=!
(i=j)&&(j=k);
printf("表达式④=%d\n",r4);
printf("表达式④执行之后i=%d,j=%d,k=%d\n\n",i,j,k);
}
3.3简单C程序设计
1.选择题
题号
答案
题号
答案
题号
答案
题号
答案
题号
答案
(1)
D
(2)
D
(3)
BC
(4)
A
(5)
A
(6)
BB
(7)
D
(8)
D
(9)
D
(10)
B
(11)
D
(12)
D
(13)
B
(14)
A
(15)
A
(16)
B
(17)
A
注意:
选择题的第(10)题前三个选项printf语句中漏掉了“%”
2.填空题
题号
答案
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
注意:
本题书中的%514f应该为%5.1f
(9)
b、b、b
(10)
t=a、c=t
(11)
32766、-1、-1
(12)
-14
(13)
交换两个变量a与b的数值
(14)
忽略当前的输入数据、a1,a2,a3的值分别为:
a1=10,a2=20,a3=40
注意:
本题书中的scanf("%d%d*%d%d",&a1,&a2,&3);
应该改为scanf("%d%d%*d%d",&a1,&a2,&3);
执行结果改为语句执行后a1,a2,a3的值分别为
(15)
A□□□B□□□(这里的□表示空格)
(16)
3.程序改错题
将程序修改如下:
#include
voidmain()
{
floata,b,s,l;
scanf("%f,%f",&a,&b);
s=a*b;
l=a+b;
printf("l=%f,s=%f\n",l,s);
}
4.编程题
(1)编写程序,从键盘输入梯形的上下底边长度和高,计算梯形的面积。
#include
voidmain()
{
floata,b,h,area;
printf("请输入梯形的上下底边长度和高:
\n");
scanf("%f%f%f",&a,&b,&h);
area=(a+b)*h/2;
printf("面积为=%10.2f\n",area);
}
(2)编写程序,从键盘输入某学生的四科成绩,求出总分和平均分。
#include
voidmain()
{
floata,b,c,d,sum,aver;
printf("请输入四科成绩:
\n");
scanf("%f%f%f%f",&a,&b,&c,&d);
sum=a+b+c+d;
aver=sum/4;
printf("总成绩为=%5.2f\n",sum);
printf("平均分为=%5.2f\n",aver);
}
(3)编写摄氏温度、华氏温度转换程序。
要求:
从键盘输入一个摄氏温度,屏幕就显示对应的华氏温度,输出取两位小数。
转换公式:
F=(C+32)×9/5
#include
voidmain()
{
floatC,F;
printf("输入一个摄氏温度:
\n");
scanf("%f",&C);
F=(C+32)*9/5;
printf("对应华氏温度为=%5.2f\n",F);
}
3.4程序结构
1.选择题
题号
答案
题号
答案
题号
答案
题号
答案
题号
答案
(1)
B
(2)
C
(3)
B
(4)
A
(5)
B
(6)
A
(7)
A
(8)
D
(9)
C
(10)
D
(11)
C
(12)
C
(13)
D
(14)
B
(15)
C
(16)
D
(17)
A
更正:
选择题的第(12)题前1个选项中的“b+a-b”应该改为:
“b=a-b”
2.填空题
题号
答案
(1)
顺序、选择、循环
(2)
(3)
if(a<=b)
{x=1;printf(“####x=%d\n”,x);}
else
{y=2;printf(“****y=%d\n”,y);}
(4)
10
(5)
x%i==0
3.程序分析题
(1)阅读程序,写出运行结果
main()
{
intx=100,a=10,b=20,ok1=5,ok2=0;
if(a
=15)if(!
ok1)x=1;
elseif(ok2)x=10;
elsex=-1;
printf(“%d\n”,x);
}
(2)阅读程序,写出运行结果
main()
{
inty=9;
for(;y>0;y--)
if(y%3==0){printf(“%d”,--y);cintinue;}
}
4.程序设计题:
(1)编程序,输入一个整数,输出其符号(若≥0,输出1;若≤0,输出-1)。
#include
voidmain()
{
intx,sign;
printf("请输入一整数:
\n");
scanf("%d",&x);
if(x>=0)
sign=1;
else
sign=-1;
printf("它的符号为:
%d\n",sign);
}
(2)编程序,输入三个数,输出其中最小值。
#include
voidmain()
{
floata,b,c,min;
printf("请输入3个数:
\n");
scanf("%f%f%f",&a,&b,&c);
if(a
min=a;
elseif(bmin=b;
else
min=c;
printf("最小数为:
%f\n",min);
}
(3)输入一个正整数,是否既是5又是7的整倍数,若是,则输出Yes;否则输出No。
#include
voidmain()
{
inta;
printf("请输入1个正整数:
\n");
scanf("%d",&a);
if(a<=0)
{
printf("输入的数不是正整数!
\n");
return;
}
if(a%5==0&&a%7==0)
printf("Yes\n");
else
printf("No\n");
}
(4)某市出租车3公里的起租价为6元,3公里以外,按1.5元/公里计费。
现编写程序,要求:
输入行车里程数,输出应付车费。
#include
voidmain()
{
floatx,y;
printf("请输入行车里程数:
\n");
scanf("%f",&x);
if(x>3)
y=6+(x-3)*1.5;
else
y=6;
printf("应付车费%f元!
\n",y);
}
(5)有一分段函数:
编写程序,要求输入x的值后,输出y的值。
#include
voidmain()
{
floatx,y;
printf("请输入分段函数x:
\n");
scanf("%f",&x);
if(x<=-5||x>=10)
{
printf("输入错误,x超出范围!
\n",y);
return;/*返回操作系统*/
}
elseif(x==0)
y=x-1;
elseif(x<0)
y=x;
else
y=x+1;
printf("函数的值y=%f!
\n",y);
}
(6)编程序,输入10个整数,统计并输出其中正数、负数和零的个数。
#include
voidmain()
{
inti,x,pos=0,neg=0,zero=0;
printf("请输入输入10个整数:
\n");
for(i=1;i<=10;i++)
{
scanf("%d",&x);
if(x>0)pos++;
elseif(x<0)neg++;
elsezero++;
}
printf("正数的数量=%d!
\n",pos);
printf("负数的数量=%d!
\n",neg);
printf("零的数量=%d!
\n",zero);
}
(7)打印输出以下图案。
(c)1
123
12345
1234567
123456789
(b)*
***
*****
***