C语言程序设计(第二版)习题参考答案1

更新时间:2023-06-05 05:16:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言程序设计习题参考答案

习 题 1

一、判断题

1.在计算机中,小数点和正负号都有专用部件来保存和表示。 2.二进制是由0和1两个数字组成的进制方式。

3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。 4.在整数的二进制表示方法中,0的原码、反码都有两种形式。 5.有符号数有三种表示法:原码、反码和补码。

6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。

解:1.F 2.T 3.T 4.T 5.T 6.T 二、单选题

1.在计算机中,最适合进行数值加减运算的数值编码是 。

A. 原码 B. 反码 C. 补码 D. 移码

2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII码为十进制数 。

A. 112 B. 120 C. 121 D. 122 3.关于ASCII码,在计算机中的表示方法准确地描述是 。

A. 使用8位二进制数,最右边一位为1 B. 使用8位二进制数,最左边一位为1 C. 使用8位二进制数,最右边一位为0 D. 使用8位二进制数,最左边一位为0 4.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是___________。

A. X∧Y=1000 B. X∨Y=1111 C. X⊕Y=0011 D. ¯ =1000 Y5.下列叙述中正确的是( )。

A.高级语言就是机器语言

B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算

机可以直接识别并执行的程序

C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种

D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果 6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将( )。

A.生成可执行文件 B.生成目标文件 C.输出运行结果 D.自动保存源文件 7.下列叙述中不正确的是( )。

A.main函数在C程序中必须有且只有一个

B. C程序的执行从main函数开始,所以main函数必须放在程序最前面 C. 函数可以带参数,也可以不带参数。

D. 每个函数执行时,按函数体中语句的先后次序,依次执行每条语句

解:1.C 2.C 3.D 4.B 5.B 6.B 7.B 三、填空题

1.(87.625)10=()2=()8=(16 2.(1001010111001.10111)2=()8=(16=(10 3.输入三个数,计算并输出三个数的和与三个数的乘积。 程序如下:

#include <stdio.h> void main() {

int a,b,c,s,z;

printf("Please input a b c:\n");

s=a+b+c; printf("%d\n",s); } *4. 输入三角形三条边的边长,计算并输出三角形的面积。 根据三条边的边长,计算三角形面积的公式如下:

x y z

面积 其中s 2

程序如下:

#include <stdio.h> #include <math.h> void main() {

double x,y,z,s,dime; scanf("%lf%lf%lf",&x,&y,&z);

dime=sqrt(s*(s-x)*(s-y)*(s-z)); } 解:1.1010111.101 127.5 57.A

2.11271.56 12B9.B8 4793.71875

3.scanf("%f%f%f",&a,&b,&c); z=a*b*c; printf("%f",z); 4.s=(x+y+2)/2; printf("%f",dim); 四、编程题

1.仿照例1.1,编程序在屏幕上显示:

***************************** Merry Christmas! Happy New Year!

***************************** 解:#include <stdio.h> void main()

{ printf("*****************************\n"); printf(" Merry Christmas!\n");

printf(" Happy New Year!\n");

printf("*****************************\n"); }

2.仿照例1.2编程,输入一个整数,计算这个数的平方。 解:#include<stdio.h> void main() { int a,z;

printf("请输入一个整数:\n"); scanf("%d",&a);

z=a*a;

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

}

*3.仿照例1.3编程,输入两个数后,输出其中较小值。 解:#include<stdio.h>

float min(float x, float y) { float m; if (x<y) m=x; else m=y;

return m; }

void main()

{ float a,b,c,mindata;

printf("请输入二个数:\n"); scanf("%f %f",&a,&b);

mindata=min(a,b); printf("较小数:%f\n",mindata); }

*4.仿照例1.2编程,输入a、b后,输出一元一次方程ax+b=0的解。 解:#include<stdio.h> void main()

{ float a,b,x;

printf("请输入a、b:\n"); scanf("%f %f",&a,&b); x=-a/b; printf("x=%f\n",x); }

