C语言程序设计习题与参考答案_第1页
C语言程序设计习题与参考答案_第2页
C语言程序设计习题与参考答案_第3页
C语言程序设计习题与参考答案_第4页
C语言程序设计习题与参考答案_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习题与参考答案

第1章C语言程序设计基础

思考与练习

一、填空题

1、c程序是由构成的,一个c程序中至少包含。

2、C程序的注释是山和所界定的文字信息组成的。

3、开发一个C程序要经过编辑、、和运行4个环节。

4、C语言中,头文件的扩展名是。

5、C语言源程序的扩展名;经过编译后,生成文件的后缀是;经过

连接后,生成文件的扩展名是o

二、简答题

1、简述C语言程序的运行步骤。

2、软件编程中的可读性原则一般包括那些内容?

3、什么是算法?算法的特点有哪些?

4、参照本章例题,编写一个C程序,输出以下内容。

***********************************************x**

He1lo,wor1d!

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

5、写出算法。已知圆的半径,求周长和面积。

第1章思考与练习参考答案

一、填空题

1、函数、一个主函数main。

2、/*、*/

3、编译、连接

4、.h

5^.c、.obj、.exe

二、简答题

1、简述C语言程序的运行步骤。

答:(1)编辑C程序源文件;

(2)编译,将编辑好的源程序文件“*.c”,翻译成二进制目标代码文件;

(3)连接,将编译生成的各个目标程序模块和系统或第三方提供的库函数lib”连

接在一起,生成可以脱离开发环境、直接在操作系统下运行的可执行文件“*.exe”;

(4)运行程序。如果运行出错,这说明程序处理的逻辑存在问题,需耍再次回到编辑

环境针对程序出现的逻辑错误进•步检查、修改源程序,重复编辑一编译一连接一运行的过

程,直到取得预期结果为止。

2、软件编程中的可读性原则•般包括那些内容?

答:1.编程规范概要

(1)程序结构清晰,简单易懂,单个函数的程序行数不得超过100行。

(2)打算干什么,要简单,宜截了当,代码精简,避免垃圾程序。

(3)尽量使用标准库函数和公共函数。

(4)不要随意定义全局变量,尽量使用局部变量。

(5)使用括号以避免二义性。

2.可读性要求

(1)可读性第一,效率第二。

(2)主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。

(3)常量定义(define)有相应说明。

(4)处理过程的每个阶段都有相关注颗说明。

(5)利用缩进来显示程序的逻辑结构,缩进量一致,可以以Tab键为单位。

(6)循环、分支层次不要超过五层。

(7)适当的使用注释,注释可以与语句在同一行,也可以在上行。

(8)保持各种运第的标准形式,通过括号避免运算•符的二义性。

3、什么是算法?算法的特点有哪些?

答:算法(Algorithm)是对特定问题求解方法与步骤的描述,是程序求解问题的核心

内容。

算法的特点:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。

4、参照本章例题,编写一个C程序,输出以下内容。

#include"stdio.h"

voidmain()

prinlf("******************************************x*******\n");

printf(,zHello,world!\n");

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

5、写出算法。已知圆的半径,求周长和面积。

算法:

(1)定义3个变量「R、fL、fS分别存储圆的半径、周长和面积。

(2)输入圆的半径fR的值。

(3)分别计算圆的周长和面积,fL=2*3.14*fR,fS=3.14*fR*fRo

(4)输出fL和fS。

第2章基本数据及其运算

思考与练习

一、选择题

1、下面叙述错误的是O

A.C程序中,各种括号应成对出现

B.C程序中,赋值号的左边不可以是表达式

C.C程序中,变量名的大小写是有区别的

【).C程序中,若未给变量赋初值,则变量的初值自动为0

2、以下合法的用户标识符是。

A.longB.\tC.5aD.user

3、C程序中,合法的关键字是。

A.intB.integerC.IntD.Intger

4、下列选项中,优先级最高的运算符是。

A.&&B./=C.!D.<=

5、C语言程序中,运算对象必须为整数的运算符是一。

