资源描述
第一章
一、 选择题
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"iostream.h"
void main()
{int a;
float b;
cout<<"input a,b:"<<endl;
cin>>a>>b;
cout<<"a+b="<<a+b<<endl;
}
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."m"
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.若有定义"int x;",则经过表达式"x=(float)7/3"运算后,x的值为( )。C
A.0 B.2.3 C.2 D.1
9.若有定义"int x=13,y=5;",则表达式"x++,y+=2,x/y"的值为( )。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(w*u)/(cos(45*180/3.14)+3*pow(x,y))
4.:exp(3)+sqrt(2*x+3*y)
5.:fabs(x-y)+(x+y)/(3*x)
6.:1/(1/r1+1/r2+1/r3)
三、根据下列条件写一个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 "iostream.h"
void main()
{float r,h,v;
cin>>r>>h;
v=3.1416*r*r*h;
cout<<v;
}
2.任意输入3个数据,输出它们的平均值和最小的一个数。
#include "iostream.h"
void main()
{
float a,b,c,ave,min;
cin>>a>>b>>c;
ave=(a+b+c)/3;
min=(a<b)?a:b;
min=(c<min)?c:min;
cout<<"ave="<<ave<<" min="<<min<<endl;
}
3.将字符串“12”转换为整数12并输出。
#include "iostream.h"
void main()
{
char c1='1',c2='2';
int x;
x=10*(c1-'0')+c2-'0';
cout<<x<<endl;
}
4.编写程序,输入一个三位整数,反向输出该三位整数。
#include "iostream.h"
void main()
{int x;
int c1,c2,c3;
cin>>x;
c1=x/100;
c2=x/10%10;
c3=x%10;
x=100*c3+10*c2+c1;
cout<<x<<endl;
}
5.输入一个年份,判断是否为闰年。
解1:
#include "iostream.h"
void main()
{int year,x;
cin>>year;
x=year%400==0||year%4==0&&year%100!=0;
x!=0?cout<<year<<"is a leap year!": cout<<year<<"is not a leap year!";
}
解2:
#include "iostream.h"
void main()
{int year;
char x;
cin>>year;
x=(year%400==0||year%4==0&&year%100!=0)?'y': 'n';
cout<<x<<endl;
}
6.编写程序,求函数的值,要求输入x,程序就输入y的值
#include "iostream.h"
#include "math.h"
void main()
{double x,y;
cin>>x;
y=log(x*x+3)/log(10)+3.14/2*cos(40*3.14/180);
cout<<y;
}
第三章
一、选择题
1.为了避免嵌套的if else 语句的二义性,C/C++语言规定else总是与( )组成配对关系。C
A. 缩排位置相同的if B.在其之前未配对的if
C. 在其之前未配对的最近的if D.同一行上的if
2.设有函数关系为,下面( )选项不能正确表示上述关系。D
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<<a++;
case 1:cout<<++a;
case 2:cout<<a--;
case 3:cout<< --a;
default: cout<<”其他值”;
}
A.其他值 B.5 C. 7 D.7 5其他值
4.以下程序段中循环体语句“k++”执行的次数为( )。C
for(k=0,m=4;m;m-=2)
for(n=1;n<4;n++)
k++;
A. 16 B.12 C.6 D.8
5.执行下面程序段后,变量k的值为( )。B
for(k=0,m=1;m<4;m++)
{
for(n=1;n<5;n++)
if(m*n%3==0)continue;
k++;
}
A. 1 B.3 C.6 D.12
6.下面叙述中正确的是( )。C
A.for循环只能用于循环次数已经确定的情况
B.for循环同do-while语句一样,先执行循环体再判断
C.不管哪种形式的循环语句,都可以从循环体内转到循环体外
D.for循环体内不可以出现while语句
7.下面语句中不是死循环的是( ).A
A. int i=100; B. int i,sum(0);
while(1) for(i=1;;i++)sum++;
{
i=i%100+1;
if(i==20)break;
}
C. int k=0; D. int s=3379
do{ while(s++%2+3%2)s++
++k;
}while(k>=0);
8.若输入字符串“ABC”,下面程序段的输出为( )。C
char c;
while(cin>>c,c!=’\n’)
cou<<c+2;}
A.222 B.CDE C.676869 D.333
9.以下程序段的输出结果是( )。B
A.45 B.457810 C.69 D.678910
二、阅读程序,写出程序运行结果。
(1)试说明下列语句组的功能:
while(1)
{
cin>>m>>n;
if(m>0&&n>0)break;
}
功能:输入两个正整数给m和n。
(2)若有变量定于“int count=0,m=1;”,试写出下列语句组对应的输出结果。
do
{
if(m%5)continue;
count++;
while(++m<=100);
}
结果:20
(3)#include”iostream.h”
void main()
{
int m,n(4),k;
long int t,s=0;
for(m=1;m<=n;m++)
{
for(t=1,k=1;k<=m;k++)
t*=m;
s+=t ;
}
cout<<”s=”<<s;
}
输出为:s=288
(4)若输入:“AB20dfz5”,则下列程序输出结果是什么?
#include”iostream.h”
void main()
{
char c;
while(cin>>c,c!=’.’)
{
if(c>=’a’&&c<’z’)
c+=1;
if(c==’z’)c=’a’;
cout<<c;
}
}
输出为:AB20ega5
(5) #include”iostream.h”
#include”iomanip.h”
void main()
{
int i,j;
for(i=4;i>=1;i--)
{
cout<<setw(i+5)<<’ ’;
for(j=1;j<=4-i;j++)
cout<<’*’<<’ ‘;
cout<<endl;
}
}
输出:
*
* *
* * *
三、程序填空题:
(1)下面的程序是检查输入的算术表达式中括号是否配对,并显示相应的结果。本程序边输入,边统计,以输入‘?’作为表达式输入结束,然后显示结果。
#include”iostream.h”
void main()
{
int count(0);
char c;
cout<<”请输入表达式,以输入?表示结束”<<endl;
while(cin>>c,c!=’?’)
{
if(c==’(‘)
count++;
else if( )
count--;
}
if( )
cout<<”左右括号配对”<<endl;
else if ( )
cout<<”左括号多于右括号”<<count<<”个”<<endl;
else
cout<<” 右括号多于左括号”<< count<<”个”<<endl;
}
填空结果:
c==')'
count==0
count>0
count
(2) 用辗转相减法求两个正整数m和n的最大公约数。
#include”iostream.h”
void main()
{
int m,n; ;
while(m-n!=0)
if(m>n) ;
else ;
cout<<”gcd(m,n)=”<<m<<endl;
}
填空结果:
cin>>m>>n
m=m-n
n=n-m
(3)求100的阶乘的末尾包含多少个0?程序通过找出1-100之间的所有整数中包含5这个因子的个数来求解。如100=5*5*4含5的因子个数为2,在求阶乘过程中会在末尾产生2个0。
#include "iostream.h"
void main()
{
int m,n,k=0;
for(m=5;m<100;)
{ ;
while(n%5==0)
{
k++;
;
}
;
}
cout<<”100!include”<<k;
}
填空结果:
n=m
n=n/5
m=m+5
四、编程题:
1.编一程序,实现下列分段函数的求值:
#include "iostream.h"
#include "math.h"
void main()
{float x,y;
cout<<"input x:"<<endl;
cin>>x;
if(x<5)
y=fabs(x);
else if(x<20)
y=3*x*x-2*x+1;
else
y=x/5;
cout<<"x="<<x<<",y="<<y<<endl;
}
2.按工资的高低纳税,已知不同工资s的税率p如下:
s<1000 p=0%
1000≤s<2000 p=5%
2000≤s<3000 p=8%
3000≤s<5000 p=10%
5000≤s p=15%
编一程序,输入工资数,求纳税款和实得工资数。
#include "iostream.h"
void main()
{
float s,p,t,w;
cout<<"input s:"<<endl;
cin>>s;
switch(int(s)/1000)
{case 0:p=0;break;
case 1:p=0.05;break;
case 2:p=0.08;break;
case 3:
case 4:p=0.1;break;
default:p=0.15;break;
}
t=s*p;
w=s-t;
cout<<"纳税款="<<t<<",实得工资="<<w<<endl;
}
3.编一程序,求100~1000之间有多少个整数,其各个数位数字之和等于5?
#include "iostream.h"
void main()
{int m,count=0;
for(m=100;m<1000;m++)
{if(m%10+m/10%10+m/100==5)
count++;
}
cout<<"count="<<count<<endl;
}
4.鸡兔共笼有30个头,90只脚,求鸡兔各有多少?
#include "iostream.h"
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<<"鸡:"<<m<<"兔:"<<n<<endl;
}
5.利用格里高利公式求的近似值,公式为:/4≈1-1/3+1/5-1/7+....,要求直到最后一项小于10-4为止。
#include "iostream.h"
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<<"pi="<<pi<<endl;
}
法二:
#include "iostream.h"
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<<"pi="<<pi<<endl;
}
6.编一程序,求出方程x2+2x=y3(其中1≤x≤100,1≤y≤100)的所有整数解。
#include "iostream.h"
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<<"x="<<x<<",y="<<y<<endl;
}
7.输入一个英文句子(以句号结束),要求将句中单词分行打印,试编写符合上述要求的程序。
#include "iostream.h"
#include "stdio.h"
void main()
{char ch;
while((ch=getchar())!='.')
if(ch==' ')
cout<<endl;
else
cout<<ch;
}
8.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,求1000以内满足该条件的数。
#include "iostream.h"
#include "math.h"
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<<m<<"是满足条件的数"<<endl;
}
}
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 "iostream.h"
#include "math.h"
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<<x;
}
第四章
一、选择题
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<<s; D.p=s;cin<<p;
二、读程序,写结果。
1. #include”iostream.h”
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<<p[-i];
}
结果是: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<<b[n];}
}
结果是: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<a+7;p++)
{if(*p>m)m=*p;
if(*p<n)n=*p;
cout <<”m-n=”<<m-n;
}
结果是:14
三、程序填空题。
1.利用一维数组显示Fibonacci数列的前20项,每行显示5个数,每个数宽度5位。即:0,1,1,2,3,5,8,13,…,如图所示。
#include”iostream.h”
#include"iomanip.h"
void main()
{
int i;
int x[20]= ;
for(i=2;i<20;i++)
;
for(i=0;i<20;i++)
{
if(i%5==0)cout<<endl;
cout<< ;
}
cout<<endl;
}
填空为:(1){0,1} (2)x[i]=x[i-1]+x[i-2] (3)setw(5)<<x[i]
2.随机产生6个学生的分数(分数范围1~100),存放在数组a中,以每2分一个’*’显示,如图所示。
#include"iostream.h"
#include"stdlib.h"
void main()
{
int a[6],i,j;
for(i=0;i<6;i++)
{
a[i]= ;
for(j=0; ;j++)
cout<<'*';
cout<< <<a[i]<<endl;
}
}
填空为:(1)rand()%101 (2)j<a[i]/2 (3)"A("<<i<<")="
3.下列程序将数组a中的每4个相邻元素的平均值存放于数组b中。
#include"iostream.h"
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++)
{
;
for(n=m; ;n++)
b[m]=b[m]+a[n];
;
}
for(m=0;m<7;m++)
cout<<b[m];
}
填空为:(1)b[m]=0 (2)n<m+4 (3)b[m]=b[m]/4
4.下面程序按字母顺序比较两个字符串s1和s2的大小,若相等,则输出0;否则输出其第一个不相等的字符的ASCII编码差值。
#include"iostream.h"
void main()
{
char ch1[40],ch2[40],*s1=ch1,*s2=ch2;
int r;
;
;
while(*s1!='\0'&& )
{
s1++;s2++;
}
if(*s1=='\0'&&*s2=='\0')
;
else
r=*s1-*s2;
cout<<"The result is"<<r;
}
填空为:(1)cin>>s1 (2) cin>>s2 (3)*s1==*s2 (4) r=0
5.已知数组a和b都是按由小到大顺序排列的有序数组,试将其合并后放入数组c中,使c也按由小到大的顺序排列。
#define M 3
#define N 3
#include"iostream.h"
void main()
{
int a[M],b[N],c[M+N],j,k,l;
for(k=0;k<M;k++)cin>>a[k];
for(k=0;k<N;k++)cin>>b[k];
;
while(l<M+N&& )
{
if(a[j]<b[k])
{ ;
j++;l++;
}
else
;
}
while(l<M+N&& )c[l++]=b[k++];
while(l<M+N&& )c[l++]=a[j++];
for(l=0;l<M+N;l++)cout<<c[l];
}
填空为:(1)j=k=l=0 (2)j<M&&k<N (3)c[l]=a[j] (4)c[l++]=b[k++] (5)k<N (6)j<M
四、编程题。
1.利用随机数生成两个矩阵(数据不一定相同,前者30~70范围、后者101~135)。
要求:
(1)将两个矩阵相加结果放入C矩阵中。
(2)统计C矩阵中最大值和下标。
(3)以下三角形式显示A矩阵、上三角形式显示B矩阵。
(4)将A矩阵第1行与第3行对应元素交换位置,即第1行元素放到第3行;第3行元素放到第1行。
(5)求A矩阵两条对角线元素之和。
(1)
#include "stdlib.h"
#include "iostream.h"
void main()
{int a[4][4],b[4][4],c[4][4],i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
a[i][j]=rand()%41+30;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
b[i][j]=rand()%35+101;
cout<<"矩阵A的内容如下:\n";
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
cout<<"矩阵B的内容如下:\n";
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
cout<<b[i][j]<<' ';
cout<<endl;
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
c[i][j]=a[i][j]+b[i][j];
cout<<"矩阵C的内容如下:\n";
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
cout<<c[i][j]<<' ';
cout<<endl;
}
}
(2)
#i
展开阅读全文