C C++程序设计课后答案

更新时间:2024-06-06 18:46:01 阅读量: 综合文库 文档下载

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

第一章 一、 选择题

1.C/C++规定,在一个源程序中,main()函数的位置( )。C A.必须在最开始 B.必须在最后

C.可以任意 D.必须在系统调用的库函数的后面 2.以下()是C/C++合法的标识符。A A.char2 B.@x C.int D.7Bw

3.下面的程序,对于输入:2 9 15,输出的结果是( )。B #include\void main() {int a; float b;

cout<<\cin>>a>>b;

cout<<\}

A.2 B.11 C. 26 D.24

4. 在Visual C++中,打开一个项目只需要打开对应的项目工作区文件即可,项目工作区文件的扩展名为( )。C A.obj B.dsp C.dsw D.cpp

5.下面关于C语言与C++关系的说法中,( )是正确的。D A.C语言是C++的子集 B.C++对C语言进行了改进

C.C++和C语言都是面向对象的 D.C++继承了C语言的众多优点

6.设置一个断点的方法是将光标移到需要设置断点的行上,然后按( )键。A A.F9 B.F10 C.F11 D.F12

7.下面关于编译预处理命令的说法中,正确的是( )。C A.一条文件包含命令能包含多个文件 B.文件包含命令不可以嵌套使用

C.编译预处理命令是在编译之前被处理的命令 D.编译预处理命令中的“#”可以省略 8.使用( )可以设置数据输出的宽度。B

A.setbase(int n) B.setw(int n) C.setfill(int n) D.setprecision(int n) 二、 填空题

1.C/C++程序是由一个或多个函数组成的,但必须要有一个( )函数,程序从这个函数开始运行的。 main()

2.C/C++字符集包括大、小写英文字母、( )、( )和包括运算符在内的特殊字符,程序中出现字符集以外的字符就是一个语法错误。 数字0-9、下划线

3.在Visual C++中编写程序时,除了注释中可以出现汉字,还能在( )中使用汉字。字符串

4.文件包含命令是以( )开始的预处理命令,而宏定义命令是以 ( )开始的预处理命令。#include #define

5.在cout命令中,使用 ( )格式控制符可以把一个数据以十六进制的形式输出。hex 6.在C/C++中,头文件的扩展名一般为( )。.h 7.程序的错误一般分两种:( )和( )。前者是编译器可以发现的,而后者编译器则无法发现。语法错误和逻辑错误

8.在Visual C++中调试程序时,可以使用快捷菜单中的 ( )命令来插入断点和清除断点。Insert/Remove Breakpoint 9.C++源程序的扩展名为( )。.cpp 10.在Visual C++中,浏览当前项目中的所有源程序文件应在工作区的( )选项卡。Fileview 三、 简答题

1. C++与C语言的主要区别是什么?C++是C语言的超集。C++中的类和对象部分,C语言没有,C++是面向对象的程序设计。见教材P3。

2. C/C++程序由哪些部分组成?C/C++程序是由一个或多个函数组成,其中必须要有一个main()函数。在一个函数内,语句的执行是从上到下的。 3. 判断下列符号中哪些不能作为C/C++的标识符: a? , 3a, a-b, f(x), A D, a.txt, D $, ∏, double 能作为C/C++的标识符:abc,b,s_2,Int

4. C/C++语言的书写格式有哪些特点?C/C++程序书写形式自由。一行可以写多条语句,一条语句也可以分别写在不同行上。区别大小写字母。

5. 何时在#include中使用尖括号,何时使用双引号?用尖括号时,预处理程序在系统指定的文件夹中寻找文件;用双引号时,预处理程序首先在当前文件所在的文件目录中寻找文件,若找不到再到系统指定的文件夹中查找。 6. 如果程序顺利地通过编译、连接,但是程序运行时结果有错误,最好的调试手段是什么?最好的调试手段是设置断点,并让程序运行到该断点,然后在Debug窗口观察各变量的值,从中发现错误。

第二章 一、 选择题

1.下列选项中可以作为C/C++的合法整型常量的是( )。B A.1011B B.047 C.x23 D.20H 2.下列不合法的常量是( )。C