*5.仿照例1.2编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。 解:#include <stdio.h> void main()

{ float r,h,s,v;

printf("Please input r and h:\n"); scanf("%f %f",&r,&h); v=3.14*r*r*h;

printf("V=%f\n",v);

}

习 题2

一、判断题

1.任何变量都必须要定义其类型。

2.C语言的double类型数据在其数值范围内可以表示任何实数。 3.C语言的任何类型数据在计算机内都是以二进制形式存储的。 4.isdigit( 5 )的结果为0。

5.printf函数中格式符“%c”对应的参数只能是字符类型。

6.按格式符“%d”输出float类型变量时,截断小数位取整后输出。 7.在C语言程序中,ABC与abc是两个相同的变量。 8.scanf函数中的格式符“%d”不能用于输入实型数据。 9.格式符“%f”不能用于输入double类型数据。

10.当格式符中指定宽度时,输出的信息完全取决于所指定的宽度。 解:(1)T (2)F (3)T (4)F (5)F (6)F (7)F (8)T (9)T (10)F 二、指出下列各项中哪些是C语言中的常量,并指出其类型

10,150 007 –0x3d π 1e0 e1 o7o8 x xo 1.52e0.5 sin(3) 0xf16 \a \009 1.414E+2 2.54 \\ a +2 0x100h 0128 10L 解:合法的C常量有:

整型常量: 007 –0x3d 0xf16 10L 实型常量: 1e0 1.414E+2

字符型常量: x \a \\ 三、指出下列各项中哪些是C语言中的用户标识符

x_1 X_2 High printf β 3DS i/j e2 -e2 count Int number $23 next_ sizeof IF sum_12 _123# NO1: double for

解:C的用户标识符有:x_1 X_2 High e2 count Int number

next_ IF sum_12 四、单项选择题

1.C语言中,char型数据在内存中的存储形式是( )。 A.原码 B.反码 C.补码 D.ASCII码 2.若有定义语句“char c='\72';”则变量c( )。

A.包含1个字符 B.包含2个字符 C.包含3个字符 D.定义不合法 3.C语言中的基本数据类型包括( )。 A.整型、实型、逻辑型 B.整型、实型、字符型 C.整型、逻辑型、字符型 D.整型、实型、逻辑型、字符型 4.设c1、c2为字符型变量,执行语句“c1=getchar( );c2=getchar( );”时,从键盘输入A↙,c1和c2的值分别为( )。

A.都是‘A’ B.c1是‘A’,c2未输入

C.c1未输入,c2是‘A’ D.c1是‘A’,c2是‘\n’ 5.a、b是整型变量,执行语句“scanf("a=%d,b=%d",&a,&b);”,使a和b的值分别为1和2,正确的输入是( )。

A.1 2 B.1,2 C.a=1,b=2 D.a=1 b=2 6.设c为字符型变量值为‘A’,a为整型变量值为97,执行语句“putchar(c);putchar(a);”后,输出结果为( )。

A.Aa B.A97 C.A9 D.aA

7.已知字母A的ASCII码值为65,以下语句段的输出结果是( )。

char c1='A',c2='Y'; printf("%d,%d\n",c1,c2); A.输出格式非法,输出错误信息 B.65,90 C.A,Y D.65,89

8.若要使用输入语句“scanf("%4d%4d%10f",&i,&j,&x);”,为i输入-10,为j输入12,为x输入345.67,则正确的输入形式是( )。

A.–1012345.67↙ B.–10 12 345.67↙ C.–10001200345.67↙ D.–10,12,345.67↙ 9.能正确地定义符号常量的是( )。

A.#define n=10 B.#define n 10 C.#define n 10; D.#DEFINE N 10 10.在C语言中,int、char、short三种类型数据在内存中所占的字节数( )。 A.由用户自己定义 B.均为2个字节 C.是任意的 D.由机器字长决定

解:(1) D (2) A (3) B (4) D (5) C (6) A (7) D (8) B (9) B (10) D 五、填空题

