C语言程序设计项目教程习题答案建议收藏.docx
《C语言程序设计项目教程习题答案建议收藏.docx》由会员分享,可在线阅读,更多相关《C语言程序设计项目教程习题答案建议收藏.docx(35页珍藏版)》请在冰豆网上搜索。
![C语言程序设计项目教程习题答案建议收藏.docx](https://file1.bdocx.com/fileroot1/2023-1/3/9ebb67ac-6a8c-4ed7-aa7b-51511f3c1435/9ebb67ac-6a8c-4ed7-aa7b-51511f3c14351.gif)
C语言程序设计项目教程习题答案建议收藏
C语言程序设计项目教程习题答案
C语言程序设计项目教程—
习题答案ﻫ
说明:
本文档在“文档结构图”视图方式下应用比较方便.
第1章
第2章
第3章
第4章
第5章
第6章
第7章
第8章
第9章
第1章
1。
ﻩ什么是软件?
软件有哪些特点?
答:
软件是程序、数据及其相关文档的完整集合。
软件具有以下特点:
①软件是一种逻辑产品,它以程序和文档的形式出现,保存在计算机的存储器中(磁盘或光盘),通过计算机的运行才能体现它的功能和作用。
...文档交流仅供参考......文档交流仅供参考...
②软件产品的生产主要是研制。
③软件产品不会用坏,不存在磨损、消耗的问题,但是软件在使用过程中,往往需要根据用户需求变化或软硬件环境的变化对软件进行修改,这种修改被称为软件维护。
...文档交流仅供参考......文档交流仅供参考...
④软件产品的生产主要是脑力劳动。
5软件的费用是不断增加的,软件成本相当昂贵。
2.ﻩ什么是软件工程?
答:
软件工程是一门用工程化方法,指导计算机软件开发和维护的学科,它采用工程的概念、原理、技术和方法来开发、维护以及管理软件....文档交流仅供参考......文档交流仅供参考...
3。
ﻩ什么是软件生命周期?
软件生命周期包括哪些阶段?
答:
软件生命周期是指从开发软件概念的提出起,直到该软件的使用、失去使用价值而被废弃的整个过程,也可以称作软件生存周期。
...文档交流仅供参考......文档交流仅供参考...
软件生命周期包括可行性研究与计划制订、需求分析、软件设计、软件实现、软件测试、运行与维护.
4.ﻩ什么是软件开发模型?
答:
软件开发模型是软件开发全部过程、活动和任务的结构框架。
5。
写出数据结构的概念.
答:
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储、组织数据的方式。
数据结构主要研究和讨论数据的逻辑结构、存储结构和数据的运算。
...文档交流仅供参考......文档交流仅供参考...
6.填空:
1数据结构包括逻辑结构、存储结构和数据的运算三个方面.
2据结构的逻辑结构包括线性结构和非线性结构两大类.
3据结构的存储结构包括顺序存储结构、 链式存储结构、索引存储结构和散列存储结构四类。
4表是一种采用链式 存储结构的线性表。
7。
ﻩ什么是算法?
算法有哪些特性?
答:
算法是解决问题所采取的步骤和方法.算法具有以下特性:
有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出....文档交流仅供参考......文档交流仅供参考...
8.什么是算法的时间复杂度?
什么是算法的空间复杂度?
答:
时间复杂度是指执行算法所耗费的时间。
空间复杂度是指算法在计算机内执行时所占用的内存开销规模。
9~12. DCDA
13.分别用流程图、N-S图描述以下问题的算法.
(1)输入一个年份,判断是否为闰年。
提示:
闰年的判断条件为:
①能被4整除,但不能被100整除;②能被400整除.满足两个条件之一,即为闰年....文档交流仅供参考......文档交流仅供参考...
(2)从键盘输入三个不等的整数,输出最大值。
(3)计算并输出5!
。
一.选择题
返回
第2章
1。
什么是程序?
什么是程序设计?
答:
程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。
程序设计是指设计、编制、调试程序的方法和过程。
...文档交流仅供参考......文档交流仅供参考...
2.程序设计包括哪三个部分?
答:
程序设计包括三个部分:
输出结果、计算方法、原始数据。
3。
结构化程序设计的原则有哪些?
答:
结构化程序设计的原则是自顶向下、逐步求精、模块化,以及避免使用goto语句。
4~8.BBDBD
返回
第3章
一.选择题
1~20ADCABCADACDCBAADCDBA
二.填空题
21 a=a+(a+b)
223
23printf(”a=%d\nb=%d\n",a,b);
24201632
25 1B
261217
27 abc
28 11
29 for(i=10;i〈100;i++)printf(“*”);
3020
三、编程
1.输入圆柱体的底面半径和高,求圆柱体的体积。
#include”stdio。
h”
main()
{
float r,h,v;
ﻩprintf("输入圆柱体的底面半径和高(用空格隔开):
");
scanf("%f%f",&r,&h);
v=3.14*r*r*h;
ﻩprintf("圆柱体体积为:
%.2f",v);
}
2.如果一个数恰好等于它的因子之和,则称该数为“完全数”。
注意:
一个数的因子不包括它自身,如6的因子为1,2,3,6就是一个完全数。
求1~100之间的“完全数”。
...文档交流仅供参考......文档交流仅供参考...
#include”stdio.h"
main()
{
intx,i,s;
for(x=1;x〈=100;x++)
ﻩ{
s=0;
ﻩfor(i=1;i<x;i++)
ﻩif(x%i==0)s+=i;
if(x==s)printf("%d\n",x);ﻩﻩﻩ
}
}
3.编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
操作数1运算符op 操作数2
然后,计算表达式的值并输出结果。
比如,运行程序时输入2+3后,能够输出其结果5.指定的运算符为加(+)、减(-)、乘(*)、除(/)。
...文档交流仅供参考......文档交流仅供参考...
#include"stdio.h”
main()
{
ﻩfloata,b;
charop;
printf("输入如\"1.5+2.4\"的算式:
\n");
scanf("%f%c%f",&a,&op,&b);
switch(op)
{
case’+':
printf("=%.2f\n",a+b);break;
ﻩcase'—':
printf("=%。
2f\n”,a+b);break;
ﻩcase'*’:
printf("=%.2f\n”,a+b);break;
case ’/’:
printf("=%.2f\n",a+b);break;
ﻩdefault:
printf("本计算器只能执行加减乘除运算”);
}
}
4.趣味数学题:
有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,编程求解男人、女人和小孩各可能有几人?
...文档交流仅供参考......文档交流仅供参考...
#include"stdio.h"
main()
{
ﻩint x,y,z;
ﻩfor(x=1;x〈=16;x++)
for(y=1;y<=25;y++)
{
ﻩz=30—x—y;
ﻩif(x*3+y*2+z==50)
ﻩprintf("man:
%d,woman:
%d,child:
%d\n”,x,y,z);
ﻩ}
}
5.求序列1,5,6,11,17,28,45,73……的第10项的值。
#include”stdio.h”
main()
{
inti,x1=1,x2=5;
printf(”序列1,5,6,11,17,28,45,73。
.....第十项是:
");
for(i=1;i〈5;i++)
{
x1=x1+x2;
ﻩx2=x1+x2;
ﻩ}
ﻩprintf(”%d\n”,x2);
}
6.如果一个正整数等于其各位数字的立方和,则称该数为阿姆斯特朗数。
如 407=43+03+73就是一个阿姆斯特朗数.试编程求1000以内的所有阿姆斯特朗数。
...文档交流仅供参考......文档交流仅供参考...
#include"stdio.h”
main()
{
inti,j,k,x;
ﻩprintf(”1000以内的阿姆斯特朗数如下:
");
for(x=1;x<1000;x++)
ﻩ{
ﻩi=x%10;
ﻩj=x/10%10;
ﻩk=x/100;
ﻩif(i*i*i+j*j*j+k*k*k==x)printf("%d\n",x);
}
}
返回
第4章
1。
在“校园歌手大奖赛”中有10位评委为选手打分,某位选手的最终得分是去掉一个最高分、去掉一个最低分后的平均分,编写程序实现这一功能。
...文档交流仅供参考......文档交流仅供参考...
#include"stdio。
h"
#define N10/*评委人数*/
#define MAXﻩ10/*打分分数上限*/
#defineMIN0/*打分分数下限*/
intmain()
{
floats[N];ﻩ/*存储10位评委的打分*/
floatsum=0;/*sum用于存储10个分数之和*/
floataver;ﻩ/*aver用于存储最终得分*/
floatmin=MAX,max=MIN;
int i;/*循环控制变量*/
for(i=0;i{
ﻩprintf("请输入第[%d]个评委的打分:
”,i+1);
ﻩscanf(”%f",&s[i]);
ﻩsum+=s[i];
ﻩif(min>s[i])min=s[i];ﻩ/*min得到最低分*/
ﻩif(max〈s[i])max=s[i];ﻩ/*max得到最高分*/
}
aver=(sum-max—min)/(N-2);/*计算除最高分和最低分的平均分*/
ﻩprintf("该选手最终得分为:
%.2f\n", aver);
ﻩreturn0;
}ﻩ
2.成绩分析是“成绩管理系统”的一个模块,包括统计各分数段人数及比例,计算平均分数、标准差等。
编程实现成绩分析的以上功能。
...文档交流仅供参考......文档交流仅供参考...
#include”stdio。
h”
#include"math.h" /*平方根函数sqrt()的头文件*/
#defineNﻩ10/*人数*/
voidmain( )ﻩ
{
inti; /*循环控制变量*/
ﻩfloat score[N]={55,86,79,93,66,71,95,72,88,65};/*准备数据*/...文档交流仅供参考......文档交流仅供参考...
int s[5]={0};ﻩ/*数组s存放个分数段人数*/
floatsum =0, aver;ﻩ/*sum存储总分,aver存储平均分*/
ﻩfloatvar,stdev;/*var存储方差,stdev存储标准差*/
ﻩfor(i=0;iﻩ{
ﻩsum+= score[i];
ﻩif(score[i]<60) s[0]++;
ﻩif(score[i]〉=60&&score[i]〈70)s[1]++;
if(score[i]>=70&& score[i]<80)s[2]++;
ﻩif(score[i]〉=80&&score[i]<90)s[3]++;
if(score[i]>=90&&score[i]<=100)s[4]++;
}
aver= sum/N;
ﻩvar=0;
for(i=0;i<N;i++)
ﻩﻩvar+=(aver-score[i])*(aver—score[i]);
ﻩvar/=N-1;/*计算方差*/
ﻩstdev=sqrt(var); /*计算标准差*/
ﻩprintf(”总分:
%.2f\n",sum);
printf(”平均分:
%。
2f\n”, aver);
ﻩprintf("不及格人数:
%d\n”,s[0]);
printf("60~69人数:
%d\n",s[1]);
printf("70~79人数:
%d\n",s[2]);
printf(”80~89人数:
%d\n",s[3]);
printf("90~100人数:
%d\n",s[4]);
printf(" 标准差:
%。
2f\n", stdev);
}
3。
利用数组存放斐波那契(Fibonacci)数列的前20项并输出.
斐波那契数列指的是这样一个数列:
1,1,2,3,5,8,13,……,即前两个数均为1,从第三个数开始,当前数为前两个数之和。
...文档交流仅供参考......文档交流仅供参考...
#include”stdio.h"
#defineN20/*项数*/
voidmain()
{
inti;/*循环控制变量*/
ﻩintF[N]={1,1};/*数组F用于存储前N项数*/
ﻩprintf("斐波那契数列:
\n");
printf("第%d项:
%d\n”,1,F[0]);/*输出第一项*/
printf(”第%d项:
%d\n",2,F[1]);/*输出第二项*/
ﻩfor(i=2;i〈N;i++)/*计算并输出后面各项*/
ﻩ{
F[i]=F[i-2]+F[i—1];
ﻩﻩprintf(”第%d项:
%d\n",i+1,F[i]);
ﻩ}
}
4.使用数组精确计算M/N(0<M〈N〈=100)的值.如果M/N是无限循环小数,则计算并输出它的第一循环节,同时要求输出循环节的起止位置(小数位的序号)....文档交流仅供参考......文档交流仅供参考...
循环节:
如果无限小数的小数点后,从某一位起向右进行到某一位止的一节数字循环出现,首尾衔接,称这种小数为循环小数,这一节数字称为循环节。
...文档交流仅供参考......文档交流仅供参考...
#include”stdio.h”
#defineMAX100 /*最大计算精度*/
void main()
{
ﻩintm, n;/*被除数和除数*/
ﻩinti,j; /*循环控制变量*/
intflag =0;/*数据性质标志,0:
表示非无限循环小数;1:
表示无限循环小数*/
ﻩintremainder[MAX]; /*存放每次除法的余数*/
ﻩintquotient[MAX];/*存放每次除法的商数*/
ﻩintstart;/*循环节起始位*/
intend;/*循环节终止位*/
printf(”请输入被除数M:
");
ﻩscanf(”%d",&m);
ﻩprintf("请输入除数N(N〉M):
”);
scanf(”%d”,&n);
printf(”%d/%d=%d.",m,n,m/n); /*输出"0"和小数点*/
ﻩm=m%n; /*第一次余数再存入m中*/
ﻩfor(i=0;iﻩ{
remainder[i]=m;/*保存当前余数*/
ﻩm*=10; /*余数扩大10倍,作为下一个被除数*/
ﻩﻩquotient[i]=m/n;/*保存本次商*/
ﻩﻩprintf(”%d”,quotient[i]);/*输出小数点后各位*/
m =m%n;/*余数再次放入变量m中*/
ﻩif(m==0)break;/*当前余数为0,结束循环*/
ﻩﻩfor(j=0;j〈=i;j++)/*本循环查找当前余数是否已经存在*/
ﻩ{
if(m==remainder[j])/*若当前余数在前面已经出现过*/
ﻩﻩ{
ﻩﻩﻩflag=1;ﻩ/*标志置1*/
ﻩﻩﻩstart= j+1;/*记录循环数列开始位置,下标标号加1*/
ﻩend =i+1;ﻩ/*记录循环数列结束位置,下标标号加1*/
ﻩﻩﻩbreak;
ﻩﻩﻩ}
ﻩﻩ}
if(flag==1)break;/*如果是循环小数,则不用再继续除*/
ﻩ}
ﻩprintf(”\n”);
ﻩif(flag==1)
ﻩprintf("结果为有限循环小数,循环节从第%d位开始,共%d位。
\n”,start,end-start+1);...文档交流仅供参考......文档交流仅供参考...
ﻩelse
ﻩﻩprintf("结果为无限不循环小数,这里只输出%d位小数。
\n”,MAX);
}
5.已有一个排好序的数组,从键盘输入一个数,按原顺序插入到该数组中。
#include”stdio.h”
#define N5 /*数组长度*/
voidmain()
{
ﻩinti,j;/*循环控制变量*/
ﻩintx;/*x用于存储用户输入的数据*/
ﻩinta[N+1] ={6,12,35,64,78};/*定义数组a、准备数据*/
ﻩprintf("原数据序列:
");
ﻩfor(i=0;i<N;i++)
ﻩprintf("%d\t”,a[i]);
ﻩprintf(”\n");
printf(”请输入一个整数:
");
ﻩscanf(”%d",&x);
for(i=0;i<N;i++)
ﻩ{
ﻩ/*如果输入的数小于当前数,说明i为新数据的位置,则结束循环*/
if(x}
for(j=N;j〉i;j—-)a[j]=a[j-1];/*移动后面的数*/
ﻩa[i]=x; /*将新数放在i号位置上*/
ﻩprintf("插入新数据后的数据序列:
");
ﻩfor(i=0;i〈N+1;i++)
printf("%d\t”,a[i]);
ﻩprintf(”\n”);
}
6。
输入一串字符,将其中小写字母全部转换为大写字母,其它字符保持不变。
#include"stdio.h"
#defineMAX80 /*字符串的最大字符数*/
voidmain()
{
inti=0;/*数组下标*/
charstr[MAX];
printf(”请输入原字符串:
");
gets(str);
ﻩwhile(str[i])
ﻩ{
ﻩif(str[i]>=’a'&& str[i]<=’z’)str[i]-=32;/*小写字母转为大写*/...文档交流仅供参考......文档交流仅供参考...
ﻩi++;
}
printf("转换后的字符串:
”);
ﻩputs(str);
}
7。
输入3×3的矩阵,输出两对角线数据之和.
#include"stdio.h"
#define M 3 /*矩阵规模*/
voidmain()
{
int i,j;/*循环控制变量*/
ﻩinta[M][M];
intsum=0;
printf("输入%d个数(空格或回车间隔),构成%d×%d的矩阵\n",M*M,M,M);
ﻩfor(i=0;iﻩ{
ﻩﻩfor(j=0;j<M;j++)
{
ﻩﻩscanf("%d",&a[i][j]);
ﻩﻩﻩif(i==j)sum+=a[i][j];/*将对角线上的数据累加到sum*/
ﻩﻩ}
}
ﻩprintf(”矩阵:
\n");
ﻩfor(i=0;i<M;i++)
ﻩ{
ﻩﻩfor(j=0;j〈M;j++)
ﻩﻩprintf("%d\t",a[i][j]);
ﻩprintf(”\n");
ﻩ}
printf(”对角线之和:
");ﻩ
ﻩprintf("%d\n”,sum);
}
8.编程:
输入一段英文文章,统计并输出所有英文字母和空格出现的次数。
#include”stdio.h"
#defineM27 /*要统计的所有字符的数量*/
#defineMAX 80/*英文文章的最大字符数*/
voidmain()
{
ﻩinti=0;/*数组下标*/
intk;/*循环控制变量*/
intcount[M]={0};/*存储各字符个数*/
charstr[MAX];/*存储英文文章*/
printf(”请输入一段英文文章:
\n”);
ﻩgets(str);
ﻩwhile(str[i])
ﻩ{
ﻩﻩif(str[i]>=’a' && str[i]〈=’z')
ﻩﻩcount[str[i]-96]++;
ﻩif(str[i]>='A’ &&str[i]<=’Z’)
count[str[i]-64]++;
ﻩﻩif(str[i]=='’)
ﻩcount[0]++;
ﻩi++;
}
printf("字符\t个数\n");
printf("空格\t%d\n",count[0]);
ﻩfor(k=0;k〈M—1;k++)
{
ﻩﻩprintf("%c\t%d\n”,k+65,count[k+1]);
ﻩ}
}
返回
第5章
1。
ex/st/structst均可
2.D
3.D
4.有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生的数据并依次输出各门课的平均成绩。
...文档交流仅供参考......文档交流仅供参考...
#include〈stdio。
h>
structstu{
ﻩcharxuehao[10];
ﻩcharxingming[10];
ﻩfloatchengji[3];//三门课成绩
}
main()
{
structstus[10];
ﻩinti,j;
ﻩfloat average[3]={0};
for(i=0;i<10;i++)
{
printf("请输入第%d名学生学号:
",i+1);
ﻩscanf(”%s”,s[i].xuehao);
printf("请输入第%d名学生姓名:
",i+1);
scanf(”%s”,s[i].xingming);
ﻩfor(j=0;j<3;j++)
ﻩﻩ{
ﻩﻩprintf("请输入该名学生的第%d门课程成绩:
",j+1);
ﻩscanf(”%f",&s[i]。
chengji[j]);
ﻩ}
ﻩprintf("\n”);
}
printf(”10名学生信息输入完毕,各门课程平均成绩如下:
\n");
ﻩfor(i=0;i<10;i++)
ﻩ{
ﻩaverage[0]+=s[i]。
chengji[0];
ﻩﻩaverage[1]+=s[i]。
chengji[1];
ﻩﻩaverage[2]+=s[i]。
chengji[2];
}
ﻩprintf("该10名学生三门各平均成绩分别为:
\n");
printf("%f\t%f\t%f\n",average[0]/10,average[1]/10,average[2]/10);...文档交流仅供参考......文档交流仅供参考...
}
5。
编写一个统计宿舍成员生活费情况的程序,完成以下功能:
输入每个宿舍成员一个学期各个月的生活费,计算出该宿舍所有成员