A.2.7 B.1.0E+3 C.3.5E-3.0 D.3.4e-5 3.下列常量中不是字符型常量的是( )。D A. '\\x44' B.'\\t' C.'\\\\' D.\ 4.下列选项中合法的变量名为( )。C A.#define B.float C.a12_3 D.sqrt(x) 5.下列不正确的变量定义方法是( )。D

A.int a,&b=a; B.float a,*b=&a; C.int a(4),b(0); D.int a=b=5; 6.下列运算符优先级按由高到低的顺序排列正确的是( )。C

A.*=、&&、!=、% B.*=、%、&&、!= C. %、!= 、&&、*= D.&&、!=、%、= 7.已知x、y为整型,z为实型,ch为字符型,下列表达式中合法的是( )。C A.z=(y+x)++ B.x+y=z C.y=ch+x D.y=z%x

8.若有定义\,则经过表达式\运算后,x的值为( )。C A.0 B.2.3 C.2 D.1

9.若有定义\,则表达式\的值为( )。B

10.设整型变量m、n、a、b、c、d均为数值1,表达式(m=a>b)&&(n=c>d)运算后,m、n的值分别是( )。B

A.0,0 B.0,1 C.1,0 D.1,1

二、把下列数学表达式写成C/C++表达式。 1.x+y≠a+b : (x+y)!=(a+b).

2.(ln10+xy)3 :pow(log(10)+x*y),3) 3.

sin(??):sin(w*u)/(cos(45*180/3.14)+3*pow(x,y)) ycos45??3x4.e3?(:exp(3)+sqrt(2*x+3*y) 2x?3y)5.x-y?6.

x?y:fabs(x-y)+(x+y)/(3*x) 3x1:1/(1/r1+1/r2+1/r3)

111??r1r2r3

三、根据下列条件写一个C/C++表达式。 1.a和b中有一个大于d:a>d||b>d

2.将x、y中较大的值送给z:z=x>y?x : y

3.将直角坐标系中点(x,y)表示在第3象限内:x<0&&y<0 4.3个数据x、y、z能组成三角形:x+y>z||y+z>z||x+z>y

5.将含有3位小数的实型变量x的值,四舍五入到百分位:(int)(x*100+0.5)/100. 6.d是不大于100的偶数:d>0&&d<=100&&d%2==0 7.x、y中至少有一个是5的倍数:x%5==0||y%5==0

8.对n(>0)个人进行分班,每班k(>0)个人,最后不足k人也编一个班,问要编几个班:n%k==0?n/k : n/k+1 四、编程题:

1 编程序求半径为r、高为h的圆柱体的体积。 #include \void main() {float r,h,v; cin>>r>>h;

v=3.1416*r*r*h; cout<

2.任意输入3个数据,输出它们的平均值和最小的一个数。 #include \

