C语言课后习题答案

更新时间:2024-04-01 22:54:51 阅读: 评论:0

2024年4月1日发(作者:邵桂芳)

第一章 习 题

1.1选择题:

⑴ 一个C程序的执行是( A )。

A) 从main()函数开始,直到main()函数结束

B) 从第一个函数开始,直到最后一个函数结束

C) 从第一个语句开始,直到最后一个语句结束

D) 从main()函数开始,直到最后一个函数结束

⑵ 计算机能直接执行的语言是( B)。

A) 汇编语言 B)机器语言 C)高级语言 D) A和B

⑶ 一个C程序是由( C)。

A) 一个主程序和若干子程序组成

B) 若干过程组成

C) 一个或多个函数组成

D) 若干子程序组成

⑷ 下列说法正确的是(B )。

A) C程序书写格式限制严格,一行内必须写一个语句

B) C程序书写比较自由,一个语句可以分行写在多行上

C) C程序书写格式限制严格,要求一行内必须写一个语句,并要求行号

D) C程序中一个语句不可以分写在多行上

1.2填空题:

⑴ 构成C语言程序的基本单位是 函数 。

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

⑶ 在TURBO C环境中用RUN命令运行一个C程序时,所运行的程序的后缀是 .exe 。

⑷ 一个C语言程序必须有而且只能有一个主函数,它的函数名为 main 。

⑸ 一个函数有两部分组成,第一部分称为 函数首部 ;第二部分称为 函数体 。

⑹ 函数体由符号 { 开始,用符号 } 结束。函数体的前面是 声明 部分,其后是 执行 部分。

1.3上机编辑、调试、运行下列程序,发现错误,并改正之。

/*求1 + 2 + 3 + „„ + 10的和*/

#include

main()

{

int sum,n;

sum = 0;n = 1;

while(n < 10)

{sum = sum + n;

n = n + 1;

}

printf("sum = %d n",sum);

}

第二章 习 题

2.1选择题

⑴ 在以下标识符中,( B )是合法的用户标识符。

A) a#b B) getch C) void D) ab*

⑵ 不合法的八进制数是( B )。 INT X X=23 %o

A) 0 B) 028 C) 077 D) 01

⑶ 不合法的十六进制数是( A )。0x

A) oxff B) 0Xabc C) 0x11 D) 0x19

⑷ 以下选项中正确的整型常量是( B )。

A) 12. B)

-20 C) 1,000 D) 4 5 6

⑸ 以下选项中正确的实型常量是( D )。

A) 0 B) 3. 1415 C) 0.329×102 D) .871

⑹ 以下选项中不正确的实型常量是( B )。

A) 2.607E-1 B) 0.8103e 3 C)

-88.77 D) 871e-2

⑺ 以下变量x, y, z均为double类型且已正确赋值,不能正确表示数学式子x的Cyz语言表达式是 ( A )。

A) x / y*z B) x*(1/(y*z)) C) x / y*1 / z D) x / y / z

⑻ 在C语言中,字符型数据在内存中以( C )的形式存放。

A) 原码 B) 补码 C) ASCII码 D) BCD码

⑼ sizeof(float)是( C )。

A) 一种函数调用 B) 一个不合法的表示形式 C) 一个整型表达式 D)一个实型表达式

⑽ 表达式b =((241 & 15)&&('Z' | 'a'))的值是( B )。

A) 0 B) 1 C) TRUE D) FALSE

⑾ 若变量已正确定义并赋值,符合C语言语法的表达式是( B )。

A) a = a + 7; B) a = 7 + b + c,a ++ C) int(13.4 % 4) D)a = a + 7 = c + b

⑿ 以下叙述中正确的是( A )。

A)a是实型变量,C语言允许进行a = 10,因此可以这样说:实型变量中允许存放整型值

B)在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式

C)执行表达式a = b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值改变为0

D)已有a = 3,b = 5。当执行了表达式a = b,b = a之后,已使a中的值为5,b中的值为3

2.2填空题

ab⑴ 数学式子cos2x ·写成C语言表达式是 cos(x)*cos(x)*((a+b)/(a-b)) 。

ab⑵ a是整型变量,能将a清零的表达式是 a=0 ;能将a中的各二进制为均置成1的表达式是 a=-1 。

⑷ 若a,b和c均是int型变量,则执行下面表达式后,a值为 6 ,b值为 4 ,c值为 2 。

a =(b = 4)+(c = 2)

⑸ 经过下述赋值后,变量x的数据类型是 int 。

int x = 2;

double y;

y=(double)x;

⑹ 若x和n均是整型变量,且x和n的初值均为5,则执行下面表达式后,x值为 10 ,n值为 6 。

x += n ++ x=x+n++

⑺ 若有定义:int b = 7;float a = 2.5,c = 4.7;则下面表达式的值为 5.5 。

a+(int)(b/3*(int)(a+c)/2)%4

⑻若有定义:int m=7,y=2;则执行下面表达式的值后,y值为 -24 。

y += y-=m*= y

⑼ 表达式8 / 4*(int)2.5 /(int)(1.25*(3.7 + 2.3))的类型为 int 。

⑾条件“-1 < x < 3或x <-99”的C语言表达式是 (x>-1&&x<3)||(x<-99) 。

⑿ 若x和a均是整型变量,则执行表达式 ① 后的x值为 12 ,执行表达式 ② 后的x值为 4 。

① x =(a = 4,6*2)

② x = a = 4,6*2

⒀ 一个字节包含 8 个二进制位,在一个字节中能存放的最大(十进制)整数是 ,它的二进制数的形式是 ;最小(十进制)整数是 ,它的二进制数的形式是 。

⒁ 当计算机用两个字节存放一个整数时,其中能存放的最大(十进制)整数是 ,它的二进制数的形式是 ;最小(十进制)整数是 ,它的二进制数的形式是 。

2.3改错题

⑴ #include stdio.h;

main() /*main function*/