1.char ch='$';float x=153.4523; 语句“printf("%c%–8.2f\\n",ch,x);”的输出结果是 。 解:$153.45 \n

2.int i=123;float x= – 1234.56789; 语句“printf("i=%5d x=%7.3f\n",i,x);”的输出结果是 。 解:i= 123 x=-1234.568

3.char c='a';int a=65; 语句“putchar(c+1);putchar(a);”的输出结果是 。 解:bA

4.int a=98;

语句“printf(“%d,%c,%o,%x”,a,a+1,a+2,a+3);”的输出结果是 。 解:98,c,144,65

5.int k; float f;

语句“scanf(“%3d%*4d%6f”,&k,&f);”执行时输入 12345678765.43↙ 则 k= ,f= 。 解:k=123 f=8765.4

6.使用pow()函数时,程序的开头必须写一条预处理命令: 解:#include <math.h> 5.填空题。

(1)int i=123,j=45;

函数printf("%d,%d\n",i,j);的输出结果是 。 解:123,45

(2)int i=123; float x=-45.678;

语句printf("i=%5d x=%7.4f\n",i,x); 的输出结果是 。 解:i= 123 x=-45.6780 (3)float alfa=60,pi=3

习 题 3

一、根据下列数学式,写出C的算术表达式。

1

ab c d

c d

a 2b

cd

(a2 b3) y4

2 10tan 1x

4

2

sin(x)|3.5x6 e5

解:-(a+b)×y 的C表达式:-(a*a+b*b)*pow(y,4)

22

2 102

的C表达式:(sqrt(2)+10*10)/(pow(tan(x),-1)+3.141593) 1

tanx

|sin(x)|

6

5

3.5

的C表达式:sqrt(pow (fabs (sin(x)),3.5))

x e 的C表达式:pow(x,6)-exp(5)

1

ab c d2 的C表达式:(1.0/2*a*b+c+d)/(a+2*b-(c+d)/c/d)

c d

a 2b

cd

二、按照要求,写出下列C的表达式。

1.写出int类型变量x为“奇数”的表达式。 解:x%2==1

2.Int类型变量x、y、z,写出描述“x或y中有且仅有一个小于z”的表达式。 解:x<z&&y>=z||x>=z&&y<z

3.将double类型变量y保留四位小数的表达式。 解:(int)(y*10000+0.5)/10000.0

4.为变量s赋值:取变量x 的符号,取变量y的绝对值。 解:s=(x>=0?1:-1)*(y>=0?y:-y)

5.条件“-5≤x≤3”所对应的C逻辑表达式。 解:-5<=x&&x<=3

6.a、b是字符变量,已知a的值为大写字母、b的值为小写字母,写出判断a、b是否为同一字母(不区分大小写)的逻辑表达式 解:a+32==b 或 b-a==32?1:0

7.int类型变量a、b均为两位正整数,写出判断a的个位数等于b的十位数、且b的个位数等于a的十位数的逻辑表达式。 解:a%10==b/10&&a/10==b%10

8.写出判断某个人是否是成年人(年龄大于21),且不是老年人(年龄大于65)的逻辑表达式。

解:y>21&&y<=65

9.写出取变量a、b、c中最大值的条件表达式。 解:(a>b?a:b)>c?(a>b?a:b):c

10.若字符变量ch为小写字母,则将其转换为对应的大写字母。

解:ch=ch>='a'&&ch<='z'?ch-32:ch 三、单项选择题

1.设int x=3,y=4,z=5;,下列表达式中值为0的是( )。

A.'x'&&'y' B. x<=y C.x||y+z&&y–z D. !((x<y)&&!z||1) 2.已知x=10,ch='A',y=0;,则表达式“x>=y&&ch<'B'&&!y”的值是( )。 A.0 B. 1 C.“假” D.“真” 3.判断char型变量c为数字字符的正确表达式为( )。

