高级语言程序设计基础 (吉顺如版)课后习题(一至三章)答案

char *JUN[]

高级语言程序设计基础四至六章

C语言程序设计概述

选择题

1.一个C程序的执行是从(A)。

A.本程序的main函数开始,到main函数结束

B.本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

C.本程序的main函数开始,到本程序文件的最后一个函数结束

D.本程序文件的第一个函数开始,到本程序main函数结束

 

2.以下叙述正确的是(C)。

A.在C程序中,main函数必须位于程序的最前面

B.C程序的每行中只能写一条语句

C.C语言本身没有输入输出语句

D.在对一个C程序进行编译的过程中,可发现注释中的拼写错误

 

3.以下叙述不正确的是(D)。

A.一个C源程序可由一个或多个函数组成

B.一个C源程序必须包含一个main函数

C.C程序的基本组成单位是函数

D.在C程序中,注释说明只能位于一条语句的后面

 

4.在一个C程序中下列说明正确的是(B)。

A.main()函数必须出现在所有函数之前

B.main()函数可以在任何地方出现

C.main()函数必须出现在所有函数之后

D.main()函数必须出现在固定位置

 

5.下面描述不正确的是(C)。

A.C语言兼有高级语言和低级语言的双重特点,执行效率高

B.C语言既可以用来编写应用程序,也可以用来编写系统软件

C.C语言的可移植性较差

D.C语言是一种结构化程序设计语言

 

6.下列符号串中,属于C语言合法标识符的是(C)。

A.else   B.a-2    C._123     D. 123

 

7.以下选项中合法的C语言字符常量是(D)。

A.’\128 ‘     B.”a”      C.’ab ‘        D.’\x43′

 

8.在C语言编译系统中,char、long、float、double类型数据所占字节数分别为(C)。

A.1,2,4,8    B.1,4,2,8    C.1,4,4,8    D.1,4,8,8

 

9.编译程序的功能是(B)。

A.建立并修改程序    B.将C源程序编译成目标程序

C.调试程序          D.命令计算机执行指定的操作

 

10.二进制代码程序属于(A)。

A.面向机器语言   B.面向问题语言   C.面向过程语言   D.面向汇编语言

填空题

1.C程序是由函数构成的。其中有并且只能有 1 个主函数。一个函数由两部分组成:函数的首部和 函数体  

2.C程序必须要有一个 main() 函数,而且只能有一个。C语言程序总是从main()函数开始执行,并且终止于该函数。

3.用高级语言编写的源程序必须通过 编译 程序翻译成二进制程序计算机才能识别,这个二进制程序称为 目标 程序。

4.C语言源程序文件的后缀是 .c ,经过编译后,生成文件的后缀是 .obj ,经过连接后,生成文件的后缀是 .exe 

5.为了提高程序的可读性,在编写C程序时通常使用 缩进 格式,并给程序添加必要的注释。注释可出现在程序的任何位置,注释对程序的执行 没有影响 ,C程序中一般块注释用 /*…*/ 表示,行注释用 // 表示。

6.十进制数123,转换为二进制数为 1111011 ,转换为八进制数为 0173 ,转换为十六进制数为 0x7B 

7.将二进制数转换为十进制数:(110101)2=( 53 )10。

8.将十进制浮点数转换为二进制浮点数:(52.625)10=( 110100.101 )2。

编程题

1.下列程序的功能是:从键盘输入两个数 a 和 b,求它们的平方和,并在屏幕上输出。输入该 C 程序,编译并运行之,记下屏幕的输出结果,以文件名 sy1_1.c 保存。

#include <stdio.h>
void main()
{
int a,b,sum; /* 定义整型变量 a、 b、 sum */
printf("Please Input a,b \n "); /* 输出提示信息 */
scanf("%d%d",&a,&b); /* 从键盘输入两个整数分别赋予 a 和 b*/
sum=a*a+b*b; /* 赋值语句,把 a方+b方的结果赋给变量 sum*/
printf("%d*%d+ %d*%d=%d\n",a,a,b,b,sum); /* 输出语句 */
}

 

2.下列程序的功能为:计算 x*y 的值并将结果输出。试纠正程序中存在的错误,以实现其功能。程序以文件名 sy1_2.c 保存。

#include <stdio.h>

void main()
{

  int x = 2, y = 3, a;

        a = x*y;

  printf("a=%d",a);

  printf("\n");


}

3.下程序的功能为:求两数中的较大数据并输出。纠正程序中存在的错误,以实现
其功能。程序以文件名 sy1_3.c 保存。

#include <stdio.h>

void main(void)

{

  int a, b, max;

  scanf("%d,%d", &a, &b);   /*从键盘输入两个整数分别赋予变量a和b */

  max = a;

  if(max<b)  max = b;   /*如果max中的值小于b中的值,则把b的值赋给max */

  printf("max=%d", max);   /*输出max的值*/


}

4.从键盘输入两个整数,输出这两个整数的和。 根据注释信息填写完整程序,以实
现其功能。以文件名 sy1_4.c 保存。