{

float r,s; /*r is radius, s is area of circular*/

r = 5.0;

s = 3.14159*r*r;

printf("%fn",s);

⑵ #include stdio.h

main() /*main function*/

{

float a,b,c,v; /*a,b,c are sides,v is volume of cube*/

a = 2.0;b = 3.0;c = 4.0

v = a*b*c;

printf("%fn",v);

}

第三章 习 题

3.1 什么是C语言的基本执行单位?C语言的语句是如何分类的?

3.2

C语言的流程控制语句有哪几种?

3.3 结构程序设计的基本结构有哪几种?

3.4

C语言的输入输出操作是由语句来实现的吗?

3.5 顺序结构程序的特点是什么?

3.6 输入下面的程序,观察运行结果。

#include

main()

{

float a1,a2;

double b1,b2;

a1=3141.59;a2=0.000001;

b1=3141.59;b2=0.000001;

printf("%f,%lfn",a1+a2,b1+b2);

}

答案:3141.590089,3141.590001

3.7 输入下面的程序,观察运行结果。

#include

main()

{

char ch;

int k;

ch='a';k=66;

printf("%c,%d,%x,%o,%d,%c",ch,ch,ch,ch,k,k);

}

答案:a,97,61,141,66,B

3.8 输入下面的程序,观察运行结果。

#include

main()

{

float x;

double y;

x=123.45678;

y=123.45678;

printf("%-4.2f,%

-6.2en",x,y);

}

答案:123.46,1.2e+02

3.9输入下面的程序,观察运行结果,并说明程序的功能(注意:运行时输入大写字母)。

#include

main()

{

char c1,c2;

c1=getchar( );

printf("%c,%dn",c1,c1);

c2=c1+32;

printf("%c,%dn",c2,c2);

}

答案:A,65

a,97

该程序是将键盘输入的大写字母转换为对应的小写字母。

3.10 编写程序:求三个正整数(小于32767)的算术平均值。

main()

{int a,b,c;

float d;

printf("n input a,b,c=");

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

d=(a+b+c)/3.0;

printf("nd=%f",d);

}

3.11 编写程序:已知圆的半径,求圆的周长和面积(要求半径值由键盘接受)。

main()

{int r;

float l,s;

printf("n input r=");

scanf("%d",&r);

l=2*3.14159*r;

s=3.14159*r*r;

printf("nL=%fnS=%f",l,s);

}

3.12 编写程序:计算a+b2-6的值,其中:

a=4,b=3;

a=5,b=2;

a=2,b=8。

main()

{

float a,b,h;

printf("n input a,b=");

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

h=a+b*b-6;

printf("na=%f,b=%fnh=%f",a,b,h);

}

第四章 习 题

4.1 判断下列陈述的真假:

⑴在三种形式的if语句中,在if关键字之后均为表达式。 该表达式只能是逻辑表达式或关系表达式。Fal

⑵在if语句中,关键字之后的表达式必须用括号括起来,并随后跟分号(;)。Fal

⑶在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{} 括起来组成一个复合语句。True

⑷条件运算符的结合方向是自右至左。True

⑸switch语句中的ca后面必须是整常量表达式,如整数常数、字符常量。True

⑹当switch的整类型表达式的结果值与某一个ca块的整常量表达式的值相等时,将转至该ca块,并且执行该ca与下一个ca之间的所有语句。Fal

⑺可以使用go out语句跳出switch语句。Fal

⑻ el总是与它前面最近的if配对。True

4.2 阅读下面的程序,说明程序的运行结果。

#include

main()

{

int x=10,y=20,t;

if(x!=y)

{

t=x;

x=y;

y=t;

}

printf("%d,%dn",x,y);

}

答案:20,10

4.3 输入下面的程序,观察运行结果并说明程序的功能。

#include

main()

{

int x = 20;

if (x >= 0)

if (x < 50)

printf("x is okn");

el

printf("x is not okn");

}

答案: x is ok

4.6 编写程序:从键盘输入三个正整数,按由大到小的顺序输出。

/*4.6题。从键盘输入3个数按由小到大排序*/

main()

{ int a,b,c,t;

printf("input a,b,c=:");

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

if(a>b) {t=a;a=b;b=t;}

if(a>c) {t=a;a=c;c=t;}

if(b>c) {t=b;b=c;c=t;}

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

}

4.7 编写程序:从键盘输入一个正整数,判断它是否既能被3整除,又能被7整除。

main()

{ int k;

scanf("%d",&k);

if(k%3==0 && k%7=0)

printf("nyes");

el

printf("n no");

}

#include

main()

{

int x;

scanf("%d",&x);

if(x%3==0)

{if(x%7==0)

printf("333333-777777");

el

printf("333333- no 7");

}

el

{if(x%7==0)

printf("no 3-7777777");

el

printf("no 3 no 7");

}

}

4.8 编写程序:

求函数:

X+5 (X>=0)

y=

X-5 (X<0)

的值。

main()

{ int x,y;

scanf("%d",&x);

if(x>=0)

y=x+5;

el

y=x-5;

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

}

习 题

5.1 试比较三种循环语句的异同。

5.2 选择题:

⑴ 下面关于for循环的正确描述是( D )。

A) for循环只能循环次数已经确定的情况

B) for循环是先执行循环体语句,后判断终止条件

C) 在for循环中,不能用break语句跳出循环体

D) 在for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来

⑵ 对for(表达式1;;表达式3)可以理解为( B )。

A) for(表达式1;0;表达式3)

B) for(表达式1;1;表达式3)

C) for(表达式1;表达式1;表达式3)

D) for(表达式1;表达式3;表达式3)

⑶ 若有“int m;”,则以下循环执行次数是( B )。

for(m=2;m==0; )

A) 无限次 B) 0次 C) 1次 D) 2次

⑷ 下面不是死循环的是( A )。

A) for(y=0,x=1;x>++y;x=i++) i=x;

B) for( ; ; x=++1);

C) while(1) {x++;}

D) for(i=10; ;i--) sum+=i;

⑸ 下面程序段的运行结果是( B )。

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

{

if(i= =2) continue;

printf("%d",i);

}

A) 01 B) 0134 C) 01234 D) 不打印

⑹ 下面程序段的运行结果是( C )。

int k=10;

while(k=0) k=k-1;

A) while循环执行10次 B) 循环是无限循环

C) 循环体语句一次也不执行 D) 循环体语句执行一次

⑺ 执行语句“for(n=1;n++<4; ) ;”后变量n的值是( C )。

A) 3 B) 4 C) 5 D) 不定

⑻ 以下正确的描述是( B )。

A) continue语句的作用是结束整个循环的执行

B) 只能在循环体内和switch语句体内使用break语句

C) 在循环体内使用break语句和continue语句的作用相同

D) 从多层循环嵌套中退出时,只能使用goto语句

5.3 写出下列程序的运行结果

main()

{

int i=0,a=0;

while(i<20)

{

for( ; ; )

if(i%10= =0) break;

el i--;

i+=11;a+=i;

}

printf("%dn",a);

}

答案:32

main()

{

int i,j,b=0;

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

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

if(j>=i ) b++;

printf("%dn",b);

}

答案:3

5.4 下面程序的功能是从键盘输入10个无序的整数,去掉最大数和最小数,然后求其平均值。请填空。

main()

