您好,欢迎来到汇意旅游网。
搜索
您的当前位置:首页C语言程序设计教程(第2版)课后习题答案(完美版)

C语言程序设计教程(第2版)课后习题答案(完美版)

来源:汇意旅游网
C语言程序设计教程(第二版)课后习题答案

第一章 C语言程序设计概述 -习题答案1

算法的描述有哪些基本方法? 答 1、自然语言 2、专用工具

2 C语言程序的基本结构是怎样的?举一个例子说明。 答

1、C语言程序由函数构成;

2、“/*”与“*/”之间的内容构成C语言程序的注释部分;

3、用预处理命令#include、#define可以包含有关文件或预定义信息; 4、大小写字母在C语言中是有区别的;

5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。 3 C语言有什么特点?

答 1、具有结构语言的特点,程序之间很容易实现段的共享;

2、主要结构成分为函数,函数可以在程序中被定义完成的任务,地编译代码,以实现程序的模块化;

3、运算符丰富,包含的范围很广; 4、数据类型丰富;

5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能; 6、不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚; 7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。 4

★指出合法与不合法的标识符命名。 答

AB12--√

leed_3-- a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--× 5

说明下列Turbo C热键的功能。 答

F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序) Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。 6

说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。

①main()

{printf(\"********************\\n\"); printf(\" welcome you \\n\"); printf(\" very good \\n); printf(\"********************\\n\"); }

②main()

{ int a,b,c,t;

2021年

printf(\"please input three numbers;\");

scanf(\"%d,%d,%d\教材S是错误的*/ t=max(max(a,b),c);

printf(\"max number is:%d\\n\ }

int max(int x, int y) { int z;

if(x>y)z=x; else z=y; return(z); } 答

运行结果:

******************** welcome you very good ******************** 运行结果:

please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7

一个C程序是由若干个函数构成的,其中有且只能有一个___函数。 答

main() 8

在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。 答

1、User screen 2、Alt+F5 9

★C语言对标识符与关键字有些什么规定? 答

1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。

2021

2

2021年

2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能

根据系统的规定使用它们。2021 10

C源程序输入后是如何进行保存的? 答

是以C为扩展名保存的纯文本文件。

第二章 C语言程序的基本数据类型与表达式 -习题答案

1

★指出下列常数中哪些是符合C语法规定的。 答

'\\'--× '101'--× \"\\\"--× e3--× 019--√ 0x1e--√ \"ab\\n\"--√ 1.e5--× (2+3)e(4-2)--× 5.2e2.5-- × 2

请找出下列程序中的错误,改正后写出程序运行结果。

①void main()

{int x,y=z=5,aver; x=7

AVER=(x+y+z)/3

printf(\"AVER=%d\\n\ }

②void main()

{ char c1='a';c2='b';c3='c'; int a=3.5,b='A'

printf(\"a=%db=\\'\\\"end\\n\

printf(\"a%cb%c\\bc%c\abc\\n\ } 答

main()

3

2021年

2021

{int x,y=5,z=5,aver; x=7;

aver=(x+y+z)/3;

printf(\"AVER=%d\\n\ }

int 99 -1 char 'h'

unsigned int 66

运行结果:AVER=5 ②main()

{ char c1='a', c2='b', c3='c'; int a=3,b='A';

printf(\"a=%d,b=\\'%c\\'\\\"end\\\"\\n\ printf(\"a%cb%c\\bc%c\abc\\n\ }

运行结果:a=3,b='A'\"end\"

aabcc abc 3

写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。

4

2021年

2021 float 55.78

long int 68

答 int 99 104 66 55 68 -1 char 'c' 'h' 'B' '7' 'D'

unsigned int 99 104 66

5

2021年

202155 68 65535 float 99.00

104.00 66.00 55.78 68.00 -1.00

long int 99 104 66 55 68 -1

4

★写出程序运行结果。

①void main() {int i,j; i=8,j=10;

printf(\"%d,%d,%d,%d\\n\ }

②main()

{ int a=1,b=2,c=30;;

printf(\"%d,%d,%d,%d\\n\ }

注意:a=b=c,a=b==c之间应为逗号,教材有误 答

运行结果: 9,11,9,10 运行结果: 30,1,0,0

6

2021年

2021

③void main()

{int a=10,b=20,c=30,d; d=++a<=10||b-->=20||c++;

printf(\"%d,%d,%d,%d\\n\

} 答

运行结果: 11,19,30,1 5

★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。 ⑴a%=(b%=3)

⑵n++,a+=a-=a*=a

⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a⑼a+b,18+(b=4)*3,(a/b,a%b)

⑽x+a%3*(int)(x+y)%2/4+sizeof(int) ⑾a⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 6

下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?

①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b) ④m%=2+a*3与m=m%2+a*3

7

2021年

⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答

①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;

②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。 ③因为a、b均为整数,其前后两个表达式的计算结果是一致的。

④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。

⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7

条件表达式x>0?x:-x的功能是什么? 答

如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。 8

用一个条件表达式描述从a、b、c中找出最大都赋给max. 答

max=a>(b>c?b:c)?a:(b>c?b:c); 9

★若x为int型变量,则执行以下语句后x的值为( )。 x=6;

x+=x-=x*x;

A. 36 B. -60 C. 60 D. -24 答 B. 10

★若有以下类型说明语句:

char w; int x; float y; double z; 则表达式w*x+z-y的结果为( )类型。 A. float B. char C. int D. double

2021

8

2021年

答 D.

2021

第三章 顺序结构程序设计 -习题答案

1

变量k为float类型,调用函数scanf(\"%d\,不能使变量k得到正确数值的原因是___。 答

格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。 2

★a=1234,b=12,c=34,则执行“printf(\"|%3d%3d%-3d|\\n\ 答

|1234 1234 |

分析如下:

①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受。

②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。 3

★设有“int a=255,b=8;”,则“printf(\"%x,%o\\n\ 答

ff,10

①如果“printf(\"%X,%o\\n\FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的,如果是“%x”则输出小写,如果是“%X”则输出大写。 ②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改

“printf(\"%#x,%o\\n\\\n\ 4

★以下程序输出的结果是___。 main() {

9

2021年

int a1=1,a2=0,a3=2;

printf(\"%d,%d,%d\\n\} 答

1,3,1 5

printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。 答

①实际 ②左端补空格 6

★已定义变量如下: int a1,a2; char c1,c2;

若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。 答

scanf(\"%d,%d,%c,%c\ 7

输入两个整型变量a、b的值,输出下列算式以及运算结果___。 a+b、a-b、a*b、a/b、(float)a/b、a%b

每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答

设int a=10,b=5;以下为输出语句及结果:

①printf(\"%d+%d=%d\\n\ 10+5=15 ②printf(\"%d-%d=%d\\n\ 10-5=5 ③printf(\"%d*%d=%d\\n\ 10*5=50 ④printf(\"%d/%d=%d\\n\ 10/5=2

⑤printf(\"%(float)d/%d=%f\\n\ (float)10/5=2.000000 ⑥printf(\"%d%%%d=%d\\n\ 10%5=0 8

★输入一个非负数,计算以这个数为半径的圆周长和面积。 答

#define PI 3.1415926 main() {

2021

10

2021年

float r,l,area;

printf(\"Input a positive:\"); scanf(\"%f\ l=2*PI*r; area=PI*r*r;

printf(\"l=%f\area=%f\\n\} 9

输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。 答

main() {

int x,y;

printf(\"Input a number(100-999):\"); scanf(\"%d\

y=100*(x%10)+10*(x/10%10)+x/100; /*注意分析此处算法*/ printf(\"%d--->%d\\n\} 10

★输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。若是则输出YES,不是则输 出NOT(要求用条件表达式进行判断,不使用if语句)。 答

main() {

int x,y,z,oddcount=0; /*奇数数计数变量*/ printf(\"Input x,y,z:\"); scanf(\"%d,%d,%d\ x%2==1?oddcount++:0; y%2==1?oddcount++:0; z%2==1?oddcount++:0;

oddcount==2?printf(\"YES\"):printf(\"NOT\"); } 11

求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,按从大到小的顺序输出这3个字符及其对应的ASCII码值。 答

2021

11

2021年

本题考查同学们对字符类型数据的认识,如果在ASCII范围内则即可以显示为字符,又可以显示为整数值;无论是否能够显示为字符,字符类型数据是可能参与数值运算的,切记。 main() {

char c;

printf(\"Input character:\"); scanf(\"%c\

printf(\"%c----->%d\\n\ printf(\"%c----->%d\\n\

printf(\"%c----->%d\\n\ +1,c+1);

getch(); /*为便于调试程序,运行至此程序停顿,此时可以看到运行结果,按任意键程序真难得结束并返回到编辑环境*/ } 12

★输入三角形的边长,求三角形面积(面积=sqrt(s(s-a)(s-b)(s-c)),s=(a+b+c)/2)。 答

#include\"math.h\" /*由于程序中使用了开平方函数sqrt(),所以需要包含数学头文件*/ main() {

float a,b,c,s,area; int ok=0;

printf(\"Input a,b,c:\"); scanf(\"%f,%f,%f\

a+b>c?ok++:0; /*以下3条语句为判断是否输入的数据是否构成封闭三角形*/ a+c>b?ok++:0; b+c>a?ok++:0;

ok==3?(s=(a+b+c)/2,area=sqrt(s*(s-a)*(s-b)*(s-c)),printf(\"area=%f\(\"error\"); getch(); }

2021

第四章 选择结构程序设计 -习题答案

1

★设x、t均为int型变量,则执行语句“x=10;t=x&&x>10;”后,t的值为___。 答

12

2021年

0 2

★假定所有变量均已正确定义,则程序段: int a=0, y=10;

2021

if(a=0)y- -; else if(a>0)y++; else y+=y;

运行后 y 的值是___; 答 20 3

★能表述 20x>20&&x<30||+x<-100 4

★若有定义语句“int a=25,b=14,c=19;”,则以下语句执行结果是___。 if(a<=25 && b<=2 && c)

printf(\"***a+b=%d, a-b=%d***\\n\ else printf(\"***a=%d, b=%d, c=%d***\\n\ 答

***a=25, b=14, c=19*** 5

★假定 i 和 j 为 int 型变量,则执行以下语句后 i 的值是___。 int i=1; switch(i) {

case 1: { for(j=0; j<9; j++) i+=j; break;} case 2: { for(j=1; j<10; j++) i+=j; break;} case 3: i++; } 答 37

13

2021年

分析:执行了case 1: 和case 3: 中的代码。同时case 1:语句中的{ }是可以取消的。 6

★以下两条 if 语句可合并成一条 if 语句,即___。

if(a<=b) x=1; else y=2;

if(a>b)printf(\"***y=%d\\n\else printf(\"***x=%d\\n\ 答

if(a<=b) printf(\"***x=%d\\n\else printf(\"***y=%d\\n\ 7

★输入两个字符,若这两个字符的序号(ASCII码)之差为偶数,则输出它们的后继字符,否则输出它们的前驱字符。 答

main() {

char a,b;

printf(\"Input two chatacter a,b:\"); scanf(\"%c,%c\ if((a-b)/2==0)

printf(\"%c,%c\

else printf(\"%c,%c\} 8

★输入整数 a 和 b ,如果 a 能被 b 整除,就输出算式和商,否则输出算式、整数商和余数。 答

main() {

int a,b;

printf(\"Input two integer numbers a,b:\"); scanf(\"%d,%d\ if(b!=0&&a%b==0)

printf(\"%d/%d=%d\ else

printf(\"%d/%d=%d......%d\}

2021

14

2021年

9

输入某个点 A 的平面坐标 (x,y),判断(输出)A点是在圆内、圆外还是在圆周上,其中圆心坐标为 (2,2),半径为 1。 答

include\"math.h\" main() {

float x,y,d;

printf(\"Input x,y:\"); scanf(\"%f,%f\

d=sqrt((x-2)*(x-2)+(y-2)*(y-2)); if(d>1)printf(\"outside\"); else if(d<1)printf(\"inside\"); else printf(\"inside\"); } 10

★输入年号和月份,输出这一年该月的天数(一个年份,先判断是否闰年)。 答

main() {

int y,m,d,f;

printf(\"Input year and month y-m:\"); scanf(\"%d-%d\

f=(y%4==0&&y/100!=0||y/400==0); if(m==2)

d=28+f; /*依据是否闰年决定2月份的实际天数,若是闰年,则f=1,d即为29天*/ else

d=31-(m==4)+(m==6)+(m==9)+(m==11);/*m==4时其值为1,则本月为30天,典型算法,重要啊*/

printf(\"%d-%d is %d days.\\n\} 11

★请将以下语句改写成 switch 语句(a>0)。

2021

if(a<30) m=1; else if(a<40) m=2; else if(a<50) m=3;

15

2021年

else if(a<60) m=4;

else m=5 答

switch(a/10) {

case 1: case 2:

case 3:m=1;break; case 4:m=2;break; case 5:m=3;break; case 6:m=4;break; default:m=5; } 12

有一函数

x-1 -5使用不嵌套的 if 语句程序如下:

2021

main() {

float x,y;

printf(\"Input x:\"); scanf(\"%f\

if(x>-5&&x<0)y=x-1; if(x==0)y=0;

if(x>0&&x<8)y=x+1; printf(\"y=%f\\n\}

使用嵌套的 if 语句程序如下: main() {

float x,y;

16

2021年

scanf(\"%f\ if(x>-5&&x<8)

if(x<0)y=x-1; else if(x==0)y=0: else y=x+1; 2021 printf(\"y=%f\\n\

}

main()

float x,y;

scanf(\"%f\ if(x<8)

if(x>0)y=x+1; else if(x==0)y=0;

else if(x>-5)y=x-1; printf(\"y=%f\\n\}

使用多分支语句程序如下:

main() {

float x,y; int m;

printf(\"Input x:\"); scanf(\"%f\ if(x>-5&&x<8)

if(x<0)m=-1;

else if(x==0)m=0: else m=1; switch(m) {

case -1:y=x-1;break; case 0:y=0;break; case 1:y=x+1;break; }

printf(\"y=%f\\n\}

以下为假设对int类型的变量进行处理,但毕竟不算完美 main() {

17

2021年

2021 int x,y;

printf(\"Input x:\"); scanf(\"%d\ switch(x) {

case -4:

case -3: case -2:

case -1: y=x-1; break; case 0: y=0; break; case 1: case 2: case 3: case 4: case 5: case 6:

case 7: y=x+1; break; }

printf(\"y=%d\\n\

}

第五章 循环结构程序设计 -习题答案

1

★输入 n 个整数,求这 n 个数之中的偶数平均值,并输出。 答

main() {

int n,i,x,sum=0,count=0; printf(\"Input n:\"); scanf(\"%d\ for(i=0;iprintf(\"Input [%d]:\ scanf(\"%d\

if(x%2==0){sum+=x;count++;} }

printf(\"Average is:%f\\n\

18

2021年

getch(); } 2

★输入一串字符,直到输入一个星号(*)为止,统计(输出)其中的字母个数和数字字符个数。 答

#include\"stdio.h\" main() {

char ch;

int charcnt=0,numcnt=0; while((ch=getchar())!='*') {

if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')charcnt++; if(ch>='0'&&ch<='9')numcnt++; }

printf(\"Characters number:%d\\nDigits number:%d\\n\ getch(); } 3

★从键盘输入一个正整数 n,计算该数的各位数字之和并输出。例如,输入数是5246,则计算5+2+4+6=17并输出。 答

#include\"stdio.h\" main() {

int n,i,sum=0,count=0; printf(\"Input n:\"); scanf(\"%d\ while((n/10)!=0) {

count++; sum+=n%10;

printf(\"%d+\ n/=10; }

printf(\"=%d\ getch(); }

2021

19

2021年

4

★输入一个字符串,将其中的大写字母改为小写字母,小写字母改为大写字母,然后输出。 答

#include\"stdio.h\" main() {

char ch;

printf(\"Input string:\"); while((ch=getchar())!='\\n') {

if(ch>='a'&&ch<='z')printf(\"%c\ if(ch>='A'&&ch<='Z')printf(\"%c\ }

getch(); } 5

设某县2000年工业总产值为200亿元,如果该县预计平均年工业总产值增长率为4.5%,那么多少年后该县年工业总产值将超500亿元。 答

main() {

float x=200; int n=0; do {

x*=(1+0.045); n++; }while(x<500); printf(\"n=%d\ getch(); } 6

★输出1~999中能被3整除,而且至少有一位数字是5的所有数字。 答

main() {

int x,y,flag;

2021

20

2021年

for(x=1;x<1000;x++) {

flag=0; y=x;

if(y%3==0) /*余数为0说明该数能够被3整除*/ {

while(y%10!=0) {

if(y%10==5)flag=1; /*依个位、十位、百位顺序判断是否余数为5*/

y/=10; }

if(flag==1)printf(\"%d\\ } }

getch(); } 7

求爱因斯坦数学题。有一条长阶,若每步跨2阶,则最后剩1阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶每步跨6阶,则最后剩5阶每步跨7阶,最后正好1阶。 答

main() {

int x=0,flag=0; while(1) {

x++;

if(x%2==1) if(x%3==2) if(x%5==4) if(x%6==5) if(x%7==0) {

printf(\"%d\ break; } }

getch(); }

2021

21

2021年

8

输入一个3位数,判断是否是一个“水仙花数”。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=1*1*1+5*5*5+3*3*3 答

main() {

int x,a,b,c;

printf(\"Input number:\"); scanf(\"%d\

a=x/100; /*变量a中记录x的百位数字*/ b=x/10%10; /*变量b中记录x的十位数字*/ c=x%10; /*变量c中记录x的个位数字*/ if(a*a*a+b*b*b+c*c*c==x) {

printf(\"%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\\n\ printf(\"YES\"); } else

printf(\"NOT\"); getch(); } 9

★计算斐波那契分数序列前n项之和(n是某个常数,波那契分数序列为2/1,3/2,5/3,8/5,...)。 答

main() {

int i,n=10;

float f1=1,f2=2,f,sum=0; for(i=0;isum+=f2/f1; f=f1+f2; f1=f2; f2=f; }

printf(\"total=%d\\nsum=%f\ getch(); }

2021

22

2021年

10

输入一个正整数,各输出n行的正(倒)三角形宝塔图案。 答

main() {

int n,i,j;

printf(\"Input n:\"); scanf(\"%d\ for(i=0;ifor(j=i+1;jfor(i=0;ifor(j=0;jgetch(); } 11

★输出九九乘法表。 答

main() {

int i,j;

for(i=1;i<=9;i++) {

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

printf(\"%d*%d=%-3d\ printf(\"\\n\"); }

getch(); } 12

输入一串字符,直到输入一个星号为止,统计(输出)其中的正整数和负整数个数以及所有正整

2021

23

2021年

数的平均值和所有负整数的平均值。2021 答

#include\"stdio.h\" #include\"math.h\" main()

{

char ch;

int x=0,y=1,f=0,pcnt=0,ncnt=0; float psum=0,nsum=0;

while((ch=getchar())!='*') {

if(ch=='-') {

if(x!=0) {

if(f==1) {

x=-x; nsum+=x; ncnt++; } else {

psum+=x; pcnt++; }

printf(\"%d\\n\ }

f=1;x=0;y=1; continue; }

else if(ch>='0'&&ch<='9') {

x=10*x+ch-'0'; y=10*y;

if(x!=0&&10*xif(x!=0)

24

2021年

2021 {

if(f==1) {

x=-x; nsum+=x;

ncnt++; } else {

psum+=x; pcnt++; }

printf(\"%d\\n\ }

f=0;x=0;y=1; continue; } }

if(x!=0) {

if(f==1) {

x=-x; nsum+=x; ncnt++; } else {

psum+=x; pcnt++; }

printf(\"%d\\n\ }

printf(\"\\n---------\\n\"); printf(\"Plus:\\n\");

printf(\"Count=%d\\n\

printf(\"Average=%f\\n\ printf(\"-------\\n\"); printf(\"Negative:\\n\"); printf(\"Count=%d\\n\

printf(\"Average=%f\\n\ getch();

25

2021年

} 13

一个整数等于该数所有因子之和,则称该数是一个完数。例如,6和28都是完数。因为6=1+2+3,28=1+2+4+7+14。输出3位数中所有的完数。 答

main() {

int k1, k2, k3, k4, k5, k6, k7, k8, k9, k10; int i,a,n,s;

for (a = 100; a <= 999; a++) {

n = 0; /* n累计因子的个数 */

s = a; /* s存放未求出的因子之和,初值为被测数本身 */ for (i = 1; i < a; i++)

if (a % i == 0) /* 由i到a循环检测i是否为a的因子 */ {

n++; /* 找到一个因子 */

s = s - i; /* 减去已找到的因子 */

switch (n) /* 将找到的因子赋绐k1, k2, ... */ {

case 1 : k1 = i; break; case 2 : k2 = i; break; case 3 : k3 = i; break; case 4 : k4 = i; break; case 5 : k5 = i; break; case 6 : k6 = i; break; case 7 : k7 = i; break; case 8 : k8 = i; break; case 9 : k9 = i; break; case 10 : k10 = i; break; } }

if (s == 0) /* 已经找到全部因子 */ {

printf(\"%d Its factors are \

if (n > 1) printf(\"%d,%d\k1, k2); /* n>1表示a至少有2个因子 */ if (n > 2) printf(\注意以下if的用法,追加的方法 */ if (n > 3) printf(\ if (n > 4) printf(\ if (n > 5) printf(\

2021

26

2021年

if (n > 6) printf(\ if (n > 7) printf(\ if (n > 8) printf(\ if (n > 9) printf(\ printf(\"\\n\"); } }

getch(); } 14

★编写程序按下列公式计算e的值(精度为1e-6)。 e=1+1/1!+1/2!+1/3!...+1/n! 答

main() {

int i;

double e=0,t=1;

for(i=1;t>0.000001;i++) {

for(j=1;j<=i;j++)t*=j; t=1/t; e+=t; }

printf(\"e=%f\\n\ getch(); } 15

用二分法求方程2x3-4x2+3x=0在(-10,10)附近的根(二分法:先找到a、b,使f(a)、f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],现在假设f(a)<0,f(b>0,af[(a+b)2]=0,该点就是零点,如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,按上述方法再求该区间中点的函数值,通过每次把f(x)的零点所有小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,该值即是方程的根)。 答

#include\"math.h\" main() {

double x,fx,fa,fb,a=-10,b=10,z=0.0001; fa=2*a*a*a-4*a*a+3*a;

2021

27

2021年

}

2021

第六章 函数与编译预处理 -习题答案

fb=2*b*b*b-4*b*b+3*b; if(fa*fb<0) {

do {

x=(a+b)/2;

fx=2*x*x*x-4*x*x+3*x; if(fx<0) {

a=x;

fa=2*a*a*a-4*a*a+3*a; } else {

b=x;

fb=2*b*b*b-4*b*b+3*b; }

}while(fabs(fa-fb)>z); printf(\"The root is:%lf\\n\ }

getch();

1

★写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 答

main() {

unsigned int m,n,p,q; for(;;) {

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

if(m<0||n<0){printf(\"The end.\\n\");break;} p=funp(m,n); q=funq(m,n);

28

2021年

printf(\"p(%d,%d)=%d\\nq(%d,%d)=%d\\n\ } }

int funp(int m,int n) {

int i;

if(m>n){i=m;m=n;n=i;}

for(i=m;i>0;i--)if(m%i==0&&n%i==0)return(i); }

int funq(int m,int n) {

int i;

if(mfor(i=m;i<=m*n;i+=m)if(i%n==0)return(i); } 2

★编写一个函数,由参数传入一个字符串,统计此字串中字母、数字和其他字符的个数,在主函数中输入字符串并显示统计结果。 答

未制作函数,主要利用了选择语句结构:

#include\"stdio.h\" main() {

int i,c,zm=0,sz=0,kg=0,qt=0; printf(\"Input a string:\"); while((c=getchar())!='\\n') if(c==' ')kg++;

else if(c>47&&c<58)sz++;

else if(c>='A'&&c<='Z'||c>='a'&&c<='z')zm++; else qt++;

printf(\"am=%d,sz=%d,kg=%d,qt=%d\\n\}

制作函数,利用函数调用: #include\"stdio.h\" int analys(char ch); main( ) {

int i,zm=0,sz=0,qt=0,c;

2021

29

2021年

}

2021

printf(\"Input a string:\"); while((c=getchar())!='\\n') {

i=analys(c); switch(i) {

case 1: zm++; break; case 2: sz++; break; case 3: qt++; } }

printf(\"zm=%d,sz=%d,qt=%d\\n\

int analys(char ch) {

if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')return 1; if(ch>47&&ch<58)return 2; return 3; } 3

★按照第5章第8题的要求编写判断水仙花数的函数,从主函数输入正整数n,在主函数中调用判断水仙花数的函数,找出n以内所有的水仙花数。

【输入一个3位数,判断是否是一个“水仙花数”。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=1*1*1+5*5*5+3*3*3】 答

main() {

int x,i,f;

printf(\"Input number:\"); scanf(\"%d\ for(i=0;i<=x;i++) { f=0;

f=fun(i);

if(f==1)printf(\"%d\\ }

getch(); }

30

2021年

int fun(int x) {

2021 int a,b,c; a=x/100; b=x/10%10; c=x%10;

if(a*a*a+b*b*b+c*c*c==x)return 1; else return 0; } 4

★定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。 答

#define f(a,b) (a=a+b,b=a-b,a=a-b) main() {

int x,y;

printf(\"Input x,y:\"); scanf(\"%d,%d\ printf(\"%d,%d\ f(x,y);

printf(\"<-->%d,%d\\n\ getch(); } 5

已知二阶Fibonacci数列:

0 若n=0 Fib(n)= 1 若n=1 Fib(n-1)+Fib(n-2) 其它情况 定义递归函数求Fib(n)。 答

main() {

int i,n;

printf(\"Input n:\"); scanf(\"%d\ for(i=0;i<=n;i++)

printf(\"%d\\ getch();

31

2021年

}

int fib(int n) {

2021 if(n==0)return 0;

else if(n==1)return 1;

else return (fib(n-1)+fib(n-2));

} 6

定义函数求F=(n+m)!+n!,m、n均为任意正整数。要求使用递归调用。 答

long int f(int x); main() {

int i,m,n; long int sum;

printf(\"Input m,n:\"); scanf(\"%d,%d\ sum=f(n+m)+f(n); printf(\"%ld\ getch(); }

long int f(int x) {

int i,j;

if(x==0||x==1)return 1; else return(x*f(x-1)); } 7

★定义一个函数完成第5章第11 题的功能。 【输出九九乘法表。】 答

main() {

fun(); getch(); }

fun() {

32

2021年

int i,j;

for(i=1;i<=9;i++) {

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

printf(\"%d*%d=%-3d\ printf(\"\\n\"); } } 8

如果有两个数,每一个数的所有约数(除了它本身以外)的和正好等于对方,则称这两个数为互满数,求出30000以内所有的互满数,并显示输出,求一个数它的所有约数(除了它本身以处)的和,用函数实现。 答

main() {

int x,y;

for(x=1;x<30000;x++) {

for(y=1;yif(facsum(x)==y&&facsum(y)==x){printf(\"(%d,%d)\\ } }

getch(); }

facsum(int n) {

int i,sum=0; for(i=1;iif(n%i==0)sum+=i; }

return sum; } 9

编写以下函数:①输入职工的姓名和职工号;②按职工号由小到大排序,姓名顺序也随之调整;③输入一个职工号,找出该职工的姓名。在主函数中调用这些函数。 答

2021

33

2021年

2021 10

★设计程序完成下列计算。

已经:y=f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3))

其中:f(x,n)=1-x2/2!+x4/4-...+(-1)n·x2n/(2n)! (n≥0)

当: x=5.6, n=7时,求:y

要求通过嵌套调用完成计算。 答

#include float f(float x,int n); float f1(float x,int m); float f2(int m);

main() {

float x=5.6,y; int n=7,i;

y=1+f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3)); printf(\"y=%f\\n\\n\}

float f(float x,int n) {

float sum=0.0; int i;

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

sum+=f1(-1,i)*f1(x,2*i)/f2(2*i); }

return sum; }

float f1(float x,int m) {

int i;

float y=1.0;

for (i=1;i<=m;i++) {

y*=x;

34

2021年

}

return y; }

第七章 数 组 -习题答案

1

★以下各题中,选择一个正确的答案。

1、能正确对一维数组 a 中所有元素进行初始化的是( )。 A. int

a[5]={ } B. int a[ ]={0}

C. int

a[5]=0,0,0,0,0 D. int a[5]={0}

2、有说明 int k=3,a[10]; 则下列可以正确引用数组元素的表达式是( )。 A. a[k] B.

a[10] C. a[1,3] D. a[3*5]

3、有定义 int d[ ][3]={1,2,3,4,5,6}; 执行语句printf(\"%c\结果是( )。

A. A B. B C. D D. E 4、有定义 char c='A',ch[20]={'a','b','c','\\0','d','\\0'}; 若执行printf(\"%s\结果是( )。

A. 'abc' B.

float f2(int m) {

int i;

float y=1;

for (i=1;i<=m;i++) {

y*=i; }

return y; }

2021

35

2021年

abc C.

abcd D.abc\\0d

5、对数组进行初始化 char carr[ ]={'s','t','u','d','e','n','t'},barr[ ]=\"student\"; 则2021

正确的是( )。

A. carr 与 barr 长度相同 B. carr 比 barr 长 C. carr 与 barr 相

同 D. carr 比 barr 短 答

1、BD 2、A 3、D 4、B 5、D 2

★阅读下列程序,写出程序的执行结果。 1、#include #include void main( ) {

int i,j,temp,d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1},{1,2,3,4}}; for(i=0;i<4;i++)

for(j=0;jif(d[i][j]>d[j][i])d[j][i]=d[i][j]; for(i=0;i<4;i++) {

printf(\"\\n\"); for(j=0;j<4;j++)

if(j>=i)printf(\"%6d\ else printf(\"%c\ } }

2、若输入十进制数3291时,下列程序输出为: #include void main( ) {

int i,d,m,n; char s[8];

scanf(\"%d\

i=0; /*i是用来存放转换后的数组元素下标*/ do{

m=n/8; d=n%8; s[i]='0'+d; i++; n=m; }while(n!=0);

for(i- -;i>=0;i- -)

putchar(s[i]); /*反向输出字符*/

36

2021年

} 答 1、

1 5 4 4 6 7 8 2 3 4

2021

2、6333 3

★程序填空。在___处填写合适的语句,完善下列程序:

1、从键盘输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。 #include void main( ) {

int data,temp,k;

static int a[9]={-10,2,4,8,10,15,25,50}; printf(\"\\nEnter a data:\"); scanf(\"%d\ ______①_____;

for(k=8;____②____;k- -) if(a[k]______③______; a[k]=a[k-1]; a[k-1]=temp; }

else ______④______; for(k=0;__⑤__;k++) printf(\"%7d\}

37

2、从键盘输入一串英文字符(不含空格与其他字符),统计每个字符的个数,并输出字母及相应的个数。

#include

#include /*本行代码教材中应该加上,因为程序中有 putchar() */ void main( ) {

int i=0,c[52]={0},m=0; char str[80];

2021年

2021 printf(\"Input a string:\"); scanf(___①___,str); while(str[i]) {

if(str[i]>='A' && ____②___)c[str[i]

-'A']++; if(str[i]>='a' && str[i]<='z')_____③____; i++; }

for(i=0;i<26;i++) if(c[i] {

if(m%8==0)putchar('\\n'); m++;

printf(\"%c:%-d\ }

for(i=0;i<26;i++) if(c[i+26]) {

if(m%8==0)putchar('\\n'); m++;

printf(\"%c:%-d\ ,c[i+26]); } } 答

1、① a[8]=data ② k>=1 ③ temp=a[k] ④ break ⑤ k<=8

2、① \"%s\" ② str[i]<='Z' ③ c[str[i]-'a'+26]++ ④ i+'A' 4

★求一组成绩的平均分数以及高于平均分的成绩,设给定的成绩为 90,85,92,77,80,62 。 答

main() {

int score[6]={90,85,92,77,80,62}; int i,sum=0; float aver;

for(i=0;i<6;i++)sum+=score[i]; aver=sum/6.0;

printf(\"\\nAverage:%f\\n\ printf(\"High score:\");

38

2021年

for(i=0;i<6;i++)

if(score[i]>aver)printf(\"%d\\} 5

★编写程序,输入一组整数,将它们排序后由小到大输出。

【提示】假设为具有 10 个元素的正整数数组;外层循环从数组的第一个元素开始选取;内层循环从外层循环选定的元素下一个元素开始选取,依次与外层循环选定的元素进行比较,将小者放入外层循环选定的元素中。 答

#define N 10 main() {

int a[N],i,j,t;

for(i=0;iprintf(\"\\nInput a[%d]:\ scanf(\"%d\ }

for(i=0;ifor(j=i+1;jif(a[i]>a[j]) {

t=a[i];a[i]=a[j];a[j]=t; } }

printf(\"%d\\/*输出已更新为较小值之外层选定元素*/ } } 6

从键盘输入一个4×4整数矩阵,以主对角线(\\)为对称轴,将左下角元素中较大元素代替右上角对应元素,将右上角(含对角线元素)输出。 【提示】a[0][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[3][0] a[3][1] a[3][2] a[3][3] 答

2021

39

2021年

#define M 4 main() {

2021 int a

;

int i,j,k,t;

printf(\"Input integer number:\\n\");

for(i=0;ifor(j=0;j{

printf(\"a[%d][%d]=\ scanf(\"%d\

}

for(i=0;i{

for(j=0;j{

printf(\"%d\\

}

printf(\"\\n\");

}

printf(\"-----------\\n\"); /*分隔线*/ for(i=0;i{

for(j=0;jif(a[j][i]>a[i][j])

{

t=a[j][i];a[j][i]=a[i][j];a[i][j]=t;

}

}

for(j=i;j/*本循环为将第 i 行第 i 列开始的右侧元素输出*/

{

printf(\"%d\\

}

printf(\"\\n\");

for(k=0;k}

40

2021年

【运行结果】2021 a[0][0]=1 a[0][1]=2

getch();

}

a[0][2]=3 a[0][3]=4 a[1][0]=5 a[1][1]=6 a[1][2]=7 a[1][3]=8 a[2][0]=9 a[2][1]=10 a[2][2]=11 a[2][3]=12 a[3][0]=13 a[3][1]=14 a[3][2]=15 a[3][3]=16

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -----------

1 5 9 13 6 10 14 11 15 16 7

通过键盘给 3×4 的二维数组输入数据,然后分别按行和按列输出数组元素。 答

#define M 3 #define N 4 main() {

int a

[N],i,j;

printf(\"Input integer number:\\n\");

41

2021年

2021 for(i=0;i/*外层选定数组元素左维*/ for(j=0;j{

printf(\"a[%d][%d]=\ /*提示输出元素位置*/ scanf(\"%d\ /*为指定元素赋值*/

}

printf(\"\\nOut by row:\\n\"); /*按行输出数组元素值*/

for(i=0;iprintf(\"%d \

printf(\"\\nOut by collum:\\n\"); /*按列输出数组元素值*/

for(i=0;iprintf(\"%d \

getch();

}

【运行结果】

Input integer number: a[0][0]=1 a[0][1]=2 a[0][2]=3 a[0][3]=4 a[1][0]=5 a[1][1]=6 a[1][2]=7 a[1][3]=8 a[2][0]=9 a[2][1]=10 a[2][2]=11 a[2][3]=12

Out by row:

1 2 3 4 5 6 7 8 9 10 11 12 Out by collum:

1 5 9 2 6 10 3 7 11 4 8 12 8

编写程序,将两个字符串连接起来,不要使用 strcat 函数。 答

#include\"string.h\"

42

2021年

main() {

char str1[80],str2[80]; int i=0,l1;

printf(\"Input str1:\");

gets(str1); /*若换成scanf(\"%s\后面应该增加fflush(stdin);函数语句*/ printf(\"Input str2:\"); gets(str2);

l1=strlen(str1); /*计算字符串 1 的长度*/ while(str2[i]) {

str1[l1+i]=str2[i]; i++; }

str1[l1+i]='\\0'; /*字符串连接后,不能忘记追加一个字符串结束符*/

puts(str1); /*可换成语句:printf(\"%s\ getch(); } 9

输入一行字符串,统计该字符串中字符对 ab 的个数。 答

#include\"string.h\" main() {

char str[80]; int i=0,count=0;

printf(\"Input string:\"); gets(str); while(str[i]) {

if(str[i]=='a' && str[i+1]=='b') {

count++;

i+=2; /*如果在当前 i 的位置找到一对,则 i 越过 b 个字母*/ }

else i++; /*如果在当前 i 的位置未找到,则 i 指向下一个字母*/ }

printf(\"%d\ getch();

2021

43

2021年

} 10

从键盘输入 10 个字符串,找出一个最长的字符串。 答

#include\"string.h\" main() {

char str[10][80]; /*设置二维字符数组,每一维可以记录最大79个字符的字符串*/ int i,len,k[10],n=0,max=0; printf(\"Input 10 strings:\\n\");

for(i=0;i<10;i++) /*向 str 数组输入 10 个字符串*/ {

printf(\"String %d=\ gets(str[i]);

len=strlen(str[i]); /*计算输入之字符串之长度*/

if(len>max){max=len;n=0;k[n]=i;} /*记录最长字符串的长度、个数、在数组位置(行)*/

else if(len==max)k[++n]=i; /*与已记录最大长度相同时,记录其在数组中位置(行)*/ }

if(n==0) /*此时说明只有一个最大长度字符串,是 str[k[0] */ {

printf(\"The longest string is String %d:\输出其序号*/ puts(str[k[0]]); }

else /*此时说明有不止一个最大长度字符串时需要处理的复合语句*/ {

printf(\"Not only one!\\n\");

for(i=0;i<=n;i++) /*分别输出各序号、字符串*/ {

printf(\"These are String %d:\ puts(str[k[i]]); } }

getch(); } 11

已知数组 a 中有 m 个按升序排列的元素,数组 b 中有 n 个按降序排列的元素,编程将 a 与 b

2021

44

2021年

中的所有元素按降序存入数组 c 中。

【提示】将 a 中的元素最大值与 b 中元素最大值相比,将最大值存入 c 数组中,然后调整 c 、a 或 b 元素指针(地址),依次重复前序工作,即可。 答

#define M 3 #define N 7 main() {

int i=0,j=0,n=0,c[M+N],a[3]={10,27,3},b[7]={300,210,173,96,55,34,13}; int maxa,maxb; do {

maxa=a[M-i-1];maxb=b[j]; if(maxa>maxb) {

c[n++]=maxa; /*将 a 中最大元素赋值给 c 数组当前元素,并调整 c 新元素位置*/

i++; /*调整 a 中元素位置*/ } else {

c[n++]=maxb; /*将 a 中最大元素赋值给 c 数组当前元素,并调整 c 新元素位置*/

j++; /*调整 b 中元素位置*/ }

printf(\"%d \打印输出 c 中新赋值元素数据*/

}while(n2021

第八章 指 针 -习题答案 1

★选择题。

1、若函数 f 定义如下:

void f(char *d,char *s); {while(*d++=*s++);}

函数 f 的功能是( )。

A. 串比较 B. 串复

45

2021年

制 C. 求串长 D. 串反向 2、有定义 int arr[10]={0,1,2,3,4,5,6,7,8,9}, *p, i=2; 若执行语句: p=arr;

pritnf(\"%d\ 输出结果为( )。

A. 0 B. 2 C.

3 D. 1

★3、有定义 int td[ ][3]={1,2,3,4,5,6}; 以下几种方法中,不能正确表示 i 行 j 列元素的是( )。

A. td[i][j] B.

*(td[i]+j) C. *(*(td+i)+j) D. *(td+i-j) 本题不要求掌握 答

1、B 2、B 3、D 2

★写出下列程序的运行结果。 1、void main( ) {

int a,*p1,*p2; a=10; p1=&a; p2=p1;

printf(\"The Value is %d||%d||%d\\n\ *p1=11;

printf(\"The Value is %d||%d||%d\\n\}

2、若输入字符串 program 时,写出下列程序输出结果: #include void main( ) {

char str[80];

void prochar(char *st,char ch); scanf(\"%s\ prochar(str,'r'); puts(str); }

void prochar(char *str,char ch) {

char *p;

for(p=str;*p!='\\0';p++)

if(*p==ch){*str=*p;(*str)++;str++;}

2021

46

2021年

*str='\\0'; } 答 1、

The Value is 10||10||10 The Value is 11||11||11

2021

2、ss 3

★填空题

1、下面程序完成从键盘输入两个字符串 a 和 b ,再将 a 和 b 的对应位置字符中的较大者存放在数组 c 中,填空完善该程序。 #include #include void main( ) {

int k=0;

char a[80],b[80],c[80]={'\\0'},*p,*q; p=a; q=b;

gets(a); gets(b); while(_____①_____) {

if(____②____)c[k]=*p; else c[k]=*q;

p++; ______③______; k++;

} /*本题教材有误,少了此处的右大括号*/ if(*p!=0)strcat(c,p); else strcat(c,q); puts(c); }

2、以下程序从键盘输入10个不相同的数到数组 a 中,再输入一个数到 x 中,在 a 中查找与 x 值相同的元素所在的位置,填空完善该程序。。 #include void main( ) {

int a[11],x,i;

printf(\"Input 10 integers:\\n\"); for(i=1;___①___;i++)

scanf(\"%d\

47

2021年

printf(\"Input x:\"); scanf(\"%d\ *a=x; i=10;

while(x!=*(a+i))

_____③_____

if(_____④_____)printf(\"%6d's position is:%3d\\n\

else printf(\"%6d Not be found!\\n\ /*bee应为be,教材有误,小case*/ } 答

1、① *p!='\\0'&&*q!='\\0' ② *p>*q ③ q++

2021

2、① i<11 ② &a[i] ③ i- -; ④ i>0 4

编写函数 fun,函数的功能是,从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。例如,程序执行时输入字符串为 turbo c and borland c++,从键盘输入字符 n,则输出后变为 turbo c ad borlad c++。如果输入的字符在字符串中不存在,则字符串照原样输出。 【提示】 答

#include\"string.h\" main( ) {

char s[80],*pstr=s,chdel;

printf(\"Input source string:\"); gets(pstr);

printf(\"Character you want delete:\"); scanf(\"%c\ fun(pstr,chdel);

printf(\"After deleted:\"); puts(pstr); getch(); }

int fun(char *s,char ch) {

int i,j;

for(i=0,j=0;s[i];i++) if(s[i]!=ch)

s[j++]=s[i]; s[j]=0;

48

2021年

} 5

编程将从键盘输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用2021

“.”结束输入。 【提示】。 答

【解法一】

#include\"stdio.h\" int fun(char *p); main( ) {

int i=0;

char ch,str[80];

printf(\"Input string end by.: \\n\") ; while((ch=getchar())!='.') str[i++]=ch;

str[i++]='.'; str[i]='\\0'; fun(str); puts(str); getch(); }

int fun(char *p) {

int flag=1; while(*p!='\\0') {

if(*p==' ')flag=1;

if(*p>='a'&&*p<='z'&&flag==1){*p-=32;flag=0;} p++; } }

【解法二】

#include\"stdio.h\" main( ) {

int flag=1; char ch;

printf(\"Input string end by.: \\n\") ;

49

2021年

}

2021

do {

ch=getchar( );

flag=fun(&ch, flag); putchar(ch); }while(ch!='.'); printf(\"\\n\");

fun(char *c,int f) {

if (*c==' ') return 1; else {

if(f&&*c<='z'&&*c>='a')*c-=32; return 0; } } 6

从键盘输入 8 个数,用选择法按由大到小的顺序排列并输出,要求用指针实现。 【提示】 答

#include\"stdio.h\" #include\"string.h\" main( ) {

int data[80],i,*p1,*p2,temp; p1=data;

printf(\"Input 8 numbers:\");

for(i=0;i<8;i++)scanf(\"%d\ for(p1=data;p1for(p2=p1+1;p2if(*p1<*p2){temp=*p1;*p1=*p2;*p2=temp;} for(i=0,p1=data;i<8;i++,p1++)printf(\"%6d\ getch(); } 7

从键盘输入一个字符串,编写一个函数,将此字符串中从第 m 个字符开始的 n 个字符复制成另一个字符串。

50

2021年

2021 答

#include\"string.h\" #include\"stdio.h\" main( ) {

char str1[80],str2[80]; int m,n,len;

printf(\"Input string:\"); len=strlen(gets(str1)); printf(\"Input m,n:\"); scanf(\"%d,%d\

if(m>len||n>len-m){printf(\"m,n error!\");exit(0);} else fun(str1,str2,m,n); puts(str2); getch(); }

fun(char *s,char *p,int x,int y) {

int i;

for(i=0;i输入 8 个整数,将其中最大的数与第一个数对换,最小的数与最后一个数对换。 答

main( ) {

int a[8],i,*p,max,min,t; max=min=0; p=a;

printf(\"Input 8 numbers:\");

for(i=0;i<8;i++)scanf(\"%d\ for(i=1;i<8; i++)

if(*(p+i)<*(p+min))min=i; if(min!=7)

{ t=*(p+7);

*(p+7)=*(p+min); *(p+min)=t; }

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

51

2021年

2021

if(*(p+i)>*(p+max))max=i; if(max!=0) { t=*(p+0);

*(p+0)=*(p+max); *(p+max)=t; }

for(p=a;p输入 n 个整数排序并输出。要求将排序单独写成一个函数,n 个整数在主函数中输入,排序结果在主函数中输出,用指针实现。【仍有问题】 答

#include\"stdio.h\" sort(int **p, int n) {

int *t,i,j;

for(i=0;ifor(j=i+1;jif (**(p+i)>**(p+j)) {

t=*(p+i);

*(p+i)=*(p+j); *(p+j)=t; } } } }

main( ) {

int i=0,n,**p;

printf(\"Please input count of numbers:\\n\"); scanf(\"%d\ for (i=0;iprintf(\"The %d number:\

52

2021年

scanf(\"%d\ }

printf(\"\\nThe result is :\\n\"); sort(p,n);

for (i=0;iprintf(\"%d \ }

getch(); } 10

输入一个字符串,内含数字和非数字字符,如 gs 423cd156 76>? df12345,将其中连接的数字作为一个整数,依次存放到数组 a 中,例如,423放入a[0],156放入a[1],…。统计其共有多少个整数,并输出这些数。 答

未做

#include\"string.h\" main() {

char str[10][80]; /*设置二维字符数组,每一维可以记录最大79个字符的字符串*/ int i,len,k[10],n=0,max=0; printf(\"Input 10 strings:\\n\");

for(i=0;i<10;i++) /*向 str 数组输入 10 个字符串*/ {

printf(\"String %d=\ gets(str[i]);

len=strlen(str[i]); /*计算输入之字符串之长度*/

if(len>max){max=len;n=0;k[n]=i;} /*记录最长字符串的长度、个数、在数组位置(行)*/

else if(len==max)k[++n]=i; /*与已记录最大长度相同时,记录其在数组中位置(行)*/ }

if(n==0) /*此时说明只有一个最大长度字符串,是 str[k[0] */ {

printf(\"The longest string is String %d:\输出其序号*/ puts(str[k[0]]); }

else /*此时说明有不止一个最大长度字符串时需要处理的复合语句*/

2021

53

2021年

2021

{

printf(\"Not only one!\\n\");

for(i=0;i<=n;i++) /*分别输出各序号、字符串*/ {

printf(\"These are String %d:\ puts(str[k[i]]); } }

getch();

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- hids.cn 版权所有 赣ICP备2024042780号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务