求c语言程序设计答案

Python019

求c语言程序设计答案,第1张

#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++不可以嘛?

A

**0**

**2**

C

同学,你是在问题,还是在对题,还是在??

你具体不懂什么呢。

这些都是简单的循环类,条件类。

比如说switch

中的break对switch有效,遇到break,则就近的switch跳出。

continue只对循环有效,而对switch无效。

还有if

else

是选择结构的,即选择了if,则执行if后的语句,else部分的不看。

还比如说++a和a++

前者先自增,后使用,后者先使用,后自增。

再比如说变量的使用范围,即从定义处往下就是他的作用域。

有静态的,具备继承性 static

有扩展的,当你在别的函数中也想使用下面定义的变量时,就可以用extern

还有局部的,在一个函数中的a,与另一个函数中的a,此a非彼a

当变量定义在符合语句里时,他的作用域仅仅局限于此复合语句。。其他同名变量,并非此变量。

请问还有什么不懂的么。

《C语言程序设计》作业与思考题解答

说明:习题中P119:2.7 表示《C/C++上机实践及习题选解》中第119页的2.7题,其它以此类推,书后有解答。非《C/C++上机实践及习题选解》中的习题提供习题参考答案。

习题解答

作业一

1.合法的标识符: a12 A21 sum2 _fun C_program

不合法的标识符:f(x) $a21 21a while [email protected]

2.

main( )

{ int i, j, s

i=2j=3

s=i*j

printf(“ %d %d=%d”,i,j,s)

}

作业二

1.指出下列哪些为C语言正确的整型(int)常量、实型(float)常量、字符型(char)常量?

正确的整型(int)常量:0 -325 128 03456

正确的实型(float)常量: 0.0 2. 1.2e-3 5e2

正确的字符型(char)常量: ‘b’ ‘104’ ‘108’ ‘ ’ ‘8’

2.表达式的结果 (1) 1

(2) 0

(4) 0

(5) 9.5

(9) ‘A’

(11) 2

(12) 4.5

3. Y=sin(2*x)+(a+b)/(a*b)/(1+a/b)+*a*a/2

4.设m为整数,用逻辑表达式表示:能同时被3与7整除或者被5除余2且小于100的整数。

m%3= =0 &&m%7= =0 || m%5= =2 &&m<100

作业三

1.华氏温度通过公式C=5/9(f-32)转换成摄氏温度。试编程并上机调试运行:从键盘上输入华氏温度,利用公式计算后输出摄氏温度(要求:保留一位小数;记录调试过程中遇到的问题及解决方法)。

#include

main( )

{ float f,c

scanf(“%f”,&f)

c=5.0/9*(f-32)

printf(“c=%.1f”,c)

}

2.

用IF语句:

#include

#include

main( )

{ float x,y

scanf(“%f”,&x)

if (x<0) y=fabs(x)

else if (x<10) y=x

else if (x<20) y=3-x/5

else if (x<40) y=3*x-10

else y=0

printf(“y=%f’,y)

}

用switch 语句:

#include

#include

main( )

{ float x,y

scanf(“%f”,&x)

if (x<0) y=fabs(x)

else switch ( int(x/10) )

{ case 0: y=xbreak

case 1: y=3-x/5break

case 2,3: y=3*x-10break

defaut y=0

}

printf(“y=%f’,y)

}

3. 解答见P151

4.程序如下:

#include

#include

main()

{

int i=0

char ch

ch=getchar()

while (ch!=' ')

{ if (ch=='(') i++

if (ch==')') i--

if (i<0) break

ch=getchar()

}

if (i==0) printf("(与)匹配")

else if (i<0) printf(" 缺) ")

else printf("缺少)")

}

5. 程序如下:

#include

main()

{

int i,j,k,m=0

for (i=1i<10i++)

for (j=1j<20j++)

{ k=100-i*10-j*5

if (k>0) { printf(" i=%-3dj=%-3dk=%-3d",i,j,k)

m++

if (m%4==0) putchar(' ')

}

}

printf(" m=%d ",m)

}

6. 在横线上填写合适语句,完善程序,使之完成如下功能:从键盘上输入一个不多于7位的正整数,统计其中2的个数,并求各位数字中的最小数。

#include

main( )