{

int j,x,max,min,sum;

fioat ave;

printf("Enter 10 number:n");

scanf("%d",&x);

sum=max=min=x;

for( j=2 ; j<=10;j++)

{

scanf(“%d”,&x) ;

sum+=x;

if(x>max ) max=x;

el if(x

}

sum=sum-max-min ;

ave=sum/8.0;

print("The average is %.2fn",ave);

}

5.5 编程计算1~100之间是7的倍数的数值之和。

#include

main()

{int i,s=0;

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

if(i%7==0)

s+=i;

printf("ns=%d",s);

}

5.6 编写程序,利用下面公式求π的近似值:

22222-12π/6=1/1+1/2+1/3+1/4+„,直到某项绝对值不大于10为止。

#include

#include

main()

{long n=1;

float x,sum=0;

x=1.0/(n*n);

while(x>=1e-12)

{sum=sum+x;

n++;

x=1.0/(n*n);

}

sum=sqrt(sum*6);

printf("n PI=%f,n=%ld",sum,n-1);

}

/*5-6题。得用下面公式求π值。π2/6=1/12+1/22+……直到某项绝对值不大于

10-12为止*/

#include

#include

main()

{ float pi=0,t=1,n=1;

while(fabs(t)>1e-12)

{ pi+=t;

n=n+1;

t=1/(n*n);

}

pi=sqrt(pi*6);

printf("pi=%10.2f",pi);

}

5.7 计算键盘输入的字符数。(提示:用getchar( ))

#include

#include

main()

{char c;

int n=0;

c=getchar();

while(c!='n')

{ n++;

c=getchar();

}

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

}

#include

main()

{char c;

int chgs=0;

printf("Enter one line char : n");

while( c=getchar()!='n')

{

chgs++;

}

printf("chgs=%dn",chgs);

}

5.8 用1元人民币兑换1分、2分、5分的硬币,编程计算共有多少种不同的兑换方法。

#include

main()

{int x,y,z;

for(x=0;x<=20;x++)

{ for(y=0;y<=50;y++)

{z=100-x*5-2*y;

if(z>0)

printf("nx=%dty=%dtz=%d",x,y,z);

}

}

}

#include

#include

main()

{

int g,k,s,fa=0;

for(g=1;g<=93;g++)

for(k=1;k<=47;k++)

{s=(100-g-2*k)/5;

if(g+2*k+5*s==100)

fa=fa+1;

}

printf("nfa=%dn",fa);

}

5.9 编程求出1000以内的所有完全数。若一个数恰好等于它的因子之和(除自身外),则称该数为完全数,例如:6=1+2+3,故6是完全数。

#include

main()

{ int i,j,s=0;

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

{ s=0;

for(j=1;j

if(i%j==0) s+=j;

if(s==i) printf("n%4d",i);

}

}

#include

main()

{int m,s,i;

for (m=2;m<=1000;m++)

{s=0;

for (i=1;i

if((m%i)==0) s=s+i;

if (s==m)

{printf("%d yes , factors are ",m);

for(i=1;i

if(m%i==0) printf("%d,",i);

printf("n");

}

}

}

main()

{int k[1000];

int i,a,n,s;

for (a=2;a<=1000;a++)

{n=0;

s=a;

for (i=1;i

if((a%i)==0)

{n++;

s=s-i;

k[n]=i;

}

if (s==0)

{ printf("%d yes , factors are ",a);

for(i=1;i

printf("%d,",k[i]);

printf("n");

}

}

}

#include

#define M 1000

main()

{int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;

int i,a,n,s;

for (a=2;a<=M;a++)

{n=0;

s=a;

for (i=1;i

if( a%i ==0)

{ n++;

s=s-i;

switch(n)

{ ca 1: k1=i;break;

ca 2: k2=i;break;

ca 3: k3=i;break;

ca 4: k4=i;break;

ca 5: k5=i;break;

ca 6: k6=i;break;

ca 7: k7=i;break;

ca 8: k8=i;break;

ca 9: k9=i;break;

ca 10: k10=i;

}

}

if(s==0)

{ printf("%d Its factors are ",a);

if(n>1) printf("%d,%d",k1,k2);

if(n>2) printf(",%d",k3);

if(n>3) printf(",%d",k4);

if(n>4) printf(",%d",k5);

if(n>5) printf(",%d",k6);

if(n>6) printf(",%d",k7);

if(n>7) printf(",%d",k8);

if(n>8) printf(",%d",k9);

if(n>9) printf(",%d",k10);

printf("n");

}

}

}

5.10 编程统计从键盘输入的字符中数字字符的个数,用换行符结束输入 循环。

#include

#include

main()

{ char c;

int n=0;

c=getchar();

while(c!='n')

{if(c>='0' && c<='9') n++;

c=getchar();

}

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

}

#include

main()

{char c;

int digit=0;

printf("Enter one line char : n");

while( (c=getchar()) != 'n')

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

digit++;

}

printf("szgs=%dn",digit);

}

5.11 编程求n!(即求1!+2!+3!+„+20!)

n120#include

main()

{ float t=1,s=0;

int i;

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

{t*=i;

s+=t;

}

printf("1!+2!+...20!=%10.2f",s);

}

#include

main()

{

long sum=0,jc=1;

int n;

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

{

jc=n*jc;

sum=sum+jc;

}

printf("sum=%ldn",sum);

}

#include

main()

{

float sum,jc;

int m,i;

sum=0;

for(m=1;m<=20;m=m+1)

{

jc=1;

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

jc=jc*i;

printf("jc=%fn",jc);

sum=sum+jc;

}

printf("sum=%en",sum);

}

5.12 编写程序,求出整数1~1000之间的所有同构数。所谓同构数是指此数的平方数的最后几位数与该数相等。例如,25的平方为625,376的平方为141376,所以25和376都是同构数。

main()

{ long i;

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

if(i*i%10==i || i*i%100==i || i*i%1000==i) printf("n%5d",i);

}

/*或

main()

{long i,m,k,r,q;

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

{m=i;k=m*m;

while(m!=0)

{r=m%10;q=k%10;

if(r==q){m=m/10;k=k/10;}

el break;

}

if(m==0) printf("%5d",i);

}

}

#include

main()

{

long i,pf;

printf("n");

for(i=2;i<=1000;i++)

{

pf=i*i;

if(i==pf%10 && i<10)

{printf("ni=%ld,pf=%ld",i,pf);

continue;}

if(i==pf%100 && i<100)

{printf("ni=%ld,pf=%ld",i,pf);

continue;}

if(i==pf%1000 && i<1000) printf("ni=%ld,pf=%ld",i,pf);

}

}

5.13 编写程序,输入一个正整数,输出其素数因子的乘积。例如,输入60,输出:1 2 3 4 5

6 10

30

#include

#include

main()

{int k,i,j;

scanf("%d",&k);

printf("%d:",k);

i=2;

while(k!=0 && i<=k)

{

if(k%i==0)

{printf("%3d",i);

k=k/i;

i=2;

}

el i++;

}

}

#include

main()

{

int i,x,k;

scanf("%d",&x);

k=x;

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

while(x!=0)

{

for(i=2;i<=k;i++)

if(x%i==0) break;

x=x/i;

if (i

el printf("b n");

}

}

6.1 选择题:

⑴ 下列程序输出结果是(B)。

main()

{

int a[10]={1,2,3,4,5,6,7,8,9,10},i,k;

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

a[i]=i;

for(i=0,k=0;i<4;i++)

k+=a[i]+i;

printf("n%d",k));

}

A) 20 B) 12 C) 16

⑵ 下列程序输出结果是( A )。

main()

{

int n[2]={0},i,j,k=2;

for(i=0;i

for(j=0;j

n[j]=n[j]+1;

printf("%dn",n[k]);

}

A) 不确定值 B) 3 C) 2

习 题

D) 18

D) 1

⑶ 下列程序的输出结果是( A )。

main()

{

int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;

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

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

s+=a[i][j];

printf("n%d",s);

}

A) 18 B) 19 C) 20 D) 21

⑷ 下列程序输出结果是( C )。

main()

{

int a[3][3]={1,2,3,4,5,6,7,8,9},i;

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

printf("%d,",a[i][2-i]);

}

A) 1,5,9, B) 1,4,7, C) 3,5,7, D) 3,6,9,

⑸ 当执行下面的程序时,如果输入ABC,则输出结果是(A )。

#include

#include

main()

{

char ss[10]= "12345";

gets(ss);

strcat(ss, "6789");

printf("%s",ss);

}

A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789

⑹ 下列程序输出结果是( C )。

main()

{

char b[]="Hello,you";

b[5]=0;

}

printf("%s",b);

A) Hello,you B) Hello, C) Hello D) Hello you

6.2 输入10个浮点型数,求它们的和、平均值、最大值、最小值。

main()

{ float a[10],sum=0,aver,max,min;

int i;

i=0;

while(i<10)

{ scanf("%f",&a[i]);

sum+=a[i];

i++;

}

aver=sum/10;

max=min=a[0];

i=0;

while(i<10)

{ if(a[i]>max) max=a[i];

el if(a[i]

i++;

}

printf("nsum=%fnaver=%fnmax=%fnmin=%f",sum,aver,max,min);

}

main()

{int i,maxi,mini;

float x[10],sum=0,ave,max,min;

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

{scanf("%f",&x[i]);

sum+=x[i];

}

ave=sum/10;

max=min=x[0];

maxi=mini=0;

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

{if(x[i]>max){max=x[i];maxi=i;}

if(x[i]

}

printf("sum=%fnave=%fnmax=%f,maxi=%dnmin=%f,mini=%dn",sum,ave,max,maxi,min,mini);

}

6.3 求一个3*3的整型矩阵主对角线元素之和。

main()

{int i,j,a[3][3],sum=0;

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

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

scanf("%d",&a[i][j]);

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

{printf("n");

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

printf("%-4d",a[i][j]);

}

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

sum+=a[i][i];

printf("nsum=%d",sum);

}

6.4 将一维实型数组元素进行排序。

main()

{ float t,a[10]={12.4,3.44,4.88,5.9,6.88,77.90,65.88,4.8,0.7,6.7};

int i,j,p;

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

printf("%10.2f",a[i]);

printf("n");

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

{p=i;

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

if(a[p]>a[j]) p=j;

if(p!=i)

{t=a[p];a[p]=a[i];a[i]=t;}

}

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

printf("%7.2f",a[i]);

}

6.5 从键盘上输入一个字符和一个字符串,查找输入的字符是否在输入的字符串中,若不在则输出没有找到的信息,否则输出第一个与输入字符匹配的所在位置。

#include

#include

main()

{ char a[10],c;

int flag=1,i,cor;

printf("ninput a:n");

gets(a);

printf("ninput c:n");

c=getchar();

i=0;

while(a[i])

{if(c==a[i]) {flag=0;cor=i;break;}

i++;

}

if(flag==0) printf("nfind,No:%d",cor);

el printf("n can not find");

}

6.6 求两个矩阵的乘积,输出结果。

main()

{ int a[2][3]={1,2,3,4,5,6},b[3][2]={1,2,1,2,1,2},c[2][2];

int i,j,k;

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

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

{ c[i][j]=0;

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

c[i][j]+=a[i][k]*b[k][j];

}

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

{ printf("n");

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

printf("%4d",c[i][j]);

}

}

6.7 已知整型数组array有10个元素,分别为2、4、6、8、10、1、3、5、7、9,编写程序将前5个元素与后5个元素交换,交换后的元素分别为1、3、5、7、9、2、4、6、8、10。

main()

{ int a[10]={2,4,6,8,10,1,3,5,7,9},i,t;

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

{t=a[i];a[i]=a[5+i];a[5+i]=t;

}

printf("n");

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

printf("%-6d",a[i]);

}

6.8 输入一个十进制数,转换成二进制数并输出。

#include

#include

main()

{ long a[100],k,s=0;

int i,n;

scanf("%ld",&k);

n=0;

while(k!=0)

{a[n]=k%2;

k=k/2;

n++;

}

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

s+=a[i]*pow(10,i);

printf("n%ld",s);}

main()

{int i,s[100],x,k=0;

scanf("%d",&x);

while(x>0)

{

s[k]=x%2;

x=x/2;

k++;

}

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

printf("%d",s[i]);

}

6.9 将字符串中的大写字母转换成小写字母,小写字母转换成大写字母,其它字符不转换。

#include

#include

main()

{ char a[80];

int i;

gets(a);

i=0;

while(a[i]!='0')

{ if(a[i]>='A' && a[i]<='Z') a[i]+=32;

el if(a[i]>='a' && a[i]<='z') a[i]-=32;

i++;

}

printf("n");

puts(a);

}

main()

{char x[]="dhgfhf33485SDHDbcjd980";

int i=0;

printf("n%s",x);

while(x[i]!='0')

{

if(x[i]>='A'&&x[i]<='Z')

x[i]=x[i]+32;

el

if(x[i]>='a'&&x[i]<='z')

x[i]=x[i]-32;

i++;

}

printf("n%s",x);

}

6.10 在不使用系统函数strcat的情况下,实现两个字符串连接。

#include

#include

main()

{char a[80],b[80];

int n,i,j,m;

printf("n input a:");

gets(a);

printf("n input b:");

gets(b);

n=strlen(a);m=strlen(b);

i=0;

while(b[i]!='0')

{ a[i+n]=b[i];

i++;

}

a[n+m]='0';

printf("n");

puts(a);

}

6.11 从字符串中删除所有指定字符。

#include

#include

main()

{char a[80],c;

int i,j,n;

printf("input a:");

gets(a);

printf("input c:");

c=getchar();

i=0;

n=strlen(a);

for(i=0,j=0;i

if(a[i]!=c) a[j++]=a[i];

a[j]='0';

printf("%s",a);

}

6.12 将字符串s1中的ASCII码为偶数且下标也为偶数的字符复制到字符数组s2中。

#include

#include

main()

{char s1[80],s2[80];

int i,j;

printf("input s1:");

gets(s1);

i=0;j=0;

while(s1[i])

{ if(s1[i]%2==0 && i%2==0)

s2[j++]=s1[i];

i++;

s2[j]='0';

}

printf("n%s",s2);

}

#include

#include

6.13 有一行电文,已按下面规律译成密码:

A→Z a→z

B→Y b→y

C→X c→x

即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。要求编程序将密码译回原文,并打印出密码和原文。

main()

{

char a[100],b[100];

int i,n,t;

gets(a);

n=strlen(a);

i=0;

while(a[i]!='0')

{if(a[i]>='a'&& a[i]<='z')

b[i]=219-a[i];

el if(a[i]>='A' && a[i]<='Z')

b[i]=155-a[i];

el b[i]=a[i];

i++;

}

b[i]='0';

printf("na:%snb:%s",a,b);

}

main()

{char x[]="dhgfhf33485SDHDbcjd980";

int i=0;

printf("n%s",x);

while(x[i]!='0')

{

if(x[i]>='A'&&x[i]<='Z')

x[i]=155-x[i];

el

if(x[i]>='a'&&x[i]<='z')

x[i]=219-x[i];

i++;

}

printf("n%s",x);

}

第七章 习 题

7.1 选择题:

⑴ 若有以下定义:

int a[]={1,2,3,4,5,6,7,8,9,10},*p=a,i;

其中0≤i≤9,则对a数组元素的引用不正确的是( D )。

A) a[i] B)

* (&a[i]) C) p[i] D)

⑵ 以下程序的输出结果是(A )。

main()

{

int a[]={2,4,6,8},*p=a,i;

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

a[i]= *p++;

printf("n%d",a[2]);

}

A) 6 B) 8 C) 4 D) 2

⑶ 以下程序的输出结果是( A )。

main()

{

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

printf("n%d",* (p+2));

}

A) 3 B) 4 C) 1 D) 2

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

main()

{

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[1];

printf("n%d",*p+5);

}

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

⑸ 以下程序的输出结果是( C )。

* (* (a+i))

main()

{

int a[]={2,4,6,8,10},y=1,x, *p;

}

p=&a[1];

for(x=0;x<3;x++)

y+=* (p+x);

printf("%dn",y);

A) 17 B) 18 C) 19 D) 20

⑹ 以下程序的输出结果是( C )。

main()

{

char

*p[]={"BOOL","OPK","H","SP"};

int i;

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

printf("%c", *p[i]);

}

A) SP B) SH C) SO D) SB

⑺ 以下程序的输出结果是( A )。

main()

{

int a[3][3]={{2},{4},{6}},i, *p;

p=*a;

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

{

if(i==0)

a[i][i+1]= *p+1;

el

++p;

printf("%d",*p);

}

}

A) 23 B) 26 C) 33 D) 36

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

main()

{

int a[3][3], *p,i;

p=&a[0][0];

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

p[i]=i+1;

printf("%d",a[1][2]);

}

A) 3 B) 6 C) 9 D) 5

⑼ 以下程序的输出结果是( A )。

main()

{

int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

int (*p)[4]=a,i,j,k=0;

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

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

k+=* (* (p+i)+j);

printf("n%d",k);

}

A) 60 B) 68 C) 99 D) 108

⑽ 以下程序的输出结果是( C )。

main()

{

int a[]={2,4,6,8,10},*p, **k;

p=a;

k=&p;

printf("n%d ",* (p++));

printf("%d",**k);

}

A) 4 4 B) 2 2 C) 2 4 D) 4 6

以下习题要求用指针方法来完成。

7.2 输入3个整数,由小到大输出。

main()

{ int a[3],i,t,*p;

p=a;

for(p=a;p

scanf("%d",p);

p=a;

if(*p>*(p+1)) {t=*p;*p=*(p+1);*(p+1)=t;}

if(*p>*(p+2)) {t=*p;*p=*(p+2);*(p+2)=t;}

if(*(p+1)>*(p+2)) {t=*(p+1);*(p+1)=*(p+2);*(p+2)=t;}

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

printf("n%d",a[i]);

}

/*输入3个数,由小到大排序*/

main()

{ int a[3],i,t,*p;

p=a;

for(p=a;p

scanf("%d",p);

p=a;

if(p[0]>p[1]) {t=p[0];p[0]=p[1];p[1]=t;}

if(p[0]>p[2]) {t=p[0];p[0]=p[2];p[2]=t;}

if(p[1]>p[2]) {t=p[1];p[1]=p[2];p[2]=t;}

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

printf("n%7d",a[i]);

}

main()

{int a,b,c;

int *p1,*p2,*p3,*t;

p1=&a;p2=&b;p3=&c;

scanf("%d,%d,%d",p1,p2,p3);

if(*p1>*p2)

{t=p1;p1=p2;p2=t;}

if(*p1>*p3)

{t=p1;p1=p3;p3=t;}

if(*p2>*p3)

{t=p2;p2=p3;p3=t;}

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

printf("n%d,%d,%d",*p1,*p2,*p3);

}

7.3 将一个3×3的整型数矩阵转置。

main()

{ int a[3][3]={1,2,3,4,5,6,7,8,9},i,j,t;

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

{ printf("n");

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

printf("%4d",a[i][j]);

}

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

for(j=0;j

{ t=a[i][j];

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

a[j][i]=t;

}

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

{ printf("n");

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

printf("%4d",a[i][j]);

}}

/*7.3将一个3*3的整型数矩阵转换*/

main()

{ int a[3][3]={1,2,3,4,5,6,7,8,9},i,j,t;

int (*p)[3],(*q)[3];

p=a[0];q=a[0];

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

{ printf("n");

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

printf("%4d",a[i][j]);

}

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

for(j=0;j

{ t=p[i][j];

p[i][j]=q[j][i];

q[j][i]=t;

}

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

{ printf("n");

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

printf("%4d",a[i][j]);

}}

7.4 用冒泡法对10个数组元素排序。

main()

{ int a[10]={45,9,8,456,2,0,7,-4,95,99};

int i,j,*p,t;

printf("n");

for(p=a;p

printf("%5d",*p);

p=a;

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

for(j=0;j<10-i-1;j++)

if(*(p+j)>*(p+j+1))

{t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}

printf("n");

for(p=a;p

printf("%5d",*p);

}

/*用冒泡法排序*/

main()

{ int a[10]={45,9,8,456,2,0,7,-4,95,99};

int i,j,*p,t;

printf("n");

for(p=a;p

printf("%5d",*p);

p=a;

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

for(j=0;j<10-i-1;j++)

if(p[j]>p[j+1])

{t=p[j];p[j]=p[j+1];p[j+1]=t;}

printf("n");

for(p=a;p

printf("%5d",*p);

}

main()

{int a[10]={41,22,13,4,55,26,37,18,9,11},i,j,*t,*p;

p=a;

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

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

if(*(p+i)>*(p+j))

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

printf("n");

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

printf("%3d",*(p+i));

}

7.5 将一数组元素的数值按逆序重新存放。

#include

main()

{ char c,*p1,*p2,a[80];

int i,n;

gets(a);

n=strlen(a);

printf("n%s",a);

p1=a;p2=a+n-1;

i=0;

while(i

{ c=*p1;

*p1=*p2;

*p2=c;

p1++;

p2--;

i++;

}

printf("n%s",a);

}

/*将一数组中的数值按逆序重新存放*/

#include

main()

{ char c,a[80];

int i,n;

gets(a);

n=strlen(a);

printf("n%s",a);

i=0;

while(i

{ c=a[i];

a[i]=a[n-i-1];

a[n-i-1]=c;

i++;

}

printf("n%s",a);}

7.6 有一n个元素的整型数组。编写程序使前面元素的数值按顺序向后移动m个位置,而后面m个数值变成前面m个数值。

main()

{ int a[12];

int i,m,n;

printf("ninput m and n:");

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

printf("n input a:");

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

printf("%4d",a[i]);

printf("n");

for(i=0;i

a[n+i]=a[i];

for(i=m;i

a[i-m]=a[i];

printf("n");

for(i=0;i

printf("%4d",a[i]);

}

7.7 在一个3行4列的二维数组中,找出最大元素,并在屏幕上输出。

int max(int a[][4],int n)

{ int i,j,m,(*p)[4];

p=a;

m=**p;

for(i=0;i

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

if(m<*(*(p+i)+j)) m=*(*(p+i)+j);

return(m);

}

main()

{ int m,i,j,b[3][4]={45,8,94,6,3,52,78,88,41,541,89,0};

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

{printf("n");

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

printf("%4d",b[i][j]);

}

m=max(b,3);

printf("nnm=%d",m);

}

main()

{ int a[3][4]={{1,3,5,2},{3,44,12,13},{55,56,21,4}};

int i,j,max,*p;

p=a[0];

max=a[0][0];

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

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

if(max<*(p+i*3+j))

max=*(p+i*3+j);

printf("max=%3d",max);

}

7.8 将字符串s1中的ASCII码为奇数,下标为偶数的字符复制到字符数组s2中。

main()

{ char *s1="abccccddddef",s2[40],*p1,*p2;

int i;

p1=s1;

p2=s2;

i=0;

while(*p1)

{ if((*p1%2!=0)&&(i%2==0))

*p2++=*p1++;

el

*p1++;

i++;

}

*p2='0';

printf("%sn",s2);

}

7.9 若有字符串“ab*cde*fg*****”,删除字符串最后的“*”,删除后的字符串为“ab*cde*fg”。

#include

main()

{ char s[]="ab*cde*fg****",*p1;

int n;

n=strlen(s);

p1=s+n-1;

while(*p1)

if(*p1=='*')

p1--;

el break;

*++p1='0';

printf("%sn",s);

}

7.10 已知字符串s1和s2,先求其长度,若长度不等,在字符串左侧用“*”补齐,并输出字符串;否则直接输出字符串。

#include

#include

main()

{ char a[30],b[30],*p;

int n,m,k,i;

printf("n input a:");

gets(a);

printf("n input b:");

gets(b);

n=strlen(a);

m=strlen(b);

if(n==m) printf("n%sn%s",a,b);

el if(n>m)

{ i=0;k=n-m;p=b+m-1;

while(i

{ *(p+k)=*p;

i++;

p--;

}

i=0; p=p+1;

while(i

{ *p='*';

p++;

i++;

}

*(p+m)='0';

}

el

{ p=a+n-1;i=0;k=m-n;

while(i

{ *(p+k)=*p;

i++;

p--;

}

i=0; p=p+1;

while(i

{ *p='*';

p++;

i++;

}

*(p+n)='0';

}

printf("n%sn%s",a,b);

}

7.11 从字符串s1中找出子串s2出现的次数。如s1为“aberadaabeab”,s2为“ab”,则查找结果为3。

#include "string.h"

#include "stdio.h"

main()

{ char str1[20],str2[20],*p1,*p2;

int sum=0;

printf("plea input two stringsn");

gets(str1);

gets(str2);

p1=str1;p2=str2;

while(*p1!='0')

{if(*p1==*p2)

{while(*p1==*p2&&*p2!='0')

{p1++;

p2++;}

}

el

p1++;

if(*p2=='0')

sum++;

p2=str2;

}

printf("%d",sum);

getch();}

7.12 已知有n个字符串数组,将字符串数组排序后(索引)输出。

#include

#include

main()

{char *a[]={"aaa","ccc","aass","u8989","0000000"},*s;

int i,j;

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

printf("n%9s",a[i]);

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

for(j=0;j<5-i-1;j++)

if(strcmp(a[j],a[j+1])>0)

{ s=a[j];a[j]=a[j+1];a[j+1]=s;

}

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

printf("n%s",a[i]); }

/*已知有n个字符串数组,将字符串数组排序后输出*/

#include

#include

main()

{char a[5][20],s[80];

int i,j;

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

gets(a[i]);

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

printf("n%s",a[i]);

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

for(j=0;j<5-i-1;j++)

if(strcmp(a[j],a[j+1])>0)

{ strcpy(s,a[j]);strcpy(a[j],a[j+1]);strcpy(a[j+1],s);

}

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

printf("n%s",a[i]);

}

7.13. 输入一字符串,找出其中大写字母、小写字母、空格、数字以及其它字符各有多少。

#include

#include

main()

{ char *p,a[80];

int n,dx=0,xx=0,kg=0,sz=0,qt=0;

p=a;

gets(p);

while(*p)

{ if(*p>='0' && *p<='9') sz++;

el if(*p>='A' && *p<='Z') dx++;

el if(*p>='a' && *p<='z') xx++;

el if(*p==' ') kg++;

el qt++;

p++;

}

printf("ndx=%dnxx=%dnkg=%dnsz=%dnqt=%d",dx,xx,kg,sz,qt);

}

7.14 从键盘上输入两个字符串a和b,在字符串a中的ASCII值最大的元素后面插入字符串b。

main()

{ char c,s1[80],s2[40];

int i=0,k,n,m;

printf("ninput string1:");

scanf("%s",s1);

printf("ninput string2:");

scanf("%s",s2);

n=strlen(s1);

m=strlen(s2);

c=s1[0];

for(i=0;i

if(c

i=n-1;

while(i!=k)

{ s1[i+m]=s1[i];

i--;

}

i=0;

while(s2[i]!='0')

{ s1[k+i+1]=s2[i];

i++;

}

s1[n+m]='0';

printf("the new string is:%s",s1);

}

/*7.14从键盘上输入两个字符串a和b,在字符串a中的ASCII值最大元素的后边插入

字符串b.*/

main()

{ char c,s1[80],s2[40],*p1,*p2;

int i=0,k,n,m;

p1=s1;p2=s2;

printf("ninput string1:");

scanf("%s",p1);

printf("ninput string2:");

scanf("%s",p2);

n=strlen(p1);

m=strlen(p2);

c=p1[0];

for(i=0;i

if(c

i=n-1;

while(i!=k)

{ p1[i+m]=p1[i];

i--;

}

i=0;

while(p2[i]!='0')

{ p1[k+i+1]=p2[i];

i++;

}

p1[n+m]='0';

printf("the new string is:%s",p1);

}

第八章 习 题

8.1 选择题:

⑴ 一个C语言源程序中( A )。

A) 必须有一个主函数 B) 可以有多个主函数

C) 必须有一个主函数和其它函数 D) 可以没有主函数

⑵ return语句( c)。

A) 必须跟一个表达式

B) 必须在每个函数中出现

C) 可以在同一个函数中出现多次 D) 只能在除主函数之外的函数中出现

⑶ C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( B )。

A) 地址传递 B) 单向值传递

C) 由实参传给形参,再由形参传回给实参 D) 由用户指定传递方式

⑷ 在以下对C语言的描述中,正确的是( A )。

A) 在C语言中调用函数时,只能将实参的值传递给形参,形参的值不能传递给实参

B) C语言函数既可以嵌套定义又可以递归调用

C) 函数必须有返回值,否则不能使用函数

D) C语言程序中有调用关系的所有函数都必须放在同一源程序文件中

⑸ 以下叙述中错误的是( C)。

A) 在C语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值

B) 在C语言中,在调用函数时,实参和对应形参在类型上只需赋值兼容

C) 在C语言中,外部变量的隐含类别是自动存储类别

D) 在C语言中,函数形参的存储类型是自动(auto)类型的变量

⑹ 以下叙述错误的是( b )。

A) 函数返回值可实现函数间的信息传递

B) 函数返回值的值和类型是由返回语句中表达式的值和类型决定的

C) 函数返回值是由return<表达式>实现的

D) 一个函数只可有一个返回值

⑺ 下列函数fun( )被调用了3次,a的值是( D )。

fun()

{

static int a=1;

++a;

}

A) 1 B) 2 C) 3 D) 4