A.++B.%C./D.*

6、下列字符串中为合法的字符常量的是.

A.nB.'\n'C.11CD."n"

二、填空题

1、下面程序的运行结果是。

voidmain()

(

charchl=,a',ch2='b',ch3=,c',ch4=,\101*,ch5=,\1161

printf(*a%cb%c\tab%c\n*»chi,ch2,ch3);

printf(*\t\b%c%c*,ch4,ch5);

2、运行下面程序,其输出结果为。

voidmainO

(

intiAl,iA2,iA3=258;

iAl=97;iA2=98;

printf(*iAl=%c,iA2=%c,iA3=%c”,iAl,iA2,iA3);

}

(3)下面程序的运行结果是。

voidmainO

{

intiX,iY,iM,iN;

iX=10;iY=20;

iM=iX++;iN=++iY;

printfCiX=%d,iY=%d,iM=%d,iN=%d”,iX,iY,iM,iN);

iM=iX--;iN=--iY;

printf(*iX=%d,iY=%d,iM=%d,iN=%d”,iX,iY,iM,iN);

)

(4)下面程序的运行结果是。

voidmain()

(

intiX,iY;

iX=80;iY=25;

printf("iX=%d,iY=$d\n”,iX,iY);

prinlf("iX/iY=%d,iX%iY=%d\n",iX/iY,iX%iY);

三、编程题

1、编程计算C语言表达式20a2-5用的值,a=5,b=20

2、编程实现。从键盘输入一个四位整数,计算其个位、十位、百位、千位的和。

3、交换两个字符变量的值。

第2章思考与练习参考答案

一、选择题

1、D2、D3、A4、C5、B6、B

二、填空题

1、aabbabc

AN

2、iAl=a,iA2=b,iA3=©

3、iX=ll,iY=21,iM=10,iN=21,iX=10,iY=20,iM=U,iN=20

4、iX=80,iY=25

iX/iY=3,iX%iY=5

三、编程题

1、编程计算C语言表达式20a2-5b3的值,a=5,b=2。

#include"sldio.h"

voidmain()

(

inta,b;

a=5;

b=2;

prinlf("%d\n”,20*a*a-5*b*b*b);

)

2、编程实现。从键盘输入一个四位整数,计算其个位、十位、百位、千位的和。

#include"sldio.h"

voidmain()

intiNum;

intil,i2,i3,i4,iSum;

printf(^pleaseinputainteger(1000-9999):");

scanfftiNum);

il=iNum%10;/*求个位数*/

i2=iNum/10%10;/*求十位数*/

i3=iNum/100/10;/*求百位数*/

i4=iNum/1000;/*求千位数*/

iSum=il+i2+i3+i4;

printf(*thesumisiSum);

}

3、交换两个字符变量的值。

voidmainO

(

charchl='A',ch2='B',chTemp;

printf(*chl=%c,ch2=%c\n*,chi,ch2);

chTemp=chl;

chl=ch2;

ch2=chTemp;;

printf(*chl=%c,ch2=%c\n*,chi,ch2);

getch();

第3章顺序结构程序设计及其应用

思考与练习

一、选择题

1、设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:

scanf("i=%d,;为了把100和765.12分别赋给i和f,则正确的输入为

A.10()〈空格>765.12〈回车〉B.i=100,f=765.12<回车〉

C.10()〈回车>765.12〈回车〉I).x=10()<p]车>,y=765.12《同车〉

2、以下程序的输出结果是。

main()

{inta=I2,b=12;

printf(飞d$d\n”,―a,++b);}

A.1010B.1212C.1110D.1113

3、以下程序输出结果是。

main()

{intm=5;

if(m++>5)printf(*%d\n*>m);

elseprintfC%d\n*»m­);}

A.7B.6C.5I).4

4、当a=l,b=3,c=5,d=4时,执行下面一段程序后,x的值为。

if(a<b)

if(c<d)x=l;

elseif(a<c)

if(b<d)x=2;

elsex=3;

elsex=6;

elsex=7;

