首页 > 试题

c语言程序设计答案

更新时间:2023-01-22 23:59:04 阅读: 评论:0

初一数学动点经典例题-电视剧英语


2023年1月23日发(作者:母亲母亲电视剧)

1

C语言程序设计(第三版)习题答案

习题一

一、名词解释

(1)程序P1(2)程序设计P1(3)机器语言P1(4)高级语言P2

(5)汇编程序P3(6)编译程序P4(7)算法P5(8)结构化程序设计方法P10

二、简答题

1.设计程序时应遵循哪些基本原则?P4

答:正确性、可靠性、简明性、有效性、可维护性、可移植性。

2.算法具有哪些特点?

答:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。

3.算法的表示形式有哪几种?

答:自然语言、伪代码、传统流程图、N-S流程图、计算机语言。

4.结构化程序设计方法的三种基本结构是什么?

答:顺序结构、选择结构和循环结构。

5.传统流程图与N-S流程图最大的区别是什么?

答:N-S流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。

三、用传统流程图或N-S流程图表示求解以下问题的算法。

1.从键盘输入10个整数,求出其中的最小数并输出。

2.求1+2+3+„+100的值。

3.求10~50的所有素数之和。

输入一个数给x

min=x;n=1;

当n<10时

输入下一个数给x

如果x

YesNo

min=x;

n=n+1;

输出min的值

s=0;i=1;

当i≤100时

s=s+i;i=i+1;

输出s的值

2

4.求下列分段函数的值。

四、请参照本章例题,编写一个简单的C程序,输出以下三行信息。

**************************

YangtzeUniversity

**************************

#include

voidmain()

{

printf("**************************n");

printf("YangtzeUniversityn");

printf("**************************n");

}

输入一个数给x

x≤1

Yesno

x<5

yesno

y=4x-1y=5x+1y=6-3x

输出s的值

i=10;s=0;

当i≤50时

n=2;flag=1;

当n

i能否被n整除?

yesno

flag=0;

n=n+1;

flag=1?

yesno

s=s+i;

i=i+1;

输出s的值

Y=

4X-1(X≤1)