8.2 程序填空:

⑴ 下面函数是求阶乘的递归调用函数,请将程序补充完整。

long Facto(int n)

{

if(n<0)

printf("data errorn")

if(n= =1||n= =0)

return 1; ;

el

return n*Facto(n-1) ;

}

⑵ 函数Sum(int n)是用递归方法计算int Sum(int n)

{

i的值,请补充程序中缺少的内容。

i1n

}

if(n<=0)

printf("data errorn");

if(n= =1)

return 1 ;

el

return n+Sum(n-1) ;

8.3 编写一个函数sabc( ),根据给定的三角形三条边长a,b,c,返回三角形的面积。

#include

float fac(float a,float b,float c)

{ float s;

float p;

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

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

return(s);

}

main()

{float a,b,c;

float s;

while(1)

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

if(a>0 && b>0 && c>0 && a+b>c && a+c>b && b+c>a) break;

}

s=fac(a,b,c);

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

}

8.4 编写一个求水仙花数的函数,求100到999之间的全部水仙花数。•所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。例如:153就是一个水仙花数:

153 = 1×1×1 + 5×5×5 + 3×3×3

int fac(int n)

{ int s=0,r,k;

k=n;

while(k!=0)

{r=k%10;

s+=r*r*r;

k=k/10;

}

return(s);

}