A.'0'<=c<='9' B.'0'<=c&&c<='9' C.c>='0'||c<='9' D.c>=0&&c<=9 4.下列运算符中,优先级最低的是( )。 A.?: B.&& C.= = D.*= 5.若有条件表达式“x?a++:b--”,则以下表达式中( )等价于表达式x。 A.x==0 B.x!=0 C.x==1 D.x!=1 6.有定义int k=4,a=3,b=2,c=1;,表达式“k<a?k:c<b?c:a”的值是( )。 A.4 B.3 C.2 D.1 7.执行下列程序段后,变量a,b,c的值分别是( )。 int x=10,y=9,a,b,c;

a=(--x= =y++)?--x:++y;b=x++;c=y; A.a=9,b=9,c=9 B.a=8,b=8,c=10 C.a=9,b=10,c=9 D.a=1,b=11,c=10 8.有定义int a=9;,语句“a+=a– =a+a;”执行后,变量的值是( )。 A.18 B.9 C.–18 D.–9 9.设x和y均为int型变量,则语句“x+=y;y=x–y;x– =y;”的功能是( )。 A.把x和y按从小到大排列 B.把x和y按从大到小排列 C.无确定结果 D.交换x和y中的值 10.有定义double x=1,y;,表达式“y=x+3/2”的值是( )。

A.1 B.2 C.2.0 D.2.5 11.设有定义int x;double y;,则下列表达式中结果为整型的是( )。

A. (int)y+x B.(int)x+y C.int(y+x) D.(double)x+y 12.设有整型变量x,下列说法中,错误的是( )。

A.“5.0”不是表达式 B.“x”是表达式 C.“!x”是表达式 D.“sqrt(x)”是表达式

解:(1)D (2)B (3)B (4)D (5)B (6)D (7)B (8)C (9)D (10)C (11)A (12)A 四、填空题。

1.设float x=2.5,y=4.7; int a=7;,表达式 x+a%3*(int)(x+y)%2/4 值为。 解:2.5

2.设int x=2,y=3;,执行语句“x*=x+y”后x的值为 解:10

3.设int x=17,y=5;,执行语句“x%=x–y”后x的值为 解:5

4.设 int a=6,b=4,c=2;,表达式 !(a-b)+c-1&&b-c/2 的值为 。 解:1

5.设 int a=2,b=4,x,y;,表达式!(x=a)||(y=b)&&!(2-3.5) 的值为 解:0

6.判断变量a、b是否绝对值相等而符号相反的逻辑表达式为 解:a==-b

7.判断变量a、b中必有且只有一个为0的逻辑表达式为。 解:a*b==0&&a+b!=0

8.设int m=2,n=2,a=1,b=2,c=3;执行语句d=(m=a==b)&&(n=b>c);后,m和n的值分别为 。

解:m为0,n为2 9.设int a=2;,表达式“a%2!=0”的值为。 解:0

10.设char c='y';,表达式“c>='a'&&c<='z'|| c>='A'&&c<='Z'”的值为 解:1

x+2

11.写出与代数式 (x+2)e 对应的C表达式 。 解:(x+2)*exp(x+2)

12.设int a=2;执行语句a=3*5,a*4;后a的值为 解:15 五、写出下列程序的输出结果。

1.

#include <stdio.h> void main() {

unsigned k,n;

scanf("%u",&n); //输入数据为:69 k=n%10*10+n/10;

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

解:n=69 k=96 2.

#include <stdio.h> void main() {

int x=2,y=3; x*=y+4;

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

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

printf("%d,%d\n",x,y); } 解:14,3

2,5 1,5

3.

#include <stdio.h> void main() {

int a, b; a=8; b=7;

a=(a-- ==b++)? a%3 : a/3; printf("a=%d b=%d\n",a,b); }

解:a=2 b=8 六、程序填空题。

1.以下程序输入三个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,交换后输出a、b、c的值。例如输入1 2 3,输出a=2 b=3 c=1。 #include <stdio.h> void main()