void main() {

float a,b,c,ave,min; cin>>a>>b>>c; ave=(a+b+c)/3; min=(a

min=(c

cout<<\}

3.将字符串“12”转换为整数12并输出。 #include \void main() {

char c1='1',c2='2'; int x;

x=10*(c1-'0')+c2-'0'; cout<

4.编写程序,输入一个三位整数,反向输出该三位整数。 #include \void main() {int x;

int c1,c2,c3; cin>>x; c1=x/100; c2=x/10; c3=x;

x=100*c3+10*c2+c1; cout<

5.输入一个年份,判断是否为闰年。 解1:

#include \void main() {int year,x; cin>>year;

x=year@0==0||year%4==0&&year0!=0;

x!=0?cout<

解2:

#include \void main() {int year;

char x; cin>>year;

x=(year@0==0||year%4==0&&year0!=0)?'y': 'n'; cout<

6.编写程序,求函数y?lg(x?3)?2?2*cos40?的值,要求输入x,程序就输入y的值

#include \#include \void main() {double x,y; cin>>x;

y=log(x*x+3)/log(10)+3.14/2*cos(40*3.14/180); cout<

第三章 一、选择题

1.为了避免嵌套的if else 语句的二义性,C/C++语言规定else总是与( )组成配对关系。C

A. 缩排位置相同的if B.在其之前未配对的if C. 在其之前未配对的最近的if D.同一行上的if

??1,x?0?2.设有函数关系为y??0,x?0,下面( )选项不能正确表示上述关系。D

?1,x?0?A. if(x<=0) B. y=1;

if(x<0)y=-1; if(x<=0)

else y=0; if(x<0)y=-1; else y=1; else y=0; C.y=-1; D. y=-1; if(x>=0) if(x!=0)

if(x==0)y=0; if(x>0)y=1; else y=1; else y=0; 3.若有变量定义“int a=7;”,则下列语句组对应的输出结果是( )。D(该答案后还应附“其他值”) switch(a%5)

{case 0:cout<

default: cout<<”其他值”; }

A.其他值 B.5 C. 7 D.7 5其他值

4.鸡兔共笼有30个头,90只脚,求鸡兔各有多少? #include \void main() {int m,n;

for(m=0;m<=30;m++) for(n=0;n<=30;n++)

if(m*2+n*4==90&&m+n==30)

cout<<\鸡:\兔:\}

5.利用格里高利公式求?的近似值,公式为:?/4≈1-1/3+1/5-1/7+....,要求直到最后一

-4

项小于10为止。 #include \void main() {double pi=1.0; int n,t=1;

for(n=1;1.0/(2*n+1)>1e-6;n++) { t=(-1)*t;

pi=pi+t/(2.0*n+1.0); }

pi=4*pi;

cout<<\}

法二:

#include \void main() {float pi=0.0; int n,t=-1;

for(n=1;1.0/n>1e-6;n=n+2) { t=(-1)*t;

pi=pi+1.0*t/n; }

pi=4*pi;

cout<<\}

6.编一程序,求出方程x2+2x=y3(其中1≤x≤100,1≤y≤100)的所有整数解。 #include \void main() {int x,y;

for(x=1;x<=100;x++) for(y=1;y<=100;y++)

if(x*x+2*x==y*y*y)

cout<<\}

7.输入一个英文句子(以句号结束),要求将句中单词分行打印,试编写符合上述要求的程序。

#include \#include \void main() {char ch;

while((ch=getchar())!='.') if(ch==' ') cout<

cout<

8.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,求1000以内满足该条件的数。 #include \#include \void main() {int m,k1,k2;