main()

{ int i,m;

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

if(fac(i)==i) printf("%4d",i);

}

main()

{ int i,yes;

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

{ yes=pd(i);

if(yes==1) printf("%d",i);

}

}

int pd(int x)

{ int k,ys,he=0;

k=x;

while(x!=0)

{ ys=x%10;

he=he+ys*ys*ys;

x=x/10;

}

if(k==he) return(1);

el return(0);

}

/*水仙花数*/

#include

#include

main()

{int i;

clrscr();

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

if(hws1(i)) printf("%4d",i);

}

int hws1(int x)

{int k;

int n=x;

int m=2;

int s=0;

while(n!=0)

{k=n%10;

n=n/10;

s=s+k*pow(10,m);

m=m-1;

}

if(s==x) return(1);

el return(0);

}

/*水仙花数*/

int fac(int n)

{ int s,r,h,m,k;

k=n;

r=k/100;

m=k/10%10;

h=k%10;

s=r*r*r+m*m*m+h*h*h;

return(s);

}

main()

{ int i,m;

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

if(fac(i)==i) printf("%4d",i);

}

8.5 编写一个判断字符串是否为“回文”的函数,如果是回文数则函数的返回值为1,不是回文数则返回0。所谓“回文”数是指顺读与倒读都相同的字符串,例如“ABCDCBA”。