A.1B.2C.3D.6

5、设有语句inta=3;则执行了语句a+=a-=a*a;后,变量a的值是

A.3B.0C.9D.-12

6、以下程序的输出结果是。

#include<sldio.h>

mainO

{inta=2,c=5;

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

A.a=%2,b=%5B.a=2,b=5C.a=%%d,b=%%dD.a=%d,b=%d

7、若x和y都是int型变量,x=100,y=200,且有下面的程序片段:printf(x,y));

上面程序片段的输出结果是。

A.200B.100C.100200D.输出格式符不够,输出不确定的值

8、已知字母A的ASCII码为十进制的65,下面程序的输已是。

mainO

{charchi,ch2;

chl='A'+'5'-'3';

ch2=,A,+,6,,3';

printf(*%d,%c\n*»chi,ch2);)

A.67,DB.B,CC.C,DD,不确定的值

9.以下程序的愉出结果是

Voidmain()

{Charc-z

Printf("%c",c.25);}

A.aB.zC.z-25D.y

第3章思考与练习参考答案

一、选择题

1.B.2.D3.c4.B5.D6.A7.D8.A9.A

第4章选择结构程序设计及其应用

思考与练习

一、选择题

1>关于if语句后面一对括号中的表达式,叙述正确的是0

A.只能用关系表达式B.只能用逻辑表达式

C.只能用关系表达式或逻辑表达式D.可以使月任意合法的表达式

2、对switch后括号内的表达式,叙述正确的是。

A.只能是数字B.可以是浮点数

C.只能是整型数据或字符型数据D.以上叙述都不对

3、iX=2,iY=3,ch=a,表达式iZ=(iX||iY)&&(ch>'A')的值是。

A.trueB.falseC.0D.1

4、表达式(6!=8)的值是0

A.trueB.1C.0D.非0值

5、intk=x>y?(x>z?x:z):(y>z?y:z)语句的目的是:。

A.求x,y,z最大值B.求x,y,z最小值

C.求x,y,z中间值D.求x,y,z平均值

6、有如下程序段

inta=14,b=15,x;

charc='A';

x=(a&&b)&&(c<,B*);

执行该程序段后,x的值为。

A.turpR.falSPC.0D.I

7、以下程序的输出结果是o

mainO

inta=0,i=l;

switch(i)

{

case0:

case3:a+=2;

case1:

case2:a+=3;

default:a+=5;

)

printfa);

)

A.3B.8C.10D.2

二、写出下列程序的运行结果

1、卜面程序的输出结果是一

#include"stdio.h"

mainO

{inti,j;

i=j=2;

if(i==1)

if(i==2)

printf(飞d”,i=i+j);

else

printfi=i-j);

printf(飞d”,i);

2、下面程序的输出结果是

#include"stdio.h"

main()

{intiX=3;

switch(iX)

{case1:

case2:printf("iX<3\n");

case3:print.f("iX=3'n");

case4:

case5:printf("iX>3\n");

default:printf("iXunkn()w\n");

}

)

3、下面程序的输出结果是。

#include"stdio.h"

mainO

{charchT=*w',ch.A='m',chB=,d*,chC=,x*,chM;

chM=(chT>chA)?chT:chA;

chM=(chM>chB)?chM:chE

chM=(chM>chC)?chM:chC;

printf("c%",chM);

)

三、编程

1、小明去参加一个同学的生日聚会,同学的家长规定18岁以上的才可以饮酒,所

以需要编一程序根据输入的年龄打印一张饮酒卷,使的能饮酒的同学可以获取饮酒卷。

2、根据指定月份,打印该月份所属的季节。3,4,5春季;6,7,8夏季;9,10,11

秋季;12,1,2冬季。

3、根据用户输入显示对应的星期时间(char口),如果''星期一",显示“干煽豆

角”如果“星期二”,显示“醋溜土豆”如果“星期三”,显示“红烧狮子头”如果“星

期四”,显示“油炸花生米”如果“星期五”,显示“蒜蓉扇贝”如果“星期六”,显