#include<stdio.h>
void main()
{
    int x,y,total; /* 定义整型变量 x,y,total*/
//    printf("Please input x,y ! "); /* 输出提示信息 */
    scanf(“%d%d”,&x,&y); /* 由键盘输入两个数分别赋予 x 和 y*/
    total=x+y; /* 赋值语句 */
    printf("%d + %d=%d\n",x,y,total); /* 输出两个整数的和 */
}

5. 从键盘输入两个整数,输出这两个整数的差。根据注释信息填写完整程序,以
实现其功能。程序以文件名
sy1_5.c 保存。

#include<stdio.h>
void main()
{
   int a,b,m;
   printf("Input a,b please ! ");
   scanf("%d%d",&a,&b);
   m=a-b; /* 赋值语句,将 a 和 b 的差值赋给 m */
   printf("m=%d\n",m); /* 输出 a 和 b 差的结果值后换行 */
}

6. 编写程序, 运行后输出如下信息: “ Better City,Better Life! ”。 程序以文件名sy1_6.c保存。

#include <stdio.h>
void main()
{
printf("Better City,Better Life!\n");
}

7. 编写程序,从键盘输入 3 个整数,输出它们的平方和。程序以文件名 sy1_7.c 保存。

#include <stdio.h>
void main()
{
   int a,b,c,sum;
 //  printf("Please Input a,b,c \n ");
   scanf("%d,%d,%d",&a,&b,&c);
   sum=a*a+b*b+c*c;
   printf("sum=%d",sum);
}

 

章节测验

 

下列属于C语言关键字的是(      A   )

  • A、typedef
  • B、ENUM
  • C、Int
  • D、unien

下列叙述中,不正确的是(   C      )

  • A、分号是C语句的必要组成部分
  • B、C语句的注释可以写在语句的后面
  • C、主函数的名字不一定用main表示
  • D、函数是C程序的基本单位

构成C语言源程序的基本单位是(   B      )
  • A、过程
  • B、函数
  • C、子程序
  • D、命令

一个C程序的执行是从(     C  )

  • A、main函数开始,直到最后一个函数结束
  • B、第一个函数开始,直到最后一个函数结束
  • C、main函数开始,直到main函数结束
  • D、第一条语句开始,直到最后一条语句结

下列属于C语言中合法标识符的是(     B     )

  • A、ex-1
  • B、_cook
  • C、951a
  • D、if

以下叙述不正确的是(    D     )

  • A、注释说明被计算机编译系统忽略
  • B、注释说明必须跟在“//”之后不能换行或者括在“/*”和“*/”之间且注释符必须配对使用
  • C、注释符“/”和“*”之间不能有空格
  • D、在C程序中,注释说明只能位于一条语句的后面

下面四组选项中,均是C语言关键字的选项是(  B     )

  • A、auto     enum     include
  • B、switch    typedef    continue
  • C、signed    union    scanf
  • D、if   struct   type

在C程序中,main函数的位置(     A    )

  • A、可以任意
  • B、必须作为最后一个函数
  • C、必须作为第一个函数
  • D、必须放在它所调用的函数之后

C程序是由(    B   )构成的

  • A、若干过程
  • B、一个或多个函数
  • C、若干子程序
  • D、一个主程序与若干子程序

C语言的源程序通常的扩展名是(     B     )

  • A、.cpp
  • B、.c
  • C、.obj
  • D、.exe

C语言属于(    C      )

  • A、机器语言
  • B、汇编语言
  • C、高级语言
  • D、低级语言

 

C语言允许直接访问内存地址。(√)


C语言本身没有输入输出语句。(√)
 

C语句以冒号作为结束。(X)
 

1C_fun是合法的标识符。(√)
 

while、If、double均是C语言的关键字。(X)

 

 

求解矩形的面积 题目描述

题目内容:编写一个程序,从键盘读入一个矩形的两个边的值(整数),输出矩形面积。输入样例:3,5

输出样例:15

#include<stdio.h>

void main(void){

int a,b,c;

scanf("%d,%d",&a,&b);

c=a*b;

printf("%d",c);


}

求解梯形的面积题目描述

题目内容:从键盘上输入一个梯形的上底a、下底b和高h,输出梯形的面积。

输入样例:2,4,3

输出样例:9.000000

输入样例:2.4,2.6,3.8

输出样例:9.500000

#include <stdio.h>

#include <math.h>

void main(void) {

  float a, b,c,ans;

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

  ans = ((a+b)*c)/2;

  printf("s=%.2f", ans);

}

 


顺序结构程序设计

选择题

1.在C语言中,要求运算数必须是整型的运算符是(D)。

A./      B.++    C.!=    D.%

 

2.若有以下语句:char w; int x; f1oat y;double z;则表达式w*x+z-y值的数据类型为(D)。

A.float    B.char     C.int    D.double

 

3.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是(B)。

A.7   B.8     C.6   D.2

 

4.执行语句“x=(a=3,b=a–);”后,x、a、b的值依次为(C)。

A.3,3,2     B.2,3,2   C.3,2,3    D. 2,3,3

 

5.若有以下语句:int a=3,b=6,c;c=a^b<<2;,则变量c的二进制值是(A)。