int fac(char s[],int n)

{ int i,f;

i=0;

while(i

{ if(s[i]==s[n-i-1])

i++;

el break;

}

if(i>=n/2) f=1;

el f=0;

return(f);

}

#include

main()

{ char a[90];

int m,h;

gets(a);

m=strlen(a);

if(fac(a,m)) printf("n%s yesn",a);

el printf("%s no",a);

}

/*回纹字符串*/

int fac(char s[],int n)

{ int i,f;

char *p1,*p2;

i=0;

p1=s;p2=s+n-1;

while(i

{ if(*p1==*p2)

{p1++;

p2--;

i++;

}

el break;

}

if(i>=n/2) f=1;

el f=0;

return(f);

}

#include

main()

{ char a[90];

int m,h;

gets(a);

m=strlen(a);

if(fac(a,m)) printf("n%s yesn",a);

el printf("%s no",a);

}

#include

#include

main()

{ char str[100];

gets(str);

if(pd(str)==1) printf("yes!");

el printf("no!");

}

int pd(char x[])

{ int cd,i=0;

char b[100];

cd=strlen(x);printf("ncd=%dn",cd);

while(x[i]!='0')

{

b[cd-i-1]=x[i];

i++;

}

b[cd+1]='0';

puts(x);

puts(b);

if(strcmp(x,b)==0) return(1);

el return(0);

}

8.6 从键盘输入10个浮点数,求出其和及平均值。要求编写求和及求平均值的函数。

float sum(float sz[]);

float aver(float sz[]);

main()

{int i;

float x[10];

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

scanf("%f",&x[i]);

printf("n sum=%f",sum(x));

printf("n nave=%f",aver(x));

}

float sum(float sz[])

{int i;

float he=0.0;

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

he=he+sz[i];

return(he);

}

float aver(float sz[])

{int av;

av=sum(sz)/10;

return(av);

}

8.7 编写函数,统计一个字符串中的字符、数字、空格。主函数提供字符串。

int zm=0,kg=0,qt=0;

int fac(char s[])

{ int i=0,sz=0;

while(s[i]!='0')

{ if(s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i]<='Z')

zm++;

el if(s[i]>='0' && s[i]<='9')

sz++;

el if(s[i]==' ')

kg++;

el qt++;

i++;}

return(sz);}

#include

main()

{ char a[90];

int m;

gets(a);

m=fac(a);

printf("sz=%4dnzm=%4dnkg=%4dnqt=%4d",m,zm,kg,qt);}

int tj(char c[],char c1,char c2);

main()

{char x[100];

int zf,sz,kg;

gets(x);

printf("n%s",x);

zf=tj(x,'A','Z')+tj(x,'a','z');

sz=tj(x,'0','9');

kg=tj(x,' ',' ');

printf("zf=%dnsz=%dnkg=%dn",zf,sz,kg);

}

int tj(char c[],char c1,char c2)

{int i=0,he=0;

while(c[i]!='0')

{

if(c[i]>=c1 && c[i]<=c2)

he++;

i++;

}

return(he);

}

8.8 编写一个递归函数,计算并返回菲波那契(Fibonacci)数列中第n项的值。菲波那契数

列的定义如下:

Fib(1)=1,Fib(2)=1,

Fib(n)=Fib(n-1)+Fib(n-2)

long fib(int n)

{ long f;

if(n==1 || n==2) f=1;

el f=fib(n-2)+fib(n-1);

return(f);

}

main()

{ long f;

int n,i;

scanf("%d",&n);

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

{ printf("%12ld",fib(i));

if(i%5==0) printf("n");

} }

int fbn(int x);

main()

{ int n;

long fn;

scanf("%d",&n);

fn=fbn(n);

printf("fbn=%ld n",fn);

}

int fbn(int x)

{int f;

if(x<=2) f=1;

el f=fbn(x-2)+fbn(x-1);

return(f);

}

8.9 编写一个函数,将一个二维数组中的行、列元素互换,例如,把二维数组A[6][5]中的各个元素A[i][j]存入二维数组B[5][6]中的对应元素B[j][i]。

void fac(int a[][5],int b[][6],int n)

{ int i,j;

for(i=0;i

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

b[j][i]=a[i][j];

}

main()

{ int c[6][5],d[5][6];

int i,j;

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

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

scanf("%d",&c[i][j]);

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

{ printf("n");

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

printf("%4d",c[i][j]);

}

printf("n");

fac(c,d,6);

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

{ printf("n");

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

printf("%4d",d[i][j]);

}

}

第九章 习 题

9.1 选择题:

⑴ 下面对结构体数据类型的叙述中,( A )是错的。

A) 定义一个结构体类型后,编译程序要为结构体和成员分配存储空间

B) 结构体变量可以在定义结构体后定义,也可以在定义结构体时定义