示“东北乱炖”如果“星期日”,显示“大盘鸡”。

第4章思考与练习参考答案

一、1、D2、C3、C4、B5、A6、D7、B

1、2

2、Tx=3

Ix>3

lxunknow

3、x

三、

1、#include"stdio.h"void

main(/*main函数*/

{inti1;/*定义整型变量率/

printf("请输入你的年龄:);

scanf&i1);

if(il>=18)/*判断函数x/

printf("恭喜你获得饮酒券!”);

2、

#include<stdio.h>

intmain()

intmonth;

scanf("%d”,&month);

if(month<-5&&month>-3)printf("春\n");

elseif(month<=8&&month>=6)prinlf("夏\n");

elseif(month<=11&&month>=9)printf("秋\n");

elseprintf("冬\n");

return0;

}

方法二:

#inc】ude<stdio.h>

IntmainO{

lntmonth=0;

printf(”请输入月份:\n”);

scanf_s&month);

switch(month){

easel:

case2:

case3:printf(“春”);1reak;

case4:

case5:

case6:printf(“夏”);break;

case?:

case8:

case9:printf("秋”);break;

caselO:

easel1:

casel2:prinlf(“冬”);break;

default:{

printf(“输入错误”);

returnO;

}

3、

#include<stdio.h>

voidmainO{

stringweek;

printf(“请输入星期几:“);

scanf&week);

switch(week)

case"星期一":

prinll'("干煽豆角”);

break;

case"星期二":

printf(""醋溜土豆”);

break;

case“星期三":

prinlf("红烧狮子头”);

break:

case"星期四”:

prinlfC油炸花生米");

break;

case"星期五":

printf("蒜蓉扇贝”);

break:

case"星期六”:

printf("东北乱炖"):

break:

case“星期日":

printf("大盘鸡");

break;

default:

printf("您输入错误")

}

第5章循环结构程序设计及其应用

思考与练习

一、选择题

1、下面程序段的运行结果是一

intiNum=O;

while(iNum<=2)

printfC%d*,iNum);

A.2B.3C.死循环,无限个0D.有语法错

2、下面程序的运行结果是.

#include"stdio.h"

voidmainO

|

intiNum=0;

while(iNum<=2)

{

iNum++;

,,,

printfC%d\n,iNum);

)

}

A.1B.1C.1D.1

222

33

4

3、以下程序段—

iNum=-1;

do{

iNum=iNum*iNum;

)

while(!iNum);

A.是死循环B.循环执行2次

C.循环执行一次D.有语法错误

4、若i为整型变量,则以下循环执行次数是________.

for(i=2;i==0;)printfC%d",i);

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

5、以下正确的描述是_______o

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

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

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

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

二、填空题

1、下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。填空使程

序完整。

intiNum=0,chLetter;

chLetter=getchar();

whi1e()

{if()

iNum++;

chLetter=getchar();

)

2、下面程序段的运行结果是

i=l;iSum=3;

do{iSum+=i++;

if(iSum%7==0)

continue;

else

++i;

}while(iSum<15);

printf(w%dw,i);

三、编程题

1、计算1—100的所有偶数之和和所有奇数之和。

2、计算n!0

3、编写程序打印出数字1—10,但其中不包括4和7,在4或7时跳过不输出(用break

还是continue?分别尝试一下,写出两者的区别)。

4、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,乂多吃了一个第

二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩卜.的一

半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

5、百钱百鸡问题。公鸡:5元:母鸡:3元;小鸡:3只1元,100元钱刚好买100只鸡,

假设每种鸡都必须买,求公鸡、母鸡、小鸡各有几只?输出所有的购买方案。

6、将1980至2008年间的所有闰年打印输出。

第5章思考与练习参考答案

一、选择题

1、D2、C3、C4、C5、B

二、填空题

1、chLetter!='\0'chLetter>=/l/&&chLetter<='9'

2,8

三、编程题

1、计算1—100的所有偶数之和和所有奇数之和。

#include”stdi。.h”

voidmainO

(

intk,iSuml,iSum2;

k=l;iSuml=0:iSum2=C

while(k<=100)

{if(k%2==0)

iSuml=iSuml+k;

else

iSum2=iSum2+k;

k++;

)

printfC\n偶数和是:祝,奇数和是:%d\iSuml,iSum2):

)

2、计算n!。

^include"stdio.h"

voidmain()

(

intk,iSum,n;

k=l:iSum=l:

scanf("%d",&n);

whilc(k<=n)

(

iSum=iSum*k:

k++;

)

printf("\nthesumis%d",iSum):

}3、编写程序打印出数字1—10,但其中不包括4和7,在4或7时跳过不输出(用break

还是continue?分别尝试一下,写出两者的区别)。

^include"stdio.h"

intisDaff(intiNum);

voidmain()

(

inti;

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

(

lf(i!=4||i!=7)

printf("%d",i);

)

}

4、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第

二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一

半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

tiincludc“stdio.h"

voidmain()

(

intk.iSum;

k=l:iSum=1;

while(k<10)

{iSum=(iSum+l)*2:

k++;

)

print.iSum);

}

5、百钱百鸡问题。公鸡:5元;母鸡:3元;小鸡:3只】元,100元钱刚好买100只鸡,

假设每种鸡都必须买,求公鸡、母鸡、小鸡各有几只?输出所行的购买方案。

^include"stdio.h"

voidmain()

{

inti,j;

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

for(J=l;J<33;J++)

{if((i*5+j*3+(1CO-i-j)/3)==100)

Printf("公鸡:%d母鸡:%d小鸡:%(1M,i,j,100-i-j)

)

)

6、将1980至2008年间的所有闰年打印输出。

include"stdio.h"

intisDaff(intiNum);

voidmain()

(

inti;

for(i=1980;i<=2008;i++)

(

|f((i%4==0&&i%100!=0)11(i%400==0))

printf("%d",i);

)

)

第6章数组

思考与练习

1.读10个整数存入数组,找出其中最大值和最小值。

2.将一个数组逆序输出。

3.设计一个程序,输出下列矩阵

123

456

789

4.求一个三行三列矩阵对角线和。

5.求100到999之间的所有水仙花数。(水仙花数:一个n位数,它的每个位上

的n次第的和,等于这个数本身,如:153、370)。

6.用筛选法求100以内的素数(素数是除了1和自己以外,不能被其他整数整除的

整数。)。

7.一个打印杨辉三角的案例来加深对数组的理解。杨辉三角的前10行样式如下所

小Q

1

11

121

1331

14641

15101051

1615201561

172135352171

18285670562881

193684126126843691

第6章思考与练习参考答案

1.Include<stdio.h>

#defineSIZE10

voidmain()

{intx[SIZE),i,max,min;

printf("Enter10integers:\n");

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

{printf("%d:",i+l);

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

)

max=min=x[0];

for(i=l;i<SIZE;i++)

{if(max<x[i])max=x[i];

if(min>x[i))min=x[i];

}

printf("Maximumvalueis%d\n",max);

printf("Minimumvalueis%d\n",min);

}

>/*将一个数组逆序输出C*/

#include"stdio.h"

include"conio.h"

#defineN5

main()

(

inta[N]={9,6,5,4,

printf("\noriginalarray:\n");

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

printf("%4d",a);

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

(

temp=a;

a=a[N-i-l];

a(N-i-l]=temp;

)

printf("\nsortedarray:\n");

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

printf("%4d",a);

getch();

)

3.[include<stdio.h>

main()

{staticinta[3H3]={{l,2,3},{4,5,6},{7,8,9}};

intij;

printf("outputa:\n");

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

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

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

printf("\n");

}

)

4.main()

{

floata[3][3],sum=0;

intij;

printf("pleaseinputrectangleelement:\n");

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

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

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

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

sum=sum+a[i][i];

printf("duijiaoxianheis%6.2f",sum);

)

5.#include<stdio.h>

#include<math.h>

intmain(void)

(

inti,g,s,b;

intsum=0;

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

(

g=i%10;//个位

s=i/10%10;//十位

b=i/100;//百位

//sum=g*g*g+s*s*s+b*b*b;

sum=pow(g,3)+pow(5,3)+pow(b3);//pow(a,b)a为底数,b为指数

if(sum==i)

(

printf("水仙花数:%d\n",i);

)

}

return0;

)

6.#include<stdio.h>

#defineSIZE100

main()

{inta(SIZE+l],i,j;

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

a[i]=i;

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

for(j=i+l;j<=100;j++)

if(a[i]]=0&&a[j]%a[i]==0)

a[j]=O;printf("\n");j=0;

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

{if(a[i]!=O)

{printf("%4d"/a(i]);j++;)

if(j==10)

{j=0;printf("\n");)

)

)

7.#include<stdio.h>

#include<stdlib.h>

voidmain()

{

inti,j,n=0;

intarr[10][10]={1};〃定义一个10行10列的二维数组,初始化为1

while(n<111n>10)〃比while循环控制用户只能输入n=10

(

printf("请输入n的值:\n");

scanf("%d",&n);

)

for(i=1;i<n;i++)〃外层循环控制杨辉三角的行数

(

arrfiHO]=1;〃每一行第1个元素都赋值为1,即第1列都为1

for(j=1;j<=i;j++)〃内层控制杨辉三角的列数

〃每个元素等于其上一行左边和上边两个元素之和

arr[i][j]=arr[i-l][j-1]+arr[i•l][j];

)

for(i=0;i<n;i++)〃双重for循环打印这个二维数组中的元素

(

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

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

printf("\n");

system("pause");

)

第7章函数

思考与练习

一、选择题

1、在C语言的函数中,下列说法正确是_________°

A.必须有形参B.形参必须是变量名

C.可以有也可以没形参D.数组名不能作形参

2、数组名作为实参传递给函数时,传递的是o

A.该数组长度B.该数组的元素个数

C.该数组首地址D.该数组中各个元素的值

3、以下函数定义正确的是_______°

A.intfnSum(intiNuml,intiNum2)B.intfnsum(intiNuml,iNum2)

C.intfnsum(iNuml,iNuir2)D.intfnsum(intiNuml;mtiNum2)

4、简单变量做实参时,它和对应形参之间的数据传递方式为o

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

C.由实参传给形参,再由形参传回给实参

D.由用户指定传递方式

5、C语言允许函数值类型默认定义,此时该函数值隐含的类型是。

A.floatB.intC.longD.double

6、以下说法正确的是。

A.定义函数时,形参类型说明可以放在函数体内

B.函数能嵌套定义

C.return后边的值不能为表达式

D.如果函数值的类型与运回值的类型不一致,以函数类型为准。

7、如果未指定局部变量类型,其隐含的存储类别为。

A.自动(auto)B.静态(static)

C.外部(extern)D.寄存器(register)

8、以下叙述中不正确的是。

A.在不同的函数中可以使用相同名字的变量

B.函数中的形式参数是局部变量

C.在一个函数内定义的变量只在本函数范围内有效

D.在一个函数内的复合语句中定义的变量在本函数范围内有效

二、填空题

1、以下函数是求最大值的函数,请补充完整以下程序。

^include"stdio.h"

main()

{intiNuml,iNum2,iYax;

scanf(*%d,%d*,&iNuml,&iNum2);

iMax=;

printf(飞d”,iMax);

}

fnMax(intiNuml,intiNum2)

{if(iNuml>iNum2)

returniNuml:

else

__________;)

2、以下程序的运行结果是_______.o

intiNuml=5;intiNum2=7:

main()

(intiNuml=4,iNum2=5,iSum;

iSum=fnPlus(iNuml,iNuni2);

printf("A+B=%d\rT,iSuir);

}

fnPlus(intiNuml,intiNum2)

(intiSum;

iSum=iNuml+iNum2;

return(iSum);

}

3、以下程序的运行结果o

'include"stdio.h"

intfnFunO

{staticintiNum=l;

iNum=iNum+2;

returniNum;

)

mainO

{printf(“为d'n”,fnPun()+fnFun());

)

三、编程题

1、编写函数求1+1/2+1/3+1/4+……+l/n的值。

2、使用函数,利用遍历数组找出全班同学成绩的最高分。

3、使用递归方法,求Fibonacci数列的第N项。

第7章思考与练习参考答案

一、选择题

1、C2、C3、A4、E5、B6、D7、A8、I)

二、填空题

1intfnMax(intiNuml,intiNum2);

fnMax(i\uml,iNum2)

returniNuml:

2、A+B=4

3、8

三、编程题

1、编写函数求1+1/2+1/3+1/4+……+l/n的值。

#include"stdio.h"

doubledSum(intn);

voidmainO

(

intn;

scant(飞d",&n);

printf(z,theresultis%.2f\n”,dSum(n));

)

doublcdSum(intn)

(

inti;

doubledRcsult=0;

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

dRcsult+=1.C/i;

)

returndResult;

)

2、使用函数,利用遍历数组找出全班同学成绩的最高分。

#include<stdio.h>

#defineSIZE5

floatfMax(floatfScore[],intiSize);

voidmain()

(

floatfScore[SIZE]={C};

inti=0;

floatfResult=0;

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

{

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

)

printf(/zthemaxscoreis%.2f\n”,fMax(fScore,SIZE));

getchO;

)

floatfMax(floatfScoref],intiSize)

inti=0;

intfValue=fScore[0];

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

{

if(fScoreti]>fValue)

(

fValue=fScoreti];

}

)

