C程序设计(第四版)(谭浩强)第2章课
后习题答案
算法——程序的灵魂
P017 2.1 计算机1-5相乘的积.
#include
int main()
{
int i,s=1; //在执行数值操作前一定要先有个初值.
for(i=1;i<6;i++) //这里是到6.
{
s=s*i; //相乘
}
printf("The sum is %d .\n",s);
return 0;
}
#include
int main()
{
int i,s=1; //在执行数值操作前一定要先有个初值.
for(i=1;i<12;i++) //这里是到,但题目要求的是取单数.也可以是i=i+2
{
if(i%2!=0) //i对取模,值为非为奇数;为则为偶数.
s=s*i;
else
continue; //跳过这个for循环的这一次,执行下一次.
}
printf("The sum is %d .\n",s);
return 0;
}
暂时没法做.
P019 2.3 判断2000-2500年中的闰年,并输出.
年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动1秒,但是真正的一年是365.2423天(目前)。所以,如果每年定义为365天的话,1年就会多出0.2423天,4年就会多出0.9692天,非常接近1天,这样闰年就出现了,也就是每4年要有1年设置为366天,来抵消这多出的1天。规则为:·1)如果年份能被4整除,则该年计为闰年;可是,假如不做调整的话,当400年的时候,累计才多出96.92天,接近于多出97天,闰年的设置却多出来100天,所以要在400年内,再撤销3个闰年。怎么撤销呢?就有了下面这个规则:·2)如果年份能被100整除,则不计为闰年;问题又来了,400年里有4个100年吧,去掉后四个100年后,又少了一个,所以再加一个规则就是:·3)如果年份能被400整除,则计为闰年。简单说来每400年里设置了97个闰年,也就是400里的前3个100年不设置闰年,误差被调整到400年仅有0.08天。
#include
int main()
{
int i;
for(i=2000;i<=2200;i++)
{
if((i%4==0 && i%100!=0)||i%400==0) //闰年的经典判断条件.
printf("%d is a leap year !\n",i);
else
printf("%d is not a leap year !\n",i);
}
}
P020 2.4 求(1)-(1/2)+(1/3)……+(1/99)-(1/100)的值.
#include
int main()
{
float sign=1 , sum=0 , deno , term ; //关于有小数的计算应该用float.
for (deno=1;deno<=100;deno++)
{
term=sign*(1/deno); //term临时值,sing符号,deno为分母.
sum=sum+term; //第一次总全存储.
sign=(-1)*sign; //换号.
}
printf("The sum of deno(指定值) is %f .\n",sum);
return 0; //若是到100的话,结果为0.68172
}
P021 2.5 得到一个大于3的数,并判断是否为素数.
#include
int main()
{
int i , num ,n ; //像13,37,这样只能让和它本身除以外,没有其它除数的叫素数.
printf("Please input a number :\n"); //获取一个数值
scanf("%d",&num);
for(i=2;i { if(num%i==0) //除得尽,则不是. { n=1; break; //设置跳出,才不会执行多次. } n=0; //按程序走的话,这里会执行多次,不能用printf语句,会输出多次. } if(n==0) //单出口问题,虽然n=0执行多次,但仍然是n=0,这样才会只输出一次. { printf("It is do a prime number !"); //如果是100-200可以加个”%d”,nmu进去. } else { printf("It is not a prime number !"); } return 0; } 2.11-2.16要求用N-S图表示上列算法. …………还要伪代码 #include int main() { char a='a',b='b',c; c=a; a=b; b=c; printf("a now is %c , b now is %c !\n",a,b); return 0; } P036 0.2 输入10个数,并输出最大的那一个数. #include int main() { int i,a[10],s=0 ; printf("Please input 10 numbers :\n"); for(i=0;i<=9;i++) { scanf("%d",&a[i]); } for(i=0;i<=9;i++) { if (s } printf("%d is the biggest number !\n",s); return 0; } #include int main() { int i , j , a[4] , s=0 ; printf("Please input 5 numbers :\n"); //此处要回车. for (i=0 ; i<=4 ; i++) { scanf("%d",&a[i]); //这是取多个数的代码,可以用while控制取到\n符为止. } for (i=0 ; i<=3 ; i++) //双重循环,先一个外循,再轮所有小循,轮完后再下一个大循. { for (j=i+1 ; j<=4 ; j++) //第一个循环是至n-1,第二个循环是到n. { if (a[i]>a[j]) //如果成立,则对换,小于号表示降序排列,大于号表示升序排列. { s=a[i]; a[i]=a[j]; a[j]=s; } } } for (i=0 ; i<=4 ; i++) //重新定义循环输出数组中新排列的数. printf("%d-",a[i]); return 0; } #include int main() { int i , sum=0 ; //这是一个简单的程序. for (i=0 ; i<101 ; i++) sum=sum+i; printf("The sum of one to one hundred is %d !\n",sum); return 0; } #include int main() { int n ; printf("Please input a number :\n"); scanf("%d",&n); if(n%3==0&&n%5==0) //关键句,用"并"的符号. printf ("Can be devide by 3 and 5 !\n"); else printf ("Can not be devide by 3 and 5 !\n"); return 0; } P036 0.6 输出100-200间的素数. //********************第一种方法. #include #include int main() //学会一个程序采用”主函数+被调用函数”的方式,会比较规范. { int i; for (i=100; i<=200; i++) //为了书写规范,最好加上{},以示清范围. if(prime_number(i) == 1) //i是实参. printf("%d ",i); return 0; } int prime_number(double m) //m是形参. { int j,k; k=(int)sqrt(m); //求根,(int)是强制转换,求根里要是浮点型. for(j=2;j<=k;j++) { if(m%j==0) return 0; //此值返回给主函数中的实参. } return 1; } //********************第二种方法. #include #include int main() { int i; for(i=100;i<=200;i++) //指定至间. { if(prime(i)==1) //这里i为实参,传入形参j中进行运算,然后再由形参j带出返回. printf ("%d is the prime number !\n",i); } return 0; } int prime(int j) //j是形参,用于接收实参i给的值. { int m, n; m=(int)sqrt(j); for (n=2;n<=m;n++) { if(j%n==0) return 0; //返回值,0为不是素数,1是素数. } return 1; } //********************第二种方法. 请仿照2.5来写. P036 0.7 最大公约数和最小公倍数. #include main () { int m, n, c, d; int gcd(); //这是最大公约数的缩写,此处调用函数,可以不写里面的实参. int lcm(); //这是最小公倍数的缩写,此处调用函数,可以不写里面的实参. printf("Please input two number :\n"); scanf("%d %d",&m,&n); c=gcd(m,n); //c获取最大公约数 d=lcm(m,n); //d获取最小公倍数 printf("The GCD of %d and %d is : %d !\n", m, n, c); printf("The LCM of %d and %d is : %d !\n", m, n, d); return 0; } int gcd(int x, int y) //最大公约数Greatest Common Divisor { int temp; while(x%y!=0) { temp=y; //y在下一轮中作为除数,即是下一轮中的X,所以先闪一边去. y=x%y; //x,y的余数作为下一轮中的Y,由x%y来取得. x=temp; //刚才temp中存储了y的值,现在拿出来作为下一轮中的X使用. } return y; //这是每一轮中的被除数,按原理来,这就是最大公约数,即累除法的原理. } int lcm(int x, int y) //最小公倍数Lowest Common Multiple { int i, temp; if(x { //以下为经典三行码,实现两个数的互换. temp=x; x=y; y=temp; } for(i=1; i<=y; i++) //设定一个区间,从1至小的数之间的循环. { if(!((x*i)%y)) //除得尽为零,非零为真,则成立并返回. { //如此往复,直到取模无余数,那么小的数X乘以区间当前的I值,就是最小公倍数. return x*i; } } } 第二章:C程序的基本结构 一、单项选择题 1、以下不是C语言的特点的是________。 A)语言的表达能力强B)语言定义严格 C)数据结构系统化 D)控制流程结构化 2、TC编译系统提供了对C程序的编辑、编译、连接和运行环境,以下可以不在该环境下进行的环节是________。 A)编辑和编译 B)编译和连接 C)连接和运行D)编辑和运行 3、以下不是二进制代码文件是________。 A)标准库文件 B)目标文件C)源程序文件 D)可执行文件 4、下面个选项组中,均属于C语言关键字的一组是________。 A)auto,enum,include B)switch,typedef,continue C)signed,union,scanf D)if,struct,type 5、下面四组字符串中,都可以用作C语言标识符的是________。 A)print B)I \am C)signed D)if _maf scanf 3mf ty_pr mx_2d mx_ a.f x1# aMb6 AMB A&B 5XY 6、以下不属于流程控制语句的是_________。 A)表达式语句 B)选择语句 C)循环语句 D)转移语句 7、下面描述中,不正确的是________。 A)C语言的函数体由一系列语句和注释组成。 B)注释内容不能单独写在一行上。 C)C程序的函数说明部分包括对函数名、函数类型、形式参数等的定义和说明。 D)scanf和printf是标准库函数而不是输入和输出语句。 8、下面描述中,正确的是________。 A)主函数的花括号必须有,而子函数中的花括号是可有可无的。 B)一个C程序行只能写一个语句。 C)主函数是程序启动时的唯一入口。 D)函数体包含了函数说明部分。 二、填空题 1、一个完整的C程序至少要有一个________函数。(主函数) 2、标准库函数不是C语言本身的组成部分,它是由__________提供的功能函数。(编译系统) 3、C语言是以________为基本单位、整个程序由________组成。(函数函数) 4、常用的标准库函数有数学函数、字符函数和字符串函数、动态分配函数、随机函数和________函数等几个大类。(输入输出) 5、标准库函数存放在________文件中。(函数库) 6、目标程序文件的扩展名是________。(.obj) 7、程序连接过程是将目标程序、________或其它目标程序连接装配成可执行文件。(库函数) 8、因为源程序是________类型文件,所以用具有文本编辑功能的任何编辑软件程序完成编辑。(文本) 第一章 1.5题 #include C语言程序设计谭浩强第四版期末复习重点 Newly compiled on November 23, 2020 第一章 程 序设计和C 语言 .什么是计算机程序 程序.. :一组计算机能识别和执行的指令。只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作 计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。 什么是计算机语言 计算机语言:人和计算机交流信息的、计算机和人都能识别的语言。 计算机语言发展阶段:机器语言(由0和1组成的指令) 符号语言(用英文字母和数字表示指令) 高级语言(接近于人的自然语言和数学语言) 面向过程的语言(非结构化的语言、结构化语言);面向对象的语言 语言的发展及其特点 C 语言是一种用途广泛、功能强大、使用灵活的过程性编程语言,既可用于编写应用软件,又能用于编写系统软件。因此C 语言问世以后得到迅速推广。 C 语言主要特点: 语言简洁、紧凑,使用方便、灵活。(只有37个关键字、9种控制语句;程序书写形式 自由,源程序短) 运算符丰富。(34种运算符;把括号、赋值、强制类型转换等都作为运算符处理;表达 式类型多样化) 数据类型丰富。(包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型;C99又扩充了复数浮点类型、超长整型、布尔类型;指针类型数据,能用来实现各种复杂的数据结构的运算。) 具有结构化的控制语句。(如if…else语句、while语句、do…while语句、switch语句、for语句用函数作为程序的模块单位,便于实现程序的模块化;C语言是完全模块化和结构化的语言) 语法限制不太严格,程序设计自由度大。(对数组下标越界不做检查;对变量的类型使用比较灵活,例如,整型量与字符型数据可以通用;C语言允许程序编写者有较大的自由度,因此放宽了语法检查) 允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。(C语言具有高级语言的功能和低级语言的许多功能,可用来编写系统软件;这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言) 用C语言编写的程序可移植性好。(C的编译系统简洁,很容易移植到新系统;在新系统上运行时,可直接编译“标准链接库”中的大部分功能,不需要修改源代码;几乎所有计算机系统都可以使用C语言) 生成目标代码质量高,程序执行效率高。 1.C语言允许用两种注释方式:计算法 3.编写程序 4.对源程序进行编辑、编译和连接 5. 运行程序,分析结 6.编写程序文档 第二章算法——程序的灵魂 一个程序主要包括以下两方面的信息: (1) 对数据的描述。在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式,这就是数据结构。 (2) 对操作的描述。即要求计算机进行操作的步骤,也就是算法。 数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。 着名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:算法 + 数据结构 = 程序 谭浩强c++程序设计课后答案 娄警卫c语言程序设计第二章课后参考答案
《c++程序设计》谭浩强课后习题答案
C语言程序设计谭浩强第四版期末复习重点
(完整版)谭浩强c程序设计课后习题答案