{int count,min,temp

long n

min=9count=0

scanf( “%ld” ,&n)

do

{ temp= n % 10

if (temp= =2) count++

if (min>temp) min=temp

n=n/10

}while ( n )

printf(“count=%d,min=%d”,count,min)

}

作业四

1.p128: 4.6 解答见p156

2. p128: 4.11 解答见p158

3.编写一递归函数计算mn ,并从键盘输入m,n的值(如4,3),求mn 的值(上机调试)。

funm_n(int m,int n)

{

int y

if (n==1) y=m

else y=m*funm_n(m,--n)

return y

}

main()

{int m,n,y

printf("Input integer(m,n):")

scanf("%d,%d",&m,&n)

y=funm_n(m,n)

printf(" %d^%-d=%-d",m,n,y)

}

4.P128: 4.12 (3)答案:12345678

5.求3-100中的素数,要求编写一函数来判断某数是否为素数。

main()

{

int prime,i,n=0

for (i=3i<=100i++)

{ prime=prime_num(i)

if (prime) { if (n%10==0) printf(" ")printf("%4d",prime)n++}

}

}

prime_num(int m)

{ int k=2,r

do {

r=m % k

if (r==0) break

k++

}while(k<m)p=""></m)>

if (r!=0) return m

else return 0

}

6. 结果如下:

main0:x=12,y=2

fun: x=6,y=25

main:x=12,y=2

fun:x=7,y=26

main:x=12,y=2

作业五

1.从键盘上输入一串英文字符(不含空格与其他字符),统计每个字符的数目,并输出字母及相应的数目。

#include

#include

main()

{

int i=0,c[52]={0},m=0

char str[80]

printf("Input a string:")

scanf("%s",str)

while (str[i])

{ if (str[i]>='A' &&str[i] <='Z') c[str[i]-'A']++

if (str[i]>='a' &&str[i] <='z') c[str[i]-'a'+26]++

i++

}

for (i=0i<26i++)

if (c[i]){ if (m%8==0) putchar(' ')m++

printf("%c:%-d ",i+'A',c[i])

}

for (i=0i<26i++)

if (c[i+26]){if (m%8==0) putchar(' ')m++

printf("%c:%-d ",i+'a',c[i+26])

}

}

2. P132: 5.15 程序见p167

3.从键盘上输入8个数,用选择法按由大到小的顺序排列并输出,要求用指针实现。

#include

#include

main()

{

int data[8],i,*p1,*p2,temp

p1=data

printf("Input 8 numbers:")

for (i=0i<8i++)

{ scanf("%d",p1)/* 或 &(*p1) */

p1++

}

for (p1=datap1<data+8-1p1++) p=""></data+8-1p1++)>

for (p2=p1+1p2<data+8p2++) p=""></data+8p2++)>

if (*p1<*p2){ temp=*p1*p1=*p2*p2=temp}

for (i=0,p1=datai<8i++,p1++)

printf("%6d",*p1 )

}

4.从键盘上输入一个4 4整数矩阵,以主对角线()为对称轴,将左下角元素中较大元素代替右上角对应元素,并将右上角元素(含对角线元素)输出。

#include

#include

main()

{

int d[4][4],i,j,temp

printf("Input 16 numbers:")

for (i=0i<4i++)

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

scanf("%d",&d[i][j])

for (i=0i<4i++)

for (j=0j<ij++) p=""></ij++)>

if (d[i][j]>d[j][i]) d[j][i]=d[i][j]

for (i=0i<4i++)

{ printf(" ")

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

if (j>=i) printf("%6d",d[i][j] )

else printf("%6c",' ')

}

}

5.盘上输入两个字符串a,b,下面程序将a,b的对应字符中的较大者存放在数组c的对应位置上,填空完善之。

#include

#include

main( )

{int k=0

char a[80],b[80],c[80]={‘’},*p,*q

p=aq=b

gets(a)gets(b)

while (*p!=0 || * q!=0 )

{ if ( *p!=0 ) c[k]=*p

else c[k]=*q

p++q++k++

if ( *p !=0 ) strcat(c,p)

else strcat(c,q)

puts(c)

}

作业六

1.P134:6.5 程序见p178

2.P135:6.7 程序见p181

3.P134:6.18 程序见p196