高级语言程序设计习题分析与解1.docx

上传人:b****5 文档编号:7188130 上传时间:2023-01-21 格式:DOCX 页数:72 大小:48.55KB
下载 相关 举报
高级语言程序设计习题分析与解1.docx_第1页
第1页 / 共72页
高级语言程序设计习题分析与解1.docx_第2页
第2页 / 共72页
高级语言程序设计习题分析与解1.docx_第3页
第3页 / 共72页
高级语言程序设计习题分析与解1.docx_第4页
第4页 / 共72页
高级语言程序设计习题分析与解1.docx_第5页
第5页 / 共72页
点击查看更多>>
下载资源
资源描述

高级语言程序设计习题分析与解1.docx

《高级语言程序设计习题分析与解1.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计习题分析与解1.docx(72页珍藏版)》请在冰豆网上搜索。

高级语言程序设计习题分析与解1.docx

高级语言程序设计习题分析与解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!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1