A.00011011     B.00010100   C.00011000    D.00000110

 

6.用函数从终端输出一个字符,可以使用函数(B)。

A.getchar()    B.putchar()   C.gets()   D.puts()

 

7.要输出长整型的数值,需用格式符(B)。

A.%d      B.%ld      C.%f    D.%c

 

8.设a、b为float型变量,则以下不合法的赋值语句是(B)。

A.–a    B.b= (a%4)/5   C.a*=b+9   D.a=b=10

 

9.以下程序的输出结果是(D)。

#include<stdio.h>

int main(void)

  {

     char c1='6',c2='0';

     printf("%c,%c,%d,%d\n",c1,c2,c1-c2,c1+c2);

 }

 

A.6,0,7,6      B.6,0,5,7     C.输出出错信息       D.6,0,6,102

 

10.有以下程序:

#include<stdio.h>

int main (void)

  {

     int m,n,p;

    scanf("%d%d%d",&m,&n,&p);

    printf("m+n+p=%d\n", m+n+p);

    return 0;

 }

 

当从键盘上输入的数据为:2,3,5<Enter>,则正确的输出结果是(D)。

A.m+n+p=10   B.m+n+p=5   C.m+p=7   D.不确定值

填空题

1.表达式“3.5+(int)(8/3*(3.5+6.7)/2)%4”的值为  5.5  

2.表达式 5.7 + 2/19=  5.7 。若定义“int a=4,b;”,则表达式“(b=6*5,a*4),a+16”的值是 20 

3.假设x是一个两位正整数,使该数的个位和十位调换的表达式为  x%10*10+x/10  。(如78调换后变为87)

4.将数学式  转换成C语言表达式为:  sin(sqrt(x*x))/(a*b)  

5.设整型变量 x、y、z均为3,执行“x%=y+z”后,x=  3  

6.若有char x=32 , y=3 ; 则表达式 ~x&y的值为  3  

7.算法通常具有以下5个方面的特性:  有穷性  确定性  可行性  、零个或多个输入、一个或多个输出。

8.若有定义“char c1=’a’,c2=’e’;”,已知字符“a”的ASCII码值是97,则执行语句“printf(“%d,%c”,c1,c2+2); ”后的输出结果是  97,g  

9.程序填空。

#include<stdio.h>

#include<math.h>

int main(void)

   { 

float x,y,z;

      scanf("  %f,%f  ",  &x,&y );  //从键盘输入两个浮点数

      z=2*x*sqrt(y);

      printf("z=%5.2f",z);

     return 0;

  }

 

 

10.下列程序的运行结果是 16.00 

#include<stdio.h>

int main(void)

   {

   int a=9,b=2;

      float x=6.6,y=1.1,z;

      z=a/2+b*x/y-1/2;

     printf("%5.2f",z);

     return 0;  

  }

编程题

1. 【问题描述】

下列程序的功能为: 输入一个华氏温度,要求输出摄氏温度。公式为:c=(5/9)*(f-32),输出取2位小数。纠正程序中存在的错误,以实现其功能。程序以文件名sy2_1.c保存。

#include <stdio.h>

int main(void)

{

float c,f ;

//printf("请输入一个华氏温度:\n");

scanf("%f", f);

c=(5/9)*(f-32);

printf("c=%5.2f\n",c);

return 0;

}

【样例输入】70

【样例输出】c=21.11

#include <stdio.h>

void main(void)

{

  float c, f;

  //printf("请输入一个华氏温度:\n");

  scanf("%f", &f);

  c = (5.0 / 9)*(f - 32);

  printf("c=%5.2f\n", c);

}

2. 【问题描述】

下列程序的功能为:按下列公式计算并输出x的值。其中a和b的值由键盘输入。纠正程序中存在的错误,以实现其功能。程序以文件名sy2_2.c保存。

#include <stdio.h>

int main(void)

{

  int a,b;

  float x;

  scanf("%d,%d",a,b);

  x=2ab/(a+b)(a+b);

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

  return 0;

}

【样例输入】2,4

【样例输出】x=0.444444

#include <stdio.h>

void main(void)

{

  int a, b;

  float x;

  scanf("%d,%d", &a, &b);

  x = 2.0*a*b / (a + b)*(a + b);

  printf("x=%f\n", x);
}

3. 【问题描述】

下列程序的功能为:从键盘输入一个小写字母,要求输出该小写字母及其ASCII码,并将该小写字母转换成大写字母并输出。请纠正程序中存在的错误,使程序实现其功能,程序以文件名sy2_3.c保存。

#include <stdio.h>

int main(void)

{

  char c1,c2;

  c1=getchar;               // 从键盘输入一个小写字母  

  printf("%c,%d\n",c1,c1);    // 输出该小写字母及其ASCII码值  

  c2=c1+26;                // 转换为大写字母  

  c2=putchar();              // 输出大写字母  

  return 0;

                  }

【样例输入】a

【样例输出】a,97 A

#include <stdio.h>

int main(void)

