不知道你的运算规则是什么样的,如果有不同,修改加减乘除运算符重载函数中的计算方法即可。
#include<iostream>#include<stdio.h>
#include<stdlib.h>
using namespace std
class Number{
public:
Number(){
x=y=0
}
Number(int a, int b){
x=a,y=b
}
void display(){
cout<<"x="<<x<<",y="<<y<<endl
}
int getX(){
return x
}
int getY(){
return y
}
Number operator +(const Number &a)
Number operator -(const Number &a)
Number operator *(const Number &a)
Number operator /(const Number &a)
private:
int x
int y
}
inline Number Number::operator +(const Number &a){
return Number(x+a.x, y+a.y)
}
inline Number Number::operator -(const Number &a){
return Number(x-a.x, y-a.y)
}
inline Number Number::operator *(const Number &a){
return Number(x*a.x, y*a.y)
}
inline Number Number::operator /(const Number &a){
return Number(x/a.x, y/a.y)
}
int main()
{
Number num1(16,21),num2(4,3),res
res=num1+num2
res.display()
res=num1-num2
res.display()
res=num1*num2
res.display()
res=num1/num2
res.display()
system("pause")
return 0
}
#include<fstream>
#include
<string.h>
#include
<iostream>
#include
<conio.h>//用getch()
using
namespace
std
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class
Student
{
public:
char
name[20]
char
Class[20]
char
Id[20]
int
Cnum
//C课程得分
int
Mnum
//数学课程得分
int
Enum
//英语课程得分
int
Gnum
//体育
int
sum
//总分
int
ave
//平均分
Student
*
Next
void
Input()
{
cout<<"\t\t请输入学生的姓名:"
cin>>name
cout<<"\t\t请输入学生的班级:"
cin>>Class
cout<<"\t\t请输入学生的学号:"
cin>>Id
cout<<"\t\t请输入C++的成绩:"
cin>>Cnum
cout<<"\t\t请输入数学课程的成绩:"
cin>>Mnum
cout<<"\t\t请输入英语课程的成绩:"
cin>>Enum
cout<<"\t\t请输入日语的成绩:"
cin>>Gnum
sum=Cnum+Mnum+Enum+Gnum
ave=(Cnum+Mnum+Enum+Gnum)/4
}
void
ReadFile(istream
&
in)
{
in>>name>>Class>>Id>>Cnum>>Mnum>>Enum>>Gnum>>ave>>sum
}
void
Show()
{
cout<<"姓名:"<<name<<endl<<"班级:"<<Class<<endl<<"学号:"<<Id<<endl<<"C++:"<<Cnum<<endl
<<"数学:"<<Mnum<<endl<<"外语:"<<Enum<<endl<<"日语:"<<Gnum<<endl<<"平均成绩:"<<ave<<endl<<"总成绩:"<<sum<<endl<<endl<<endl
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class
Studentmassage
{
public:
Studentmassage()
~Studentmassage()
void
ShowMenu()
void
Find()
void
Save()
void
ModifyItem()
void
RemoveItem()
void
Swap(Student
*,Student
*)
void
Sort()
int
ListCount()
void
Display()
{
for(Student
*
p=Head->Nextp!=Endp=p->Next)
p->Show()
cout<<"输入任意字符!继续……"
getch()
}
void
AddItem()
{
End->Input()
End->Next=new
Student
End=End->Next
cout<<"添加成功!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
private:
Student
*
Head,*
End
ifstream
in
ofstream
out
Student
*FindItem(char
*
name)
{
for(Student
*
p=Headp->Next!=Endp=p->Next)
if(!strcmp(p->Next->name,name))return
p
return
NULL
}
Student
*FindID(char
*
Id)
{
for(Student
*
p=Headp->Next!=Endp=p->Next)
if(!strcmp(p->Next->Id,Id))return
p
return
NULL
}
Student
*FindCLASS(char
*
Class)
{
for(Student
*
p=Headp->Next!=Endp=p->Next)
if(!strcmp(p->Next->Class,Class))return
p
return
NULL
}
}Grade
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::Studentmassage()
{
Head=new
Student
Head->Next=new
Student
End=Head->Next
in.open("sort.txt")
if(!in)
cout<<"这是一个新系统,无学生信息。请先输入。"<<endl
else
{
while(!in.eof())
{
End->ReadFile(in)
if(End->name[0]=='\0')break
End->Next=new
Student
End=End->Next
}
in.close()
cout<<"\t\t读取学生信息成功!"<<endl
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::~Studentmassage()
{
Save()
for(Student
*
tempHead->Next!=End)
{
temp=Head->Next
Head->Next=Head->Next->Next
delete
temp
}
delete
Head,End
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::ShowMenu()
{
cout<<"〓〓〓〓〓〓〓〓〓〓
☆
学
生
成
绩
管
理
系
统
☆
〓〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓★★★★★
★★★★★★★
★★★★★〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
1.增加学生成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
2.显示学生成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
3.排序统计成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
4.查找学生成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
5.删除学生成绩
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
6.修改学生信息
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"〓〓〓〓〓〓〓〓〓★
☆
0.安全退出系统
☆
★〓〓〓〓〓〓〓〓〓"<<endl
cout<<"\n\t\t\n\t\t请选择:"
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::Find()
{
char
name[20]
,Id[10],Class[20]
int
x
Student
*
p=NULL
cout<<"\n\t\t*********************************\n"
cout<<"\t\t※
1.按学生的姓名查找\n\t\t※
2.按学生学号查找\n\t\t※
3.按学生班级查找"
cout<<"\n\t\t*********************************\n请选择:"
cin>>x
switch(x)
{
case
1:{cout<<"\t\t请输入要查找的学生的姓名:"cin>>name
if(p=FindItem(name))
{
p->Next->Show()
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl
cout<<"输入任意字符!继续……"
getch()
}
}break
case
2:
{
cout<<"\t\t请输入要查找的学生的学号:"cin>>Id
if(p=FindID(Id))
{
p->Next->Show()
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到该学号的学生!"<<'\n'<<endl
cout<<"输入任意字符!继续……"
getch()
}
}break
case
3:{cout<<"\t\t请输入要查找的学生的班级:"cin>>Class
if(p=FindCLASS(Class))
{
p->Next->Show()
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到该班级的学生!"<<'\n'<<endl
cout<<"输入任意字符!继续……"
getch()
}
}break
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::ModifyItem()
//修改信息
{
char
ID[20]
Student
*
p=NULL
cout<<"\t\t请输入要修改的人的学号:"cin>>ID
if(p=FindID(ID))
{
cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl
p->Next->Input()
cout<<"修改成功!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::RemoveItem()
//
删除信息
{
char
ID[20]
Student
*
p=NULL,*temp=NULL
cout<<"\t\t请输入要删除的学生的学号:"cin>>ID
if(p=FindID(ID))
{
temp=p->Next
p->Next=p->Next->Next
delete
temp
cout<<"\t\t删除成功!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
else
{
cout<<"\t\t没有找到!"<<endl
cout<<"输入任意字符!继续……"
getch()
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::Swap(Student
*p1,
Student
*p2)
{
Student
*temp=new
Student
strcpy(temp->name,p1->name)
strcpy(temp->Id,p1->Id)
temp->Cnum=p1->Cnum
temp->Mnum=p1->Mnum
temp->Enum=p1->Enum
temp->sum=p1->sum
strcpy(p1->name,p2->name)
strcpy(p1->Id,p2->Id)
p1->Cnum=p2->Cnum
p1->Mnum=p2->Mnum
p1->Enum=p2->Enum
p1->sum=p2->sum
strcpy(p2->name,temp->name)
strcpy(p2->Id,temp->Id)
p2->Cnum=temp->Cnum
p2->Mnum=temp->Mnum
p2->Enum=temp->Enum
p2->sum=temp->sum
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int
Studentmassage::ListCount()//统计当前的记录总数
{
if(!
Head)
return
0
int
n=0
for(Student
*
p=Head->Nextp!=Endp=p->Next)
{
n++
}
return
n
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::Sort()//对当前学生进行排序
{
cout
<<"Sorting..."<<endl
Student
*p=NULL,*p1=NULL,*k=NULL
int
n=Studentmassage::ListCount()
if(n<2)
return
for(p=Head->Nextp!=Endp=p->Next)
for(k=p->Nextk!=Endk=k->Next)
{
if(p->sum>k->sum)
{
Studentmassage::Swap(p,k)
}
}
cout
<<"排序完成!"<<endl
getch()
return
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void
Studentmassage::Save()
{
out.open("sort.txt")
for(Student
*p=Head->Nextp!=Endp=p->Next)
out<<p->name<<"\t"<<p->Class<<"\t"<<p->Id<<"\t"
<<p->Cnum<<"\t"<<p->Mnum<<"\t"<<p->Enum<<"\t"<<p->Gnum<<"\t"<<p->ave<<"\t"<<p->sum<<'\n'
out.close()
}
void
code()
//密码
{
char
s1[20]="123",s2[20]
cout<<"请输入密码:"
while(cin>>s2)
{
if(!strcmp(s1,s2))
{
Grade.ModifyItem()break
}
else
cout<<"你输入的密码不正确,请重新输入:"
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int
main()
{
int
x,i=0
bool
quit=false
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<<endl
for(i=0i<3i++)
cout<<"\t\t◎\t\t\t\t\t\t
◎"<<endl
cout<<"\t\t◎★★★★【
欢迎进入学生成绩管理系统
】★★★★◎"<<endl
for(i=0i<3i++)
cout<<"\t\t◎\t\t\t\t\t\t
◎"<<endl
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"<<endl
cout<<"请按任意键开始……"
getch()
while(!quit)
{
system("cls")
Grade.ShowMenu()
cin>>x
switch(x)
{
case
0:cout<<"★★★★感谢您的使用★★★★"<<endlquit=truebreak
case
1:Grade.AddItem()break
case
2:Grade.Display()break
case
3:Grade.Sort()break
case
4:Grade.Find()break
case
5:Grade.RemoveItem()break
case
6:code()break
}
}
return
0
}
我稍微改了下,应该可以用~
额~~你们一定要C编吗~C++不可以嘛?
1 【C语言】《C语言程序设计教程(第二版)》习题答案
说明
1. 本文所指的《C语言程序设计教程(第二版)》是李凤霞主编、北京理
工大学出版社出版的,绿皮。
2 第1章 程序设计基础知识
一、单项选择题(第23页)
1-4.CBBC 5-8.DACA
二、填空题(第24页)
1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言 7.有穷性 8.直到型循环 9.算法 10.可读性 11.模块化 12.对问题的分析和模块的划分
三、应用题(第24页)
2.源程序:
main()
{int i,j,k/* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */
printf("cock hen chick\n")
for(i=1i<=20i++)
for(j=1j<=33j++)
for(k=1k<=33k++)
if (i+j+k*3==100&&i*5+j*3+k==100)
printf(" %d %d %d\n",i,j,k*3)}
执行结果:
cock hen chick
4 18 78
8 11 81
12 4 84
3.现计算斐波那契数列的前20项。
递推法 源程序:
main()
{long a,bint i
a=b=1
for(i=1i<=10i++) /*要计算前30项,把10改为15。*/
{printf("%8ld%8ld",a,b)
a=a+bb=b+a}}
递归法 源程序:
main()
{int i
for(i=0i<=19i++)
printf("%8d",fib(i))}
fib(int i)
{return(i<=1?1:fib(i-1)+fib(i-2))}
执行结果:
1 1 2 3 5 8 13 21 34 55
89 144 233 377 610 987 1597 2584 4181 6765
4.源程序:
#include "math.h"
main()
{double x,x0,deltax
x=1.5
do {x0=pow(x+1,1./3)
deltax=fabs(x0-x)
x=x0
}while(deltax>1e-12)
printf("%.10f\n",x)}
执行结果:
1.3247179572
5.源程序略。(分子、分母均构成斐波那契数列)
结果是32.66026079864
6.源程序:
main()
{int a,b,c,m
printf("Please input a,b and c:")
scanf("%d %d %d",&a,&b,&c)
if(a<b){m=aa=bb=m}
if(a<c){m=aa=cc=m}
if(b<c){m=bb=cc=m}
printf("%d %d %d\n",a,b,c)}
执行结果:
Please input a,b and c:123 456 789
789 456 123
7.源程序:
main()
{int a
scanf("%d",&a)
printf(a%21==0?"Yes":"No")}
执行结果:
42
Yes
3 第2章 C语言概述
一、单项选择题(第34页)
1-4.BDCB 5-8.AABC
二、填空题(第35页)
1.主 2.C编译系统 3.函数 函数 4.输入输出 5.头 6. .OBJ 7.库函数 8.文本
三、应用题(第36页)
5.sizeof是关键字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是标识符。
8.源程序:
main()
{int a,b,c
scanf("%d %d",&a,&b)
c=aa=bb=c
printf("%d %d",a,b)}
执行结果:
12 34
34 12
4 第3章 数据类型与运算规则
一、单项选择题(第75页)
1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB
二、填空题(第77页)
1.补码 2.±(10^-308~10^308) 3.int(整数) 4.单目 自右相左 5.函数调用 6.a或b 7.1 8.65,89
三、应用题(第78页)
1.10 9
2.执行结果:
11
0
0
12
1
5 第4章 顺序结构程序设计
一、单项选择题(第90页)
1-5.DCDAD 6-10.BACBB
二、填空题(第91页)
1.一 ;2. 5.169000 3.(1)-2002500 (2)I=-200,j=2500 (3)i=-200
j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf("%lf%lf%lf",&a,&b,&c)9. 13 13.000000,13.000000 10.a=a^cc=c^aa=a^c(这种算法不破坏b的值,也不用定义中间变量。)
三、编程题(第92页)
1.仿照教材第27页例2-1。
2.源程序:
main()
{int h,m
scanf("%d:%d",&h,&m)
printf("%d\n",h*60+m)}
执行结果:
9:23
563
3.源程序:
main()
{int a[]={-10,0,15,34},i
for(i=0i<=3i++)
printf("%d\370C=%g\370F\t",a[i],a[i]*1.8+32)}
执行结果:
-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F
4.源程序:
main()
{double pi=3.14159265358979,r=5
printf("r=%lg A=%.10lf S=%.10lf\n",r,2*pi*r,pi*pi*r)}
执行结果:
r=5 A=31.4159265359 S=49.3480220054
5.源程序:
#include "math.h"
main()
{double a,b,c
scanf("%lf%lf%lf",&a,&b,&c)
if (a+b>c&&a+c>b&&b+c>a)
{double s=(a+b+c)/2
printf("SS=%.10lf\n",sqrt(s*(s-a)*(s-b)*(s-c)))}
else printf("Data error!")}
执行结果:
4 5 6
SS=9.9215674165
6.源程序:
main()
{int a=3,b=4,c=5float d=1.2,e=2.23,f=-43.56
printf("a=%3d,b=%-4d,c=**%d\nd=%g\ne=%6.2f\nf=%-10.4f**\n",a,b,c,d,e,f)}
7.源程序:
main()
{int a,b,c,m
scanf("%d %d %d",&a,&b,&c)
m=aa=bb=cc=m
printf("%d %d %d\n",a,b,c)}
执行结果:
5 6 7
6 7 5
8.源程序:
main()
{int a,b,c
scanf("%d %d %d",&a,&b,&c)
printf("average of %d,%d and %d is %.2f\n",a,b,c,(a+b+c)/3.)
执行结果:
6 7 9
average of 6,7 and 9 is 7.33
9.不能。修改后的源程序如下:
main()
{int a,b,c,x,y
scanf("%d %d %d",&a,&b,&c)
x=a*by=x*c
printf("a=%d,b=%d,c=%d\n",a,b,c)
printf("x=%d,y=%d\n",x,y)}
6 第5章 选择结构程序设计
一、单项选择题(第113页)
1-4.DCBB 5-8.DABD
二、填空题(第115页)
1.非0 0 2.k==0
3.if (abs(x)>4) printf("%d",x)else printf("error!")
4.if((x>=1&&x<=10||x>=200&&x<=210)&&x&1)printf("%d",x)
5.k=1 (原题最后一行漏了个d,如果认为原题正确,则输出k=%。)
6. 8! Right!11 7.$$$a=0 8.a=2,b=1
三、编程题(第116页)
1.有错。正确的程序如下:
main()
{int a,b,c
scanf("%d,%d,%d",&a,&b,&c)
printf("min=%d\n",a>b?b>c?c:b:a>c?c:a)}
2.源程序:
main()
{unsigned long a
scanf("%ld",&a)
for(aprintf("%d",a%10),a/=10)}
执行结果:
12345
54321
3.(1)源程序:
main()
{int x,y
scanf("%d",&x)
if (x>-5&&x<0)y=x
if (x>=0&&x<5)y=x-1
if (x>=5&&x<10)y=x+1
printf("%d\n",y)}
(2)源程序:
main()
{int x,y
scanf("%d",&x)
if(x<10) if(x>-5) if(x>=0) if(x>=5)y=x+1
else y=x-1else y=x
printf("%d\n",y)}
(3)源程序:
main()
{int x,y
scanf("%d",&x)
if(x<10) if(x>=5)y=x+1
else if(x>=0)y=x-1
else if(x>-5)y=x
printf("%d\n",y)}
(4)源程序:
main()
{int x,y
scanf("%d",&x)
switch(x/5)
{case -1:if(x!=-5)y=xbreak
case 0:y=x-1break
case 1:y=x+1}
printf("%d\n",y)}
4.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。
现给出Delphi源程序和C++ Builder源程序。
Delphi源程序:
procedure TForm1.Button1Click(Sender: TObject)
begin
edit3.Text:=format('%.0f天',[strtodate(edit2.text) -strtodate(edit1.text)])
end
procedure TForm1.FormCreate(Sender: TObject)
begin
Edit2.Text:=datetostr(now)
button1click(form1)
end
C++ Builder源程序:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit3->Text=IntToStr(StrToDate(Edit2->Text)-StrToDate(Edit1->Text))+"天"
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit2->Text=DateToStr(Now())
Button1Click(Form1)
}
执行结果:(运行于Windows下) http://img378.photo.163.com/nxgt/41463572/1219713927.jpg
5.源程序:
main()
{unsigned a,b,c
printf("请输入三个整数:")
scanf("%d %d %d",&a,&b,&c)
if(a&&b&&c&&a==b&&a==c)printf("构成等边三角形\n")
else if(a+b>c&&a+c>b&&b+c>a)
if(a==b||a==c||b==c)printf("构成等腰三角形\n")
else printf("构成一般三角形\n")
else printf("不能构成三角形\n")}
执行结果:
请输入三个整数:5 6 5
构成等腰三角形
6.源程序:
main()
{int x,y
scanf("%d",&x)
if(x<20)y=1
else switch(x/60)
{case 0:y=x/10break
default:y=6}
printf("x=%d,y=%d\n",x,y)}
7.源程序:
main()
{unsigned mfloat n
scanf("%d",&m)
if(m<100)n=0
else if(m>600)n=0.06
else n=(m/100+0.5)/100
printf("%d %.2f %.2f\n",m,m*(1-n),m*n)}
执行结果:
450
450 429.75 20.25
8. 2171天(起始日期和终止日期均算在内)
本题可利用第4小题编好的程序进行计算。把起始日期和终止日期分别打入“生日”和“今日”栏内,单击“实足年龄”按钮,将所得到的天数再加上1天即可。
9.源程序:
#include "math.h"
main()
{unsigned long i
scanf("%ld",&i)
printf("%ld %d\n",i%10,(int)log10(i)+1)}
执行结果:
99887
7 5
10.源程序:
main()
{unsigned long iunsigned j[10],m=0
scanf("%ld",&i)
for(i){j[m++]=(i+2)%10i/=10}
for(mm--)i=i*10+j[m-1]
printf("%ld\n",i)}
执行结果:
6987
8109
(注:要加密的数值不能是0或以0开头。如果要以0开头需用字符串而不能是整数。)
7 第6章 循环结构程序设计
一、单项选择题(第142页)
1-4.BCCB 5-8.CBCA
二、填空题(第143页)
1.原题可能有误。如无误,是死循环 2.原题有误。如果把b=1后面的逗号改为分号,则结果是8。 3.20 4.11 5. 2.400000 6.*#*#*#$ 7.8 5 2 8.①d=1.0 ②++k ③k<=n 9.①x>=0 ②x<amin
三、编程题(第145页)
1. 源程序:
main()
{int i=1,sum=i
while(i<101){sum+=i=-i-2sum+=i=-i+2}
printf("%d\n",sum)}
执行结果:
51
2.源程序:
main()
{double p=0,n=0,fint i
for(i=1i<=10i++)
{scanf("%lf",&f)
if (f>0)p+=felse n+=f}
printf("%lf %lf %lf\n",p,n,p+n)}
3.源程序:
main()
{unsigned a
scanf("%ld",&a)
for (aprintf("%d,",a%10),a/=10)
printf("\b \n")}
执行结果:
23456
6,5,4,3,2
4.源程序:
main()
{unsigned long a,b,c,i
scanf("%ld%ld",&a,&b)
c=a%1000
for(i=1i<bi++)c=c*a%1000
if(c<100)printf("0")
if(c<10)printf("0")
printf("%ld\n",c)}
执行结果:
129 57
009
5.略
6.原题提供的计算e的公式有误(前面漏了一项1)。正确的公式是e= 1 + 1 + 1/2! + 1/3! + … + 1/n! + …
(1)源程序:
main()
{double e=1,f=1int n
for(n=1n<=20n++){f/=ne+=f}
printf("e=%.14lf\n",e)}
执行结果:
e=2.71828182845905
(2)源程序:
main()
{double e=1,f=1int n
for(n=1f>1e-4n++){f/=ne+=f}
printf("e=%.4f\n",e)}
执行结果:
e=2.7183
7.源程序:
main()
{unsigned long a=0,b=1,c=0int i,d
scanf("%d",&d)
for (i=1i<=(d+2)/3i++)
printf("%10ld%10ld%10ld",a,b,(a+=b+c,b+=c+a,c+=a+b))}
本题还可以用递归算法(效率很低),源程序如下:
unsigned long fun(int i)
{return i<=3?i:fun(i-1)+fun(i-2)+fun(i-3)}
main()
{int i,dscanf("%d",&d)
for(i=1i<=di++)
printf("%10ld",fun(i))}
执行结果:
15
1 2 3 6 11 20 37 68
125 230 423 778 1431 2632 4841
8.源程序:
main()
{int i
for(i=1010i<=9876i+=2)
if(i/100%11&&i%100%11&&i/10%100%11&&i/1000!=i%10&&i/1000!=i/10%10&&i/100%10!=i%10)printf(" %d",i)}
执行结果:
1024 1026 1028 1032 1034 1036 …… …… 9874 9876
9.源程序:
main()
{int i,j,k
printf("apple watermelon pear\n")
for(i=1i<=100i++)
for(j=1j<=10j++)
if((k=100-i-j)*2==400-i*4-j*40)
printf("%4d%7d%9d\n",i,j,k)}
执行结果:
apple watermelon pear
5 5 90
24 4 72
43 3 54
62 2 36
81 1 18
10.源程序:
#include "stdio.h"
#define N 4 /* N为阶数,可以改为其他正整数 */
main()
{int m=N*2,i,j
for(i=1i<mprintf("\n"),i++)
for(j=1j<m
putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'))}
如果把N值改为5,则执行结果如下:
*
***
*****
*******
*********
*******
*****
***
*
作者:宁西贯通2006-5-7 23:41 回复此发言
--------------------------------------------------------------------------------
8 说明
注意:上面最后一题的输出结果应该是由星号组成的一个菱形,
9 第7章 数 组
一、单项选择题(第192页)
1-4.BBCC 5-8.AABA
二、填空题(第194页)
1.1
2
4
8
16
32
64
128
256
512
2. ①a[age]++ ②i=18i<26
3. ①break ②i==8
4. ①a[i]>b[j] ②i<3 ③j<5
5. ①b[j]=a[j][0] ②b[j]<a[j][k] 6.a[k++]=a[j]
三、编程题(第196页)
1.源程序:
main()
{int a[4][4],i,j,s=0
for(i=0i<4i++)
for(j=0j<4j++)
scanf("%d",&a[i][j])
for(i=0i<4i++)
for(j=0j<4j++)
if(i==j||i+j==3)s+=a[i][j]
printf("%d\n",s)} /* 注:5×5矩阵不能照此计算! */
执行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
68
2. 源程序:
main()
{int i,a[36]
a[0]=2
for(i=1i<=29i++)a[i]=a[i-1]+2
for(i<=35i++)a[i]=a[(i-30)*5+2]
for(i=0i<=35i++)printf("%d\t",a[i])}
执行结果:
2 4 6 8 10 12 14 16 18 20
22 24 26 28 30 32 34 36 38 40
42 44 46 48 50 52 54 56 58 60
6 16 26 36 46 56
3. 源程序:
#include "stdlib.h"
#include "time.h"
main()
{int a[30],i,m=0
randomize()
for(i=0i<=29i++)
{a[i]=rand()
if(m<a[i])m=a[i]
printf("%d\t",a[i])}
for(i=0i<=29i++)if(a[i]==m)a[i]=-1
printf("\n-----------------\n")
for(i=0i<=29i++)
if(~a[i])printf("%d\t",a[i])
printf("\n")}
执行结果:
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
32499 29305 22340 5927 13031 2161 2583 31855 22977 14283
4851 22038 6992 11394 20887 27381 6293 18347 16414 10210
-----------------
20679 29377 18589 9034 27083 4959 3438 5241 32278 23344
29305 22340 5927 13031 2161 2583 31855 22977 14283 4851
22038 6992 11394 20887 27381 6293 18347 16414 10210
4.源程序:
main()
{int i,n=0,b[16]
scanf("%d",&i)
for(ii>>=1)b[n++]=i&1
for(n)printf("%d",b[--n])}
执行结果:
9876
10011010010100
本题也可以不用数组。源程序如下:
#include "stdio.h"
main()
{int i,n
scanf("%d",&i)
for(n=16nn--)
{asm ROL i,1
putchar(i&1|48)}
} /* ROL是循环左移的汇编指令 */
5. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j,t[M]
randomize()
/*生成M行N列随机数*/
for(i=0i<Mprintf("\n"),t[i++]=0)
for(j=0j<Nj++)
printf("%4d",a[i][j]=random(50))
/*找出每行的最小数,t[M]是第M行的最小数所在的列数*/
for(i=0i<Mi++)
for(j=0j<Nj++)
if(a[i][t[i]]>a[i][j])t[i]=j
/*比较每个最小数在其所在的列上是否也是最小*/
for(j=0j<Mj++)
for(i=0i<Mi++)
{if(i==j)continue
if(a[j][t[j]]>a[i][t[j]])
{t[j]=-1break}
}
printf("-------------------\n")
/*输出在行和列上均为最小的数*/
for(i=0i<Mi++)
if(t[i]!=-1)
printf("a[%d,%d]=%d\n",i,t[i],a[i][t[i]])
}
执行结果:
13 19 13 20 0 1
20 41 6 16 35 30
3 5 37 8 23 15
6 36 24 29 18 1
1 5 28 21 46 34
-------------------
a[0,4]=0
a[1,2]=6
a[3,5]=1
a[4,0]=1
6. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 7
main()
{int a[M][N],i,j,t=0
randomize()
for(i=0i<Mi++)
{a[i][N-1]=0
for(j=0j<N-1j++)
{printf("%4d",a[i][j]=random(91)+10)
a[i][N-1]+=a[i][j]}
printf("%4d\n",a[i][N-1])}
for(i=1i<Mi++)
if(a[i][N-1]>a[t][N-1])t=i
if(t)for(j=0j<Nj++)
{i=a[0][j]a[0][j]=a[t][j]a[t][j]=i}
printf("-----------------\n")
for(i=0i<Mprintf("\n"),i++)
10 第7章 数 组
for(j=0j<Nj++)
printf("%4d",a[i][j])
}
执行结果:
89 17 32 95 35 20 288
39 48 22 27 73 22 231
51 87 39 71 84 46 378
84 94 97 77 27 26 405
69 50 56 89 37 46 347
-----------------
84 94 97 77 27 26 405
39 48 22 27 73 22 231
51 87 39 71 84 46 378
89 17 32 95 35 20 288
69 50 56 89 37 46 347
7. 源程序:
#include "stdlib.h"
#include "time.h"
#define M 5
#define N 6
main()
{int a[M][N],i,j
struct data{int value,x,y}max,min
max.value=0min.value=100
randomize()
for(i=0i<Mprintf("\n"),i++)
for(j=0j<Nj++)
{printf("%4d",a[i][j]=random(100)+1)
if(max.value<a[i][j])
{max.value=a[i][j]max.x=imax.y=j}
if(min.value>a[i][j])
{min.value=a[i][j]min.x=imin.y=j}
}
printf("-----------------\n")
i=a[0][N-1]a[0][N-1]=max.valuea[max.x][max.y]=i
i=a[M-1][0]a[M-1][0]=min.valuea[min.x][min.y]=i
for(i=0i<Mprintf("\n"),i++)
for(j=0j<Nj++)
printf("%4d",a[i][j])
}
执行结果:
51 53 74 65 30 40
30 26 50 6 61 27
47 16 54 58 76 19
57 74 44 92 71 48
73 57 60 32 73 67
-----------------
51 53 74 65 30 92
30 26 50 73 61 27
47 16 54 58 76 19
57 74 44 40 71 48
6 57 60 32 73 67
9. 源程序:
main()
{char s[255]int i,j,b=1
printf("Input a string:")
scanf("%s",s)
i=strlen(s)
for(j=1j<=i/2j++)
b=b&&(s[j-1]==s[i-j])
printf(b?"Yes\n":"No\n")}
执行结果:
Input a string:level
Yes
10. 源程序:
main()
{char s[255],t,max=0,min=0,l,i
printf("Input a string(length>4):")
gets(s)
l=strlen(s)
for(i=0i<li++)
{if(s[max]<s[i])max=iif(s[min]>s[i])min=i}
t=s[1]s[1]=s[max]s[max]=tif(min==1)min=max
t=s[l-2]s[l-2]=s[min]s[min]=t
printf("%s\n",s)}
执行结果:
Input a string(length>4):C++Builder
Cu+Beild+r
11. 源程序:
main()
{char m[13][10]={"****","January","February","March",
"April","May","June","July","August","September",
"October","November","December"}
int i,j,k,a,s,n
printf("Please input an integer(100..999):")
scanf("%d",&n)
printf("%d:%d+%d+%d=%d, %d%%13=%d, %s\n", n,i,j,k,s,s,a,m[a=((s=(i=n/100)+(j=n/10%10)+(k=n%10))%13)])}
执行结果:
Please input an integer(100..999):539
539:5+3+9=17, 17%13=4, April
11 第8章 函 数
一、单项选择题(第241页)
1-5.BCCAA 6-10.CCDDD 11-15.ACACB
二、填空题(第243页)
1.看不出原题的意图。因为要计算1~n的累加和,n应是一个≥1的正整数。可是题目中却出现了n=0的情况。除非另加规定当n=0时1~n的累加和为0,或者把原题中的计算式改为计算0~n的累加和。据此猜测,原题应填为:①return(0) ②return(n+sum(n-1))
根据题意,如下程序较为合理:
int sum(int n)
{if(n<=0)return(-1)/* -1是出错标志 */
else if(n==1)return(1)
else return(n+sum(n-1))}
2. ①return(1) ②return(n*facto(n-1))
三、编程题(第244页)
3.源程序:
main()
{int i,a,b,c
for(i=100i<999i++)
if((a=i/100)*a*a+(b=i/10%10)*b*b+(c=i%10)*c*c==i)
printf("%d\t",i)}
执行结果:
153 370 371 407
8.源程序(非递归算法):
#define P 13 /* P可以改为其他正整数 */
main()
{int a[P],r,c
for(r=0r<=Pr++)
{a[r]=1
for(c=r-1c>=1a[c--]+=a[c-1])
printf("%*d",(P-r)*3+1,a[0])
for(c=1c<=rprintf("%6d",a[c++]))
printf("\n")}
}
执行结果:
(应该排列成一个三角形,是贴吧造成现在这个样子的,不是程序有问题)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
9.源程序(递归算法):
#include "stdio.h"
void printOCT(unsigned long n)
{unsigned long i
if(i=n>>3)printOCT(i)
putchar((n&7)+48)}
main()
{unsigned long i
scanf("%ld",&i)
printOCT(i)}
执行结果:
1234567890
11145401322
本题也可以不用递归算法,源程序请参考第7章第三题4。
12 回复:【C语言】《C语言程序设计教程(第二版)》习题答案
但是不同时间印刷的版本课后题不太一样呢,象我们的是1999年12月第2版,2005年12月第69次印刷的。没有选择填空,应用题和楼主不知道有多少相同的,因为看不到原题。这个比较麻烦呢。
作者:210.77.204.* 2006-5-9 18:38 回复此发言
--------------------------------------------------------------------------------
13 回复:【C语言】《C语言程序设计教程(第二版)》习题答案
你对照一下主编和出版社,看看对吗?(见说明的第一条。)
我不是说叫你有问题另发帖子吗?
14 第9章 指 针
一、单项选择题(第276页)
1-5.DCDAC 6-10.CCABC 11-16.AABBB 16-20.DCDBD
二、填空题(第278页)
1.①int * ②*z
2.*p++
3.①'\0' ②++
4.①q=p+1 ②q<p+10 ③*q>max ④*q<min
三、编程题(第280页)
7.源程序:
main()
{int i=0char c[20]
do{scanf("%s",&c)i++}
while(strcmp(c,"stop"))
printf("%d\n",i)}
执行结果:
This car ran form Nanyang
to Luoyang without a stop
10
9.源程序:
main()
{char s[255],c[255]={0}int i
gets(s)
for(i=0s[i]c[s[i++]]++)
for(i=0i<255i++)
if(c[i])printf("%c=%d\t",i,c[i])}
执行结果:
abcedabcdcd
a=2 b=2 c=3 d=3 e=1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)