{ int a,b,c, ① ;

printf(“Enter a,b,c:”); scanf(“%d%d%d”, ② ); ③ ; a=b; b=c; ④ ;

printf(“a=%d b=%d c=%d\n”,a,b,c); }

解:① t ② &a,&b,&c ③ t=a ④ c=t

2.以下程序不借助任何变量把a、b中的值进行交换。 #include <stdio.h> void main() { int a,b;

printf(“Input a,b:”); scanf(“%d%d”, ① );

a+= ② ; b=a- ③ ; a- = ④ ; printf(“a=%d b=%d\n”,a,b); }

解:① &a,&b ② b ③ b ④ b 七、编程题。

1.输入3个字符后,按各字符ASCII码从小到大的顺序输出这些字符。 解:#include <stdio.h> void main()

{ char c1,c2,c3,t,min,mid,max;

c1=getchar(); c2=getchar(); c3=getchar(); min=(t=c1<c2?c1:c2)<c3?t:c3;

max=(t=c1>c2?c1:c2)>c3?t:c3; mid=c1+c2+c3-min-max; putchar(min); putchar(mid); putchar(max);

}

2.输入两点坐标(x1,y1)、(x2,y2),计算并输出两点间的距离。 解:#include <stdio.h>

#include <math.h> void main() {

double x1,y1,x2,y2,d;

printf(“请输入两点坐标 (x1,y1),(x2,y2)\n”); scanf(“(%lf,%lf),(%lf,%lf)”,&x1,&y1,&x2,&y2); d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); printf(“两点间距离=%f\n”,d); }

3.编写程序,计算球体积并输出它的值。要求输入半径值,计算结果保留三位小数。 解:#include <stdio.h> #include <math.h> #define PI 3.1415926 void main() { double r,gv;

printf(“请输入半径值:\n”); scanf(“%lf”,&r); gv=4.0/3*PI*pow(r,3);

printf(“半径为%f的球的体积为:%.3f\n”,r,gv);

}

4.输入三角形的底和高,求三角形面积。

解:#include <stdio.h> #define PI 3.14159 void main() {

double a,h,s;

printf(“请输入三角形的底,高\n”); scanf(“%lf,%lf”,&a,&h); s=a*h/2;

printf(“三角形面积=%f\n”,s);

}

5.编写程序,输入一个实数后输出该数的绝对值。

解:#include <stdio.h> void main() {

double x,y;

printf(“请输入一个实数\n”); scanf(“%lf”,&x); y=x>=0?x:-x;

printf(“|%g|=%g\n”,x,y); }

6.输入梯形的上底、下底和高,求梯形面积。

解:#include <stdio.h> void main() {

double a,b,h,s;

printf(“请输入梯形的上底,下底,高\n”); scanf(“%lf,%lf,%lf”,&a,&b,&h); s=(a+b)*h/2;

printf(“ 梯形面积=%f\n”,s); }

7. 输入矩形的边长,求矩形面积。

解:#include <stdio.h> void main() {

double a,b,s;

printf(“请输入矩形的长,宽\n”); scanf(“%lf,%lf”,&a,&b); s=a*b;

printf(“ 矩形面积=%f\n”,s); }

8. 已知等差数列的第一项为a,公差为d,求前n项之和,a、d、n由键盘输入。

解:#include <stdio.h> void main() {

int a,d,n,sum;

printf(“请输入等差数列的首项 公差 项数\n”); scanf(“%d%d%d”,&a,&d,&n); sum=a*n+n*(n-1)*d/2;

printf(“ sum=%d\n”,sum); }

9. 编写程序,将d天h小时m分钟换算成分钟,输入d、h、m,输出换算结果。

解:#include <stdio.h> void main() {

int d,h,m,t;

printf(“请输入天 小时 分钟\n”); scanf(“%d%d%d”,&d,&h,&m); t=d*24*60+h*60+m;

printf(“%d天%d小时%d分钟=%d分钟\n”,d,h,m,t); }