C) 结构体可以由若干个成员组成,各成员的数据类型可以不同

D) 结构体变量的各成员可通过结构体变量名和指向结构体变量的指针引用

⑵ 设有如下说明,以下不能正确输入结构体成员的值的是(A )。

struct

{char name[15],x;

int age;

float score;

}stu,*p=&stu;

A) scanf("%c",&stu->x); B) scanf("%s",);

C) scanf("%d",&); D) scanf("%f",p->score);

⑶ 设p为指向结构体变量的指针,num为该结构体的一个成员,y为一整型变量,则y=++p->num;与( D )等价。

A) ++p;y=p->num; B) y=(++p)->num;

C) ++(p->num);y=p->num; D) y=p->num;++y;

⑷ 设有类型说明:

enum color {red,yellow=4,white,black};

则执行语句“printf("%d",white);”后的输出是( A )。

A) 5 B) 2 C) 1 D) 0

⑸ 说明语句“enum mone{Fen,Jiao,Yuan=100,Tenyuan};”每个枚举量所对应的实际值为:( A )。

A) 0,1,100,101

B) 1,2,100,101

C) “Fen”或1,“Jiao”或2,“Yuan”或100,“Tenyuan”或101

D) “Fen”,“Jiao”,“Yuan”,“Tenyuan”

