程序设计基础习题及答案.docx
《程序设计基础习题及答案.docx》由会员分享,可在线阅读,更多相关《程序设计基础习题及答案.docx(44页珍藏版)》请在冰豆网上搜索。
程序设计基础习题及答案
《程序设计基础》习题参考答案
【习题1基本概念】
一、简答题(在课本中寻找答案,略)
1.1C程序的基本结构包括哪些内容?
1.2如何定义标识符?
1.3输入格式、输出格式的组成包括哪些内容?
1.4C语言函数分为哪两类?
1.5计算表达式的值应该考虑哪些方面?
1.6上机调试程序的步骤如何?
1.7常量与变量的区别?
1.8C语言中的标识符的定义规则?
1.9变量为什么要“先定义,后使用”?
1.10字符常量'a'与字符串常量"a"有何区别?
1.11大小写字母转换的规则是什么?
1.12变量的具有哪三种属性?
二、单项选择题
1.13 C语言中,int型数据在内存中的存储形式是(D)。
A)ASCII码B)原码C)反码D)补码
1.14 下面四个选项中,均是不合法的用户标识符的选项是(C)。
A)BA、x_0、do
B)float、1a0、_Y
C)x-y、goto、123
D)_123、tmp、CHAR
1.15 下列选项中不正确的常数的选项是(D)。
A)0x12FB)-1.23E-2C)12.0D)0388
1.16 下面正确的字符常量是(B)。
A)"a"B)'\\'C)"\n"D)"\376"
1.17 下面正确的字符串常量是(C)。
A)'a'B)'376'C)"\\n"D)376
1.18 表达式'A'+4*25.0-'b'的正确结果是(B)。
A)67B)67.0C)不确定D)67L
1.19 执行printf("%x",100);后的输出结果是(C)。
A)100B)0x100C)0X64D)64
1.20 int型的-1在内存中的存储形式是(A)。
A)1111111111111111
B)0000000000000001
C)1111111111111110
D)1000000000000001
1.21 存储字符串"\\\'abc\376"需要的字节数是(D)。
A)11B)13C)6D)7
三、判断并改错
1.22C程序执行的入口是main()函数,所以main函数必须放在程序的开头。
错误:
main函数可以放在程序的任何位置。
并不限定在程序的开头。
1.23定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。
错误:
不可以交叉出现,数据说明部分在执行语句部分的前面。
1.24编辑与编译不是一回事。
错误:
不是一回事。
编辑完成源程序的输入和修改;编译是对源程序进行语法检查,如果无语法错误,则生成目标程序。
1.25scanf("%d,%d",&x,&y);的正确输入格式:
3,4<回车>。
正确
1.26注释内容太多会影响程序的执行效率。
错误:
不会影响程序的执行效率。
因为在编译时,编译系统将注释内容删除或用空格代替,所以注释内容不会编译到目标程序中。
1.27所有的数学公式可以直接出现在源程序中。
错误:
数学公式需要转换成C语言能够接受的公式才能出现在源程序中。
四、编程题
1.28在屏幕上输出自己名字的拼音。
提示:
中文名字叫“张三”,对应的拼音为“ZhangSan”,输出用printf()函数。
1.29输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上。
提示:
定义圆的半径r,圆的周长:
2*3.14*r,输出结果保留2位小数可以用%.2f
【习题2运算符与表达式】
一、计算题
2.12.8+7%3*11%2/4(答案:
2.8)
2.25/2+5.0/2+7%6(答案:
5.5)
2.3a=12,a*=2+3(答案:
a=60)
2.4a=3,b=4,c=5,a+b>c&&b==c(答案:
0)
2.53>5?
3:
5<8?
25:
40(答案:
25)
2.6设a=1,b=2,c=3,d=4,m=n=1,有表达式(m=a>b)&&(n=c>d),计算表达式后m,n的值?
(答案:
m=0,n=1)
2.7 设intb=7;floata=2.5,c=4.7;求下面表达式的值。
a+(int)(b/2*(int)(a+c)/2)%4(答案:
4.5)
二、单项选择题
2.8 若有代数式
,则不正确的C语言表达式是(C)。
A)x/b/c*y*8B)8*x*y/b/c
C)8*x*y/b*cD)x*y/c/b*8
2.9 有如下类型说明:
intk,a,b;
unsignedlongw=8;
doublex=2.9
则以下不符合C语言语法的表达式是(A)。
A)x%(-3)B)w*=-2
C)k=(a=6,b=4,a-b)D)a*=a+=a-=(b=4)*(a=3)
2.10 有如下类型说明:
floatn;
intm;
则以下能实现将n中的数值保留小数点后两位,第三位四舍五入的表达式是(B)。
A)n=(n*100+0.5)/100.0B)m=n*100+0.5,n=m/100.0
C)n=n*100+0.5/100.0D)n=(n/100+0.5)*100.0
2.11 设k=7,x=12;则下列表达式值为3的是(D)。
A)x%=(k%=5)B)x%=(k-k%5)
C)x%=k-k%5D)(x%=k)-(k%=5)
2.12 已知m=48,ch='a',n=0;则表达式(m>=n&&ch<'b'&&!
n)的值是(B)。
A)0B)1C)真D)非0
2.13 下面哪个式子在b为奇数时结果为假(C)。
A)a%2==1B)!
(a%2==0)C)!
(a%2)D)a%2
2.13 执行printf("%f",(x=3,y=5,x>y?
1:
1.5));后的输出结果是(D)。
A)语法错误B)1C)1.5D)1.
2.14 能表示条件0≤x≤100的表达式是(D)。
A)0<=x<=100B)x>=0,x<=100
C)0≤x≤100D)x>=0&&x<=100
2.15 判断char型变量ch为数字的正确表达式是(B)。
A)ch>="0"&&ch<="9"B)ch>='0'&&ch<='9'
C)'0'≤ch≤'9'D)ch>='0'||ch<='9'
三、编程题(应用条件运算)
2.16输入一个整型成绩x,如果大于等于60分,输出“pass”,否则输出“fail”。
提示:
printf("%s",x>60?
"pass":
"fail");
2.17 输入一个年份y,如果是闰年,输出“yisaleapyear”,否则输出“yisnotaleapyear.”
提示:
printf("%dis%s",y%4==0&&y%100!
=0||y%400==0?
"aleapyear.":
"notaleapyear.");
2.18 输入三条边a,b,c,如果它们能构成一个三角形,输出“Yes”,否则输出“No”。
提示:
printf("%s",a+b>c&&a+c>b&&b+c>a?
"Yes":
"No");
2.19 输入三个数x,y,z,按从小到大的输出结果。
提示:
分别用max0,min0代表最大、最小值,mid0表示中间值。
max0=(x>y?
x:
y)>z?
(x>y?
x:
y):
z;max0=(xx:
y)(xx:
y):
z;
mid0=x+y+z-max0-min0;
2.20 输入一个平面上的点坐标,判断它是否落在圆心(0,0),半径为1的圆内,如果在圆内,输出“Yes”,否则输出“No”。
提示:
分别用x,y代表平面上一个点。
printf("%s",x*x+y*y<=0?
"Yes":
"No");
2.21自增、自减运算符的用法与运算规则示例。
2.22计算下列表达式。
(1)
(2)
提示:
模仿例2.27
2.23字母的大小写转换。
2.24计算圆柱体的体积V=πr2h,其中π=3.14159。
提示:
模仿2.27
2.25输入两个整数,输出其中最大者。
提示:
模仿P29
2.26输入三个整数,输出其中最小者。
提示:
min(min(a,b),c);
2.27设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
参考源程序:
main()
{floatr,h,C1,Sa,Sb,Va,Vb;
scanf("%f,%f",&r,&h);
C1=2*3.14*r;
Sa=3.14*r*r;
Sb=4*Sa;
Va=4*3.14*r*r*r/3;
Vb=Sa*h;
printf("C1=%.2f\n",C1);
printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);
}
【习题3控制流】
3.1 编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。
提示:
x代表输入的整数,if(x%2==0)printf("\neven");elseprintf("\nodd");
3.2编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息。
提示:
x,y代表平面坐标,if(x*x+y*y==1)printf("\nYes");elseprintf("\nNo");
3.3编程实现,输入一个成绩等级(A-E),显示相应的百分制成绩段。
A:
90-100
B:
80-89
C:
70-79
D:
60-69
E:
<60
提示:
chargrade;
if(grade=='A')printf("\n90-100");
elseif(grade=='B')printf("\n80-89");
....
3.4写出下面程序的运行结果:
#include
main()
{
inta=-1,b=1,c=5;
switch(a>0){
case1:
switch(b-2<0){
case1:
printf("&");break;
case2:
printf("*");break;
}
case0:
switch(c==5){
case0:
printf("!
");break;
case1:
printf("#");break;
default:
printf("%%");
}
default:
printf("@");
}
}
运行结果:
@
3.5将以下语句改写成switch语句。
if((t>0)&&(t<=10))
if((t>=3)&&(t<=6))x=2;
elseif((t>1)||(t>8))x=3;
elsex=1;
elsex=0;
提示:
intt;
if(t<=0||t>10)c=0;
elsec=t;
switch(t)
{case0:
x=0;break;
case1:
case2:
x=3;
case3:
case4:
case5:
case6:
x=2;
case7:
case8:
case9:
x=3;
case10:
x=2;
}
3.7编程实现一个具有简单四则运算功能的计算器。
提示:
参照例4.18,随机产生3个数,其中一个数用来判断是哪种运算。
3.8编程实现,输入一行字符,将其中的数字字符对应的整数值加起来并输出结果。
如:
a45b8&*3则是4+5+8+3,结果为20。
提示:
charc;intsum=0;
while((c=getchar())!
='\n')if(c>='0'&&c<='9')sum=sum+c-'0';
3.9编程实现,求
的值。
提示:
先计算n!
,再在计算阶乘的外面套上一层循环。
注意:
20!
是一个很大的值,floats=1;inti;例如:
计算6!
:
for(i=1;i<=6;i++)s=s*i;
3.10编程实现,找出1000之内的所有完数,并按下面格式输出其因子:
6itsfactorsare1,2,3,
所谓“完数”是指一个数如果恰好等于它的因子之和,因子是指能够整除该数的数。
提示:
先判断数是否为完数,如果是再考虑输出因子。
以6为例输出因子:
for(i=1;i<6;i++)if(6%i==0)printf("%d,",i);
3.11编程实现,计算序列的前20项之和,
,
,
,
,
,
,...
提示:
这是一个累加式,每项是一个分式,用a、b分别表示分子、分母。
注意:
如果a、b都是整数,则是整除。
floatsum=0,a=2,b=1;inti;
for(i-1;i<=20;i++){sum=sum+a/b;a=a+b;b=a-b;}
3.12编程实现,求Sn=a+aa+aaa+...+
aa...a之值,其中a是一个数字。
如:
2+22+222+2222+22222(此时n=5),n,a由键盘输入。
提示:
这是一个累加式,后1项可以由前一项表示,譬如:
第2项可以由第1项表示:
第1项t=a;第2项:
t=t*10+a;
3.13编程实现,把从键盘输入的金额数(以圆为单位)按人民币面额划分,然后显示支付该金额的各种面额人民币的数量。
提示:
譬如:
123.58元可以表示100元:
1张;20元:
1张;2元:
1张;1元:
1张;5角:
1张;5分:
1枚;2分:
1枚;1分:
1枚。
为了简单可以只完成整数部分转换,即输入的金额数为整数。
3.14编程实现,使用循环结构打印以下图案。
*
***
*****
*******
*****
***
*
提示:
输出时,本图案要按向上三角形和向下三角形进行输出。
每行输出中包括空格输出,‘*’号输出。
输出空格和‘*’号个数要与行循环控制变量关联起来。
3.15编程实现,以菜单方式实现猜数游戏系统。
(功能自己设定)
提示:
模仿例4.14和例4.18完成。
功能可以包括猜数范围,人数等设置。
3.16编程实现,以菜单方式实现四则运算辅助教学系统。
提示:
随机产生两个操作数和运算符+、-、*、/,由使用者输入一个数,判断计算结果与输入的数是否相等,如果相等,表示正确,否则是错误的。
3.17输入四个整数,要求按大小顺序输出。
参考源程序:
main()
{inta,b,c,d,t;scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a
if(aif(aif(bif(bif(cprintf("%d,%d,%d,%d\n",a,b,c,d);
}
3.18求∑n!
(n=1->20),(即求1!
+2!
+3!
+4!
+5!
+…+20!
)
参考源程序:
main()
{intn,i=1;longsum=0,s=1;
scanf("%d",&n);
while(i<=n)
{s=s*i;sum=sum+s;i++;}
printf("sum=%ld\n",sum);
}
3.19输入两个正整数m和n,求其最大公约数和最小公倍数。
main()
{longm,n,i=1,j,s;
scanf("%ld,%ld",&m,&n);
for(;i<=m&&i<=n;i++)
{if(m%i==0&&n%i==0)s=i;}
if(m>=n)j=m;
elsej=n;
for(;!
(j%m==0&&j%n==0);j++);
printf("s=%ld,j=%ld\n",s,j);
}
3.20输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
参考源程序:
#include"stdio.h"
main()
{
charc;inti=0,j=0,k=0,l=0;
while((c=getchar())!
='\n')
{if(c>=65&&c<=90||c>=97&&c<=122)i++;
elseif(c>=48&&c<=57)j++;
elseif(c==32)k++;
elsel++;
}
printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);
}
3.21打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。
例如:
153是一个水仙花数,因为153=1^3+5^3+3^3。
参考源程序:
#include"math.h"
main()
{
intx=100,a,b,c;
while(x>=100&&x<1000)
{a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;
if(x==(pow(a,3)+pow(b,3)+pow(c,3)))printf("%5d",x);
x++;
}
}
3.22猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘多少桃子。
参考源程序:
main()
{
inti=1,sum=0;
for(;i<=10;i++)
sum=2*sum+1;
printf("sum=%d\n",sum);
}
3.23打印以下图案
*
***
*****
*******
*****
***
*
参考源程序:
#include"math.h"
main()
{
inti=1,k,l,m;
for(;i<=49;i++)
{
k=i%7;
l=3-fabs((i-1)/7-3);
m=fabs(i-4-7*((i-1)/7));
if(k==1)
printf("\n");
if(m<=l)
printf("*");
else
printf("");
}
printf("\n");
}
3.24古典问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析:
兔子的规律为数列1,1,2,3,5,8,13,21....
2.程序源代码:
main()
{
longf1,f2;
inti;
f1=f2=1;
for(i=1;i<=20;i++)
{printf("%12ld%12ld",f1,f2);
if(i%2==0)printf("\n");/*控制输出,每行四个*/
f1=f1+f2;/*前两个月加起来赋值给第三个月*/
f2=f1+f2;/*前两个月加起来赋值给第三个月*/
}
}
【习题4函数与程序结构】
一、填空题
4.1C语言程序执行的开始处是main函数。
4.2C程序中的一个函数由两部分组成,即声明部分和执行部分。
4.3为了保证被调用函数不返回任何值,其函数定义的类型应为void。
4.4若一个局部变量的存储类型是static,则该变量的值在程序执行完成时被释放。
4.5预处理命令#include的作用是文件包含。
4.6定义一个宏,功能是判断两个数是否相等,相等为1,不等为0。
#defineEQU(a,b)(a)==(b)?
1:
0
4.7变量的存储类别有自动型、静态型、寄存器型、和外部类型共4种,它们分别用auto、static、register、extern标识。
二、选择题
4.8下述函数定义形式正确的是(C)。
A.intf(intx;inty)B.intf(intx,y)
C.intf(intx,inty)D.intf(x,y:
int)
4.9关于函数参数,说法正确的是(A)。
A.实参与其对应的形参各自占用独立的内存单元
B.实参与其对应的形参共同占用一个内存单元
C.只有当实参和形参同名时才占用同一个内存单元
D.形参是虚拟的,不占用内存单元
4.10用数组名作为函数的实参时,传递给形参的是(A)。
A.数组的首地址B.数组的第1个元素
C.数组中的全部元素D.数组的元素个数
4.11复合语句中定义的变量的作用范围是(D)。
A.整个源文件B.整个函数
C.整个程序D.所定义的复合语句
4.12一个函数的返回值由(D)确定。
A.return语句中的表达式B.调用函数的类型
C.系统默认的类型D.被调用函数的类型
4.13在一个C源文件中,若要定义一个只允许本源文件所有函数使用的全局变量,其他文件中不允许使用,则该变量需要使用的存储类别是(D)。
A.autoB.registerC.externD.static
三、判断题
4.14若定义的函数没有参数,则函数名后的圆括号可以省略。
(⨯)
4.15函数的函数体可以是空语句(√)。
4.16只有main函数才能调用其他函数。
(√)
4.17return语句中表达式的类型必须与函数定义的类型一致。
(⨯)
4.18函数的实参和形参可以是相同的名字。
(√)
4.19函数调用中,形参与实参的类型和个数必须保持一致。
(√)
4.20外部类型的变量只能定义一次,但可在不同地方声明多次。
(√)
4.21外部类型的变量作用范围大,编程中应多用外部变量。
(⨯)
4.22预处理命令行必须以#开头,且最后要用分号结尾。
(⨯)
4.23宏命令的处理占用编译时间,而不占用运行时间。
(√)
四、看程序写结果
4.24
intfun(intn)
{intf=1;
f=f*n*2;
return(f);
}
main()
{inti,j;
for(i=1;i<=5;i++)
printf("%d\t",fun(i));
}
程序运行结果:
246810
4.25
intx1=30,x2=40;
main()
{intx3=10,x4=20;
sub(x3,x4);
sub(x2,x1);
printf("x1=%d,x2=%d,x3=%d,x4=%d",x1,x2,x3,x4);
}
sub(intx,inty)
{intx1=x;
x=y;
y=x1;
}
程序运行结果:
x1=30,x2=40,x3=10,x4=20
4.26
#defineA4