returnfValue;

}

3、使用递归方法,求Fibonacci数列的第'项。

^include<stdio.h>

intf(inta)〃函数f的定义

I

inti;

if(a==l){

return0;

}

if(a=2){

I'eturn1;

)

elseif(a>=3){

for(i=1;i<a:i++){

return(f(a-l)+f(a-2));//函数f的递归调用

}

)

voidmainO

(

intn;

printf(*inputanumber:\n*);

scanf("*d”,&n);

printf(*%d\n*»f(n));

〃函数f的调用

第8章结构体、共用体和枚举类型

思考与练习

一、选择题

1、设有以下结构体定义:

structstudent{

charchName[8];

intiAge;

charchSex;

}stStaff;

则下面的叙述不正确的是。

A.bliuul是定义结构体类型的关键字B.5liuc.sLudenl是用户定义的结

构体类型

C.stStaff是用户定义的结构体类型名D.chNam?、iAge和chSex都是结

构体成员名

2、在第(1)小题中定义的结构体变量stStaff,则系统分配的内存空间字节数是

A.8B.10C.11D.3

3、设有以下结构体定义:

structstudent{

charchName[8];

intiAge;

charchScx;

}stStaff[3];

对结构体变量成员的正确引用是。

A、scanf(“%d”,&stStaff.iAge)B.scanf(“%s”,stStaff[0].iAge)

C.scanf("%s”,stStaff)D.scanf("M",&iAge)

二、填空题

1、引用结构体变量中成员的一般形式是________

2.若有以下结构体类型说明和数组的初始化:

structstTest{

intiNum;

charchLetter[6];

}stAlpha[2]={2,“abcde”,4,“EDCB”};

则执行语句printf("%s,%c\n",&stAlpha[0].chLetter[2],

stAlpha[l].ch[2]);

后的输出结果是:。

3、以下程序的执行结果是,________.

fnChange(structteststHuman);

structtest{

intiAge;

charchSex;

JstStaff={18,;

fnChange(structteststlluman)

{stHuman.iAge=20;

stHuman.chSex='F';

)

voidmain()

{fnChange(stStaff);

printf(%c\n,stStaff.iAge,stStaff.cnSex);

第8章结构体、共用体和枚举类型

思考与练习答案

一、1、C2、A3、B

1、结构体变量名.成员名

2、cdeX

3、18,M

第9章指针

思考与练习

1.编写一个函数,将一个3*4的二维数组矩阵转置。用指向数组的指针实现。

2.编写一个程序统计候选人得票数。设有4名候选人,以输入候选人人名方式模拟

唱票,最后输出每个候选人的得票数。计算得票数的过程用函数实现。

3.指针作为函数参数,实现两个数值交换。

4.利用指针查找数列中的最大值和最小值在窗体上输入10个整数,自动查找这些

数中的最大值和最小值,并显示在窗体上。

5.用函数指针来实现对函数的调用,返回两个整数中的最大值。

6.编写一个函数,其功能是从一个字符指针数组中寻找指定的一个字符串,若找到

返P11,否则就返P10。

7.编写函数,将一个字符串的指定字符全部删除。要求函数的原型可声明为:

voidfnDelChar(char*str,charch);

其中,参数str为要删除字符的字符串,ch为要删除的字符。

第9章思考与练习参考答案:

1.#include<stdio.h>

voidfunc(int(*pa)(4],int(*pb)(3],intx,inty)

inti,j;

〃输出pa指向的二维数组的元素

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

(

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

(

printf("%d\t",pa[i][j]);

pb[mi]=pa[i皿;〃矩阵转置

)

printf("\n");

)

printf("\n\n");

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

(

for(j=O;j<x;j++)

(

printf("%d\t",pb[i皿);

)

printf("\n");

)

)

intmain()

(

intij;

intarr[3](4],brr[4][3];

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

(

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

(

scanf("%d",&arr[ij[j]);

)

)

return0;

)

2.#include"string.h"

structperson/*定义结构体类型*/

{charchName[15];

intiCount;

};

voidfnCountfstructperson*pStr)/*计算每个人的票数*/

(

inti,j;

charchName[15];

printf("\nInputname\n*);

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

(

scanf("%s",chName);

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

if(strcmp(chName,(pStr+j)->chName)==O)

(pStr+j)->iCount++;

)

)

voidfnData_put(structperson*pStr)/*输出每个候选人及票数*/

(

intj;

printf("\nresult:");

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

printf("\n%s=%d*\(pStr+j)->chName,(pStr+j)->iCount);

)

voidmain()

(

structpersonstLeader[4]={{"Li",0},{"Wang",0},{"Zhang",0},{"Shen",0)};

fnCount(stLeader);

fnData_put(stLeader);

)

3.#include<stdio.h>

voidswap(int*a,int*b)//函数参数为指针类型

(

inttemp;

temp=*a;

*a=*b;

*b=temp;

)

voidmain()

(

inta=10,b=20;

printf("调用函数前变量a和b的值为:%d%d\n",a,b);

swap(&a,&b);

printf("调用函数后变量a和b的值为:%d%d\n",a,b);

)

4.^include<stdio.h>

voidfnMax_min(inta[],intn,int*max,int*min)

int*p;

*max=*min=*a;/*初始化最大值、最小值*/

for(p=a+l;p<a+n;p++)

if(*p>*max)

*max=*p;/*最大值*/

elseif(*p<*min)

*min=*p;/*最小值*/

return;

)

voidmain()

(

inti,a[10],max,min;

printf("请愉入10个整数:");

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

scanf("%d",&a[i]);/*输入数组元素*/

fnMax_min(a,10z&max,&min);/*返回最大值和最小值*7

printf("最大数是%d\n",max);/*输出最大值*/

printf("最小数是%d\n",min);/*输出最小值*/

}

5.intmax(inta,intb);

intmain(){

intx,y,maxVal;

int(*pmax)(int,int)=max;

printf("lnputtwonumbers:");

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

maxVal=(*pmax)(x,y);

printf("Maxvalue:%d\n",maxVal);

getchar();

getchar();

return0;

}

intmax(inta,intb){

returna>b?a:b;

)

6.#include<stdio.h>

#include<string.h>

intfnFindStr(char*source,char*object)

(

char*p=source;

chart[80];

intmaxlen=strlen(object);

while(*p)

if(strncmp(object,p,maxlen)==0)return1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论