习题答案
第二章习题答案
?1.判断下面哪些是不合法的标识符?请指出错误。
A_var 2_test char # total _book.c
?2.举例说明字符常量和字符串常量有何区别?
?3.求下列表达式的值
( 1) int e=1,f=4,g=2;
float m=10.5,n=4.0,k;
k=(e+f)/g+sqrt((double)n)*1.2/g+m
( 2) float x=2.5,y=4.7;
int a=7;
x+a%3*(int(x+y)%2/4
第 1题,
2_test 不合法 标识符必须是字母或下划线开头
char 不合法 标识符不能是关键字
#total 不合法 标识符必须是字母或下划线开头
_book.c 不合法 标识符必须是字母下划线或数字组成的字符串
第 2题,
字符常量是用单引号括起来的一个字符,在内存中只占一个字
节;字符串常量是用一对双引号括起来的字符序列,其中的字符连
续存储,并在最后加上字符 ’ \0’作为字符串结束的标志。
第 3题,
1,K=13.7
2,表达式的值为 2
习题答案
第三章习题答案
?1.下列关于条件语句的描述中,是错误的。
A if语句中只有一个 else子句。
B if语句中可有多个 else if子句。
C if语句中 if体内不能是 switch语句。
D if语句的 if体中可以是循环语句。
?2.以下程序段 。
int x=-1;
do
{ x=x*x;}
while (!x);
A 是死循环 B 循环执行两次 C 循环执行一次 D 有语法错误
?3.给出下面程序运行后的输出结果。
#include <iostream.h>
void main()
{
int i,j;
for (i=0;i<5;i++)
{
for (j=i;j<5;j++)
cout<<"*";
cout<<endl;
}
}
若用 0至 9之间不同的三个数构成一个三位数,以下程序将统计出共
有多少种构成方法。请填空。
#include <iostream.h>
void main()
{ int i,j,k,count=0;
for (i=1;i<=9;i++)
for (j=0;j<=9;j++)
if (① ) continue;
else for (k=1;k<=9;k++)
if (② ) count++;
cout<<count<<endl;
}
?5.编一程序,求 1!+2!+3!+…+10!之和。
?6.编一程序,用牛顿迭代法求解 2x3-4x2+3x-6=0在 1.5附近的根。
?7.编一程序,将输入数据按小于 10,10~ 99,100~ 999,1000 以
上分类并显示。例如,输入 358时,显示 358 is 100 to 999。
?8.编一程序,输出以下图形,
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
? *
?9.编一程序,求满足如下条件的最大的 n 。
12+22+32+…+n2≤1000
?10.一百万富翁遇到一陌生人,陌生人找他谈一个换钱计划,该
计划如下:我每天给你十万元,而你第一天只需给我一分钱,第二
天我仍给你十万元,你给我二分钱,第三天我仍给你十万元,你给
我四分钱,……,你每天给我的钱是前一天的两倍,直到满一个月
( 30天)。百万富翁很高兴,欣然接受了这个契约。请编写一个程
序计算这一个月中陌生人给了百万富翁多少钱,百万富翁给了陌生
人多少钱。
第 1题 答案为 A
第 2题 答案为 C
第 3题 执行结果 *****
****
***
**
*
第 4题 答案:① i==j② j==k
第 5题, 编一程序,求 1!+2!+3!+… +10!之和。
#include <iostream.h>
void main()
{
int s,n,i,j;
for (j=0,i=1;i<=10;i++)
{
for (s=0,n=1;n<=i;n++)
{s*=n;}
j+=s;
}cout<<j<<endl;
}
第 6题 编一程序,用牛顿迭代法求解 2x3-4x2+3x-6=0在 1.5附近的根。
#include<iostream.h>
#include<math.h>
void main()
{
double x=0.0,y1,y2;
double x1=1.5;
while((fabs(x1-x))>0.000001)
{
x=x1;
y1=2*x*x*x-4*x*x+3*x-6;
y2=6*x*x-8*x+3;
x1=x-y1/y2;
}
cout<<x<<endl;
}
第 7题 编一程序,将输入数据按小于 10,10~ 99,100~ 999,1000 以上分类并
显示。例如,输入 358时,显示 358 is 100 to 999。
#include <iostream.h>
void main()
{ int i;
cin>>i;
if(i<10)
cout<<i<<"is 0 to 9"<<endl;
else if (i<100)
cout<<i<<"is 10 to 99"<<endl;
else if (i<1000)
cout<<i<<"is 100 to 999"<<endl;
else
cout<<i<<"is biger than 1000"<<endl;}
第 8题
#include<iostream.h>
void main()
{
int m=3,n=0;
for(int i=0;i<7;i++)
{
for(int j=0;j<7;j++)
{
if(j<=(m+n)&&j>=(m-n))
cout<<"*";
else
cout<<" ";
} cout<<endl;
if(i<3)
n++;
else
n--;}
}
第 9题.编一程序,求满足如下条件的最大的 n 。
12+22+32+…+n2≤1000
#include <iostream.h>
void main()
{ int i=1,s=0,t;
do{t=i*i;
s+=t;
i++;}while(s<=1000);
cout<<i-1<<endl;}
第 10题.一百万富翁遇到一陌生人,陌生人找他谈一个换钱计划,该计划如下:
我每天给你十万元,而你第一天只需给我一分钱,第二天我仍给你十万元,你
给我二分钱,第三天我仍给你十万元,你给我四分钱,……,你每天给我的钱是
前一天的两倍,直到满一个月( 30天)。百万富翁很高兴,欣然接受了这个契
约。请编写一个程序计算这一个月中陌生人给了百万富翁多少钱,百万富翁给
了陌生人多少钱。
#include <iostream.h>
void main()
{ long int i,x,y=0,s=1;
x=100000*30;
cout<<"陌生人给富翁 "<<x<<"元 ";
for(i=0;i<30;i++)
{s=s*2;
y=y+s;}
cout<<" 富翁给陌生人 "<<y/100<<"元 ";}
C++语言程序设计 第六章 指针
习题答案
第四章习题答案
C++语言程序设计 第六章 指针
1 从键盘上任意输入 5个数,然后将它们从大到小排序输出。
#include<iostream.h>
#include<iomanip.h>
void main()
{
int a[5];
int i,j,t;
cout<<"please input 5 numbers:\n";
for(i=0;i<5;i++)
cin>>a[i]; //输入数组元素
cout<<"the numbers are,";
for(i=0;i<5;i++)
cout<<setw(4)<<a[i];
cout<<endl;
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(a[j]<a[j+1])
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t;}
cout<<"the sorted numbers are, ";
for(i=0;i<5;i++)
cout<<setw(4)<<a[i]; //输出数组元素
cout<<endl;
}
2 从键盘上为数组 a[2][3]输入任意整数值,显示该数组,找出该数组的最大元素
及其下标。
#include<iostream.h>
main()
{
int a[2][3],i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];;
}
for(i=0;i<2;i++) //显示数组 a
for(j=0;j<3;j++)
cout<<a[i][j]<< " ";
int h,l,Max=a[0][0]; //找出该数组的最大元素及其下标
for(i=0;i<2;i++)
for (j=0;j<3;j++)
if(Max<a[i][j]) { Max=a[i][j];h=i;l=j;}
cout<<"Max,"<<"a["<<h<<"]["<<l<<"]="<<a[h][l]<<endl;
}
3 输入一串字符串,求此字符串的长度。
#include <iostream.h>
#include <string.h>
void main()
{
char s[50];
cout<< "Please input a string, ";
cin>>s;
cout<< "The length of string '"<<s<< " ' is"<<strlen(s);
}
4.输入一行文字,找出其中大写字母、小写字母、空格、数字及其它字符各有
多少?
#include<iostream.h>
void main()
{
char a[100];
cin.get(a,100);
int x=0,y=0,z=0,t=0;
for(int i=0;i<=100;i++)
{
if(a[i]=='\0')
break;
else if(a[i]>='a'&&a[i]<='z')
x++;
else if(a[i]>='0'&&a[i]<='10')
y++;
else if(a[i]==' ')
z++;
else
t++;
}
cout<<"字母数为,"<<x<<endl;
cout<<" 空格数为,"<<z<<endl;
cout<<" 数字为,"<<y<<endl;
cout<<"其他为,"<<t<<endl;
}
5.输入一字符串,反向输出每一个字符。
#include<iostream.h>
#include<string.h>
void main()
{
char ch[100];
cin.get(ch,100);
for (int i=strlen(ch)-1;i>=0;i--)
cout<<ch[i];
cout<<endl;
}
6,从键盘上输入一个字符串,假定该字符串的长度不超过 30,试统计该字符
串中所有十进制数字字符的个数。
#include<iostream.h>
void main()
{
char a[30];
cout<< "Please input a string, ";
cin.get(a,30);
int x=0,i=0;
while(a[i]!='\0')
{ if(a[i]<='9'&&a[i]>='0')
x++;
i++;}
cout<<" 数字为,"<<x<<endl;
}
7.编写程序,其功能是:输入一个字符串,将其中的所有数字删除、输出改
动后的字符串及其长度,例如输入,ab123df354ADFx193输出 abdfADFx 8。
#include<iostream.h>
void main()
{
char a[100],b[100];
cin>>a;
int i=0,j=0;
while(a[i]!='\0')
{
if(a[i]>='0'&&a[i]<='9')
i++;
else
{
b[j]=a[i];
j++;
i++;
}
}
b[j]='\0';
cout<<b<<" "<<j<<endl;
}
习题答案
第五章习题答案
5.1 说明下列程序的执行过程和运算结果,
double squ (double x);
int main( )
{
double x;
cout << "x=?"<< endl;
cin >> x;
cout <<"The square root of"<<x<<"is"<<squ(x)<<endl;
return 0;
}
double squ(double x)
{
double s1,s2;
s1 = 0.5 *(1.0+x);
do
{
s2 = s1;
s1 = (s2+x/s2)*0.5;
}while (fabs(s2-s1)<1.0E-6);
return s1;
}
5.2不用库函数, 自已编写求整数次幂的函数 long intPower(int base,int
exponent),求 base的 exponent次幂 。
#include<iostream.h>
long intPower(int b,int e) ;
void main()
{
long n;
int b,e;
n=intPower(b,e);
}
long intPower(int b,int e) //求 base的 exponent次幂 。
{
long x,q;
int i;
cin>>b>>e;
q=b;
if(e==0)
q=1;
else
{
for(i=1; i<e;i++)
q=q*b;
}x=q;
cout<<"x="<<x<<endl;
return x;
}
5.3编写判断一个正整数是否是素数的函数 。
#include<iostream.h>
void mm()
{int i,n;
cin>>n;
for(i=2;i<n;++i)
if(n%i==0)
break;
if(i==n)
cout<<n<<"is a prime number"<<endl;
else
cout<<n<<"is not a prime number"<<endl;
}
void main()
{
mm();
}
5.4编写一个函数, 返回与所给十进制正整数数字顺序相反的整数 。 如已知整数
是 1234,函数返回值是 4321
#include<iostream.h>
void daoxu()
{ int a[3],i;
for(i=0;i<3;i++)
cin>>a[i];
cout<<endl;
for(i=2;i>=0;i--)
cout<<a[i]<<endl;
}
void main()
{
daoxu();
}
5.5编写一个函数, 按所给的百分制的成绩分数, 返回与该分数对应的等级代号
字符 。
#include<iostream.h>
void m()
{ char grade;
cin>>grade;
if(grade>='a'&&grade<='z')
grade-=32;
switch(grade)
{case'A':cout<<"90--100\n";break;
case'B':cout<<"80--89\n";break;
case'C':cout<<"70--79\n";break;
case'D':cout<<"60--69\n";break;
case'E':cout<<"<60\n";break;
default:cout<<"error\n";
}
}
void main()
{
m();
}
5.6 写一个函数, 内放 10个学生成绩, 求平均成绩 。
#include<iostream.h>
int averge()
{
int a[10],i,b;
int v;
cout<<"intput 10 numbers:"<<endl;
for(i=0;i<10;i++)
cin>>a[i];
b=a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9];
v=b/10;
cout<<"v="<<v<<endl;
return v;
cout<<"v="<<v<<endl;
}
void main()
{
averge();
}
5.7 写两个函数, 分别求两个整数的最大公约数和最小公倍数 。 用主函数调用
这两个函数, 并输出结果, 两个整数由键盘输入 。
#include<iostream.h>
int yueshu(int m,int n)
{
if(m==n)return m;
else
{
while(n!=0)
{
if(m>n)
{
n=m-n;
m=m-n;
}
else n=n-m;
}
return m;
}
}
int beishu(int x,int y)
{
return x*y/yueshu(x,y);
}
void main()
{
int a,b;
cout<<"Please input two numbers:";
cin>>a>>b;
int c=yueshu(a,b);
cout<<"最大公约数是,"<<c<<endl;
int d=beishu(a,b);
cout<<"最小公倍数是,"<<d<<endl;
}
5.8 编写三个函数以三种不同的方式输出乘法口诀表,
⑴ 将 9行 9列乘法表全部输出
⑵ 输出乘法表中主对角线以上的元素 。
⑶ 输出乘法表中主对角线以下的元素 。
#include<iostream.h>
#include<iomanip.h>
void cout1()
{
for(int i=1;i<10;i++)
{
for (int j=1;j<10;j++)
cout<<i<<"*"<<j<<"="<<i*j<<" ";
cout<<endl;
}
}
void cout2()
{
for(int i=1;i<10;i++)
{
for (int j=1;j<10;j++)
{
if(i>=j)
cout<<i<<"*"<<j<<"="<<i*j<<" ";
}
cout<<endl;
}
}
void cout3()
{
for(int i=1;i<10;i++)
{
for (int j=1;j<10;j++)
{
if(j>=i)
cout<<i<<"*"<<j<<"="<<setw(2)<<i*j<<" ";
else
cout<<" ";
}
cout<<endl;
}
}
void main()
{
cout1();cout<<endl<<endl;
cout2();cout<<endl<<endl;
cout3();
}
5.9 下面的程序定义了全局变量, 静态局部变量和局部变量, 指出程序运行结果 。
void func( )
int n=1;
void main( )
{
static int a;
int b=-10;
cout<<"a:"<<a<<"b:"<<b<<"n:"<<n<<endl;
b+=4;
func( );
cout<<"a:"<<a<<"b:"<<b<<"n:"<<n<<endl;
n+=10;
func( );
}
void func( )
{ static int a=2;
int b=5;
a+=2;
n+=12;
b+=5;
cout<<"a:"<<a<<"b:"<<b<<"n:"<<n<<endl;}
习题答案
第六章习题答案
6.1编写程序, 将 10个整型数 2,4,6,…, 18,20赋予一个数组, 然后使用指
针输出显示该数组各元素的值 。
#include<iostream.h>
#include<iomanip.h>
void main()
{
int a[10],*p;
for(int i=0;i<10;i++)
a[i]=2*(i+1);
for(p=a;p<a+10;p++)
cout<<setw(3)<<*p;
cout<<endl;
}
6.2把键盘输入的一个大写字符串改为小写字符串并显示出来,其中大小写转换
用函数 lower( ) 实现 。
#include<iostream.h>
void lower(char *c);
void main ( )
{
char str;
cout << "Enter character:" << endl;
cin >> str;
lower(&str);
cout << "converted character:" << endl;
cout << str << endl;
}
void lower(char *c)
{
if (*c >= ' A' && *c <= ' Z' )
*c += ' a' -' A' ;
}
6.3输入一个字符串, 删除其中的所有空格后输出, 例如输入,js ka oi pm dk
,输出为,jskaoipmdk。
#include<iostream.h>
void main()
{
char a[30],b[30];
cin>>a;
int i=0,j=0;
while(a[i]!='\0')
{
if(a[i]==' ')
i++;
else
{
b[j]=a[i];
j++;
i++;
}
}
b[j]='\0';
cout<<b<<endl;
}
6.4编写程序, 当输入整数 1~ 12( 月份号 ) 时, 输出该月的英文名称, 输入其
他整数时结束程序 。 例如, 输入, 4”,则输出, April”,输入, 0”,则退出程序
,要求使用指针数组处理 。
#include<iostream.h>
void main()
{
char*p[12]={"January","February","March","April","May","June","July",
"August","September","October","Novermber","December"};
int i;
cin>>i;
while(i<=12&&i>=1)
{
cout<<p[i-1]<<endl;
cin>>i;
}
cout<<"error"<<endl;
}
6.5分别使用指针数组和二级指针输入, 输出一个二维整型数组 。
#include<iostream.h>
void main()
{int a[2][3];**p;
int i,j;
pp=a;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
pp[i][j]=(i+1)*(j+1);
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
cout<<”a[“<<i<<”][“<<j<<”]:”;
cout<<*(*(pp+i)+j)<<endl;}
}
6.6 输入一个 3× 4的矩阵, 写一个函数求其中的最大元素 。
#include <iostream.h>
void main()
{int a[3][4];
int i,j;
for( i=0;i<3;i++)
for(j=0;j<4;j++)
cin>>a[i][j];
cout<<endl;
int n=a[0][0];
for( i=0;i<3;i++)
{
for(j=0;j<4;j++)
{if(a[i][j]>n)
n=a[i][j];}
}
cout<<n<<endl;
}