10. 编写程序,求出给定半径r的圆以及内接正n边形的面积,输出计算结果。r和n的值由键盘输入。

解:#include <stdio.h> #include <math.h> #define PI 3.14159 void main() {

double r,s1,s2; int n;

printf(“Input r n\n”); scanf(“%lf%d”,&r,&n); s1=PI*r*r;

s2=n/2.0*r*r*sin(2*PI/n);

printf(“圆面积=%f,正内接%d边形面积=%f\n”,s1,s2); }

习 题 4

一、单项选择题

1.下列语句将小写字母转换为大写字母,其中正确的是( )。

A.if(ch>='a'&ch<='z')ch=ch-32; B.if(ch>='a'&&ch<='z')ch=ch-32; C.ch=(ch>='a'&&ch<='z')?ch-32:' '; D.ch=(ch>'a'&&ch<'z')?ch-32:ch;

2.下列各语句中,能够将变量u、s中最大值赋给变量t的是( )。

A.if(u>s)t=u;t=s; B.t=s;if(u>s)t=u; C.if(u>s)t=s;else t=u D.t=u;if(u>s)t=s;

3.假设变量x、k都已定义,下列语句片段中,无语法错误的是( )。

A. switch(x){

case x>=90: putchar('A'); case x<60: putchar('E'); }

B. switch(x) {

case 1+2: k='A'; defualt: k='E'; case 2*4: k='B'; }

C. switch(x){

case 2+x: k=x-2; case 3*x: k=x+3; default: k=0; }

D. switch(x){

case 3.5: k=0.5*x; case 7.8: k=8*x; default: k=0; }

*4.与语句while(!s )中的条件等价的是( )。

A.s==0 B.s!=0 C.s==1

D.s=0

5.下列语句中,哪一个可以输出26个大写英文字母( )。

A.for(a='A';a<='Z';printf("%c",++a)); B.for(a='A';a<'Z';a++)printf("%c",a); C.for(a='A';a<='Z';printf("%c",a++)); D.for(a='A';a<'Z';printf("%c",++a));

6.判断下面的while循环体的执行次数( )。

i=0; k=10;

while( i=8 ) i=k––;

A.8次 B.10次 C.2次 D.无数次

解:(1) B (2) B (3) B (4) A (5) C (6) D 二、写出下列程序的输出结果 1.#include <stdio.h>

void main() {

char x;

int n=0,k=0;

while((x=getchar())!='#'){ //运行时输入:a the ftheth e

there#

switch(x){

case 't': k++; break;

case 'h': if(k==1) k++; break; case 'e': if(k==2) k++; break; default: k=0; }

if(k==3) n++; } printf("%d\n",n); } 解:3

*2.

#include <stdio.h>

void main( ) {

int k=0; char c='A';

do {

switch (c++) {

case 'A': k++; break; case 'B': k--;

case 'C': k+=2; break; case 'D': k=k%2; break; case 'E': k=k*10; break; default: k=k/3;

} k++;

}while(c<'G');

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

解:k=8

*3.

#include<stdio.h> #include<ctype.h> void main() {

char a,b,x; int i; do

x=getchar(); //运行时输入:2abcD while (isupper(x)==0);

for(a='A'; a<=x; a++){ for(b='A'; b<'A'+x-a; b++) putchar(' '); for(i=1;i<=2*(a-'A')+1;i++) putchar(a);

putchar('\n'); } }

注:isupper(x)是判断x是否大写字母的函数,如果x是大写字母函数值为1

否则为0。

解: A BBB CCCCC

DDDDDDD 4.

#include<stdio.h> void main() {

int i,n;

scanf("%d",&n); //输入2520 i=2;

while(n>1) if(n%i==0){

printf("%d\t",i); n/=i; }

else i++; printf("\n"); }

解: 2 2 2 3 3 5 7

三、填空题

1.求1~10的乘积,写作:

for( , i=1; i<=10; ++i) s*=i;

