c程序设计第五版第七章答案(c程序设计第五版第七章课后答案)
今天给各位分享c程序设计第五版第七章答案的知识,其中也会对c程序设计第五版第七章课后答案进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、谭浩强《C程序设计》习题7.3 ,关于注释:在%f前有一个空格,否则无法输入数据
- 2、求C/c++程序设计教程(高等教育出版社)龚沛曾 杨志强主编课后习题答案
- 3、求C程序设计答案
- 4、c语言程序设计答案
- 5、c语言程序设计苏小红版第七章课后实验答案
- 6、求《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程序设计第五版第七章课后答案的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。