c程序设计第五版第七章答案(c程序设计第五版第七章课后答案)

程序设计 179
今天给各位分享c程序设计第五版第七章答案的知识,其中也会对c程序设计第五版第七章课后答案进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、

今天给各位分享c程序设计第五版第七章答案的知识,其中也会对c程序设计第五版第七章课后答案进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

谭浩强《C程序设计》习题7.3 ,关于注释:在%f前有一个空格,否则无法输入数据

空格表示数字中间的分隔。否则你会输入一大串继续的数字

如:64738382934632819372页没有分隔

加上空格输入的时候就是 647 383 82 93 463 28 19 372

求C/c++程序设计教程(高等教育出版社)龚沛曾 杨志强主编课后习题答案

实验6:

1.编一判断m是否为素数的函数,并在主函数中利用它输出十对最小的孪生素数。所谓孪生素数是指两个相差为2的素数,如3和5,11和13。输出形式如图2.6.1。

函数形式为:

bool isprime(int m);

#include "iostream.h"

int isprime(int m) //判别m是否为质数

{ int i;

for(i=2;m%i!=0;i++);

return (i==m);

}

void main()

{int x,count=0;

x=2;

while(1)

{ if(isprime(x)isprime(x+2))

{count++;

cout"("x","x+2")"endl;

if(count=10)break;

}

x++;

}

}

2. 编一函数,功能为构造正整数x的逆序数。再编一主函数,输出10个大于10000的最小的回文数。回文数是指顺读和倒读都相同的数,如5、151、3553等。

函数形式为:int reverse (int x);

#include"iostream.h"

#include"stdlib.h"

#include"time.h"

int f(int a)

{ int b,c=0;

while(a!=0)

{b=a%10;

c=c*10+b;

a/=10;

}

return c;

}

void main()

{ int x,i,k=0,t; bool tag=true;

srand(time(NULL));

for(x=10000;k10;x++)

{

if(f(x)==x)

{coutxendl;k++;if(k==10)break;}

}

}

3.编一函数,功能为判断一字符串是否为回文,如果是回文则返回1,否则返回0。回文是指顺读和倒读都一样的字符串,如“deed”和“level”是回文。在主函数中对输入的字符串加以调用。

函数形式为:int huiwen(char s[]);

#include iostream.h

#include string.h

#include stdio.h

int huiwen(char s[])

{

int i,n=0;

char ch,s1[80];

strcpy(s1,s); //原来的字符串保留在s1中

while(s[n])n++; //求字符串长度

for(i=0;in/2;i++) //构造逆序的字符串

{ ch=s[i]; s[i]=s[n-i-1]; s[n-i-1]=ch; }

if(strcmp(s1,s)==0)

return 1;

else

return 0;

}

void main()

{ char s[80]; int i,count=0;

cout"输入5个字符串:"endl;

for(i=0;i5;i++)

{ gets(s);

if(huiwen(s))count++;

}

cout"回文个数:"countendl;

}

4.函数的功能是将学生成绩从高分到低分排序,并统计优秀与不及格的人数。用下面两种方法实现:

(1)函数形式为:int fun(int s[],int n,int *x);

要求优秀人数通过return返回,不及格人数通过指针参数返回结果。

(2)函数形式为:void fun(int s[],int n,int x,int y);

要求优秀与不及格的人数通过引用参数返回结果。

分别编二个程序,学生数从键盘输入。

方法一:

#include iostream.h

#define N 10

int fun(int a[],int n,int *x)

{int i,j,k;

*x=0;

for(i=0;in-1;i++)

{k=i;

for(j=i+1;jn;j++)

if(a[j]a[k])

k=j;

if(k!=i)

{int t=a[k]; a[k]=a[i]; a[i]=t;}

}

for(i=0;in;i++)

if(a[i]=60)

*x=*x+1;

return(n-*x);

}

void main()

{int a[N],i,n,pass,npass;

cinn;

for(i=0;in;i++)

cina[i];

npass=fun(a,n,pass);

cout"pass="pass",npass="npassendl;

cout"成绩由高到低依次为:\n";

for(i=0;in;i++)

couta[i]endl;

}

方法2:

#include iostream.h

#define N 10

void fun(int a[],int n,int x,int y)

{int i,j,k;

x=0;

for(i=0;in-1;i++)

{k=i;

for(j=i+1;jn;j++)

if(a[j]a[k])

k=j;

if(k!=i)

{int t=a[k]; a[k]=a[i]; a[i]=t;}

}

for(i=0;in;i++)

if(a[i]=60)

x=x+1;

y=n-x;

}

