C语言教材课后习题参考答案
- 格式:doc
- 大小:148.50 KB
- 文档页数:35
C语言课后习题标准答案第1章C语言概述一、简答题1.(1)语言简洁、紧凑,使用方便、灵活;(2)运算符丰富;(3)具有丰富的数据类型;(4)具有结构化的控制语句;(5)语法限制不太严格,程序设计自由度大;(6)C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接访问硬件;(7)生成目标代码质量高,程序执行效率高;(8)用C语言写的程序可移植性好,基本上不作修改就能用于各种型号的计算机和各种操作系统。
2.顺序结构,分支结构,循环结构3.所谓算法就是为解决一个问题而采取的方法和步骤。
算法的特性:有穷性、确定性、输入、输出、可行性。
表示算法的方式:(1)用自然语言表示;(2)用流程图表示;(3)用N—S流程图表示;(4)用伪代码表示;(5)用计算机语言表示。
二、算法1.瓶子A里盛有醋瓶子B里盛有酱油那一个空瓶C将A中的醋倒入C将B中的酱油倒入A将C中的醋倒入B2.输入一个数放在a中max=a以下步骤重复9次:输入一个数放在a中如果a>max,max=b打印max的值3.如果ﻩﻩa<btemp=aﻩa=bﻩﻩb=temp如果c>aﻩtemp1=aﻩﻩtemp2=ba=cﻩb=temp1ﻩc=temp2否则ﻩ如果ﻩc>bﻩtemp=bﻩb=cﻩc=temp打印a,b,c的值4.i=1sum=0以下程序循环100遍:sum=sum+iﻩi=i+1打印sum的值5.如果(n除以3的余数为0并且n除以5的余数为0)n能够同时被3和5整除否则ﻩn不能够同时被3和5整除6.i=101以下语句循环50遍:ﻩj=2ﻩflag=1ﻩ当j<(i除以2的整数部分)时循环以下语句:ﻩﻩ如果i除以j的余数为零ﻩﻩﻩflag=0ﻩﻩﻩ退出该循环如果flag=1ﻩﻩﻩ打印i的值ﻩi=i+17.如果m<nﻩﻩtemp=mﻩﻩm=nn=tempi=nj=1做以下循环,直到m能够被i/j整除:如果i能够被j整除并且m能够被i/j整除i/j即是m和n的最大公约数ﻩ跳出循环否则ﻩj=j+1打印i/j的值8.data=b*b—4*a*c如果data>0否则如果data=0ﻩx1=x2=—b/2否则无实数解三、编程题1.main(){ﻩprintf(“##############################\n”);ﻩprintf(“How do youdo?\n”);ﻩprintf(“##############################\n”);}2.main(){adata b x2)(1+-=a data b x2)(2--=。
c语言课本习题答案C语言课本习题答案在学习编程语言的过程中,习题是非常重要的一部分。
通过解答习题,我们可以巩固和加深对所学知识的理解,提高编程能力。
本文将针对C语言课本中的习题,给出一些参考的答案和解析,帮助读者更好地掌握C语言的基础知识。
一、基础习题1. 编写一个程序,输出"Hello, World!"。
```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```解析:这是一个非常简单的程序,使用printf函数输出指定的字符串即可。
注意在字符串末尾加上换行符"\n",以使输出结果更美观。
2. 编写一个程序,计算并输出两个整数的和。
```c#include <stdio.h>int main() {int a, b, sum;printf("请输入两个整数:");scanf("%d%d", &a, &b);sum = a + b;printf("它们的和是:%d\n", sum);return 0;}```解析:这个程序使用了scanf函数从用户输入获取两个整数,然后通过加法运算得到它们的和,并使用printf函数输出结果。
二、进阶习题1. 编写一个程序,判断一个数是否为素数。
```c#include <stdio.h>int isPrime(int n) {if (n <= 1) {return 0;}for (int i = 2; i * i <= n; i++) {if (n % i == 0) {return 0;}}return 1;int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数\n", num);} else {printf("%d不是素数\n", num);}return 0;}```解析:这个程序定义了一个函数isPrime,用于判断一个数是否为素数。
《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。
它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。
1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。
其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。
1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。
每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。
1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。
通过运算符和表达式可以进行各种数值计算和逻辑判断。
第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。
整型数据类型可以表示整数值,并具有不同的取值范围。
2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。
浮点型数据可以表示较大或较小的数值,并具有一定的精度。
2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。
字符型数据可以用于表示各种字符(包括字母、数字、符号等)。
2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。
c语言程序设计第三版谭浩强课后习题及答案C语言程序设计是一门基础而重要的编程课程,谭浩强教授的《C语言程序设计》第三版是许多高校计算机专业学生的必修教材。
课后习题是检验学生对课程内容掌握程度的重要手段,以下是部分习题及答案的示例。
# 第一章:C语言概述习题1:简述C语言的特点。
答案: C语言是一种结构化编程语言,具有以下特点:1. 简洁、紧凑、贴近硬件。
2. 丰富的运算符和数据类型。
3. 具有结构化控制语句。
4. 支持模块化程序设计。
5. 可移植性好。
习题2:为什么说C语言具有“高级语言”的特点?答案: C语言被称为高级语言,因为它:1. 抽象了机器语言的复杂性。
2. 允许使用变量名代替内存地址。
3. 提供了丰富的控制结构和数据类型。
4. 支持高级的编程概念,如函数、数组和指针。
# 第二章:数据类型、运算符和表达式习题3:写出C语言中的基本数据类型。
答案: C语言中的基本数据类型包括:- 整型:`int`- 浮点型:`float` 和 `double`- 字符型:`char`习题4:解释赋值运算符的右结合性。
答案:赋值运算符的右结合性意味着当多个赋值运算符出现在同一个表达式中时,它们将从右向左进行计算。
例如,在表达式 `a = b = c;` 中,首先计算 `b = c`,然后将结果赋值给 `a`。
# 第三章:控制语句习题5:描述if语句的基本用法。
答案: if语句用于基于条件执行代码块。
基本语法如下:```cif (条件) {// 条件为真时执行的代码} else {// 条件为假时执行的代码}```其中条件是一个表达式,如果其值为真(非零),则执行if块中的代码;如果为假(零),则执行else块中的代码。
习题6:举例说明for循环的使用。
答案: for循环用于重复执行一段代码,直到给定条件不再满足。
基本语法如下:```cfor (初始化表达式;条件表达式;更新表达式) {// 循环体}```例如,打印0到9的数字:```cfor (int i = 0; i < 10; i++) {printf("%d ", i);}```以上是部分习题及答案的示例。
c语言程序设计课后习题及答案C语言程序设计是计算机科学与技术专业的核心课程之一,它不仅教授了编程语言的基本知识,还培养了学生的逻辑思维能力和问题解决能力。
课后习题是巩固课堂学习内容的重要手段,以下是一些C语言程序设计的典型课后习题及答案。
习题1:基本数据类型编写一个程序,输入一个整数和一个浮点数,然后输出它们的和。
```c#include <stdio.h>int main() {int a;float b, sum;printf("请输入一个整数:");scanf("%d", &a);printf("请输入一个浮点数:");scanf("%f", &b);sum = a + b;printf("它们的和是:%f\n", sum);return 0;}```习题2:条件语句编写一个程序,根据输入的成绩判断学生的等级。
```c#include <stdio.h>int main() {float score;printf("请输入学生的成绩:");scanf("%f", &score);if (score >= 90) {printf("等级:A\n");} else if (score >= 80) {printf("等级:B\n");} else if (score >= 70) {printf("等级:C\n");} else if (score >= 60) {printf("等级:D\n");} else {printf("等级:F\n");}return 0;}```习题3:循环结构编写一个程序,计算1到100的整数之和。
C语言程序设计(第2版) 课后题答案C语言程序设计(第2版) 课后题答案一、基本概念与语言规则1. C语言的特点和用途C语言是一种通用的高级程序设计语言,具有简洁、高效、灵活和可移植等特点。
它广泛应用于系统软件、应用软件和嵌入式系统开发等领域。
2. 标识符的规则标识符是程序中用来标识变量、函数、数组等各种对象的名称。
标识符需要遵守以下规则:- 由字母、数字和下划线组成,首字符必须是字母或下划线。
- 大小写敏感,即大写字母和小写字母被认为是不同的字符。
- 不能使用C语言的关键字作为标识符。
3. 变量和常量变量是用来存储数据的内存单元,而常量是不可改变的数据值。
在C语言中,变量需要先声明后使用,而常量可以直接使用。
4. 数据类型和类型转换C语言提供了多种数据类型,包括整型、浮点型、字符型等。
不同的数据类型可以存储不同范围和精度的数据。
在需要的时候,可以进行数据类型的转换。
5. 运算符和表达式C语言支持多种运算符,包括算术运算符、逻辑运算符、比较运算符等。
表达式是由运算符和操作数组成的式子,可以进行各种计算和逻辑判断。
6. 控制结构C语言提供了多种控制结构,包括顺序结构、条件结构和循环结构。
通过这些结构可以实现程序的分支和循环操作。
二、函数和数组1. 函数的定义和调用函数是C语言程序的基本模块,可以完成特定的任务。
函数的定义包括函数名、参数列表、返回值类型和函数体。
函数的调用通过函数名和实参来完成。
2. 数组的定义和使用数组是一组相同类型的数据元素的集合。
在C语言中,数组可以用来存储多个同类型的数据,并通过下标来访问和操作数组元素。
三、指针和字符串1. 指针的概念和使用指针是C语言中的一个重要概念,它代表一个内存地址。
通过指针可以直接访问内存中的数据,可以用来提高程序的效率和灵活性。
2. 字符串的概念和操作字符串是由字符组成的数组,以空字符'\0'结尾。
C语言提供了多种操作字符串的函数,如字符串的复制、连接、比较等。
实验6-1课后练习:1.选择题(1)B (2)C(3)A(4)D(5)C (6)C (7)D 2.阅读程序,写出运行结果3020103.阅读程序,写出运行结果20104. 阅读程序,写出运行结果1 2 35.阅读程序,写出运行结果7 8 96.阅读程序,写出运行结果97.阅读程序,写出运行结果#include <stdio.h>int digit(int n,int k);int main(){ int n,k;printf("Enter n,k: ");scanf("%d %d",&n,&k);printf("\nThe result is:%d\n",digit(n,k));return 0;}int digit(int n,int k){ int d;while(k>0){ d=n%10;n=n/10;k--;}return d;}8.程序填空#include <stdio.h>double max(double a,double b);int main(){ double x,y;prinf("please input two double numbers:"); scanf("%lf %lf"),&x,&y;printf("%.2f\n",max(x,y));return 0;}double max(double a,double b){return (a>b?a:b);}9.原版#include <stdio.h>int check(int n,int d);int main(){ int n,d;printf("Enter n,d: ");scanf("%d %d",&n,&d);if(check(n,d)==1)printf("The digit %d is in data %d",d,n); elseprintf("The digit %d is not in data %d",d,n); return 0;}int check(int n,int d){ int temp;while(n>0){ temp=n%10;if(temp==d)return 1;n=n/10;}return 0;}改进版#include <stdio.h>int check(int n,int d);int main(){ int n,d,position;printf("Enter n,d: ");scanf("%d %d",&n,&d);position=check(n,d);if(check(n,d)>0)printf("The digit %d is in data %d,position is %d",d,n,position);elseprintf("The digit %d is not in data %d",d,n);return 0;}int check(int n,int d){ int temp,position=1;while(n>0){ temp=n%10;if(temp==d)return position;position++;n=n/10;}return 0;}实验6-2课后练习1.选择题(1)B (2)C(3)B(4)B(5)C (6)B (7)D (8)D (9)C(10)B(11)A2.填空(1) 函数中声明有局部变量,若声明中带有static,则该局部变量采用静态存储方式,在编译时分配空间,若函数中未显式设定初始值,则系统将其自动初始化,函数被调用结束时,该空间不释放。
习题参考答案习题 1一、选择题1、B2、C3、B4、D5、A6、B7、C二、填空题1、源程序文件 c2、obj3、可执行文件 exe4、机器语言汇编语言高级语言三、解答题略四、编程题1、main(){printf(“Hello! Welcome to China!”);}2、main(){int x;scanf(“%d”,&x);if(x>=20&&x<1000) printf(“x=%d”,x);else printf(“Input error!”);}习题 2一、选择题1、C2、A3、B4、D5、 A6、D7、B8、B9、B 10、D11、D 12、B 13、A 14、B 15、C二、填空题1、整型、实型、字符型2、用户标识符、关键字标识符3、存储单元、符号地址、内存地址4、十、十六、八5、double(双精度型)6、 87、5.5000008、a=-327682959、+0017,021,0x11三、写程序运行结果325732577.88, -345.12,7.8765,-345.12307.87654e+00, -3.5e+02a,97,141,611234,2322,4d2CHINESE, CHI四、scanf函数的使用a=3 b=78.5 71.82A a五、用scanf函数输入数据1020Aa1.5-3.75 123.45,67.8注意,其中123.45可以是任意实数,因为该值将被跳过,不用于赋值。
习题 3一、选择题1.C 2.B 3.D 4.D二、填空题基本概念题1.22.23.1阅读程序写出运行结果题4.1.005.1,0,16.9,11,9,10三、写出下面表达式运算后a的值,设原来a=12。
(1)24 (2)10 (3)60 (4)0 (5)0 (6)0习题4一、选择题1、B2、D3、B4、D5、A6、C二、填空题1、1,0,12、1,2,33、ch1>=′A′&&ch1<=′Z′ ch1=ch1-32;三、编程题2961、从键盘输入三个数,然后按照由小到大的顺序输出。
要求,设三个数放在变量a、b、c中,最后仍然按照a、b、c的顺序输出。
#include <stdio.h>main(){int a,b,c,t;scanf(“%d,%d,%d”,&a,&b,&c);if(a>b) {t=a; a=b; b=t;}if(a>c) {t=a; a=c; c=t;}if(b>c) {t=b; b=c; c=t;}printf(“%d,%d,%d\n”,a,b,c);}2、编写程序根据以下的函数关系,对输入的x值输出相应的y值。
#include <stdio.h>main(){float x,y;scanf(“%f”,&x);if(x<=-1)y=x-1;else if(x<=2)y=2*x;else if(x<=10)y=x*(x+2);else printf(“Error!\n”);printf(“y=%f\n”,y);}3、求一元二次方程ax2+bx+c=0的解。
#include <math.h>main(){float a,b,c,d,disc,x1,x2,realpart,imagpart;scanf(“%f,%f,%f”,&a,&b,&c);if(fabs(a)<=1e-6)Printf(is not a quadratic);else297{disc=b*b-4*a*c;if(fabs(disc)<=1e-6)printf(“has two equal roots:%8.4\n”,-b/(2*a));else if(disc>1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(“has distinct real roots:%8.4f and %8.4f\n”,x1,x2);}else{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf(“has complex roots:\n”);printf(“%8.4f+%8.4fi\n”, realpart,imagpart);printf(“%8.4f-%8.4fi\n”, realpart,imagpart);}}}4、假设工资税率如下,其中s代表工资,r代表税率:s<500 r=0%500<=s<1000 r=5%1000<=s<2000 r=8%2000<=s<3000 r=10%3000<=s r=15%编一程序实现从键盘输入一个工资数,输出实发工资数。
要求使用switch语句。
main(){int salarly,r,g;scanf(“%d”,&salarly);if(salary>=3000) r=0.15;else{ g=salary/500;switch(g){1: r=0.05;2:3: r=0.08;4:5: r=0.10;}}298salary=salary*(1-r);printf(“%d\n”,salary);}习题 5一、选择题1、A2、C3、C4、D5、A6、A7、A 8、B 9、C 10、B 11、B 12、D二、填空题1、continue2、[1]n<=999或n<1000 [2]n%103、[1]x>=0或x>=0.0 [2]x<min或x<=min4、[1] i<10 [2] j%3!=05、[1]t=1 [2]n<=i6、[1]n [2]flag=1 [3]n—7、[1]j<i [2]1/term8、[1]sum<k [2]j-2三、编程题1、#include <stdio.h>main(){int m,n,p,r,temp;printf(“Please input m,n:”);do{scanf(“%d%d”,&m,&n);}while(m<=0||n<=0);if(n<m){ temp=n; n=m; m=temp; } /*确保大数放到n中*/p=n*m; /*保留n和m的乘积到p中,以便求最小公倍数*/while(m!=0) /*求n和m的最大公约数*/{r=n%m; n=m; m=r; }printf(“最大公约数为:%d\n”,n);printf(“最小公倍数为:%d\n”,p/n);}2、#include <stdio.h>main(){char c;int letter=0,space=0,digit=0,other=0;printf(“P lease input a line character:”);299while((c=getchar())!=’\n’){if(c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’) letter++;else if(c==‘ ’) space++;else if(c>=’0’&&c<=’9’) digit++;else other++;}printf(“Letter is %d,Space is %d,Digit is %d,Other is %d,”,letter,space,digit,other);}3、main(){int m,s,i;for(m=2;m<1000;m++){s=0;for(i=1; i<m; i++)if((m%i)==0) s=s+i;if(s==m){printf(“%d its factors ar e ”,m);for(i=1; i<m; i++)if(m%i==0) printf(“%d,”,i);printf(“\n”);}}}4、main(){int i,a,min,max;scanf(“%d”,&a);min=a;max=a;for(i=2;i<=100;i++){ scanf(“%d”,&a);if(a<min) min=a;if(a>max) max=a;}printf(“Max=%d,Min=%d\n”,max,min);}5、#include <stdio.h>#define N 20main(){int i,t;float a=2,b=1,s=0;for(i=1;i<=N;i++){s=s+a/b;300301 a=a+b; /*将前一项的分子与分母之和作为下一项的分子*/b=t; /*将前一项的分子作为下一项的分母*/}printf(“Sum=%f \n”,s);}6、问题分析:设王先生的岁数是x ,他夫人的岁数是y ,可得到如下方程组:⎪⎩⎪⎨⎧=+=+873105322y x y x 这是一个非线性方程组的求解,无法手算求解,可以用穷举法求解。
考虑到实际可能,x 、y 可以在20—100范围内取值,逐一穷兴出x 、y 所有可能的取值判断是否满足上述方程组,若满足,这一组解就是要求的解。
程序如下:main(){int x,y;for(x=20;x<=100;x++)for(y=20;y<=100;y++)if(x*x+y==1053&&x+y*y==873)printf(“x=%d y=%d \n”,x,y);}7、main(){long int k,g,s=0;printf("Please input an integer:");scanf("%ld",&k);do{ g=k%10;printf("%2d",g);k=k/10;}while(k!=0);}8、(1)main(){ int i,j;for(i=1;i<=9;i++){ for(j=i;j<=9;j++)printf("%d*%d=%2d ",i,j,i*j);printf("\n");}}(2){ int i,j,k;for(i=1;i<=9;i++){for(k=1;k<i;k++)printf(" ");for(j=i;j<=9;j++)printf("%d*%d=%2d ",i,j,i*j);printf("\n");}}9、#include <stdio.h>main(){int i=0;long s,n,j,x;for(j=100;j<=999;j++){ s=0; x=j;while(x>0) /*求原数j的反序数*/{s=s*10+x%10;x=x/10;}if(s==j) /*判断反序数s与原数j是否相等*/ {i++; printf("%4ld",j);if(i%10==0) printf("\n"); /*每行输出10个回文数*/}}}10、#include <stdio.h>main(){int x,y,z;for(x=1;x<20;x++)for(y=1;y<33;y++)for(z=3;z<100;z+=3){if((x*5+y*3+z/3)==100&&x+y+z==100)printf(“公鸡有%d只,母鸡有%d只,小鸡有%d只\n”,x,y,z);}}11、#include <stdio.h>#include <math.h>main()302303 {int n=1; double x,sum=0,term=1.0;scanf(“%lf”,&x);while(fabs(term)>=1e-6){ sum+=term;term*=-x*x/(n*(n+1));n=n+2;}printf(“cos(%lf)=%lf ,%lf \n”,x,sum,cos(x));}12、问题分析:用迭代法求平方根的算法如下:(1)设定一个x 的初值x0;(2)用上述公式求出x 的下一个值x1;(3)再将x1代入上述公式,求出x 的下一个值x2;(4)如此继续下去,直到前后两次求出的x 值(x n+1和x n )满足5110-+<-n n x x 。