{

  char c1, c2;

  c1 = getchar();               // 从键盘输入一个小写字母  

  printf("%c,%d\n", c1, c1);    // 输出该小写字母及其ASCII码值  

  c2 = c1 -32;                // 转换为大写字母  

  putchar(c2);              // 输出大写字母  

  return 0;

}

4. 【问题描述】

下列程序的功能为:按给定格式输入数据,按要求格式输出结果。补充完善程序,以实现其功能。程序以文件名sy2_4.c保存。

【输入形式】 2 3.4

【输出形式】 x+y=5.4

#include <stdio.h>

int main(void)

{

  int x;

  float y;

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

  printf("x+y=%.1f\n", x + y);

  return 0;

}

5. 【问题描述】

下列程序的功能为:设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据r、h,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请补充完善程序,以实现其功能。程序以文件名sy2_5.c保存。

#include <stdio.h>

int main(void)

{

  float h, r, l, s, sq, vq, vz;

  static float pi = 3.1415926;

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

  l = 2 * pi*r;

  s = pi*r*r;

  sq = r*r*4*pi;

  vq =(4.0/3)*r*r*r*pi ;

  vz =r*r*h*pi ;

  printf("l=%.2f\n",l);

  printf("s=%.2f\n",s);

  printf("sq=%.2f\n",sq);

  printf("vq=%.2f\n",vq);

  printf("vz=%.2f\n",vz);

  return 0;

}

6. 【问题描述】

下列程序的功能为:从键盘输入3个整数分别存入变量x、y、z,然后,将变量x的值存入变量z,将变量y的值存入变量x,将变量z的值存入变量y,输出经过转存后变量x、y、z的值。(提示:使用中间变量)补充完善程序,以实现其功能。程序以文件名sy2_6.c保存。

#include <stdio.h>

int main(void)

{

int x,y,z,      ;

//printf("Please input x,y,z: ");

scanf("%d%d%d",             );

                       ;

                       ;

                       ;

                       ;

printf("x=%d\ny=%d\nz=%d\n",x,y,z);

return 0;

}

【样例输入】

2 3 4

【样例输出】

x=3

y=4

z=2

#include <stdio.h>

int main(void)

{

  volatile int x, y, z, i;

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

  i = z;z = x;x= y;y= i;

  printf("x=%d\ny=%d\nz=%d\n", x, y, z);

  return 0;

}

7. 【问题描述】

编写程序实现如下功能:从键盘输入数据两个整数、两个浮点数、两个字符,分别赋给整型变量a和b、浮点型变量x和y以及字符变量ch1和ch2,要求输出如下结果形式,程序以文件名sy2_7.c保存。

【样例输入】

3 4

2.5 5.6

AB

【样例输出】

a=3,b=4

x=2.5,y=5.6

ch1=A,ch2=B

#include <stdio.h>

int main(void)

{

  volatile int a, b;
  volatile float x, y;
  char c1, c2;
  scanf("%d%d%f%f", &a, &b, &x, &y);
  getchar();
  c1 = getchar(); c2 = getchar();
  printf("a=%d,b=%d\nx=%.1f,y=%.1f\n", a, b, x, y);
  printf("ch1="); putchar(c1);
  printf(",ch2="); putchar(c2); putchar('\n');
  return 0;
}

8. 【问题描述】

编写程序实现如下功能:输入一元二次方程ax2+bx+c=0的系数a、b、c,求方程的根。要求:运行该程序时,输入a、b、c的值,分别使b2-4ac的值大于、等于和小于零,观察并分析运行结果。程序以文件名sy2_8.c保存。求根公式如下:

【样例输入】

2,5,2

【样例输出】

x1=-0.50

x2=-2.00

#include <stdio.h>
#include <math.h>
int main() {
  volatile float a, b, c, __ans, x1, x2;
  scanf("%f,%f,%f", &a, &b, &c);
  if (a == 0) {
    /* 预留代码块 用于判断方程任意解 无解 一元一次的情况*/
  }
  else {
    __ans = b*b - 4 * a*c;
    if (__ans < 0)
      /* 预留代码块*/
      while (1);
    else if (__ans == 0) {
      printf("x1=%.2f\nx2=%.2f\n", -b / 2 / a, -b / 2 / a);
    }
    else {
      x1 = (-b + sqrt(__ans)) / 2 / a;
      x2 = (-b - sqrt(__ans)) / 2 / a;
      printf("x1=%.2f\nx2=%.2f\n", x1, x2);
    }
  }
  return 0;
}

 

章节测验

下列不合法的字符常量是(     B   )

  • A、‘2’
  • B、‘ab’
  • C、‘\n’
  • D、‘\101’

 

下列合法的转义字符是(    A   )

  • A、’\”‘
  • B、‘\ee’
  • C、‘\018
  • D、‘xab’

 

以下选项中不合法的实型常量是( D)

  • A、-62000
  • B、0.123
  • C、5
  • D、E3

 

若已定义x和y为double型变量,则表达式x=1,y=x+3/2的值是(    B      )

  • A、2
  • B、2.5
  • C、2.0
  • D、1

 