解: s=1

2.下面程序段执行后,x、y的值分别为

y=1; x=5;

while(x) { x--; y++; }

解: x、y分别为0和6

*3.输入若干个以问号结束的字符,同时输出这串字符(不包括问号);

while( !='?') putchar(ch);

解: (ch=getchar()) //注意外面的这对括号不能少

*4.有以下程序片段:

s=1.0;

for(k=1;k<=n; k++) s+=1.0/(k*(k+1)); printf("%f\n",s); 填空,使下程序段与上程序段功能完全相同。

s=0.0;

; k=0; do

{ s+=d;

; d=1.0/(k*(k+1)); }

while( ); printf("%f\n",s);

解: d=1 k++ k<=n

5.下列程序输出6~10000之间的亲密数对,填空将程序补充完整。若a、b是亲密数对,则a的因子和等于b,b的因子和等于a,且a不等于b。

#include<stdio.h> void main()

{ int a,b,c,i;

for(a=6;a<=10000;a++) { b=1;

for(i=2;i<=a/2;i++)

if( ) b+=i;

for(i=2;i<=b/2;i++) if(b%i==0) c+=i;

if( &&a!=b)

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

解:a%i==0 c=1; c==a

6.计算2+22+222+2222+ +22+ +2的和。

n n

void main()

{ int s=1,t=1,a,n; scanf("%d"&n);

for(int i=2;i<=n;i++) { t=t*10+1; }

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

解:a=2; s+=t; s*=a;

四、编程题

1.输入一个实数,输出它的平方根值,如果输入数小于0,则输出“The number is error!”的提示。

解:#include <stdio.h>

#include <math.h> void main() {

double a,x;

printf(“Input data:\n”); scanf(“%lf”,&a); if(a>=0){

x=sqrt(a);

printf(“%g的平方根值为%g\n”,a,x); }

else

printf(“The number is error!\n”); }

2.用if语句编程序,输入x后按下式计算y值,并输出结果。

2

x+2*x +10 0≤x≤8

y= x-3*x3-9 x<0 或 x>8 解:#include <stdio.h>

void main() {

double x,y;

printf(“Input x:\n”); scanf(“%lf”,&x); if(x>=0&&x<=8) y=x+2*x*x+10; else

y=x-3*x*x*x-10;

printf(“x=%f,y=%f\n”,x,y); }

3.输入一个百分制的成绩t后,按下式输出它的等级,要求分别写成if结构和switch结构。等级为:90~100为“A”,80~89为“B”,70~79为“C”,60~69为“D”,59~0为“E”。

if结构

解:#include <stdio.h>

void main() {

double t;

printf(“Input score:\n”); scanf(“%lf”,&t); if(t>=90&&t<=100) putchar( A );

else if(t>=80&&t<90) putchar( B );

else if(t>=70&&t<80) putchar( C );

else if(t>=60&&t<70) putchar( D ); else if(t>=0&&t<60) putchar( E );

else

printf(“error!\n”);

}

switch结构

解:#include <stdio.h>

void main() {

double t;

printf(“Input score:\n”); scanf(“%lf”,&t);

switch((int)(t/10)){ case 10:

case 9:putchar( A );break; case 8:putchar( B );break;

case 7:putchar( C );break; case 6:putchar( D );break; case 5: case 4:

} }

case 3: case 2: case 1:

case 0:putchar( E );break; default:printf(“error!\n”);

4.输入x、y,计算f(x,y)的函数值。 f(x,y)定义如下:

x y x2 y2

f(x,y)

x y x y

22

x 0x 0x 0x 0

y 0y 0y 0y 0

解:#include <stdio.h> void main() {

double x,y,f;

printf(“Input x y:\n”); scanf(“%lf%lf”,&x,&y); if(x>=0&&y>=0) f=x*x+y*y;

else if(x<0&&y<0) f=x*x-y*y;

else if(x>=0&&y<0) f=x+y;

else if(x<0&&y>=0) f=x-y;

printf(“f(%f,%f)=%f\n”,x,y,f);

}

5.输入三角形的三条边长a、b、c,计算并输出三角形的面积。要求判断输入的三条边a、b、c三个数是否能构成三角,如果不能构成三角形,则输出提示信息告诉用户。

根据三条边的边长,计算三角形面积的公式如下: s

x y z

面积 s(s x)(s y)(s z)

2 解:#include <stdio.h>

#include <math.h> void main() {

double a,b,c,s,area;

printf(“Input a b c:\n”); scanf(“%lf%lf%lf”,&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a){ s=(a+b+c)/2;

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

printf(“area=%.3f\n”,area); } else }