5(X-1)+6(1

6-3X(X≥5)

3

习题二

一、选择题

1~10:BCDCDDBCAA

11~20:DACDBDBACD

二、填空题

1.字母L或字母l

2.%c(或字符)、%d(或整数)

3.在程序运行过程中,其值可以在一定的范围内变化的量

4.'0'

5.小数形式、指数形式

6.关键字、预定义标识符、用户标识符

7.字母、数字、下划线、数字

8.18

9.2、1、30

10.双精度实数或double

11.赋值、逗号、20、20、20、4

12.4、4

习题三

一、选择题

1~10:BCCBCCCDCC

注:第4题答案D为:1022↙

33↙

二、填空题

、scanf

2.h

3."%5d"

4.'0'

5.e、E

6.6

7.s、c

8.*

9.-、+

10.i

三、编程题

1.编写程序,从键盘输入一个以秒为单位的时间数,将其换算成几小时几分几秒,然后进

行输出。例如输入的时间为4258秒,则输出结果为:1小时10分58秒。

#include

voidmain()

{

4

intx,h,m,s;

scanf("%d",&x);

h=x/3600;m=x%3600/60;s=x%60;

printf("%ds=%d:%d:%d!n",x,h,m,s);

}

2.编写程序,读入三个整数给变量a、b、c,然后交换它们中的数,把a中原来的值给b,

把b中原来的值给c,把c中原来的值给a。

#include

voidmain()

{

inta,b,c,t;

printf("inputabc:");

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

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

t=a;a=c;c=b;b=t;

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

}

习题四

一、填空题

1.1、0

2.!%+<=!=&&||=

3.x==0

4.0、2

5.20、0、0

二、选择题

1~7:DDCADDC

三、程序阅读题

1.595959

2.0.500000

3.1

4.2

5.6

6.a=2,b=1

7.pass

warn

8.1

四、编程题

1.设a为整型变量且其值大于零,请将以下if语句改写成switch语句。

if(a<60)m=1;

elif(a<70)m=2;

5

elif(a<80)m=3;

elif(a<90)m=4;

elm=5;

方法1

#include

voidmain()

{

inta,m;

scanf("%d",&a);

switch(a/10)

{

ca0:ca1:ca2:ca3:

ca4:ca5:m=1;break;

ca6:m=2;break;

ca7:m=3;break;

ca8:m=4;break;

default:m=5;break;

}

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

}

方法2

#include

voidmain()

{

inta,m;

scanf("%d",&a);

m=0;

switch(a/10)

{

default:m++;

ca8:m++;

ca7:m++;

ca6:m++;

ca5:ca4:ca3:ca2:

ca1:ca0:m++;

}

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

}

2.编写程序,从键盘输入一个整数,打印出它是奇数还是偶数。

#include

voidmain()

{

inta;

scanf("%d",&a);

if(a%2==1)

printf("%disaoddnumber!n",a);

6

el

printf("%disaevennumber!n",a);

}

3.编写程序,从键盘输入一个字符,判别它是否是小写字母,如果是,将它转换为大写字母;如果不

是,不转换。然后输出最后得到的字符。

#include

voidmain()

{

charch;

scanf("%c",&ch);

if(ch>='a'&&ch<='z')

ch=ch-32;

printf("%cn",ch);

}

4.编写程序,从键盘输入一个不多于4位的正整数,打印出它是几位数。

#include

voidmain()

{

intx,n;

scanf("%d",&x);

if(x>1000)n=4;

elif(x>100)n=3;

elif(x>10)n=2;

eln=1;

printf("%dn",n);

}

5.当一个人的月收入在3500元以下时免税;月收入在3500元到5000元之间时,超过3500的部分纳

税3%;月收入在5000元以上时,3500至5000之间的部分纳税3%,超过5000的部分纳税10%。编写

程序从键盘输入月收入income,计算并输出应交税款tax。

#include

voidmain()

{

intincome;

floattax;

scanf("%d",&income);

if(income<=3500)tax=0;

elif(income<=5000)tax=0.03*(income-3500);

eltax=0.03*(5000-3500)+0.10*(income-5000);

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

}

6.回文是指正读和反读都一样的数或字符串。例如:12321、55455、35553等都是回文。请编写一个程

序,从键盘上读取一个包含五位数字的长整数,并判断它是否是回文。(提示:用除法运算和求余运

算把一个数的个位、十位、百位、千位等分别分离出来。)

#include

voidmain()

7

{

longx;

inta,b,d,e;

scanf("%ld",&x);

a=x/10000;

b=x%10000/1000;

d=x%100/10;

e=x%10;

if(a==e&&b==d)

printf("%ldishuiwen!n",x);

el

printf("%ldisnothuiwen!n",x);

}

习题五

一、阅读题

1.8

2.4321

3.X

4.-1

5.23

6.52

7.5

8.3

二、填空题

1.18

2.2

3.b=i+1

4.17

5.i<=9、j%3!=0

6.d=1.0、k=k+1、k<=10

三、选择题

1~8:ADDABDDA

四、编程题

1.编写程序,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方之

和等于该数本身。例如,407是一个“水仙花数”,因为407=43+03+73。(注:若将题意改为打印出最大的

或最小的“水仙花数”,则应将循环语句作如何调整?)。

#include

voidmain()

{

inta,b,c,k;

8

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

//求最大的“水仙花数”改用:for(k=999;k>=100;k--)

{

a=k/100;b=k/10%10;c=k%10;

if(k==a*a*a+b*b*b+c*c*c)

{

printf("%5d",k);

//求最大或最小”水仙花数”时增加一个语句:break;

}

}

printf("n");

}

2.编写程序,输出1980~2880年所有闰年的年号。每输出5个年号换一行。

#include

voidmain()

{

intk,flag,n=0;

for(k=1980;k<=2880;k++)

{

flag=(k%4==0)&&(k%100!=0)||(k%400==0);

if(flag)

{

printf("%5d",k);

n++;

if(n%10==0)

printf("n");

}

}

printf("n");

}

3.编写程序,求1-3+5-7+„-99+101的值。

#include

voidmain()

{

intn,t=1,s=1;

for(n=3;n<=101;n+=2)

{t=-t;s=s+t*n;}

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

}

4.编写程序,计算并输出下列级数的前n项之和Sn。n的值从键盘输入。

...

13

21

8

13

5

8

3

5

2

3

1

2



n

S

#include

voidmain()

{

9

intfz,fm,n,i;

floats,t;

fz=2;fm=1;s=0;

scanf("%d",&n);

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

{

t=(1.0*fz)/fm;

s=s+t;

fz=fz+fm;

fm=fz-fm;

}

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

}

5.编写程序,求e的值e=1+1/1!+1/2!+1/3!+1/4!+„+1/n!

#include

voidmain()

{

intn,i;

floatt,fm=1,e=1;

scanf("%d",&n);

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

{fm=fm*i;t=1.0/fm;e=e+t;}

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

}

6.已知某球从80米高度自由落下,落地后反复弹起,每次弹起的高度都是上次高度的一半。求此球8

次落地所经过的总路程。

#include

voidmain()

{

intn;

floats=80,h=s/2;

for(n=2;n<=8;n++)

{

s=s+2*h;

h=h/2;

}

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

}

7.用牛顿迭代法求高次方程f(x)=2x3-4x2+5x-18=0的根(约为2.466)。

注:牛顿迭代公式为:x2=x1-f(x1)/f’(x1),其中f’(x1)为导函数在点x1的值。

#include

#include

voidmain()

{

10

floatx,f,f1;

x=8;//x的初值可为任意值

do

{f=2*x*x*x-4*x*x+5*x-18;f1=6*x*x-8*x+5;x=x-f/f1;

}while(fabs(f)>0.00001);

printf("x=%f,f=%fn",x,f);

}

8.有这样一些真分数:其分子和分母都是两位正整数,且分子的个位数与分母的十位数相同,如果把

该分数的分子的个位数与分母的十位数同时去掉,所得到的新的分数正好与原分数的值相等,如

26/65=2/5。试编程求出所有满足上述条件的真分数。

#include

voidmain()

{

inta,b,c;//设这个分数为ab/bc

for(a=1;a<=9;a++)

for(b=1;b<=9;b++)

for(c=1;c<=9;c++)

if((a

printf("%d/%d=%d%d/%d%d=%fn",a,c,a,b,b,c,1.0*a/c);

}

9.编写程序,求数列:1,(1+1/2),(1+1/2+1/3),(1+1/2+1/3+1/4),(1+1/2+1/3+1/4+1/5),„

的前10项之和。

#include

voidmain()

{

floats,t;

inti;

s=0,t=0;

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

{t=t+1.0/i;s=s+t;}

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

}

10.编写程序,求3到100之间的所有素数之和。

#include

voidmain()

{

ints,i,k,flag;

s=0;

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

{

flag=1;

for(k=2;k

if(i%k==0)

{flag=0;break;}

if(flag)

11

{s=s+i;printf("%4d",i);}

}

printf("nsum=%dn",s);

}

11.编写程序,求Fibonacci数列中大于800的最小的一个数(结果为987)。

#include

voidmain()

{

intf1=1,f2=1,f3;

while(f3<=800)

{

f3=f1+f2;

f1=f2;

f2=f3;

}

printf("Fibonacci数列中大于800的最小数是%5dn",f3);

}

习题六

一、选择题

1~10:DDCBABCDCD

11~20:ABBCCDCABB

21~30:BBDDDDCDCA

注:第16题答案C为:字符串"SHORT"与"SHORT"相等

第19题题目为:已知:charstr1[10],str2[10]={"books"};则在程序中能够将字符串

"books"赋给数组str1的正确语句是。

第21题题目为:设有:charstr1[20]="abcde",str2[20]="xyz";则执行语句:

printf("%d",strlen(strcpy(str1,str2));的结果是。

第28题答案D为:aaaa

bbbb

ccccdddd

二、填空题

1.9、0

2.先行后列

3.字符数组

4.QuickC

5.(c=getchar())、'A'+i或65+i

6.'0'、str1[i]-str2[i]

7.CDABC

8.6

9.10000

01000

12

00100

00010

00001

10.600

11.AzyD

12.4somestring*test

三、编程题

1.定义一个有20个元素的整型数组,分别求出下标为奇数和偶数的元素的平均值。

#include

#include

voidmain()

{

inti,s0=0,s1=0,a[20];

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

a[i]=rand()%100;

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

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

s0=s0+a[i];}

printf("sumis:%dave=%fn",s0,s0/10.0);

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

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

s1=s1+a[i];}

printf("sumis:%dave=%fn",s1,s1/10.0);

}

2.设有一个整型数组,另输入一个整数,编程查找这个整数是否在数组中出现过,若出现,则输出第

一次出现的位置,否则,输出nofound。

#include

#include

voidmain()

{

inti,s,a[20];

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

a[i]=rand()%100;

scanf("%d",&s);

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

if(a[i]==s)

{printf("found:a[%d]=%dn",i,a[i]);

break;}

if(i==20)

printf("nofoundn");

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

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

printf("n");

}

13

3.设有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入到数组中。

#include

#defineN10

voidmain()

{

inti,j,s;

//inta[N]={1,3,5,7,9,11,13,15,17};

inta[N]={17,15,13,11,9,7,5,3,1};

scanf("%d",&s);

i=0;

if(a[0]

while(s>a[i])i++;

el

while(s

for(j=N-1;j>i;j--)

a[j]=a[j-1];

a[j]=s;

for(i=0;i

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

printf("n");

}

4.编一程序,从一个已排好序的数组中删去某个位置上的元素。

#include

#defineN10

voidmain()

{

inti,j;

inta[N]={1,3,5,7,9,11,13,15,17,19};

for(i=0;i

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

printf("n");

scanf("%d",&i);

for(j=i;j

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

for(i=0;i

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

printf("n");

}

5.将一个二维数组的行、列互换后存到另一个二维数组中并输出结果。

#include

voidmain()

{

inti,j;

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

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

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

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

printf("arraya:n");

14

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

{

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

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

printf("n");

}

printf("arrayb:n");

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

{

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

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

printf("n");

}

}

6.编一程序,在一个二维数组中,查找第一次出现的负数,并输出该数及其所在的行、列号。

#include

voidmain()

{

inti,j,flag;

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

flag=0;

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

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

if(a[i][j]<0)

{

flag=1;

printf("found:a[%d][%d]=%dn",i,j,a[i][j]);

i=j=100;//可使双重循环提前结束

}

if(flag==0)

printf("nofound!");

printf("arraya:n");

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

{

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

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

printf("n");

}

}

7.编程将一个字符数组中的字母,按由大到小的顺序进行排序。

#include

#include

voidmain()

{

chart,s[]="ABCDIVBHFBVCNLKFDB";

inti,j,n;

puts(s);

n=strlen(s);

for(i=0;i

15

for(j=i+1;j

if(s[i]

{t=s[i];s[i]=s[j];s[j]=t;}

puts(s);

}

8.输入一行字符,统计其中有多少个英语单词,单词之间用空格隔开。

#include

#include

voidmain()

{

chars[81];

intw,i,n;

gets(s);

i=0;n=0;w=0;

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

{

if(s[i]=='')

w=0;/*endofaword*/

el

if(w==0)

{w=1;n++;}/*beginofaword*/

i++;

}

printf("numberofword:%dn",n);

}

9.编程将两个一维数组中的对应元素的值相减后进行输出。

#include

#include

voidmain()

{

inti,a[10],b[10];

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

{a[i]=rand()%100;printf("%4d",a[i]);}

printf("n");

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

{b[i]=rand()%100;printf("%4d",b[i]);}

printf("n");

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

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

printf("n");

}

10.有n个无序的数放在数组a中,请将相同的那些数删得只剩得一个,输出经过删除后的数据。

#include

voidmain()

{

16

inti,j,k,a[10]={90,20,40,30,50,50,50,50,20,80};

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

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

printf("n");

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

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

if(a[j]==a[i])

{a[j]=-888;}

k=0;

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

if(a[i]!=-888)

{

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

a[k++]=a[i];

}//不相同的有效元素只有K个了

printf("n");

}

11.求二维数组中这样一个元素的位置:它在行上最小,在列上也最小。如果没有这样的元素则输出相

应的信息。

#include

#include

voidmain()

{

intj,i,k,flag,fz=0,a[4][5];

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

{

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

{

a[i][j]=rand()%100;

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

}

printf("n");

}

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

{

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

{

flag=1;

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

if(a[i][k]

{flag=0;break;}

for(k=0;k<4&&flag;k++)

if(a[k][j]

{flag=0;break;}

if(flag)

{fz++;printf("mina[%d][%d]=%dn",i,j,a[i][j]);}

}

17

}

if(fz==0)

printf("nofound!");

}

12.在一个二维数组中形成并输出如下矩阵:

11111

21111

A=32111

43211

54321

#include

#defineN5

voidmain()

{

intj,i,a[N][N];

for(i=0;i

for(j=0;j

{

if(i<=j)

a[i][j]=1;

elif(j==0)

a[i][j]=i+1;

el

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

}

for(i=0;i

{

for(j=0;j

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

printf("n");

}

}

13.已知A是一个3╳4的矩阵,B是一个4╳5的矩阵,编程求A╳B得到的新矩阵C,并输出C矩阵。

#include

voidmain()

{

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

intb[4][5]={3,2,1,5,4,4,3,2,5,1,2,3,5,4,1,7,8,5,6,9},c[3][5];

printf("arrayA(3*4):n");

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

{

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

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

printf("n");

}

printf("arrayB(4*5):n");

18

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

{

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

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

printf("n");

}

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

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

{

c[i][j]=0;

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

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

}

printf("arrayC(3*5)=A*B:n");

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

{

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

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

printf("n");

}

}

14.编程输出两个字符串中对应位置上相同的字符。

#include

voidmain()

{

inti;

chara[81]="acbsbdvhfejbvewvkbewljbv";

charb[81]="anbdxwdbviuerkjvbfidbvuiebik";

printf("string1:%sn",a);

printf("string2:%sn",b);

printf("string3:");

i=0;

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

{

if(a[i]==b[i])

printf("%c",a[i]);

i++;

}

printf("n");

}

15.设有一字符串已按升序排列在字符数组a中,请将另一字符串b中的字符按升序的规律插到数组a

中。

#include

#include"string.h"

voidmain()

{

19

inti,j,k;

chara[81]="acdfhjklmopxz";

charb[81]="anbdx";

printf("string1:%sn",a);

printf("string2:%sn",b);

i=0;

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

{

j=0;

while(a[j]

j++;

k=strlen(a);

while(k>=j)

{a[k+1]=a[k];k--;}

a[j]=b[i];

i++;

}

printf("string3:%sn",a);

}

16.将已按升序排列的两个字符串a和b中的字符按升序归并到字符数组c中。

#include

#include"string.h"

voidmain()

{

inti,j,k;

chara[81]="acdfhjklmopxz";

charb[81]="abdnx";

charc[81];

printf("string1:%sn",a);

printf("string2:%sn",b);

i=0;j=0;k=0;

while(a[i]!='0'&&b[j]!='0')

{

if(a[i]

c[k++]=a[i++];

el

c[k++]=b[j++];

}

while(a[i])

c[k++]=a[i++];

while(b[j])

c[k++]=b[j++];

c[k]='0';

printf("string3:%sn",c);

}

20

习题七

一、选择题

1~10:DCDBDBCAAB

11~19:BBABADABA

二、填空题

1.声明

2.自动将其转换为函数定义时的类型

3.10

4.i<=n、s、0、f(k)

5.Itis

6.2721

7.0246

8.k、-1

9.2、2

10.p=j、x[i][p]、LineMax(x)

11.5

12.24

13.age(n-1)+2、age(n)

14.m%10、m/10、m或m!=0、r(m)

三、编程题

1.编一函数,判断某年是否为闰年,若是返回1,否则返回0。

#include

intfun(intm)

{return(m%4==0)&&(m%100!=0)||(m%400==0);}

voidmain()

{

intn;

scanf("%d",&n);

if(fun(n))

printf("year:%disaleap!n",n);

}

2.编写计算三角形面积的程序,将计算面积定义成函数。三角形面积公式为:

A=))()((csbsass式中s=(a+b+c)/2

其中A为三角形面积,a、b、c为三角形的三条边的长度。

#include

#include

floatfun(floata,floatb,floatc)

{

floatf,s;

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

if((s<=a)||(s<=b)||(s<=c))//或(a+b)>c&&(a+c)>b&&(b+c)>a

21

f=0;

el

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

returnf;

}

voidmain()

{

floata,b,c;

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

printf("areais:%fn",fun(a,b,c));

}

3.编写两个函数,分别求出两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出

结果,两个整数由键盘输入。

#include

#include

intfmax(intm,intn)

{

intr;

r=m%n;

while(r!=0)

{m=n;n=r;r=m%n;}

returnn;

}

intfmin(intm,intn)

{returnm*n/fmax(m,n);}

voidmain()

{

inta,b;

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

printf("fmaxis:%dn",fmax(a,b));

printf("fminis:%dn",fmin(a,b));

}

4.编写函数,根据整型形参m的值,计算公式

t=1-

2*2

1

-

3*3

1

-„-

mm*

1

的值。例如,若m=5,则应输出0.536389。

#include

floatfun(intm)

{

floatt=1.0;

inti;

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

t=t-1.0/i/i;

returnt;

}

voidmain()

{

22

intm;

scanf("%d",&m);

printf("t(%d)=%fn",m,fun(m));

}

5.计算s=1+

!2

1

+

!3

1

+„+

!

1

n

。n由终端输入,将计算n!定义成函数。

#include

floatfun(intm)

{

inti;

floats=0.0,t=1.0;

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

{t=t/i;s=s+t;}

returns;

}

voidmain()

{

intn;

scanf("%d",&n);

printf("s(%d)=%fn",n,fun(n));

}

6.编写函数,利用公式:



9

4

7

3

5

2

3

1

7

3

5

2

3

1

5

2

3

1

3

1

1

2

计算π的近似值,当某一项的值小于10-5时,认为达到精度要求。

#include

doublefun()

{

intn;

doublepi=1,t=1;

n=1;

do

{

t=t*n/(2*n+1);

pi=pi+t;

n++;

}while(t>1e-5);

return2*pi;

}

voidmain()

{printf("pi=%fn",fun());}

7.编一函数,判断某一整数是否为回文数,若是返回1,否则返回0。所谓回文数就是该数正读与反读

是一样的。例如12321就是一个回文数。

#include

#include

inthuiwen(intm)

{

23

intt,n=0;

t=m;

while(t)

{n++;t=t/10;}//求出M是几位的数

t=m;

while(t)

{

if(t/(int)pow(10,n-1)!=t%10)//比较其最高位和最低位

return0;

el

{

t=t%(int)pow(10,n-1);//去掉其最高位

t=t/10;//去掉其最低位

n=n-2;//位数去掉了两位

}

}

return1;

}

voidmain()

{

intx;

scanf("%d",&x);

if(huiwen(x))

printf("%disahuiwen!n",x);

el

printf("%disnotahuiwen!n",x);

}

8.编写一个求水仙花数的函数,然后通过主函数调用该函数求100到999之间的全部水仙花数。所谓

水仙花数是指一个三位数,其各位数字的立方和等于该数本身。

例如:153就是一个水仙花数:153=1*1*1+5*5*5+3*3*3

#include

#include

intfun8(intm)

{

inta,b,c;

a=m/100;b=m/10%10;c=m%10;

if(m==a*a*a+b*b*b+c*c*c)

return1;

el

return0;

}

voidmain()

{

inti;

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

if(fun8(i))

24

printf("%5d",i);

printf("n");

}

9.编一函数primedec(m),求整数m的所有因子并输出。例如:120的因子为:2,2,2,3,5。

#include

#include

voidprimedec(intm)

{

intn=2;

while(m>1)

{

while(m%n==0)

{printf("%d",n);m=m/n;}

n++;

}

printf("n");

}

voidmain()

{intx;

scanf("%d",&x);

primedec(x);

}

10.求100~200之间的所有素数,按每行6个输出。

#include

#include

intprime(intm)

{

intn,f=1;

for(n=2;n

if(m%n==0)

{f=0;break;}

returnf;

}

voidmain()

{

intx,n=0;

for(x=100;x<=200;x++)

if(prime(x))

{

n++;

printf("%5d",x);

if(n%6==0)

printf("n");

}

printf("n");

25

}

11.编一函数,求末尾数非0的正整数的逆序数,如:rever(3407)=7043。

#include

#include

intrever(intm)

{

intx=0;

while(m)

{

x=x*10+m%10;

m=m/10;

}

returnx;

}

voidmain()

{

intw;

scanf("%d",&w);

printf("%d==>%dn",w,rever(w));

}

12.编一函数,将一个字符数组中的数字字符存于另一个字符数组中。

#include

#include

voidfun12(chara[],charb[])

{

inti=0,j;

for(j=0;j

if(b[j]>='0'&&b[j]<='9')

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

a[i]='0';

}

voidmain()

{

chars1[81],s2[81];

gets(s2);

fun12(s1,s2);

puts(s2);puts(s1);

}

13.编一函数,统计一个字符串中字母、数字、空格和其它字符的个数。

#include

#include

voidfun13(chars[])

{

inti,num=0,ch=0,sp=0,oh=0;

charc;

26

for(i=0;(c=s[i])!='0';i++)

if(c=='')sp++;

elif(c>='0'&&c<='9')num++;

elif(toupper(c)>='A'&&toupper(c)<='Z')ch++;

eloh++;

printf("char:%d,number:%d,space:%d,other:%dn",ch,num,sp,oh);

}

voidmain()

{

chars1[81];

gets(s1);

fun13(s1);

}

14.用递归的方法实现求1+2+3+„+n。

#include

#include

intfun14(intm)

{

intw;

if(m==1)

w=1;

el

w=fun14(m-1)+m;

returnw;

}

voidmain()

{

intx,i;

scanf("%d",&x);

printf("1+2+...+%d=%dn",x,fun14(x));

}

15.用递归的方法将一个整数转换成字符串。例如:输入345,应输出字符串“345”。

#include

#include

voidfun15(intm)

{

if(m!=0)

{

fun15(m/10);

printf("%c",'0'+m%10);

}

}

voidmain()

{

27

intx;

scanf("%d",&x);

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

fun15(x);

printf("n");

}

16.采用递归的方法计算x的n次方。

#include

#include

floatp(floatx,intn)

{

floatf;

if(n==0)

f=1;

el

f=p(x,n-1)*x;

returnf;

}

voidmain()

{

floatx;

intn;

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

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

}

习题八

一、选择题

1~10:ADBCCABDBA

11~14:BCCD

二、填空题

1.从定义点到函数体(或复合语句)结束

3.①局部、②全局

4.①外部、②内部

5.2,5,1,2,3,-2

6.a=5

a*a=25

a*a*a=8

:y=25;sub:y=5;main:x=25;main:y=10

28

习题九

一、选择题

1~8:DCBCABBB

二、填空题

1.100010

2.11

3.011

三、编程题

1.定义一个带参的宏,求两个整数的余数。通过宏调用,输出求得的结果。

#defineR(m,n)(m)%(n)

#include

voidmain()

{

intm,n;

printf("entertwointegers:n");

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

printf("remainder=%dn",R(m,n));

}

2.分别用函数和带参的宏,从3个数中找出最大者。

#include

#defineMAX(a,b)((a)>(b)?(a):(b))//implementationbyMACRO

intmax3(inta,intb,intc)//implementationbyfunction

{

intm;

m=a>b?a:b;

m=m>c?m:c;

returnm;

}

voidmain()

{

intm,n,k;

printf("enter3integer:n");

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

printf("ax=%dn",MAX(MAX(m,n),k));

printf("onmax=%dn",max3(m,n,k));

}

3.输入一个整数m,判断它能否被3整除。要求利用带参的宏实现。

#include

#defineDIVIDEDBY3(m)(m)%3==0

voidmain()

{

intm;

29

printf("enterainteger:n");

scanf("%d",&m);

if(DIVIDEDBY3(m))

printf("%disdividedby3n",m);

el

printf("%disnotdividedby3n",m);

}

习题十

一、填空题

1.首地址

2.0

3.

1)int*p=&k;

2)*p=6;

3)int**pp;

4)pp=&p;

5)(**pp)*=2;

4.整型数组名、指向整型数据的指针值

5.*(++p)

二、选择题

1~10:BCADCAAABB

11~15:CBCDC

16:①B②B③C

17:①B②D

18:①B②A③C

19~21:BAC

三、编程题

1.编写函数,对传递进来的两个整型量计算它们的和与积之后,通过参数返回。

#include

voidcompute(intm,intn,int*sum,int*p)

{*sum=m+n;

*p=m*n;

}

voidmain()

{

intx,y,sum,product;

printf("enter2integers:n");

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

compute(x,y,&sum,&product);

printf("x=%dy=%dsum=%dproduct=%dn",x,y,sum,product);

}

30

2.编写一个程序,将用户输入的字符串中的所有数字提取出来。

#include

#include

voidmain()

{

charstring[81],digit[81];

char*ps;

inti=0;

printf("enterastring:n");

gets(string);

ps=string;

while(*ps!='0')

{

if(*ps>='0'&&*ps<='9')

{

digit[i]=*ps;

i++;

}

ps++;

}

digit[i]='0';

printf("string=%sdigit=%sn",string,digit);

}

3.编写函数实现,计算字符串的串长。

#include

#include

intStringLength(char*s)

{

intk;

for(k=0;*s++;k++);

returnk;

}

voidmain()

{

charstring[81];

printf("enterastring:n");

gets(string);

printf("lengthofthestring=%dn",StringLength(string));

}

4.编写函数实现,将一个字符串中的字母全部转换为大写。

#include

#include

char*Upper(char*s)

{

char*ps;

ps=s;

31

while(*ps)

{

if(*ps>='a'&&*ps<='z')

*ps=*ps-32;

ps++;

}

returns;

}

voidmain()

{

charstring[81];

printf("enterastring:n");

gets(string);

printf("beforeconvert:string=%sn",string);

printf("afterconvert:string=%sn",Upper(string));

}

5.编写函数实现,计算一个字符在一个字符串中出现的次数。

#include

#include

intOccur(char*s,charc)

{

intk=0;

while(*s)

{

if(*s==c)

k++;

s++;

}

returnk;

}

voidmain()

{

charstring[81],c;

printf("enterastring:n");

gets(string);

printf("enteracharacter:n");

c=getchar();

printf("character%coccurs%dtimesinstring%sn",

c,Occur(string,c),string);

}

6.编写函数实现,判断一个子字符串是否在某个给定的字符串中出现。

#include

#include

intIsSubstring(char*str,char*substr)

{

inti,j,k,num=0;

32

for(i=0;str[i]!='0'&&num==0;i++)

{

for(j=i,k=0;substr[k]==str[j];k++,j++)

if(substr[k+1]=='0')

{num=1;break;}

}

returnnum;

}

voidmain()

{

charstring[81],sub[81];

printf("enterfirststring:n");

gets(string);

printf("entercondstring:n");

gets(sub);

printf("string'%s'is",sub);

if(!IsSubstring(string,sub))

printf("not");

printf("substringof'%s'n",string);

}

7.有n个人围成一圈,顺序排号。由用户从键盘输入报数的起始位置,从该人开始报数(计数从0开

始),凡报数为3的倍数出圈。问最后剩下的是几号?

见导学例10.25

8.由一个整型二维数组,大小为m×n,要求找出其中最大值所在的行和列,以及该最大值。请编一个

函数max,数组元素在main函数中输入,结果在函数max中输出。

见导学例10.26

9.由n个学生,每个学生考m门课程,要求编一函数,能检查n个学生有无不及格的课程,如果由某

一学生有一门或一门以上课程不及格,就输出该学生的号码(学号从0开始)和其全部课程成绩。

见导学例10.27

习题十一

一、选择题

1~10:AABDDBDDDC

11~20:CBBCC

二、填空题

1.___2___、___3__

2.structnode*next

3.structlink*head、p->data、p->next

4.__A_

三、编程题

1.编写程序,进行两个复数的相减。

#include

structComplex

33

{

doublem_r,m_i;

};

structComplexsub(structComplexc1,structComplexc2)

{

structComplexc;

c.m_r=c1.m_r-c2.m_r;

c.m_i=c1.m_i-c2.m_i;

returnc;

}

voidmain()

{

structComplexc1={1.2,2.3},c2={0.2,0.3};

structComplexc;

c=sub(c1,c2);

printf(“c=%g+i%gn”,c.m_r,c.m_i);

}

2.定义一个包括年、月、日的结构体。输入一个日期,计算该日在本年中是第几天?注意闰年问题。

#include

structymd

{

intday;

intmonth;

intyear;

};

intdayof[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

intdays(structymd*p)

{

inti,d;

if(p->year%4==0&&p->year%100!=0||p->year%400==0)

dayof[2]=29;

d=p->day;

for(i=1;imonth;i++)

d=d+dayof[i];

return(d);

}

voidmain()

{

structymddate;

intd;

for(;;)

{

printf("date(yyyy/mm/dd)=?(yyyy=0--Exit)nn");

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

if(==0)

break;

34

d=days(&date);

printf("nThedayoftheyearis%d!nn",d);

}

}

3.有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。从键盘输入10个学生的数据,要

求输出3门课程的总平均成绩,以及最高分的学生的学号、姓名、3门课程成绩、平均分数。

#include

#defineN10

structstudent

{

charnum[6];

charname[8];

floatscore[3];

floatavr;

}stu[N];

voidmain()

{

inti,j,maxi;

floatsum,max,average;

for(i=0;i

{

printf("inputscoresofstudent%d:n",i+1);

printf("No.:");

scanf("%s",stu[i].num);

printf("name:");

scanf("%s",stu[i].name);

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

{

printf("score%d:",j+1);

scanf("%f",&stu[i].score[j]);

}

}

average=0;

max=0;

maxi=0;

for(i=0;i

{

sum=0;

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

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;

average+=stu[i].avr;

if(sum>max)

{

max=sum;

maxi=i;

35

}

}

average/=N;

printf("orelscore2score3averagen");

for(i=0;i

{

printf("%5s%10s",stu[i].num,stu[i].name);

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

printf("%9.2f",stu[i].score[j]);

printf("%8.2fn",stu[i].avr);

}

printf("average=%5.2fn",average);

printf("Thehighestscoreis:student%s,%s.n",

stu[maxi].num,stu[maxi].name);

printf("Hisscoresare:%6.2f,%6.2f,%6.2f,average:%5.2.n",

stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],

stu[maxi].avr);

}

4.设单向链表head1和head2已建立。编写将单向链表head2连接到单向链表head1之后的函数,以

head1返回,如图11.10所示。

/*结点结构Node*/

structNode

{

intdata;

structNode*next;

};

提示:函数原型为:structNode*link(structNode*head1,structNode*head2);

structNode*link(structNode*head1,structNode*head2)

{

structNode*p,*head0;

p=head1;

head0=head1;

while(p->next!=NULL)

p=p->next;

p->next=head2;

returnhead0;

}

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

1

50

2

连接前

head1

7

90

head2

1

5

2

连接后

head1

7

90

图11.10链表的连接

36

点。

#include

#include

#defineLA4

#defineLB5

structstudent

{

intnum;

charname[8];

structstudent*next;

}a[LA],b[LB];

voidmain()

{

structstudenta[LA]={{101,"Wang"},{102,"Li"},

{105,"Zhang"},{106,"Wei"}};

structstudentb[LB]={{103,"Zhang"},{104,"Ma"},{105,"Chen"},

{107,"Guo"},{108,"lui"}};

inti;

structstudent*p,*p1,*p2,*head1,*head2;

head1=a;head2=b;

printf("listA:n");

for(p1=head1,i=1;i<=LA;i++)

{

if(inext=a+i;

elp1->next=NULL;

printf("%4d%8sn",p1->num,p1->name);

if(inext;

}

printf("nlistB:n");

for(p2=head2,i=1;i<=LB;i++)

{

if(inext=b+i;

elp2->next=NULL;

printf("%4d%8sn",p2->num,p2->name);

if(inext;

}

p1=head1;

while(p1!=NULL)

{

p2=head2;

while((p1->num!=p2->num)&&(p2->next!=NULL))

p2=p2->next;

if(p1->num==p2->num)

if(p1==head1)

head1=p1->next;

el

37

{p->next=p1->next;p1=p1->next;}

el

{p=p1;p1=p1->next;}

}

printf("nresult:n");

p1=head1;

while(p1!=NULL)

{

printf("%4d%7sn",p1->num,p1->name);

p1=p1->next;

}

}

习题十二

一、选择题

1~8:CBDBCAAB

二、填空题

1.32

2.__a&0__

3._x|0xFF00_

4.64

三、编程题

1.取一个整数a从右端开始的4~7位。

#include

voidmain()

{

intnum,mask;

printf("Inputaintegernumber:");

scanf("%d",&num);

printf("thenumber:0x%xn",num);

num>>=4;/*右移4位,将4~7位移到低4位上*/

mask=~(~0<<4);/*间接构造1个低4位为1、其余各位为0的整数*/

printf("4~7:0x%xn",num&mask);

}

2.编一个将十六进制数转换成二进制形式显示的程序。

#include

voidmain()

{

intnum,mask,i;

printf("Inputahexadecimalnumber:");

scanf("%x",&num);

mask=1<<15;/*构造1个最高位为1、其余各位为0的整数(屏蔽字)*/

printf("%d=",num);

38

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

{

putchar(num&mask?'1':'0');/*输出最高位的值(1/0)*/

num<<=1;/*将次高位移到最高位上*/

if(i%4==0)putchar(',');/*四位一组,用逗号分开*/

}

printf("bBn");

}

习题十三

一、选择题

1~7:BDABBBC

二、填空题

1.2、!feof(f1)、f2

(filename,"w")、ch

3.0、"r"、!feof(fp)

CCDDDD

5."w+"、str[i]-32、rewind(fp)

6.""、fp

、ftell

三、编程题

1.调用fputs函数,把10个字符串输出到文件中;再从此文件中读入这10个字符串放在一个数组中;

最后把字符串数组中的字符串输出到终端屏幕,以检查所有操作的正确性。

#include

voidmain()

{

inti;

FILE*fp=fopen("","w");

char*str[10]={"One","two","three","four","five","six",

"ven","eight","nine","ten"};

charstr2[10][20];

if(fp==NULL)

{

printf("Cannotopenwritefilen");

return;

}

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

{

fputs(str[i],fp);

fputs("n",fp);

}

fclo(fp);

39

fp=fopen("","r");

if(fp==NULL)

{

printf("Cannotopenreadfilen");

return;

}

i=0;

while(i<10&&!feof(fp))

{

printf("%s",fgets(str2[i],20,fp));

i++;

}

}

2.从键盘读入10个浮点数,以二进制形式存入文件中。再从文件中读出数据显示在屏幕上。修改文件

中第四个数据。再从文件中读出数据显示在屏幕上,以验证修改的正确性。

#include

voidctfb(FILE*fp)

{

inti;

floatx;

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

{

scanf("%f",&x);

fwrite(&x,sizeof(float),1,fp);

}

}

voidfbtc(FILE*fp)

{

floatx;

rewind(fp);

fread(&x,sizeof(float),1,fp);

while(!feof(fp))

{

printf("%f",x);

fread(&x,sizeof(float),1,fp);

}

}

voidupdata(FILE*fp,intn,floatx)

{

fek(fp,(long)(n-1)*sizeof(float),0);

fwrite(&x,sizeof(float),1,fp);

}

voidmain()

{

FILE*fp;

intn=4;

40

floatx;

if((fp=fopen("e:","wb+"))==NULL)

{

printf("can'topenthisfilen");

exit(0);

}

ctfb(fp);fbtc(fp);

scanf("%f",&x);

updata(fp,n,x);

fbtc(fp);

fclo(fp);

}

本文发布于:2023-01-22 23:59:04,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/117321.html

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

上一篇:阳光体育运动
下一篇:儿童童话
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图