for(m=0;m<=1000;m++) {k1=sqrt(m+100);

k2=sqrt(m+100+168);

if(k1*k1==m+100&&k2*k2==m+100+168) cout<

9.用二分法求x9-4x5-5x3-270000=0在(0,10)之间的根,要求精度达到0.00001

二分法的步骤为等分区间[x1,x2]成[x1,x]和[x,x2],其中,若f(x)与f(x1)同号,则取[x,x2]作为新的区间,否则取[x1,x]作为新的区间,

依次类推,当新区间的长度或f(x)的绝对值小于eps时,x 就作为所求的实根。 #include \#include \void main()

{float x1=0,x2=10,x,y1,y2,y,eps=1e-6; do{x=(x1+x2)/2;

y1=pow(x1,9)-4*pow(x1,5)-5*pow(x1,3)-270000; y=pow(x,9)-4*pow(x,5)-5*pow(x,3)-270000; if(y1*y>0)

x1=x; else x2=x; }while(fabs(x2-x1)>eps); cout<

第四章 一、选择题

1.下列数组定义语句中,正确的是( )。C

A.int a[3,4]; B.int n=3,m=4,int a[n][m]; C.int a[3][4]; D.int a(3)(4); 2.以下不能对二维数组a初始化的语句是( )。A A. int a[2][]={{1},{2}}; B.int a[2][3]={1,2,3,4,5,6}; C. int a[2][3]={1}; D.int a[2][3]={ {1},{2}};

3.要使字符数组str中存放串”Lucky”并能正确处理,下列正确的定义语句是( )。C A.char str[]={?L?,?u?,?c?,?k?,?y?} ; B. char str[5]={?L?,?u?,?c?,?k?,?y?} ; C. char str[]=”Lucky”; D. char str [5]= ”Lucky” ;

4.已知有语句“int a[3][4]={{1,2,5,3},{2,4,7,9},{3,6,5,8}},*p=&a[0][0];”,则表达式(*p+2)+*(p+2)的值应为( )。D

A.10 B.5 C. 6 D.8 5.已知有语句“int a[5]={1,3,5,7,9},*p=&a[3];”,则表达式p[-1]的值为( )。C A.表达形式不合法 B.值不确定 C.5 D.6

6.要比较两个字符数组a、b中字符串是否相等,下面正确的是( )。B A.a==b B.strcmp(a,b)==0 C. strcpy(a,b) D. strcmp(a,b)=0 7.下面正确的描述是( )。A A.gets函数可以输入包括空格的字符串

B.cin可以输入包含空格的字符串

C.使用gets函数不需要声明头文件:#include “stdio.h” D.使用gets函数必须需要声明头文件:#include “iostream.h”

8.已知如下变量的定义“char s[10],*p;”下列正确的语句是( )。B

A.s=”asdfghj”; B.p=”asdfgh”; C.cin<

void main() {

char s[ ]=”1234567890”,*p; int i;

for(p=s+5;*p!=?\\0?;p++)cout<<*p; p=s+4;i=0;

while(i++<5)cout<

结果是:678904321

2.若分别输入4和8,则以下程序的输出结果各是什么? #include”iostream.h”

void main() {

char b[17]=”0123456789ABCDEF”; int i=0,h,n,c[10];long int m;

cin>>m>>h; do {

c[i++]=m%h;

}while((m=m/h)!=0); for(--i;i>=0;--i) {

n=c[i];cout<

结果是:4 3. #include”iostream.h”

void main() {

int a[ ]={-2,3,0,-5,-4,6,9},*p=a,m,n; m=n=*p;

for(p=a;p

{if(*p>m)m=*p; if(*p

cout <<”m-n=”<

三、程序填空题。

1.利用一维数组显示Fibonacci数列的前20项,每行显示5个数,每个数宽度5位。即:0,1,1,2,3,5,8,13,…,如图所示。

#include”iostream.h” #include\

void main() { int i;

int x[20]= ; for(i=2;i<20;i++) ; for(i=0;i<20;i++) {

if(i%5==0)cout<

cout<

}

填空为:(1){0,1} (2)x[i]=x[i-1]+x[i-2] (3)setw(5)<

#include\#include\void main() {

int a[6],i,j;

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

a[i]= ;

for(j=0; ;j++) cout<<'*'; cout<< <

填空为:(1)rand()1 (2)j

3.下列程序将数组a中的每4个相邻元素的平均值存放于数组b中。 #include\void main() {

int a[10],m,n; float b[7]; for(m=0;m<10;m++)cin>>a[m]; for(m=0;m<7;m++) {

;

}

cout<<\cout<<\}

法三:

#define SIZE1 3 #define SIZE2 4

#include \#include \#include\

float max_value(float x[][4],int *ii,int *jj) {

float max=x[0][0];

for(int i=0;imax)

{max=x[i][j]; *ii=i; *jj=j; } return(max); }

void main() {

int i,j,t1,t2;float a[SIZE1][SIZE2]; srand(time(NULL));

cout<<\for(i=0;icout<<\cout<<\}

4. 编写函数,将两个字符串s和t的前n个字符拼接成新的字符串,结果存放在s中。如果s或t中字符串的长度不足n,按实际长度处理。例如,如果有\和\为3,则新的字符串为”ABCabc”,并加以调用。函数形式为: void mystrcat(char s[],char t[],int n); #include #include

void mystrcat(char s[],char t[],int n) {

int l1=strlen(s),l2=strlen(t); int k1=l1>n?n:l1,k2=l2>n?n:l2; for(int i=0;i

void main() { char s[30],t[30]; int n; cin>>s>>t; cin>>n; mystrcat(s,t,n); cout<

5. 编写函数,其功能是逐字符比较两个字符串s1和s2,并将s1中第一个与s2不相同字符的地址返回给主函数。再编写主函数调用该函数,并在主函数中输出s1从这个位置开始的子串。函数形式为:

char *dif(char s1[],char s2[]); #include #include \

char *dif(char s1[],char s2[]) { int i=0; while(s1[i]==s2[i]&&s1[i]!='\\0') i++; if(s1[i]!='\\0') return(&s1[i]); else return NULL; }

void main() { char s[30],t[30]; cin>>s>>t; char *p; if((p=dif(s,t))!=NULL) cout<

6. 用递归方法求正整数m,n的最大公约数。 #include int gcd(int m,int n) {

int r=m%n; if(r!=0) return gcd(n,r); else return(n); }

void main() { int m,n; cin>>m>>n; cout<

7. 编写四个同名函数max,分别求两个整数、三个整数,两个双精度数、三个双精度数的最大值。

#include int max(int a,int b) { return(a>b?a:b); }

int max(int a,int b,int c) { int t=max(a,b); return(max(t,c)); }

double max(double a,double b) { return(a>b?a:b); }

double max(double a,double b,double c) { double t=max(a,b); return(max(t,c)); }

void main() {double x,y,z; int a,b,c;

cin>>a>>b>>c; cin>>x>>y>>z;

cout<

第六章 一、选择题

1.有如下结构类型的定义,则系统为指向结构变量的指针p分配( )个存储单元。A(答

案有问题,指针变量的存储单元应同字长有关,在VC++中为4) struct student {

int num;

char name[8]; float score; }stud,*p;

A. 2 B.12 C.16 D.20

2.下面定义中,对成员变量x的引用正确的是( )。D struct a {

int x,y; };

struct aa {

char c; struct a p ; }b;

A.p.x B.b.a.x C.b.x D.b.p.x 3.若有如下说明: struct s {

int a ; int b;

}x[2]={{1,2},{3,4}},*p=x;

则表达式++p->a的值是( ),表达式(++p)->a的值是( )。B ,C A.1 B.2 C.3 D.4

4.下列程序的输出结果是( )。D void main() {

struct com {int x ; int y ;

}c[2]={1,3,5,7} ;

Cout<

A.0 B.1 C.3 D.15

5.若有如下说明,则对初值中字符b的引用方式为( )。 static struct {

char ch; int i; float x;

}a[2][3]={{?a?,1,1.23},{?b?,2,2.34 }};(原题此处有问题)

A. a[0][1].ch B. a[1][2].ch C. a[1][1].ch D. a[2][2].ch (没有标准答案:a[1][0].ch) 6.当说明一个结构体变量时,系统分配给它的内存是( )。A A.各成员所需要内存量的总和 B.结构中第一个成员所需内存量 C.结构中最后一个成员所需内存量 D.成员中内存量最大者所需内存

7.若要使p指向一个存储double类型变量的存储单元,下划线处应选择( )。C double *p;

p= malloc ( sizeof(double)) A.int B.double C.(double *) D.double *

8.若有如下定义,则要把a的值赋给b,应选择( )。B struct {

int i; char c[5]; }a={12,”345”},b;

A.b.i=a.i ;b.c=a.c B.b=a C.strcpy(a,b) ; D.b={a.i,a.c} ;

9.若已建立一个链表结构,假设指针域为next,则欲把s所指结点插到表中p所指结点的后面,应选择( )。A

A. s->next=p->next ;p->next=s ; B. p->next=s;s->next=p->next; C. p->next=s;s=s->next; D. p->next=s;p=s;s->next=p->next;

10. 在一个单链表中,假设指针域为next,若删除p所指的后续结点,则执行( )。A A. p->next=p->next->next; B.p= p->next; p->next=p->next->next; C. p->next=p ->next; D. p=p->next ->next; 二、程序填空题

1.下面程序用一个结构类型表示学生的学号和成绩,通过选择法对班中30名学生按成绩从高到低进行排序,并输出排序后的学号、成绩和全班的平均分。 #include \#include \#define STNUM 5 struct student { int num; int score; }stu[STNUM]; void main() {

struct student *ptemp,*p[STNUM];/* p为指向结构的指针数组*/ int i,j,k,sum=0; for(i=0;i>stu[i].num>>stu[i].score; p[i]=&stu[i]; sum+= ;

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

Top