9.2 定义一个结构体变量,成员包括:姓名、住址、电话号码。

9.3 设有定义

struct

{

int m;

char

*pd;

}t[ ]={{1,"ab"},{2,"cd"}),*p=t;

求表达式*p->pd和表达式*(++p)->pd+(p-1)->m的值。

9.4 写出程序运行的结果。

#include

struct frame

{

int a;

int

*b;

}*s;

main()

{

int x []={10,11},y[]={13,114},z[]={15,18};

static struct frame frm[]={{9,x},{12,y},{16,z}};

s=frm;

printf("%dt",*++s->b+s->a);

printf("%dt",*++(++s)->b);

printf("%dt",*++s->b);

}

9.5 编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包含num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。

9.6 链表a和链表b是按学号升序排序的链表,链表结点包括学号和成绩,把这两个链表合并成一个按学号升序排序的链表c。

9.7 有两个链表a和b,设结点中包含学号、姓名。从a链表中删去与b链表中有相同学号的那些结点。

9.8 将一个链表按逆序排序,即将链头当链尾,链尾当链头。

9.9 整型在内存中占4个字节,编写一程序,将四个字符拼成一个长整型(long)数据。编写一个子函数将四个字节的内容作为一个long型数据输出。

9.10 已知head1指向一个单向链表的头结点,其结点数据包含学号(num)、姓名(name)、英语成绩(english)、数学成绩(math)、指针(next)。编程建立一个新链表,其中的结点数据包含学号(num)、姓名(name)、平均成绩(ave)、指针(next),且每个结点的平均成绩(ave)为head1所指向链表相应结点学生的课程平均成绩,新链表用head2指向其头结点。

9.11 请定义枚举类型,用枚举元素代表人民币的面值,包括1分、2分和5分,并编程输出

本文发布于:2024-04-01 22:54:51,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1241413.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:程序   函数   语句
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图