6.输入1~7,输出对应的星期一~星期天。

解:#include <stdio.h>

void main() {

int s;

printf(“Input s(1~7):\n”); scanf(“%d”,&s); switch(s){

case 1:printf(“星期一\n”);break; case 2:printf(“星期二\n”);break; case 3:printf(“星期三\n”);break; case 4:printf(“星期四\n”);break; case 5:printf(“星期五\n”);break; case 6:printf(“星期六\n”);break;

} }

7.输入年、月、日,输出是该年的第几天。

解:#include <stdio.h>

void main() {

int y,m,d,days;

printf(“Input 年 月 日:\n”); scanf(“%d%d%d”,&y,&m,&d); days=d; switch(m){

case 12:days+=30; case 11:days+=31;

case 10:days+=30; case 9:days+=31; case 8:days+=31; case 7:days+=30; case 6:days+=31; case 5:days+=30; case 4:days+=31; case 3:

if(y%4==0&&y%100!=0||y%400==0)

days+=29;

printf(“线段%f,%f,%f不能构成三角形\n”,a,b,c);

case 7:printf(“星期天\n”);break;

default:printf(“The s is error!\n”);

}

}

else days+=28; case 2:days+=31;

printf(“%d月%d日是%d年的第%d天\n”,m,d,y,days);

8.输入n和相应的n个数,输出它们中所有奇数的乘积。

解:#include <stdio.h>

void main() {

int n,i,t,x;

printf(“请输入 n:\n”); scanf(“%d”,&n);

printf(“请输入%d个数:\n”,n); for(i=1,t=1;i<=n;i++){ scanf(“%d”,&x); if(x%2==1) t*=x; }

printf(“%d\n”,t); }

9.输入一个正整数,求它们所有数字之和。

解:#include <stdio.h>

void main() {

int a,sum=0;

printf(“请输入一个正整数:\n”); scanf(“%d”,&a); a=a>=0?a:-a; while(a!=0){ sum+=a%10; a/=10; }

printf(“%d\n”,sum); }

10.输入n和相应的n个数,统计输入的数中负数、零及正数的个数。

解:#include <stdio.h>

void main() {

int n,i,t,s,k; double x; t=s=k=0;

printf(“请输入 n:\n”); scanf(“%d”,&n);

printf(“请输入%d个数:\n”,n); for(i=1;i<=n;i++){ scanf(“%lf”,&x); if(x>0) t++;

else if(x<0) s++; else k++; }

printf(“负数:%d\t零:%d\t正数:%d\n”, s, k, t); }

11.输入10个学生的成绩,输出最低分数。

解:#include <stdio.h>

void main() {

int i;

double score,min;

printf(“请输入 10个学生成绩:\n”); scanf(“%lf”,&score);

min=score; // 给min赋初值 for(i=1;i<10;i++){

}

}

printf(“min=%g\n”, min);

scanf(“%lf”,&score); if(min>score)

min=score;

解:#include <stdio.h>

void main() {

int i;

double score,min;

printf(“请输入 10个学生成绩:\n”); for(i=1;i<=10;i++){

}

printf(“min=%g\n”, min);

scanf(“%lf”,&score); if(i==1)

min=score; min=score; if(min>score)

本文来源:https://www.bwwdw.com/article/o3q1.html

Top