void main()

{int a[N],i,n,pass,npass;

cinn;

for(i=0;in;i++)

cina[i];

fun(a,n,pass,npass);

cout"pass="pass",npass="npassendl;

cout"成绩由高到低依次为:\n";

for(i=0;in;i++)

couta[i]endl;

}

5. 编一函数,功能为统计字符串中各个字母(不区分大、小写)出现的频率,同时找出频率出现最高的字母及次数。。函数形式为:

void freq(char s[],int p[],char chmax,int max)

#include "iostream.h"

#include "stdio.h"

#include "string.h"

void freq(char s[],int p[],char chmax,int max)

{ for(int i=0;i26;i++)

p[i]=0;

strlwr(s);

i=0;

while(s[i]!='\0')

{ if(s[i]='a's[i]='z')

p[s[i]-'a']++;

i++;

}

max=p[0]; int k=0;

for(i=1;i26;i++)

if(p[i]max)

{ max=p[i];k=i;}

chmax=k+97;

}

void main()

{ int p[26],i,max; char s[80],chmax;

gets(s);

freq(s,p,chmax,max);

for(i=0;i26;i++)

if(p[i])coutchar(i+97) "----"p[i]endl;

coutchmax"----"maxendl;

}

6.编写函数max,其功能是将字符串s中最大字符的地址返回,再编写一个主函数,调用该函数,将字符串s中从最大字符开始的子串中的小写字母转换成大写字母,然后输出新字符串s。例如,假设s的内容为“qwertyou”,则从最大字符’y’开始的子串为“you”,处理后的s为“qwertYOU”。

函数形式为:char *max(char s[]);

#include "iostream.h"

#include "string.h"

#include "stdio.h"

char *max(char s[])

{char *p=s;

int i=1,imax=0;

while(s[i]!='\0')

{ if(s[i]s[imax])imax=i;

i++;

}

while(s[imax]!='\0') //等价于strupr(s[imax]);

{s[imax]-=32;imax++;}

return p;

}

void main()

{char s[100];

gets(s);

coutmax(s)endl;

}

7.编一函数,求级数的部分和,当最后一项的值小于eps时结束。设eps的默认值为10-6 。函数形式为:

double fun(double x, double eps=1e-6);

#include iostream.h

#include math.h

double fun(double x,double eps=1e-6)

{int n=1;

double t=1,s=0;

while(fabs(x/t)1e-6)

{

s=s+x/t;

n=n+2;

t=-t*n*(n-1);

}

return s;

}

void main()

{double x;

cinx;

coutfun(x)endl;

}

8.编写两个同名的函数,分别求出整型数的两点间距离和浮点型数的两点间距离,调试成功后,再将其改为用函数模板实现。

函数形式为:

double dist(int x1, int y1, int x2, int y2);

double dist(double x1, double y1, double x2, double y2);

#include iostream.h

#include math.h

double dist(int x1,int y1,int x2,int y2)

{

return(sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));

}

double dist(double x1,double y1,double x2,double y2)

{

return(sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));

}

void main()

{int x1,x2,y1,y2;

double x11,x12,y11,y12;

cinx1y1x2y2;

cinx11y11x12y12;

cout"dist1="dist(x1,y1,x2,y2)endl;

cout"dist2="dist(x11,y11,x12,y12)endl;

}

用函数模板来实现:

#include iostream.h

#include math.h

template class T

double dist(T x1,T y1,T x2,T y2)

{

return(sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));

}

void main()

{int x1,x2,y1,y2;

double x11,x12,y11,y12;

cinx1y1x2y2;

cinx11y11x12y12;

cout"dist1="dist(x1,y1,x2,y2)endl;

cout"dist2="dist(x11,y11,x12,y12)endl;

}

实验7:

1、

#include "iostream.h"

#define N 5

struct student

{

char *num;

int score;

};

student max(student s[],int n)

{

student t=s[0];

for(int i=1;in;i++)

if(s[i].scoret.score)

t=s[i];

return t;

}

void main()

{

student s[N],maxs;

int i;

for(i=0;iN;i++)

{

s[i].num=new char[10];//假设学号不超过9位

cins[i].nums[i].score;

}

maxs=max(s,N);

coutmaxs.num' 'maxs.scoreendl;

}

2、

#include "iostream.h"

#include "string.h"

#define N 5

