为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C语言程序设计项目教程习题答案

2019-04-18 50页 doc 102KB 215阅读

用户头像

is_977556

暂无简介

举报
C语言程序设计项目教程习题答案C语言程序设计项目教程— 习题答案 说明:本文档在“文档结构图”视图方式下应用比较方便。 第1章 第2章 第3章 第4章 第5章 第6章 第7章 第8章 第9章                   第1章 1.    什么是软件?软件有哪些特点? 答:软件是程序、数据及其相关文档的完整集合。 软件具有以下特点: ① 软件是一种逻辑产品,它以程序和文档的形式出现,保存在计算机的存储器中(磁盘或光盘),通过计算机的运行才能体现它的功能和作用。 ② 软件产品的生产主要是研制。 ③ 软件...
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~20  ADCAB  CADAC  DCBAA  DCDBA 二.填空题 21  a=a+(a+b) 22  3 23  printf("a=%d\nb=%d\n",a,b); 24  201632 25  1B 26  1217 27  abc 28  11 29  for(i=10;i<100;i++)printf(“*”); 30  20 三、编程 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() { int x,i,s; for(x=1;x<=100;x++) { s=0; for(i=1;is[i]) min = s[i];    /*min得到最低分*/ if(max标准
差等。编程实现成绩分析的以上功能。 #include "stdio.h" #include "math.h"  /*平方根函数sqrt()的头文件*/ #define  N    10    /*人数*/ void main( )    { int  i; /*循环控制变量*/ float  score[N] = {55,86,79,93,66,71,95,72,88,65}; /*准备数据*/ int  s[5]={0};        /*数组s存放个分数段人数*/ float  sum = 0, aver;        /*sum存储总分,aver存储平均分*/ float  var, stdev;        /*var存储方差,stdev存储标准差*/ for(i=0;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;iM):"); scanf("%d",&n); printf("%d/%d=%d.",m,n,m/n);  /*输出"0"和小数点*/ m = m%n;  /*第一次余数再存入m中*/ for(i=0; i记录
循环数列开始位置,下标标号加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  N  5  /*数组长度*/ void main() { int i,j;  /*循环控制变量*/ int x;  /*x用于存储用户输入的数据*/ int a[N+1] = {6,12,35,64,78}; /*定义数组a、准备数据*/ printf("原数据序列:"); for(i=0;ii; j--) a[j] = a[j-1]; /*移动后面的数*/ a[i] = x; /*将新数放在i号位置上*/ printf("插入新数据后的数据序列:"); for(i=0;i='a' && str[i]<='z')str[i]-=32; /*小写字母转为大写*/ i++; } printf("转换后的字符串:"); puts(str); } 7.输入3×3的矩阵,输出两对角线数据之和。 #include"stdio.h" #define  M  3 /*矩阵规模*/ void main() { int i,j; /*循环控制变量*/ int a[M][M]; int sum=0; printf("输入%d个数(空格或回车间隔),构成%d×%d的矩阵\n",M*M,M,M); for(i=0;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 struct stu{ char xuehao[10]; char xingming[10]; float chengji[3];    //三门课成绩 } main() { struct stu s[10]; int i,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.编写一个统计宿舍成员生活费情况的程序,完成以下功能:输入每个宿舍成员一个学期各个月的生活费,计算出该宿舍所有成员本学期的总月平均生活费,以及个人月平均生活费高于总月平均生活费的成员的数据(包括姓名、各月的生活费、平均生活费),并将结果输出。 #include #define RENSHU 5    //宿舍成员人数 struct stu{ char xingming[10]; float shenghuofei[5];    //5个月生活费 float pingjun;            //个人月平均生活费 } main() { struct stu s[RENSHU]; float zongpingjun;    //总平均月生活费 int i,j; zongpingjun=0;    //初始化总成月平均生活费为0 for(i=0;izongpingjun) printf("%s\t%.2f\n",s[i].xingming,s[i].pingjun); getch(); } 6.编程计算今天是今年的第几天,要求使用包含“年”、“月”、“日”的结构体类型实现。 /*闰年:1、能被4整除而不能被100整除;2、能被400整除*/ #include struct date{ int year; int month; int day; } main() { struct date today; int flag,day; printf("请输入今天的日期(yyyy,mm,dd):"); scanf("%d,%d,%d",&today.year,&today.month,&today.day); flag=today.year%4==0&&today.year%100!=0||today.year%400==0; day=(today.month>1)*31+(today.month>2)*(flag+28)+(today.month>3)*31+ (today.month>4)*30+(today.month>5)*31+(today.month>6)*30+ (today.month>7)*31+(today.month>8)*31+(today.month>9)*30+ (today.month>10)*31+(today.month>11)*30+today.day; printf("今天是今年的第%d天。\n",day); } 7.中国有句俗语叫“三天打渔两天晒网”。某人从2000年1月1日起开始“三天打渔两天晒网”,编写程序计算这个人在以后的某一天中是在打渔还是在晒网。 /*闰年:1、能被4整除而不能被100整除;2、能被400整除*/ #include struct date{ int year; int month; int day; } /*核心算法:计算出从2001.1.1至今的总天数,与5进行取余运算,余数为1、2、3为打鱼,余数为4、0为晒网*/ main() { struct date today; int i,flag,totalday=0;//totalday为指定日期距2000.1.1总天数 printf("请输入2000年后的任意日期(yyyy,mm,dd):"); scanf("%d,%d,%d",&today.year,&today.month,&today.day); for(i=2000;i<=today.year;i++) { /*如果当前today>i,则计算i年全年天数,否则计算当前日期之前天数*/ flag=i%4==0&&i%100!=0||i%400==0; if(today.year>i) { totalday+=365+flag; } else { totalday+=(today.month>1)*31+(today.month>2)*(flag+28)+(today.month>3)*31+ (today.month>4)*30+(today.month>5)*31+(today.month>6)*30+ (today.month>7)*31+(today.month>8)*31+(today.month>9)*30+ (today.month>10)*31+(today.month>11)*30+today.day; } } switch(totalday%5) { case 0: case 4:printf("晒网");break; default:printf("打鱼"); } } 8.编写程序,定义一个结构体变量,存放一个人的名字和他的电话号码(可能包括手机,办公电话,宅电等多个)。该程序允许输入多个人的名字和对应的电话号码,提示:通过结构数组实现。当输入名字已经存在时,直接输出与这个名字对应的所有号码。最后输出所有的名字以及他们对应的号码。 #include #include #include struct tongxunlu{ char xingming[10]; char shouji[15]; char jiating[15]; }; main() { struct tongxunlu xinxi[50]; char go; int i=0,j,k; while(1) { printf("\n请输入新朋友的姓名 手机号码 家庭电话:"); scanf("%s %s %s",&xinxi[i].xingming,&xinxi[i].shouji,&xinxi[i].shouji); k=0; for(j=0;j #include #include struct date{ int year; int month; int day; }; struct stuinfo{ int xuehao; char xingming[10]; char xingbie; struct date chushengriqi; float chengji[3]; }; main() { struct stuinfo stu[30]; char c; while(1) { system("cls");    /*清屏命令*/ printf("\n\n\t\t\t  ☆★ 欢迎使用学籍管理系统 ★☆\n\n\n"); printf("\t\t请选择(1-7) :\n"); printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t\t    1.查询学生学籍信息\n"); printf("\t\t\t    2.修改学生学籍信息\n"); printf("\t\t\t    3.输入学生学籍信息\n"); printf("\t\t\t    4.删除学生学籍信息\n"); printf("\t\t\t    5.保存数据到文件\n"); printf("\t\t\t    6.浏览学生学籍信息\n"); printf("\t\t\t    7.退出\n"); printf("\t\t**********************************************\n"); printf("\n\t\t你的选择是:"); c=getche(); printf("\n\n\t\t你选择的是--"); switch(c) { case '1':printf("查询学生学籍信息");break;    /*查询*/ case '2':printf("修改学生学籍信息");break;/*修改*/ case '3':printf("输入学生学籍信息");break;    /*添加*/ case '4':printf("删除学生学籍信息");break;    /*删除*/ case '5':printf("保存数据到文件");break;    /*保存*/ case '6':printf("浏览学生学籍信息");break;    /*浏览*/ case '7':return;            /*退出*/ default:printf("错误!"); } printf("\n\n\t\t按任意键返回主菜单\n"); getch(); } getch(); } 返回 第6章 1.在C语言中,函数定义和函数声明分别指什么? (1)函数的定义:在C程序设计中,将完成指定功能的C代码定义成函数,变成逻辑上一个相对独立的程序单位。函数定义需要指明函数返回值的类型、函数名、函数的形式参数(常简称形参)和函数体(包括说明和定义及语句序列)。 函数定义的格式如下: 无参函数的定义格式                            有参函数的定义格式 (2)函数的声明:C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用。函数声明是一个语句,由函数返回类型、函数名和形参列表组成。 函数声明语句的格式为: 类型 函数名(  ); —— 无参函数声明格式 或 类型 函数名(参数类型说明列表); —— 有参函数声明格式 2.在C语言中,函数是否允许嵌套定义?是否允许嵌套调用? 在C语言中,函数不允许嵌套定义,但允许嵌套调用。 3.下面定义了一个函数f,分析函数功能并编写完整的主函数,定义恰当的变量,调用函数f,输出函数的返回值。 double f(double r) { return 3.141592*r*r; } #include double f(double r); main( ) { double s,r; scanf("%lf",&r); s=f(r); printf("%lf\n",s); } double f(double r) { return 3.141592*r*r; } 4.分析下面定义的函数f的功能,编写完整的主函数,定义恰当的变量并调用函数f。 void f(int n) { int i; double s=1; for(i=1;i<=n;i++) s=s*i; printf("%d!=%.2lf",n,s); } #include void f(int n); main( ) { int n; scanf("%d",&n); f(n); } void f(int n) { int i; double s=1; for(i=1;i<=n;i++) s=s*i; printf("%d!=%.lf\n",n,s); } 5.定义一个函数,返回两个数中较大的数,在主函数中通过调用该函数求三个数之中最大的数,并输出。 #include int max(int x,int y); main( ) { int x,y,z; scanf("%d,%d,%d",&x,&y,&z); printf("%d\n",max(max(x,y),z)); } int max(int x,int y) { return (x>y?x:y); } 6.定义两个函数,分别求两个整数的最大公约数和最小公倍数,在主函数中输入两个整数后调用这两个函数,并输出最大公约数和最小公倍数。 #include int multiple(int x,int y); int divisor(int m,int n); main() { int a,b; scanf("%d%d",&a,&b); printf("最大公约数为%d\n",divisor(a,b)); printf("最小公倍数为%d\n",multiple(a,b)); } int multiple(int x,int y) { int i,z; for(i=x;i<=x*y;i++) if(i%x==0&&i%y==0) {z=i;break;} return z; } int divisor(int x,int y) { int z,i; for(i=y;i>=1;i--) if(x%i==0&&y%i==0) {z=i;break;} return z; } 7.编写一个函数,由参数传入一个字符串,分别统计此串中字母、数字和其他字符的个数,在主函数中输入字符串并显示统计结果。 #include #include int alph,digit,others; void count(char str[]); main( ) { char text[80]; printf("\n输入字符串:\n"); gets(text); printf("字符串是:"); puts(text); strcat(text,"\n"); alph=0; digit=0; others=0; count(text); printf("\n%d字母,%d数字,%d其它字符\n",alph,digit,others); } void count(char str[]) { int i; for(i=0;str[i]!='\n';i++) { if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')) alph++; else if(str[i]>='0'&&str[i]<='9') digit++; else others++; } } 8.已知Fibonacci数列: 定义递归函数求Fib(n),并输出前20项。 #include "stdio.h"    int fib(int n); main( ) { int i,n=19; for(i=0;i<=n;i++) printf("%d\t",fib(i)); } int fib(int n) { if (n==0) return 0; if (n==1) return 1; if (n>1) return fib(n-1)+fib(n-2); } 9.定义函数求f=(n+m)!+n!,m、n均为任意正整数。要求使用递归调用。 #include "stdio.h"    int f(int x); main() { int    i,m,n; int sum; printf("Inputm,n:"); scanf("%d,%d",&m,&n); sum=f(n+m)+f(n); printf("%d\n",sum); } int f(int x) { int i,j; if(x==0||x==1)return 1; else return(x*f(x-1)); } 10.按以下要求编写三个函数: 1 接收职工的姓名和职工号 2 按职工号由小到大排序 3 输入一个职工号,输出该工号的职工姓名 在主函数中调用这些函数。 #include "stdio.h" #include "string.h" #define N 10 struct message { int num; char name[20]; }sta[N]; void in() { int i; for(i=0;ista[j].num) {sta1=sta[i];sta[i]=sta[j];sta[j]=sta1;} } } struct message search(int a) { int i,ma,mi; mi=sta[0].num; ma=sta[N-1].num; while(a!=mi||a!=ma) { if(a<(int)((mi+ma)/2)) ma=(int)((mi+ma)/2); else if(a<(int)((mi+ma)/2)) mi=(int)((mi+ma)/2); else break; } for(i=0;i公式
的计算。 已知 其中 当x=5.6,n=7时,求y的值。要求通过函数嵌套和递归调用完成计算。 #include "stdio.h" int fatc(int n) { int i; int p=1; for(i=1;i<=n;i++) p=p*i; return p; } double f(double x,int n) { double sum=1,p=1; int i,s=1; for(i=2;i<=2*n;i+=2) { s=-s; p=p*x*x; sum=sum+s*p/fatc(i);
/
本文档为【C语言程序设计项目教程习题答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
相关资料
热门搜索
你可能还喜欢
最新资料 资料动态 专题动态

历史搜索

    清空历史搜索