高级语言程序设计习题分析与解1.docx
- 文档编号:7188132
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:72
- 大小:48.55KB
高级语言程序设计习题分析与解1.docx
《高级语言程序设计习题分析与解1.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计习题分析与解1.docx(72页珍藏版)》请在冰豆网上搜索。
高级语言程序设计习题分析与解1
高级语言程序设计习题分析与解答
目 录
第三章 数据类型、运算符与表达式
第四章 最简的C程序设计——顺序程序设计
第五章 选择结构程序设计
第六章 循环结构控制
第七章 数 组
第八章 函 数
第九章 预处理命令
第十章 指 针
第十三章文 件
第三章 数据类型、运算符与表达式
3.7要将“China”译成密码,密码规律是:
用原来的字母后面第4个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。
因此,“China”应译为“Glmre”。
请编一程序,用赋初值的方法使c1,c2,c3,c4,c55个变量的值分别为,经过运算,使c1,c2,c3,c4,c5的值分别变为‘G’、‘l’、‘m’、‘r’、‘e’,并输出。
main()
{
charc1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’;
c1+=4;
c2+=4;
c3+=4;
c4+=4;
c5+=4;
printf(“密码是%c%c%c%c%c\n”,c1,c2,c3,c4,c5);
}
运行结果:
密码是Glmre
3.9求下面算术表达式的值
(1) x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7
=2.5+7%3*(int)(2.5+4.7)%2/4
=2.5+1*(int)(7.2)%2/4
=2.5+1*7%2/4
=2.5+7%2/4
=2.5+1/4
=2.5+0
=2.5
(2) 设a=2,b=3,x=3.5,y=2.5
(float)(a+b)/2+(int)x%(int)y
=(float)(2+3)/2+(int)3.5%(int)2.5
=5.0/2+3/2
=2.5+1
=3.5
3.10写出程序运行的结果。
main()
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
运行结果为:
9,11,9,10
3.12写出下面表达式运算后a的值,设原来a的值等于12,且a和n已定义为整型
(1) a+=a等价于a=a+a=12+12=24
(2) a-=2等价于a=a-2=12-2=10
(3) a*=2+3等价于a=a*(2+3)=12*5=60
(4) a/=a+a 等价于a=a/(a+a)=12/(12+12)=0
(5) a%=(n%=2) 第一步:
n%=2等价于n=n%2=5%2=1
第二步:
a%=1等价于a=a%1=12%1=0
(6) a+=a-=a*=a因为复合赋值是右结合,所以从有测算起
第一步:
a=a*a=12*12=144
第二步:
a=a-a=144-144=0
第三步:
a=a+a=0+0=0
返回目录
第四章最简单的C程序设计——顺序程序设计
4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
要求输出的结果如下:
a=3 b=4 c=5
x=1.200000,y=2.400000,z=-3.600000
x+y=3.60 y+z=-1.20 z+x=-2.4
u=51274 n= 128765
c1=’a’or97(ASCII)
c2=’b’or98(ASCII)
main()
{
inta,b,c;
longintu,n;
floatx,y,z;
charc1,c2;
a=3;b=4;c=5;
x=1.2;y=2.4;z=-3.6;
u=51274;n=128765;
c1=’a’;c2=’b’;
printf(“\n”);
printf(“a=-b=-c=-\n”,a,b,c);
printf(“x=%8.6f,y=%8.6f,z=%9.6f\n”,x,y,z);
printf(“x+y=%5.2f y+z=%5.2f z+x=%5.2f\n”,x+y,y+z,z+x);
printf(“u=%6ld,n=%9ld\n”,u,n);
printf(“c1=\’%c\’or%d(ASCII)\n”,c1,c1);
printf(“c2=\’%c\’or%d(ASCII)\n”,c2,c2);
}
4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆柱体积。
用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。
请编程序。
main()
{
floatpi,h,r,l,s,sq,vq,vz;
pi=3.1415926;
printf(“请输入圆半径r,圆柱高h:
:
\n”);
scanf(“%f,%f”,&r,&h);
l=2*pi*r;
s=r*r*pi;
sq=4*pi*r*r;
vq=3.0/4.0*pi*r*r*r;
vz=pi*r*r*h;
printf(“圆周长为:
l=%6.2f\n”,l);
printf(“圆面积为:
s=%6.2f\n”,s);
printf(“圆球表面积为:
sq=%6.2f\n”,sq);
printf(“圆球体积为:
vq=%6.2f\n”,vq);
printf(“圆柱体积为:
vz=%6.2f\n”,vz);
}
4.9输入一个华氏温度,要求输出摄氏温度。
公式为:
c=5/9*(F-32) 输出要有文字说明,取2位小数。
main()
{
floatc,f;
printf(“请输入一个华氏温度:
\n”);
scanf(“%f”,&f);
c=(5.0/9.0)*(f-32);
printf(“摄氏温度为:
%5.2f\n”,c);
}
4.10编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。
并思考以下问题:
(1)变量c1、c2应定义为字符型或整型?
抑二者皆可?
(2)要求输出c1和c2值的ASCII码,应如何处理?
用putchar函数还是printf函数?
(3)整型变量与字符变量是否在任何情况下都可以互相代替?
如:
charc1,c2; 与intc1,c2;是否无条件地等价?
#include“stdio.h”
main()
{
charc1,c2;
printf(“请输入两个字符c1,c2:
\n”);
c1=getchar();
c2=getchar();
printf(“用putchar语句输出结果为:
\n”);
putchar(c1);
putchar(c2);
printf(“\n”);
printf(“用printf语句输出结果为:
\n”);
printf(“%c,%c\n”,c1,c2);
}
返回目录
第五章 选择结构程序设计
5.5有一函数 x (x<1)
y= 2x-1 (1<=x<10)
3-11 (x>=10)
写一个程序,输入x值,输出y值。
提示:
根据x的取值范围判断计算y的公式,可是使用if else语句进行多重判断。
程序
main()
{
int x,y;
printf("输入x:
");
scanf("%d",&x);
if(x<1)
{
y=x;
printf("x==, y=x=%d\n",x,y);
}
elseif(x<10)
{
y=2*x-1;
printf("x==, y=2*x-1=%d\n",x,y);
}
else
{
y=3*x-11;
printf("x==, y=3*x-11=%d\n",x,y);
}
}
运行结果:
输入x:
3
x= 3, y=2*x-1=5
输入x:
10
x=10, y=3*x-11=19
输入x:
-5
x=-5, y=x=-5
5.6 给一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。
90分以上为‘A’,80-89分为‘B’,70-79分为‘C’,60-69分为‘D’,60分以下为‘E’。
提示:
对0-100之间的数据进行成绩等级判断,其他的分数视为不正确的成绩,提示输入错误。
对于多重分支结构,采用switch语句进行分支判断。
程序
main()
{
float score;
char grade;
printf("请输入学生成绩:
");
scanf("%f",&score);
while(score>100||score<0)
{
printf("\n输入有误,请重输.");
scanf("%f",&score);
}
switch((int)(score/10))
{
case10:
case9:
grade='A';break;
case8:
grade='B';break;
case7:
grade='C';break;
case6:
grade='D';break;
case5:
case4:
case3:
case2:
case1:
case0:
grade='E';
}
printf("成绩是%5.1f,相应的等级是%c.\n",score,grade);
}
运行结果:
请输入学生成绩:
95
成绩是 95.0,相应的等级是A.
请输入学生成绩:
81
成绩是 81.0,相应的等级是B.
请输入学生成绩:
50
成绩是 50.0,相应的等级是E.
请输入学生成绩:
-80
输入有误,请重输.
5.7 给定一个不多于5位的正整数,要求:
(1)求它是几位数;
(2)分别打印出每一位数字;(3)按逆序打印出各位数字。
例如:
原数为321,应输出123。
提示:
对输入不多于5位的正整数进行判断,可采用是否大于9999进行5位数字的判断,依次类推。
求出输入数字的每一位上的数字,并记录。
然后反序输出。
程序:
main()
{
longint num;
int indiv,ten,hundred,thousand,ten_thousand,place;
printf("请输入一个整数(0~99999):
");
scanf("%ld",&num);
if(num>9999)
place=5;
elseif(num>999)
place=4;
elseif(num>99)
place=3;
elseif(num>9)
place=2;
elseplace=1;
printf("place=%d\n",place);
printf("每位数字为:
");
ten_thousand=num/10000;
thousand=(int)(num-ten_thousand*10000)/1000;
hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;
ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;
indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);
switch(place)
{
case5:
printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);
printf("\n反序数字为:
");
printf("%d,%d,%d,%d,%d\n",indiv,ten,hundred,thousand,ten_thousand);
break;
case4:
printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\n反序数字为:
");
printf("%d,%d,%d,%d\n",indiv,ten,hundred,thousand);
break;
case3:
printf("%d,%d,%d",hundred,ten,indiv);
printf("\n反序数字为:
");
printf("%d,%d,%d\n",indiv,ten,hundred);
break;
case2:
printf("%d,%d",ten,indiv);
printf("\n反序数字为:
");
printf("%d,%d\n",indiv,ten);
break;
case1:
printf("%d",indiv);
printf("\n反序数字为:
");
printf("%d\n",indiv);
break;
}
}
运行结果:
请输入一个整数(0~99999):
97642
place=5
每位数字为:
9,7,6,4,2
反序数字为:
2,4,6,7,9
5.8 企业发放的奖金根据利润提成。
利润I低于或者等于10万元时,奖金可提成10%;利润高于10万,低于20万时(1000001000000时,超过100万的部分按照1%提成,从键盘输入当月利润I,求应发放奖金总数。
要求:
(1)用if语句编程序;
(2)用switch语句编程序。
提示:
计算利润时注意不同利润的不同提成比例。
例如,利润为15万时,其中10万元按照10%的比例提成,另外5万元按照7.5%提成。
程序
(1)使用if语句编程实现
main()
{
long i;
float bonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%ld",&i);
if(i<=100000)
bonus=i*0.1;
elseif(i<=200000)
bonus=bon1+(i-100000)*0.075;
elseif(i<=400000)
bonus=bon2+(i-200000)*0.05;
elseif(i<=600000)
bonus=bon4+(i-400000)*0.03;
elseif(i<=1000000)
bonus=bon6+(i-600000)*0.015;
else
bonus=bon10+(i-1000000)*0.01;
printf("奖金是.2f",bonus);
}
运行结果:
请输入利润i:
234000
奖金是 19200.00
(2)使用switch语句编程实现
main()
{
long i;
float bonus,bon1,bon2,bon4,bon6,bon10;
int c;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%ld",&i);
c=i/100000;
if(c>10)
c=10;
switch(c)
{
case0:
bonus=100000*0.1;break;
case1:
bonus=bon1+(i-100000)*0.075;break;
case2:
case3:
bonus=bon2+(i-200000)*0.05;break;
case4:
case5:
bonus=bon4+(i-400000)*0.03;break;
case6:
case7:
case8:
case9:
bonus=bon6+(i-600000)*0.015;break;
case10:
bonus=bon10+(i-1000000)*0.01;break;
}
printf("奖金是.2f",bonus);
}
运行结果:
请输入利润i:
234000
奖金是 19200.00
5.9 输入4个整数,要求按照由大到小的顺序输出
提示:
可以采用依次比较的方法进行大小比较。
程序
main()
{
int t,a,b,c,d;
printf("请输入4个整数:
");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("\na=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(a>d)
{t=a;a=d;d=t;}
if(b>c)
{t=b;b=c;c=t;}
if(b>d)
{t=b;b=d;d=t;}
if(c>d)
{t=c;c=d;d=t;}
printf("排序结果如下:
\n");
printf("====\n",a,b,c,d);
}
运行结果:
请输入4个整数:
9,5,7,6
a=9,b=5,c=7,d=6
排序结果如下:
5 6 7 9
5.10 有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1,这四个塔的高度分别为10m,塔以外无建筑物。
今输入任一个点的坐标,求该点的建筑高度(塔外的高度为0)。
提示:
输入任一点的坐标,根据该点与四个圆心的距离是否大于半径进行判断。
如果在塔外则该点高度为0,否则该点高度为10
程序
main()
{
int h=10;
float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;
printf("请输入一个点(x,y");
scanf("%f,%f",&x,&y);
d1=(x-x1)*(x-x1)+(y-y1)*(y-y1);
d2=(x-x2)*(x-x2)+(y+y2)*(y+y2);
d3=(x+x3)*(x+x3)+(y-y3)*(y-y3);
d4=(x+x4)*(x+x4)+(y+y4)*(y+y4);
if(d1>1&&d2&&d3>1&&d4>1)
h=0;
printf("该点高度为%d",h);
}
运行结果:
请输入一个点(x,y)2.12.3
该点高度为10
请输入一个点(x,y)00
该点高度为0
返回目录
第六章 循环控制
6.1输入两个正整数m和n,求其最大公约数和最小公倍数。
算法分析:
两个数的最大公约数是指能同时被这两个整数整除的最大的数,由于最大公约数不会大于这两个数,其最大值是这两个整数中较小的一个,可以用循环来实现,循环初值为1,终值是这两个整数中较小的一个数。
求出最大公约数后,可以求出最小公倍数(最大公约数*最小公倍数=m*n)
程序实现:
main()
{intm,n,t,i;
printf("inputtwointegerdata:
\n");
scanf("%d,%d",&m,&n);
if(m>n)
{t=m;
m=n;
n=t;}
for(i=1;i<=m;i++)
if(m%i==0&&n%i==0)
{if(c>='A'&&c<='Z'||c>='a'&&c<='z')
letter++;
elseif(c=='')
space++;
elseif(c>='0'&&c<='9')
digit++;
elseother++;}
printf("englishcharacteris:
%d,spaceis:
%d,digitis%d,otheris%d",letter,space,digit,other);
}
运行结果:
pleaseinputcharacters:
adf 123oQEEJIHLlajf''
englishcharacteris:
15,spaceis:
4,digitis3,otheris2
6.3求Sn=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字。
例如2+22+222+2222+22222(此时n=5),n由键盘输入。
算法分析:
这是一个累加的问题,即sum=sum+t,t的数值是上一个数值的10倍加上a,即t=t×10+a。
程序实现:
main()
{inti,n,a;
longintsum=0,t;
printf("pleaseinputaandn:
");
scanf("%d,%d",&a,&n);
t=a;
for(i=1;i<=n;i++)
{sum=sum+t;
t=t*10+a;}
printf("sumis%ld\n",sum);
}
运行结果:
pleaseinputaandn:
2,5
sumis24690
pleaseinputaandn:
2,6
sumis246912
pleaseinputaandn:
5,6
sumis617280
(即求1!
+2!
+3!
+4!
+…20!
)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言程序设计 习题 分析