struct book

{

char name[30];

double price;

};

void sort(book b[],int n)

{

int i,j;

book t;

for(i=0;in-1;i++)

for(j=0;jn-1-i;j++)

if(strcmp(b[j].name,b[j+1].name)0)

{

t=b[j];

b[j]=b[j+1];

b[j+1]=t;

}

}

void main()

{

book b[N];

int i;

for(i=0;iN;i++)

cinb[i].nameb[i].price ;

sort(b,N);

for(i=0;iN;i++)

coutb[i].name' 'b[i].price endl;

}

3、

#include "iostream.h"

void main()

{

struct date

{

int year;

int month;

int day;

}d;

int dpm[12]={31,28,31,30,31,30,31,31,30,31,30,31},i,s=0;

cind.yeard.monthd.day;

if(d.year%400==0||d.year%4==0d.year%100!=0)

dpm[1]=29;

for(i=0;id.month-1;i++)

s=s+dpm[i];

s=s+d.day;

cout"s="sendl;

}

4、

#define N 5

#include "iostream.h"

struct node

{

char num[6]; //职工工号

char name[20]; //职工姓名

double wage; //职工工资

node *next;

};

node *deln(node *head,int n)

{

node *p=head,*q;

int i=1;

if(n==1)

head=head-next;

else

{ while(inp-next!=NULL)

{

q=p;

p=p-next;

i++;

}

q-next =p-next ;

}

delete p;

return head;

}

void print(node *head)

{

node *p=head;

while(p!=NULL)

{

coutp-name' 'p-num ' 'p-wage endl;

p=p-next;

}

}

void main()

{

node *head=NULL,*tail=NULL,*newnode;

int i,n;

for(i=0;iN;i++)

{

newnode=new node;

cinnewnode-name newnode-numnewnode-wage ;

if(head==NULL)

head=newnode;

else

tail-next=newnode;

tail=newnode;

}

tail-next=NULL;

print(head);

cinn; //输入待删除结点的序号

head=deln(head,n);

print(head);

}

5、

#define N 5

#include "iostream.h"

#include "string.h"

struct node

{

char num[6]; //职工工号

char name[20]; //职工姓名

double wage; //职工工资

node *next;

};

void modify(node *head,char num[],double w)

{

node *p=head;

while(p!=NULLstrcmp(p-num ,num)!=0)

p=p-next ;

if(p==NULL)

coutnum"not exist.\n";

else

p-wage =w;

}

void print(node *head)

{

node *p=head;

while(p!=NULL)

{

coutp-name' 'p-num ' 'p-wage endl;

p=p-next;

}

}

void main()

{

node *head=NULL,*tail=NULL,*newnode;

int i;

char num[6];

double w;

for(i=0;iN;i++)

{

newnode=new node;

cinnewnode-name newnode-numnewnode-wage ;

if(head==NULL)

head=newnode;

else

tail-next=newnode;

tail=newnode;

}

tail-next=NULL;

print(head);

cinnumw; //输入待修改信息的工号、新工资

modify(head,num,w);

print(head);

}

6、

#include "iostream.h"

#include "stdio.h"

struct node

{

char ch;

node *next;

};

void main( )

{

struct node *head, *p, *q,*newnode,*tail;

char s[100];

gets(s);

head = new node ; // 在链表中插入伪结点,不关心该结点的数据域的值。

head-next =NULL;

tail = head;

for (int i=0;s[i]!='\0';i++)

{

newnode=new node;

newnode-ch=s[i];

newnode-next =NULL;

p=head-next;

while(p!=NULLs[i]p-ch)

{

q=p;

p=p-next ;

}

if(p==NULL)

{

tail-next =newnode;

tail=newnode;

}

else

{

q-next =newnode;

newnode-next =p;

}

}

p=head-next ;

while(p!=NULL)

{

coutp-ch;

p=p-next ;

}

}

实验8:

1、

#include "iostream.h"

#include "stdio.h"

#include "stdlib.h"

void main()

{

FILE *fp;

char s[100];

int i;

fp=fopen("abc.txt","w");

if(fp==NULL)

{

cout"can't open abc.txt.\n";

exit(1);

}

gets(s);

i=0;

while(s[i]!='\0')

{

if(s[i]='a's[i]='z')

s[i]=s[i]-32;

else if(s[i]='A's[i]='Z')

s[i]=s[i]+32;

i++;

}

fputs(s,fp);

fclose(fp);

}

2、