执行语句“x=(a=5,b=a–)”后,x,a,b的值分别是(      C     )

  • A、5,4,4
  • B、5,5,4
  • C、5,4,5
  • D、4,5,4

 

已知int x=5,y=5,z=5;则执行语句x%=y+z;后,x的值是(       D

  • A、6
  • B、1
  • C、0
  • D、5

 

表达式(k=3*2,k+4),k*3的值是(    A    )

  • A、18
  • B、14
  • C、30
  • D、10

 

下面程序的输出结果是(  B  )。

#include<stdio.h>

void main()

{

 int x=10,y=3,z;

  printf("%d\n",z=(x%y,x/y));

   }

 

  • A、4
  • B、3
  • C、1
  • D、0

 

经过下述赋值后,变量x的数据类型是( A   )。

float x=21.0;

int y;

y=(int)x;

  • A、float
  • B、double
  • C、int
  • D、char

 

执行以下程序后,输出结果为 (A)

#include<stdio.h>

void main()

{

int x;

float y;

y=3.6;

x=(int)y+10;

printf("x=%d,y=%f",x,y);

}

 

  • A、x=13,y=3.600000
  • B、x=13.5,y=3.60000
  • C、x=13,y=3
  • D、x=13,y=3.6

 

下列浮点数的形式表示错误的是(  B   )

  • A、10.6
  • B、12E2.0
  • C、100000
  • D、.5
若x为int类型,则表达式x=1,x+5,x++的值是1。(对)
8E2是不合法的整型常量。(错)
-6.2e4是不合法的实型常量。(错)
执行语句“printf(“%x”,-1);”屏幕显示-ffff。(错)
若有int x=8,y=5,z;则执行语句“z=x/y+0.4”后,z的值为1。(对)

 

题目内容:输入一个三位的正整数,按逆序打印出该数的各位数字。输入样例:369

输出样例:963

输入样例:680

输出样例:086

#include<stdio.h>

void main(void)

{
  volatile int n,a,b,c;

  scanf("%d",&n);

  a=n%10;

  b=n/10%10;

  c=n/100%10;

  printf("%d%d%d",a,b,c);

 } 

题目内容:编写程序,计算并输出华氏温度为80F所对应的摄氏温度C。

                  转换公式为:C=5*(F-32)/9

输出样例:**.******测试用例

用例1

分数: 20

错误提示:

题目运行时间限制: 500ms

题目运行内存限制: 32000kb

#include<stdio.h>

int GKD(volatile double F)

{

  volatile double C;

  C=5*(F-32)/9;

  printf("%lf",C);

 } 

int main(void)

{

GKD(80.0);

return 0;

}

 


选择结构程序设计

选择题

1.要判断char型变量m是否是数字字符,可以使用表达式(B)。

A.m>=0 && m<=9

B.m>=’0′ && m<=’9′

C.m>=”0″ && m<=”9″

D.m>=0 & m<=9

2.要判断char型变量c是否为大写字母,可以使用表达式(B)。

A.c>=A && c<=Z

B.c>=’A’ && c<=’Z’

C.c>=”A” && c<=”Z”

D.’A'<c<‘Z’

3.为了避免嵌套的if-else语句的二义性,C语言规定else总是与(C)组成配对关系。

A.缩排位置相同的if

B.在其之前未配对的if

C.在其之前未配对的最近的if     

D.同一行上的if

4.假设有定义int a=1,b=2,m=1,n=1。则执行表达式 (m=a>b)&&(n=a!=b)后,m,n的值为(A)。

A.0 1       B.1 0

C.1 1       D.0 0

5.以下选项中不合法的表达式是(C)。

A.x>=1&&x<=50       B.x=y==1

C.x+1=x                     D.y=y+1

6.下列运算符中优先级最高的是(A)。

A.!        B.&&

C.>       D.!=

7.有下面的程序段,执行后c的值为(D)。

int a=3, b=2, c;

char p='A';

c=(a && b)&&(p>'B')

 

A.false        B.true

C.1              D.0

8.若已定义a=3,b=c=4,则执行下列语句后变量x、y的值分别为(A)。

x=(c>=b>=a)?1:0;

y=c>=b&&b>=a;

A. 0 1         B.1 1

C.0 0          D.1 0

9.在C语言中,多分支选择结构语句为:

switch(表达式)

{

case 常量表达式1: 语句1;

……

case 常量表达式k: 语句k;

   default:                    语句k+1;

}

其中switch括号中表达式的类型(C)。

A.只能是整型

B.可以是任意类型

C.可以是整型或字符型     

D.可以是整型或实型

10.执行以下程序后的输出结果是(C)。

int main(void)

{

         int a=4, b=5,c=5;

a=b==c;

printf("%d  ",a);

a=a==(b-c);

printf("%d\n",a);

}

 

A.5  0        B.5  1

C.1  0        D.1  1

填空题

1.有int x,y,z;且x=3,y=4,z=5,则表达式 !(x+y)+z-1&&y+z/2的值为 1  

2.用x描述1到100之间的所有偶数的表达式为 (x>=1&&x<=100)&&(x%2==0)

3.当a=3,b=-4,c=5时,表达式(a&&b)==(a||c)的值是 1  

4.判定闰年year的条件是能被4整除但不能被100整除,或能被400整除的年份,用表达式表示为 (year%4==0&&year%100!=0)||(year%400==0)

5.若有定义“int a=1,b=0;”表达式a–>(b+a)?10:5>b++?’A’: ‘Z’的值为 A 

6.能正确表示x<0或10<x<50关系的C语言表达式是 x<0||(x>10&&x<50) 

7.下面程序的输出结果是 5  3  2 

 #include<stdio.h>

int main(void)

{        

 int x,y=1,z;

        if(y!=0)x=5;

        printf("%d  ",x);

        if(y==0)x=4;

        elsex=3;

        printf("%d  ",x);

        x=2;

        if(y<0)

           if(y>0) x=4;

           else x=5;

        printf("%d\n",x);

        return 0;

     }

 

8.下面程序的输出结果是 #& 

#include<stdio.h>

int main(void)

{ 

  int a=2,b=7,c=5;

  switch(a>0)

    {  case 1:switch(b<0)

                { case 1:printf("@");break;

  case 2:printf("!");break;

 }

       case 0:switch(c==5)

{ case 0:printf("*");break;

  case 1:printf("#");break;

  default:printf("$");break;

}

       default:printf("&");

     }

  return 0;

 }

 

9.下面程序的输出结果是:

      (1)2

      (2)3

      CC

      a=2,b=2,c=4    

#include<stdio.h>

int main(void)

{

  int a,b,c;

  a=b=c=1;

  a+=b;

  b+=c;

  c+=a;

  printf("(1)%d\n",a>b?a:b);

  printf("(2)%d\n",a>c?a--:c++);

  (a>=b>=c)?printf("AA"):printf("CC");

  printf("\na=%d,b=%d,c=%d\n",a,b,c);

  return 0;

 }

 

10.下面程序的输出结果是 a=2, b=3 

#include<stdio.h>

int main(void)

{  int a=1, b=1;

     switch(a-b)

{

case 0: b++;

            case1: a++;b++;break;

            case 2: b++;

}

printf("a=%d, b=%d\n", a, b); 

return 0;

}

编程题

 

(1)求分段函数

有一个函数如下:

编写程序,输入x的值,计算相应的y值输出(保留2位小数)。

#include<stdio.h>

#include<math.h>

int main(void)

{

  float x,y;

  scanf("%f", &x);

  if(x<4)  y=(x+7)/(2*x-1);

  else if(x<70) y=3*x*x+5;

          else y=x-sqrt(4*x-1);

  printf("y=%.2f\n",y);

  return 0;

}

运行结果:

(1)

3

y=2.00

(2)

9.5

y=275.75

(3)

75

y=57.71

 

(2)判断三角形类型,计算三角形面积

编写一个程序,根据输入的三角形的三条边判断是否能组成三角形,如果可以则输出它的面积和三角形类型(等边、等腰、直角、等腰直角、一般三角形等)。

学校网上的oj是英文,请注意,踩一下oj的乐色编译环境

#include <stdio.h>

#include <math.h>

int main(void)

{

  float a, b, c, s, area;

  int flag;

  printf("Input the three edge length:");

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

  if(a+b>c && b+c>a && a+c>b)

   {

     s=(a+b+c)/2;

    area=sqrt(s*(s-a)*(s-b)*(s-c));

    printf("area=%.2f\n",area);

    if(fabs(a-b)<=0.0001&&fabs(b-c)<=0.0001&&fabs(c-a)<=0.0001)

     {

       printf("等边三角形");

     }

         else if(fabs(a-b)<=0.0001||fabs(b-c)<=0.0001||fabs(c-a)<=0.0001)

       {

      if(fabs(a*a+b*b-c*c)<=0.0001||fabs(a*a+c*c-b*b)<=0.0001||fabs(b*b+c*c-a*a)<=0.0001)

        {

           printf("等腰直角三角形");

        }

       else

            printf("等腰三角形");

          }

else if(fabs(a*a+b*b-c*c)<=0.0001||fabs(a*a+c*c-b*b)<=0.0001||fabs(b*b+c*c-a*a)<=0.0001)

       {

         printf("直角三角形");

       }

        else printf("一般三角形\n");

   }

else   printf("不是三角形\n");

return 0;

}
运行结果:



(1)

Input the three edge length:3,4,5

area=6.00

直角三角形



(2)

Input the three edge length:4,4,5

area=7.81

等腰三角形



(3)

Input the three edge length:5,5,5

area=10.83

等边三角形



(4)

Input the three edge length:5,5,7.071065

area=12.50

等腰直角三角形



(5)

Input the three edge length:5,6,7

area=14.70

一般三角形



(6)

Input the three edge length:4,5,10

不是三角形

--------------------------------

 

(3)计算实际奖金值

由键盘输入奖金值,计算并输出相应的税率和实际应得奖金值。分别用if-else的嵌套语句和switch多分支选择语句编写程序。

源程序一:



#include<stdio.h>

int main(void )

{ 

   float n, r, s;

   int m;

   printf("请输入奖金值:");

   scanf("%f", &n);

   if(n<1000) r=0;

     else if(n<3000) r=0.03;

          else if(n<5000) r=0.05;

               else if(n<10000) r=0.07;

                    else r=0.1;

    s=n-r*n;  //计算实际所得奖金值

    printf("税率r=%.0f%%, 奖金值n=%.2f, 实际所得奖金s=%.2f\n",r*100, n, s);

    return 0;

}



源程序二:



#include<stdio.h>

int main(void )

{ 

   float n, r, s;

   int m;

   printf("请输入奖金值:");

   scanf("%f", &n);

   if(n>=10000)  m=10;

   else  m=n/1000;

   switch(m)

   {  case 0: r=0; break;

      case 1:

      case 2: r=0.03; break;

      case 3:

      case 4: r=0.05; break;

      case 5: case 6:

      case 7: case 8:

      case 9:r=0.07; break;

      case 10:r=0.1;

   }

  s=n-r*n;  //计算实际所得奖金值

  printf("税率r=%.0f%%, 奖金值n=%.2f, 实际所得奖金s=%.2f\n",r*100, n, s);

  return 0;

}
运行结果:



(1)

请输入奖金值:3000

税率r=5%, 奖金值n=3000.00, 实际所得奖金s=2850.00



(2)

请输入奖金值:6000

税率r=7%, 奖金值n=6000.00, 实际所得奖金s=5580.00



(3)

请输入奖金值:11000

税率r=10%, 奖金值n=11000.00, 实际所得奖金s=9900.00

--------------------------------

(4)判断能否整除数

从键盘输入一个正整数,判断其是否能同时被5和7整除,若是则输出“YES”,否则输出“NO”。

#include<stdio.h>

int main(void)

{ 

   int x;

   scanf("%d", &x);

   if(x>0)

   { if(x%5==0&&x%7==0)

         printf("YES\n");

     else  printf("NO\n");

   }

   else printf("data error!");

return 0;

}

 

运行结果:



(1)

14

NO



(2)

35

YES



(3)

-9

data error!

---------------

(5)判断整数的位数

给出一个不超过4位数的正整数,判断它是几位数,并按逆向输出各位数字。例1234,输出为4321。

#include<stdio.h>

int main(void)

{ 

   int num,i,j,k,m;

   printf("输入一个少于4位的正整数:");

   scanf("%d",&num);

   if(num>=0 && num<=9999)

   {

    if(num>1000 && num<=9999) 

    {

       printf("是一个4位数\n");

       m=num%10;     /*求个位上的数字*/

       k=num/10%10;   /*求十位上的数字*/

       j=num/100%10;  /*求百位上的数字*/

       i=num/1000;     /*求千位上的数字*/

      printf("逆序数为:%d%d%d%d\n",m,k,j,i);

    }

   else if(num>=100)

   {   printf("是一个3位数\n");

       m=num%10;    /*求个位上的数字*/

       k=num/10%10;  /*求十位上的数字*/

       j=num/100;     /*求百位上的数字*/

      printf("逆序数为:%d%d%d\n",m,k,j);

   }

    else if(num>=10)

       {  

          printf("是一个2位数\n");

          m=num%10;    /*求个位上的数字*/

          k=num/10;    /*求十位上的数字*/

          printf("逆序数为:%d%d\n",m,k);

       }

    else

       {   printf("是一个1位数\n");

           printf("逆序数为:%d\n",num);

       }

   }

   else printf("是一个无效的数\n");

   return 0;

}
运行结果:



(1)

输入一个少于4位的正整数:63

是一个2位数

逆序数为:36



(2)

输入一个少于4位的正整数:135

是一个3位数

逆序数为:531



(3)

输入一个少于4位的正整数:1234

是一个4位数

逆序数为:4321

--------------------------------

章节测验

【单选题】
下列条件语句中,功能与其他语句不同的是( A  )。
  • A、if(a==0) printf(“%d\n”,x); else     printf(“%d\n”,y);
  • B、if(a) printf(“%d\n”,x); else  printf(“%d\n”,y);
  • C、if(a==0) printf(“%d\n”,y); else     printf(“%d\n”,x);
  • D、if(a!=0) printf(“%d\n”,x); else     printf(“%d\n”,y);

 

【单选题】以下程序正确的说法是(A  )。

#include<stdio.h>

void main()

{ 

 int x=0,y=0;

 if(x=y) printf("*****\n");

   else    printf("#####\n");

}
  • A、输出#####
  • B、有语法错误不能通过编译
  • C、可以通过编译,但不能通过连接,因此不能运行
  • D、输出*****

【单选题】分析以下程序的运行结果。 (C)

#include <stdio.h> 

void main()

{  

int k=2;     

switch(k)    

{  

case 1:printf("%d\n",k++);   break;   

case 2:printf("%d ",k++);   

case 3:printf("%d\n",k++);  break;    

case 4:printf("%d\n",k++);     

default:printf("Full!\n");     

} 

}

 

  • A、3 4
  • B、3 3
  • C、2 3
  • D、2 2

 

以下程序的输出结果为(  D  )。

#include<stdio.h>

void main()

{ 

int a=30;

  printf("%d",(a/3>0)?a/10:a%3);

}

 

  • A、0
  • B、1
  • C、10
  • D、3

 

【单选题】
希望当num的值为奇数时,表达式的值为“真”;num的值为偶数时,表达式的值为“假”。则以下不能满足该要求的表达式是(  B  )。
  • A、num%2==1
  • B、!(num%2)
  • C、!(num%2==0)
  • D、num%2

【单选题】以下程序的输出结果是(    C  )。

#include<stdio.h>

void main()

{ 

int x=1,y=0,a=0,b=0; 

  switch(x) 

 { 

case 1:switch(y)

          { 

   case 0:a++;break;

   case 1:b++;break;

          } 

   case 2:a++;b++;break;

  } 

  printf("a=%d,b=%d",a,b);

}

 

  • A、a=1,b=1
  • B、a=1,b=2
  • C、a=2,b=1
  • D、a=2,b=2

 

【单选题】以下程序运行时,输入的x值在(  A  )范围时才会有输出结果。

#include<stdio.h>

void main()

{

int x;

  scanf("%d",&x);

  if(x<5);

  else if(x!=20)

  printf("%d",x);

}

 

  • A、大于等于5且不等于20的整数
  • B、不等于20的整数
  • C、小于5的整数
  • D、大于等于5且等于20的整数

 

以为了避免嵌套的条件分支语句if-else二义性,C语言规定,C程序中的else总是与(  B  )组成配对关系。

  • A、缩排位置相同的if
  • B、在其之前未配对的最近的if
  • C、在其之前未配对的if
  • D、同一行上的if

【单选题】语句  if(x!=0)  y=1;

else      y=2;与(A )等价。

  • A、if(x)   y=1; else    y=2;
  • B、if(x) y=2;else y=1;
  • C、 if(!x) y=1;else   y=2;
  • D、if(x=0) y=2;else      y=1;

【单选题】下列程序段运行后x的值是( C )。

int a = 0, b = 0, c = 0, x = 35;

if (!a)    x--;

else if (b);

if (c)    x = 3;

else     x = 4;

 

  • A、34
  • B、35
  • C、4
  • D、3

下列程序段运行后的结果是( B )。

#include<stdio.h>

int main()

{  

      int  a = 2, b = -1, c = 2;

      if(a < b)

            if(b < 0) 

                  c = 0;

      else  c++;

      printf("%d\n",c);      

      return 0;

}

 

  • A、0
  • B、2
  • C、3
  • D、4
if(a=5) 是允许的。  (√)
在if语句的三种形式中,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。(√)

if-else语句的一般形式如下,其中的语句1、语句2只能是一条语句。

if (表达式)   语句1

else            语句2   (X)

if-else语句的一般形式如下,若表达式的值为“真”,则执行语句1;否则,就执行语句2。

if (表达式)   语句1

else            语句2  (√)

执行以下程序段后,x的值为0,y的值为1。

int x, y;

if (x = 0)  y = 0;

else        y = 1;    (

 

星期推算。

题目描述

题目内容:假设今天是星期日,编写一个程序,求2019天后是星期几。

输出样例:星期*(星期一、星期二、星期三、星期四、星期五、星期六、星期日)

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#define CONF_JUN

int main() {

  volatile int a, b;

  a = 2019 / 7;

  b = 2019 - a * 7;

  if (b == 0)

    printf("星期天");

  else if (b == 1)

    printf("星期一");

  else if (b == 2)

    printf("星期二");

  else if (b == 3)

    printf("星期三");

  else if (b == 4)

    printf("星期四");

  else if (b == 5)

    printf("星期五");

  else if (b == 6)

    printf("星期六");

  return 0;

}

2.特征数判断。

题目内容:编写程序,判断输入的正整数是否既是5又是7的整倍数。

输入样例:-9

输出样例:Data error!

 

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#define JUN
int main() {

  volatile int a;

  scanf("%d", &a);

  if (a <= 0)

    printf("Data error!");

  else {

    if (a % 5 == 0 && a % 7 == 0)

      printf("Yes!");

    else {

      printf("No!");

    }

  }

return 0;

}

 

 

天数判断。

题目描述

题目内容:编写程序,从键盘上输入年份和月份,计算并输出这一年的这一月共有多少天。

输入样例:2019-3

输出样例:31

 

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#define JUN

int main() {

  volatile int a, b;

  scanf("%d-%d", &a, &b);

  if (a % 4 == 0 && a % 400 == 0)

  {

    if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12)

      printf("31\n");

    if (b == 2)

      printf("29\n");

    else {

      printf("30\n");

    }

  }

  else {

    if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12)

      printf("31\n");

    else if (b == 2)

      printf("28\n");

    else {

      printf("30\n");

    }

  }

  return 0;

}

 

 

 

struct my_struct->”四至六章”

“高级语言程序设计基础 (吉顺如版)课后习题(一至三章)答案”的2个回复

发表评论

邮箱地址不会被公开。 必填项已用*标注

1 × 2 =