梅孝安C语言答案.docx

上传人:b****5 文档编号:3984081 上传时间:2022-11-26 格式:DOCX 页数:64 大小:37.67KB
下载 相关 举报
梅孝安C语言答案.docx_第1页
第1页 / 共64页
梅孝安C语言答案.docx_第2页
第2页 / 共64页
梅孝安C语言答案.docx_第3页
第3页 / 共64页
梅孝安C语言答案.docx_第4页
第4页 / 共64页
梅孝安C语言答案.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

梅孝安C语言答案.docx

《梅孝安C语言答案.docx》由会员分享,可在线阅读,更多相关《梅孝安C语言答案.docx(64页珍藏版)》请在冰豆网上搜索。

梅孝安C语言答案.docx

梅孝安C语言答案

第一、二章C语言概述、算法

1.单项选择题

(1)【答】B

(2)【答】A(3)【答】C(4)【答】B(5)【答】C

2.填空题

(1)【答】①一②若干

(2)【答】分号(3)【答】函数(4)【答】将C源程序编译成目标代码

第三章数据类型及其运算

1.单项选择题

(1)【答】A

(2)【答】C(3)【答】B

(4)【答】3.6和123.45均为double型,运算结果也是double型。

本题答案为B。

(5)【答】选项A错误,以分号结尾是一个语句而不是表达式;选项B正确,是一个逗号表达式;选项C错误,因为%求模运算的两个运算数必须均为整数;选项D错误,给一个表达式(a+7)而非变量赋值是不正确的。

本题答案为B。

(6)【答】选项A的计算过程——x=1+2=3,再计算x=x*2=6;选项B的计算过程——y>2为真,x=6;选项C的计算过程——式中有两个--运算,最后y=1,x=9-1-1=7;选项D的计算过程——x=y*(int)(4.8/2)=y*2=6。

本题答案为C。

(7)【答】A、B、C、D选项各表达式的值分别是0、2、2、3。

本题答案为D。

(8)【答】m=i+++j等价于m=(i++)+j。

本题答案为A。

(9)【答】f+10=13.14159,(int)(f+10)=13,13%3=1。

本题答案为A。

(10)【答】++i返回3,j--返回4,两者不等,故n=0。

本题答案为A。

2.填空题

(1)【答】语句必须以分号结尾,而表达式结尾没有分号;语句可以出现在函数体中数据定义或声明语句后面的任何位置,而表达式只能出现在语句中规定的位置或表达式中(嵌套出现)。

(2)【答】强制类型转换

(3)【答】①c=(c>='A'&&c<='Z')?

c-'A'+'a':

c

②d=(d>='0'&&d<='9')?

d-'0':

d

③(x>y)?

x:

y

④(x>y)?

(x>z?

x:

z):

(y>z?

y:

z)或(x>y&&x>z)?

x:

(y>z?

y:

z)

(4)【答】字符串s由字符'a'、'b'、'\n'、'\\'、'\''、'\r'、'\b'等7个字符组成,故长度为7,但字符串本身有一个结束标志'\0'。

所以,s的长度为7,在内存中占用8个字节。

输出为:

8,7。

(5)【答】结果为y=6,x=6。

(6)【答】A,B,65,66

(7)【答】执行x=++i后,i=6,x=6;执行y=j++后,j=8,y=7;所以输出为:

6,8,6,7。

(8)【答】①:

1(a+2=3,c-100=-3,表达式结果=1(真))

②:

1(a>c的结果是0(假),f>4的结果是0,表达式结果=1)

③:

1(!

a的结果是0,!

f的结果是0,表达式结果=1)

④:

1(!

a&&1的结果是0,!

c||1的结果是1,表达式结果=1)

⑤:

0(!

a>2的结果是0,(!

a>2)?

3:

0的结果是0,f!

=1的结果是1,(f!

=1)?

0:

1的结果是0,表达式结果=0)

⑥:

1((1,2,3)表达式的结果是3,(3,3,3)的结果是3。

第四章顺序结构程序设计

1.单项选择题

(1)【答】D

(2)【答】B

(3)【答】scanf()函数中没有精度控制。

本题答案为D。

(4)【答】D(5)【答】D(6)【答】C(7)【答】C(8)【答】D(9)【答①B ②A(10)【答】输入的数据与scanf()函数的格式不匹配。

本题答案为D。

(11)【答】①A ②B

(12)【答】C(13)【答】C(14)【答】A(15)【答】A(16)【答】B(17)【答】D

2.填空题

(1)【答】3.141593,3.1416,3.142

(2)【答】3.500000,3.5

(3)【答】31.415920,3.141592e+001(4)【答】127,127,177,7f,127

(5)【答】127,127,177,7f,127(6)【答】c=K(7)【答】a=12,b=345

(8)【答】c=A(9)【答】n=64(10)【答】x=1.23,y=50.00

(11)【答】a=3b=7x=8.5y=71.82c1=Ac2=a↙

3.编程题

(1)编写一个程序,求出任一输入字符的ASCII码。

【解】程序如下:

#include

main()

{

   charc;

   printf("输入字符:

");

   scanf("%c",&c);

   printf("字符%c的ASCII码为%d\n",c,c);

}

(2)编写一个程序,输入一个字符,依次输出其前导字符、该字符和后续字符。

【解】程序如下:

#include

#definepi3.14159

main()

{

   charc;

   printf("输入一个字符:

");

   scanf("%c",&c);

   printf("输出结果:

%c,%c,%c\n",c-1,c,c+1);

}

(3)编写一个程序,输出任意一个十进制整数对应的八进制数和十六进制数。

【解】直接使用printf()的格式符输出八进制数和十六进制数。

程序如下:

#include

main()

{

   inti;

   printf("输入一个整数:

");

   scanf("%d",&i);

   printf("%d(10)<=>%o(8)\n",i,i);

   printf("%d(10)<=>%x(16)\n\n",i,i);

}

(4)编写一个程序,从键盘输入圆锥体的半径r和高度h,计算其体积。

【解】圆锥体体积的计算公式为:

v=π×r×r×h/3

程序如下:

#include

main()

{

   floatr,h,pi=3.1415,v;

   printf("圆锥半径,高度:

");

   scanf("%f,%f",&r,&h);

   v=pi*r*r*h/3.0;

   printf("圆锥体积=%g\n\n",v);

}

第五章

1.单项选择题

(1)【答】A

(2)【答】C(3)【答】选项B、C、D中的比较运算符不正确,在选项A中,a=b返回b,若b为0或空字符,则为假,否则为真。

本题答案为A。

(4)【答】B。

应改为if(x=y&&x!

=0)x+=y;(5)【答】D(6)【答】①A②A(7)【答】①D ②C(8)【答】A

2.填空题

(1)【答】x%2==0

(2)【答】a%b==0

(3)【答】a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a

(4)【答】(a+b

(5)【答】k=2,执行case2分支,k++返回2,此时k=3,输出2,后跟一空格。

由于没有break语句,继续执行case3分支,k++返回3,此时k=4,输出3,由于有break语句,退出switch语句。

所以输出为:

23。

(6)【答】a>0,s变为2。

a>b为真,t=t+s=3。

所以输出为:

s=2,t=3。

(7)【答】k=2,执行case2分支,k++返回2,此时k=3,屏幕输出2,后跟一空格。

由于没有break语句,继续执行case3分支,k++返回3,此时k=4,屏幕输出3,由于没有break语句,继续执行case4分支,k++返回4,此时k=5,屏幕输出4,由于有break语句,退出switch语句。

所以输出为:

234。

(8)【答】x=0,执行外层switch语句的case0部分,y==2为真,则执行里层switch语句的case1部分,输出“*”,遇到break语句,退出里层的switch语句,由于里层的switch语句之后没有break语句,所以转而执行外层switch语句的case1部分,这时z=3,故执行里层switch语句的default部分,输出“#”,整个程序执行完毕。

所以输出为:

*#。

 

3.编程题

(1)编写一个程序判断用户输入的字符是数字字符、字母字符还是其他字符。

【解】在'0'到'9'之间的为数字字符,在'a'到'z'或'A'到'Z'之间的为字母字符;否则为其他字符。

程序如下:

#include

main()

{

   charc;

   printf("输入一个字符:

");

   scanf("%c",&c);

   if(c>='0'&&c<='9')

       printf("\n%c是数字字符\n\n",c);

   elseif((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

       printf("\n%c是字母字符\n\n",c);

   else

       printf("\n%c是其他字符\n\n",c);

}

(2)假设今天是星期日,编写一个程序,求123456天后是星期几。

【解】星期是7天一个轮回,由于今天是星期日,所以123456除以7的余数即为星期几。

程序如下:

#include

main()

{

   intn=123456;

   n=n%7;

   printf("\n星期");

   switch(n)

   {

       case0:

printf("天");

             break;

       case1:

printf("一");

             break;

       case2:

printf("二");

             break;

       case3:

printf("三");

             break;

       case4:

printf("四");

             break;

       case5:

printf("五");

             break;

       case6:

printf("六");

             break;

   }

   printf("\n\n");

}

(3)编写一个程序,输入年号和月份,判断该年是否为闰年,并根据给出的月份判断是什么季节和该月有多少天?

闰年的条件是年号能被4整除但不能被100整除,或者能被400整除。

【解】直接根据闰年的定义求解,如果是闰年,2月份为29天;否则为28天,其他月份相同。

规定3~5月为春季,6~8月为夏季,9~11月为秋季,1、2和12月为冬季。

本题程序如下:

#include

main()

{

   inty,m,leap,season,days;

   printf("年份,月份:

");

   scanf("%d,%d",&y,&m);

   if((y%4==0&&y%100!

=0)||(y%400==0))

       leap=1;

   else

       leap=0;

   if(m>=3&&m<=5)

       season=1;

   elseif(m>=6&&m<=8)

       season=2;

   elseif(m>=9&&m<=11)

       season=3;

   else

       season=4;

   switch(m)

   {

       case1:

       case3:

       case5:

       case7:

       case8:

       case10:

       case12:

days=31;break;

       case4:

       case6:

       case9:

       case11:

days=30;break;

       case2:

if(leap==1)

                   days=29;

              else

                   days=28;

   }

   printf("%d年%s闰年\n",y,(leap==1?

"是":

 "不是"));

   printf("该季度是");

   switch(season)

   {

       case1:

printf("春季\n");break;

       case2:

printf("夏季\n");break;

       case3:

printf("秋季\n");break;

       case4:

printf("冬季\n");break;

   }

   printf("当月天数:

%d\n",days);

}

(4)报数游戏。

A、B、C、D、E、F、G、H共8人站成一排,按图4.1所示的方法从1开始报数。

问谁先报到123456?

A    B  C  D  E  F  G  H

1→ 2→3→4→5→6→7→8

14←13←12←11←10←9

15→16→17→18→19→20→21→22

28←27←26←25←24←23

29→30→…

图4.1 游戏报数过程

【解】从图4.1中看到1到14是一个来回,再重复这一过程,所以只需对123456除以14的余数加以判断即可。

程序如下:

#include

main()

{

   intn=123456,i;

   i=n%14;

   printf("\n报数到%d的人是",n);

   switch(i)

   {

       case1:

printf("A");break;

       case2:

case14:

printf("B");break;

       case3:

case13:

printf("C");break;

       case4:

case12:

printf("D");break;

       case5:

case11:

printf("E");break;

       case6:

case10:

printf("F");break;

       case7:

case9:

 printf("G");break;

       case8:

        printf("H");break;

   }

   printf("\n");

}

程序的运行结果:

报数到123456的人是D

(5)编写一个程序,求ax2+bx+c=0方程的根。

【解】先计算d=b2-4ac,再根据d是大于0、等于0还是小于0分别求根。

程序如下:

#include

#include

intfunc(floata,floatb,floatc,float*x1,float*x2)

{

   floatd;

   d=b*b-4*a*c;

   if(d>0)

   {

       *x1=(-b+sqrt(d))/(2*a);

       *x2=(-b-sqrt(d))/(2*a);

       return2;

   }

   elseif(d==0)

   {

       *x1=(-b)/(2*a);

       return1;

   }

   elsereturn0;

}

main()

{

   floata,b,c,x1,x2,n;

   printf("输入a,b,c:

");

   scanf("%f,%f,%f",&a,&b,&c);

   n=func(a,b,c,&x1,&x2);

   if(n==2)

   {

       printf("两个根:

\n");

       printf("\tx1=%f\n",x1);

       printf("\tx2=%f\n",x2);

   }

   elseif(n==1)

   {

       printf("一个根:

\n");

       printf("\tx=%f\n",x1);

   }

   elseprintf("没有根\n");

}

第六章

1.单项选择题

(1)【答】!

e等价于!

(e!

=0),即e==0。

本题答案为A。

(2)【答】D(3)【答】D(4)【答】A(5)【答】C(6)【答】A(7)【答】A(8)【答】B(9)【答】C

2.填空题

(1)【答】s=7

(2)【答】执行第1次循环时,i++返回1,i=2,s=3+1=4,执行else部分,i=3;执行第2次循环时,i++返回3,i=4,s=4+3=7,执行if部分;执行第3次循环时,i++返回4,i=5,s=7+4=11,执行else部分,i=6;执行第4次循环时,i++返回6,i=7,s=11+6=17,执行else部分,i=8,此时while条件不满足,退出循环。

所以输出结果为:

8。

(3)【答】使用两重循环。

本题答案为:

*

**

***

****

(4)【答】使用两重循环。

本题答案为:

          1

        2  2

      3  3  3

    4  4  4  4

  5  5  5  5  5

 6  6  6  6  6  6

(5)【答】使用两重循环。

本题答案为:

               1

            1 2 1

         1 2 3 2 1

      1 2 3 4 3 2 1

   1 2 3 4 5 4 3 2 1

 1 2 3 4 5 6 5 4 3 2 1

(6)【答】使用两重循环。

本题答案为:

         *

      * * *

   * * * * *

 * * * * * * *

   * * * * *

      * * *

         *

 

3.编程题

(1)编写一个程序,求s=1-1/2+1/3-1/4…+1/99+1/100之值。

【解】使用一个for循环即可。

程序如下:

#include

main()

{

   inti;

   floats;

   s=0;

   for(i=1;i<=100;i++)

   {

       if(i%2==0)          /*i为偶数*/

           s=s-1.0/i;

       else                 /*i为奇数*/

           s=s+1.0/i;

   }

   printf("s=%f",s);

}

程序运行结果:

s=0.688172

(2)编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。

【解】采用两层循环求解,外层i从1到n,里层从1到i。

程序如下:

#include

main()

{

   inti,j,s1,s=0,n;

   printf("输入n:

");

   scanf("%d",&n);

   for(i=1;i<=n;i++)

   {

       s1=0;                  /*求1+…+i*/

       for(j=1;j<=i;j++)

          s1=s1+j;

       s=s+s1;

   }

   printf("s=%d\n",s);

}

(3)编写一个程序,用户输入一个正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。

【解】对于正整数n,从高位到低位依次计算出它的各位上的数字d,在计算出d后立即输出该数字,输出序列构成的数正好是n的各位数字前后颠倒的结果。

程序如下:

#include

main()

{

   intn,d;

   printf("输入一个正整数:

");

   scanf("%d",&n);

   printf("颠倒结果:

");

   do

   {

       d=n%10;

       printf("%d",d);

       n=n/10;

   }while(n!

=0);

   printf("\n\n");

}

(4)编写一个程序,求输入的三个正整数的最小公倍数。

【解】采用穷举法求解。

输入三个整数分别为x,y和z,该最小公倍数一定是x的倍数。

程序使用while循环,倍增x查找满足s%y==0&&s%z==0条件的s。

程序如下:

#include

main()

{

   intx,y,z,s;

   printf("输入三个整数=>x,y,z:

");

   scanf("%d,%d,%d",&x,&y,&z);

   s=x;

   while

(1)

   {

       if(s%y==0&&s%z==0)

           break;

       s+=x;

   }

   printf("最小公倍数:

%d\n",s);

}

(5)编写一个程序,求出200到300之间的数,且满足条件:

它们三个数字之积为42,三个数字之和为12。

【解】采用穷举法求解。

使用两重for循环嵌套语句,i、j、k分别表示该数的百位数、十位数、个位数,i只能是2,j和k进行循环。

程序如下:

#include

main()

{

   inti,j,k;

   i=2;

   for(j=0;j<=9;j++)

      for(k=0;k<=9;k++)

          if(i*j*k==42&&i+j+k==12)

               printf("i=%d,j=%d,k=%d\n",i,j,k);

}

(6)编写一个程序,求出满足下列条件的四位数:

该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12。

【解】采用穷举法求解。

该数是一个四位数,其平方数只能在32到99之间,使用一个for循环即可。

程序如下:

#inc

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

当前位置:首页 > 考试认证 > 公务员考试

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

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