#include "iostream.h"

#include "stdio.h"

#include "stdlib.h"

void main()

{

FILE *fp;

char ch;

fp=fopen("abc.txt","r");

if(fp==NULL)

{

cout"can't open abc.txt.\n";

exit(1);

}

while(1)

{

ch=fgetc(fp);

if(feof(fp))

break;

coutch"("(int)ch")";

}

}

3、

#include "iostream.h"

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

void main()

{

FILE *fp;

char s[100],t[100];

int i,len;

fp=fopen("abc.txt","w");

if(fp==NULL)

{

cout"can't open abc.txt.\n";

exit(1);

}

gets(s);

len=strlen(s);

strcpy(t,s);

for(i=0;ilen/2;i++)

{

char ch=s[i];

s[i]=s[len-1-i];

s[len-1-i]=ch;

}

fputs(s,fp);

fputs(t,fp);

fclose(fp);

}

求C程序设计答案

第二题可直接用C语言中math.h中的pow(x,y)来做,就不给出程序了。

第一题如下:

#includestdio.h

void main()

{

int x,y,z;

printf("白\t红\t黑\n");

for(x=1;x=5;x++)

for(y=0;y=3;y++)

{

z=8-x-y;

printf("%d\t%d\t%d\n",x,y,z);

}

}

第三题:

#includestdio.h

void main()

{

int i,k,add,multiply;

for(i=1;i=100;i++)

{

k=i; add=0; multiply=1;

while(k)

{

add=add+k%10;

multiply=multiply*(k%10);

k=k/10;

}

if(multiplyadd)

printf("%d\t",i);

}

}

上述程序已经在机上调试完毕!

c语言程序设计答案

只说一下思路

实在写不出来再追问

最好能自己解决

第一题:

就是一个杨辉三角问题

用双循环

外循环是行数(用

i

表示)

从0到n

(n自己输入)

内循环是列数(用

j

表示)

从0到2*i-1

然后就是赋

很多种方式

比如你定义一个

字符变量

C

给它赋值为A

然后每次都用C给数组赋值

然后让C加1

方法很多

(数组是字符二维数组,

之前要初始化一下

给数组都赋值为

空格)

第二题:

定义两个二维数组

一个一维数组

按照题目要求

先把每个同学的成绩和名字分别存放到两个二维数组里面

同样是双循环

然后再用双循环

把每个同学成绩加起来放到一维数组里面

然后接下来就是对一位数组内容进行排序

排序过程中

也要将名字的那个二维数

组同样排序

因为一维数组中的总分顺序和二维数组中的姓名顺序是一样的

比如

要将第二个同学的成绩和第五个同学的成绩交换

那么就要

将总分交换

再将姓名交换

不然分就不对人了

第三题:

题目没明白什么意思

第四题:

用循环从第一个元素判断到最后一个元素

定义4个变量存储

数字

大写

小写

空格出现的次数

查一下ASCII码

数字好像是48-57

大写字母是

65-90

小写是

97-122

判断元素内容的ASCII在哪个范围

哪个变量就加1

c语言程序设计苏小红版第七章课后实验答案

不知道你说的是不是这一次实验

2.2.7  实验7:二维数组和函数综合编程练习

成绩排名次

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:

(1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;

(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

【思考题】  请读者思考如下问题。

① 如果增加一个要求:要求按照学生的学号由小到大对学号、成绩等信息进行排序,那么程序如何修改呢?

② 如果要求程序运行后先打印出一个菜单,提示用户选择:成绩录入、成绩排序、成绩查找,在选择某项功能后执行相应的操作,那么程序如何修改呢?

答案

#include  stdio.h

#define STU 30

#define COURSE 3

void Input(long num[],int score[][COURSE],int n);

void GetSumAver(int score[][COURSE],int n,int sum[],float aver[]);

void Sort(long num[],int score[][COURSE],int n,int sum[],float aver[]);

void Print(long num[],int score[][COURSE],int n,int sum[],float aver[]);

int  Search(long num[], int n, long x);

main()

{

int n, score[STU][COURSE], sum[STU], pos;

long num[STU], x;

float aver[STU];

printf("Please enter the total number of the students(n=30):");

scanf("%d", n); /*输入参加考试的学生人数*/

printf("Enter No. and score as: MT  EN  PH\n");

Input(num, score, n); /*输入学生成绩*/

GetSumAver(score, n, sum, aver); /*计算总分和平均分*/

printf("Before sort:\n");

Print(num, score, n, sum, aver);

Sort(num, score, n, sum, aver); /*排名次*/

printf("After sort:\n");

Print(num, score, n, sum, aver);

printf("Please enter searching number:");

scanf("%ld", x); /*以长整型格式输入待查找学生的学号*/

pos = Search(num, n, x); /*名次查询*/

if (pos != -1)

{

printf("position:\t  NO \t  MT \t  EN \t  PH \t  SUM \t AVER\n");

printf("%8d\t%4ld\t%4d\t%4d\t%4d\t%5d\t%5.0f\n",

    pos+1,num[pos], score[pos][0],score[pos][1],

    score[pos][2], sum[pos],aver[pos]);

}

else

{

printf("Not found!\n");

}

}

/* 函数功能:输入某班学生期末考试三门课程成绩

 函数参数:长整型数组num,存放学生学号

           整型数组score,存放学生成绩

   整型变量n,存放学生人数

 函数返回值:无

*/

void Input(long num[], int score[][COURSE], int n)

{

int  i, j;

for (i=0; in; i++)

{

scanf("%ld", num[i]);

for (j=0; jCOURSE; j++)

{

scanf("%d", score[i][j]);

}

}

}

/* 函数功能:计算每个学生的总分和平均分

 函数参数: 整型数组score,存放学生成绩

    整型变量n,存放学生人数

整型数组sum,计算得到的每个学生的总分

实型数组aver,计算得到的每个学生的平均分

 函数返回值:无

*/

void GetSumAver(int score[][COURSE], int n, int sum[], float aver[])

{

int i, j;

for (i=0; in; i++)

{

sum[i] = 0;

for (j=0; jCOURSE; j++)

{

sum[i] = sum[i] + score[i][j];

}

aver[i] = (float)sum[i] / COURSE;

}

}

/* 函数功能:按总分成绩由高到低排出成绩的名次

 函数参数:长整型数组num,存放学生学号

           整型数组score,存放学生成绩

整型变量n,存放学生人数

整型数组sum,存放每个学生的总分

实型数组aver,存放每个学生的平均分

 函数返回值:无

*/

void Sort(long num[],int score[][COURSE], int n, int sum[], float aver[])

{

int i, j, k, m;

int temp1;

long temp2;

float temp3;

for (i=0; in-1; i++)

{

k = i;

for (j=i+1; jn; j++)

{

if (sum[j] sum[k])  k = j;

}

if (k != i)

{

temp1 = sum[k];  sum[k] = sum[i];  sum[i] = temp1;

temp2 = num[k];  num[k] = num[i];  num[i] = temp2;

temp3 = aver[k];  aver[k] = aver[i];  aver[i] = temp3;

for (m=0; mCOURSE; m++)

{

temp1 = score[k][m];

score[k][m] = score[i][m];

score[i][m] = temp1;

}

}

}

}

/* 函数功能: 打印名次表,表格内包括学生编号、各科分数、总分和平均分

 函数参数: 长整型数组num,存放学生学号

整型数组score,存放学生成绩

整型变量n,存放学生人数

整型数组sum,存放每个学生的总分

实型数组aver,存放每个学生的平均分

 函数返回值:无

*/

void Print(long num[], int score[][COURSE], int n,

int sum[], float aver[])

{

int  i, j;

printf("  NO \t|   MT \t  EN \t PH \t SUM \t AVER\n");

printf("----------------------------------------------------\n");

for (i=0; in; i++)

{

printf("%ld\t| ", num[i]);

for (j=0; jCOURSE; j++)

{

printf("%4d\t", score[i][j]);

}

printf("%5d\t%5.0f\n", sum[i], aver[i]);

}

}

/* 函数功能:在学号数组中顺序查找学生的学号

 函数参数:长整型数组num,存放学生学号

           整型变量n,存放学生人数

长整型变量x,存放待查找学生的学号

 函数返回值:找到时,返回学生学号在学号数组中的下标位置,否则返回值-1

*/

int Search(long num[], int n, long x)

{

int  i;

for (i=0; in; i++)

{

if (num[i] == x)  return(i);

}

return (-1);

}

求《C语言程序设计基础》的课后习题答案

大学学习资料免费下载网 有类似资料

在 其他公共课程 版块

标题:陈东方 C语言程序设计基础实验与题解(答案)

中国物联网校企联盟技术部

关于c程序设计第五版第七章答案和c程序设计第五版第七章课后答案的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

扫码二维码