300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 谭浩强c语言课后习题笔记[1-4章]

谭浩强c语言课后习题笔记[1-4章]

时间:2019-01-30 15:44:53

相关推荐

谭浩强c语言课后习题笔记[1-4章]

c语言程序设计(第五版)谭浩强课后习题笔记

文章目录

c语言程序设计(第五版)谭浩强课后习题笔记第一章 程序设计和c语言1.4 打印 Hello World1.6 输入abc求最大值 第二章 算法---程序的灵魂1.8.1 输出1900-2000年中的闰年1.8.2 求ax^2^+bx+c的根1.8.3 输入10个数,输出最大值 第三章 顺序结构程序设计3.1 生产总值倍数3.2 存款利息3.3 银行贷款3.6 编译密码字符串右偏移4位3.7 求圆面积,圆球体积等3.8 putchar和getchar函数的思考 第四章 选择结构程序设计4.5 输出一个小于1000的数的开方4.6 简单的分段函数4.8 百分制成绩转换4.9 计算几位数,输出各个位上的值,逆序输出数字4.10 求利润问题(要求用两种选择语句,类似出租车里程计费问题)4.11 简单排序,从小到大输出4个整数4.12 构造坐标点求建筑高度

第一章 程序设计和c语言

1.4 打印 Hello World

#include<stdio.h>int main(){printf("******************\n");printf("Hello World!\n\n");printf("******************\n");return 0;}

1.6 输入abc求最大值

1.求最大值最小值的代码是c语言的小套路,后续与排序结合在数组或是结构体中非常常见。

//常规代码#include<stdio.h>int Max(int a,int b);int main(){int a,b,c,max;scanf("%d %d %d",&a,&b,&c);max=a;if(max>b)max=b;if(max>c)max=c;printf("Max = %d",max);return 0;}/*条件表示式版max=max<b?b:max;max=max<c?c:max;*/

//函数版代码#include<stdio.h>int Max(int a,int b);int main(){int a,b,c,max;scanf("%d %d %d",&a,&b,&c);max=Max(a,Max(b,c));printf("Max = %d",max);return 0;}int Max(int a,int b){if(a>b)return a;elsereturn b;}

第二章 算法—程序的灵魂

本章重点:流程图

小套路:闰年整除(取余的用法)

1.8.1 输出1900-2000年中的闰年

小套路:整除—对应着一个整数取余操作正好为0

/*符合系列两条件之一的是闰年1.能被4整除但不能被100整除2.能被400整除*/#include<stdio.h>int isLeapYear(int year);int main(){int i,n,m;scanf("%d %d",&n,&m); //赋值年份上下限for(i=n;i<=m;i++) //循环遍历年份判断闰年if(isLeapYear(i))printf("%d is Leap Year\n",i);return 0;}int isLeapYear(int year) //判断闰年函数{if((year%4==0&&year%100)||year%400==0)return 1;elsereturn 0;}

1.8.2 求ax2+bx+c的根

公式d=b2-4ac

求 根 公 式 一 : x 1 = ( − b − b 2 − 4 a c ) 2 a x 2 = ( − b + b 2 − 4 a c ) 2 a 求根公式一: \\ x_1={{(-b-\sqrt{b^2-4ac})}\over {2a}} \qquad x_2={{(-b+\sqrt{b^2-4ac})}\over {2a}} 求根公式一:x1​=2a(−b−b2−4ac ​)​x2​=2a(−b+b2−4ac ​)​

求 根 公 式 二 : p = − b 2 a q = d 2 a x 1 = p + q x 2 = p − q 求根公式二: \\ p={{-b}\over {2a}} \qquad q={\sqrt{d}\over {2a}} \\ x_1={p+q} \qquad x_2={p-q} 求根公式二:p=2a−b​q=2ad ​​x1​=p+qx2​=p−q

#include<stdio.h>#include<math.h>int main(){double a,b,c,d,x1,x2;scanf("%lf %lf %lf",&a,&b,&c);d=b*b-4*a*c;if(d<0)printf("Sorry! System without solution!");else{x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf("System Have a solution!\nx1 = %.2f\tx2 = %.2f",x1,x2);}return 0;}/*else中的另一种解法p=-b/(2*a);q=sqrt(d)/(2*a);x1=p+q;x2=p-q;*/

1.8.3 输入10个数,输出最大值

#include<stdio.h>#include<math.h>int main(){int i,digit,number,max;scanf("%d",&digit);scanf("%d",&number);max=number;for(i=1;i<digit;i++){scanf("%d",&number);if(max<number)max=number;}printf("Max = %d",max);return 0;}

第三章 顺序结构程序设计

本章重点:math.h函数的调用

小套路:字符转换

3.1 生产总值倍数

#include<stdio.h>#include<math.h>int main(){double r=0.07,p;r=1+r;p=pow(1.07,10);printf("p = %f",p);return 0;}//输出结果//p=1.967151

3.2 存款利息

#include<stdio.h>#include<math.h>int main(){double band=1000,year;double p1,p2,p3,p4,p5;p1=band*(1+0.03*5);printf("p1 = %f\n",p1);p2=band*(1+0.021*2)*(1+0.0275*3);printf("p2 = %f\n",p2);p3=band*(1+0.0275*3)*(1+0.021*2);printf("p3 = %f\n",p3);p4=band*pow((1+0.015),5);printf("p4 = %f\n",p4);p5=band*pow(1+0.0035/4,20);printf("p5 = %f\n",p5);return 0;}//输出结果/*p1 = 1150.000000p2 = 1127.965000p3 = 1127.965000p4 = 1077.284004p5 = 1017.646235*/

3.3 银行贷款

#include<stdio.h>int main(){double d=300000,p=6000,r=0.01;double m;m=log(p/(p-d*r))/log(1+r);printf("m = %.1f",m);return 0;}

3.6 编译密码字符串右偏移4位

/*题目要求单个赋值法略,进阶既A替换为E,a替换为e,V替换A,W替换为B……Z替换为D。*/#include<stdio.h>#include<string.h>int main(){int i;char str[81];gets(str); //输入字符串 for(i=0;i<strlen(str);i++){if((str[i]<='Z'&&str[i]>='A')||(str[i]<='z'&&str[i]>='a')) //保证是字母 {if((str[i]<='Z'&&str[i]>='V')||(str[i]<='z'&&str[i]>='v')) //进行转换 str[i]=str[i]-22; //末尾-22偏移elsestr[i]=str[i]+4; //首部+4偏移}}puts(str);return 0;}

3.7 求圆面积,圆球体积等

#include<stdio.h>#include<string.h>int main(){//已知半径为1.5,高为3 double r,h,pi=3.141526; scanf("%lf %lf",&r,&h);double lenth,area,oarea,v,cv; lenth=2*pi*r;area=pi*r*r;oarea=4*pi*r*r;v=3.0/4*pi*r*r*r;cv=pi*r*r*h;printf("lenth = %6.2f,area = %6.2f,oarea = %6.2f,v = %6.2f,cv = %6.2f",lenth,area,oarea,v,cv);return 0;}

3.8 putchar和getchar函数的思考

定义为字符型和整型均可以。

输出ASCII值要用printf函数。

只有在字符型数据范围内(0~127),整型和字符型可以相互代替。

#include<stdio.h>#include<string.h>int main(){char c1,c2;int c11,c12;c1=getchar();c2=getchar();c11=getchar();c12=getchar();printf("\nchar类型:\n");putchar(c1);putchar(c2);putchar('\n');printf(" %c %d",c1,c1);printf(" %c %d",c2,c2);printf("\nint类型:\n");putchar(c11);putchar(c12);putchar('\n');printf(" %c %d",c11,c11);printf(" %c %d",c12,c12);return 0;}/*输出结果AaBbchar类型:AaA 65 a 97int类型:BbB 66 b 98*/

第四章 选择结构程序设计

本章重点:if-else,switch-case

小套路:交换,选择结构与整数除法取个位数的结合

错题: a=3,b=4,c=5 , !(a>b) && !c || 1 逻辑表达式的值是1

4.5 输出一个小于1000的数的开方

#include<stdio.h>#include<math.h>int main(){int n,sn;printf("请输入一个小于1000的正数:"); scanf("%d",&n);while(n>1000||n<=0){printf("不符合要求,请重新输入:");scanf("%d",&n);}sn=(int)sqrt(n);printf("sqrt %d is %d",n,sn);return 0;}

4.6 简单的分段函数

#include<stdio.h>#include<math.h>int fact(int x);int main(){int x;scanf("%d",&x);if(x<1)printf("y = %d = %d",x,x);else if(x>=10)printf("y = 3*%d-11 = %d",x,3*x-11);elseprintf("y = 2*%d-1 = %d",x,2*x-1);printf("\nfact(x) = %d",fact(x));return 0;}int fact(int x){if(x<0)return -1;else if(x==0)return 0;elsereturn 1;}

4.8 百分制成绩转换

#include<stdio.h>#include<math.h>void changegrade(int grade);int main(){double sorce;int grade;scanf("%d",&sorce);grade=(int)sorce/10;switch(grade){case 10:case 9: printf("sorce = %.2f, grade is A",sorce);break;case 8: printf("sorce = %.2f, grade is B",sorce);break;case 7: printf("sorce = %.2f, grade is C",sorce);break;case 6: printf("sorce = %.2f, grade is D",sorce);break;default: printf("sorce = %.2f, grade is E",sorce);break;}return 0;}void changegrade(int grade) //把功能抽象出来{switch(grade){case 10:case 9: printf("sorce = %.2f, grade is A",sorce);break;case 8: printf("sorce = %.2f, grade is B",sorce);break;case 7: printf("sorce = %.2f, grade is C",sorce);break;case 6: printf("sorce = %.2f, grade is D",sorce);break;default: printf("sorce = %.2f, grade is E",sorce);break;}}/*题目变式,有90-85是B,84-70是C那么case8:需要有微调加入选择结构case8: if((int)sorce%10>=5)printf("sorce = %.2f, grade is B",sorce);elseprintf("sorce = %.2f, grade is C",sorce);break;*/

4.9 计算几位数,输出各个位上的值,逆序输出数字

#include<stdio.h>#include<math.h>int manydigit(int n);void reversed(int n);int main(){int n,count;scanf("%d",&n);//计算几位数 int i,digit=0;for(i=n;i>0;i/=10)digit++;printf("digit = %d\n",digit);//输出每位数int g,s,b;g=n%10; if(g>0)printf("g = %d\n",g);s=n/10%10;if(s>0)printf("s = %d\n",s);b=n/100;if(b>0)printf("b = %d\n",b);//逆序printf("方案一:逐个输出 "); printf("%d%d%d\n",g,s,b); printf("方案二:计算输出 "); printf("%d",g*100+s*10+b);return 0;}int manydigit(int n) //计算位数的函数 ,求水仙花数会用到{int i,digit=0;for(i=n;i>0;i/=10)digit++;return digit;}/* 函数递归方式---打印各个位上的数字(和逆序递归的区别就在打印先执行还是函数调用先执行)*/void printdigits( int n ){if(n/10==0)printf("%d",n%10); else{printdigits(n/10);printf("%d",n%10);}}//逆序打印方法一:void reversed(int n)//逆序打印 常见的整数逆序套路,求和的一种变形{int i,sum=0;for(i=n;i>0;i/=10){sum=sum+i%10;}printf("%d",sum);}//逆序打印方法二:/* 逆序输出打印的函数递归方式 */void printdigits( int n ){if(n/10==0)printf("%d",n%10); else{printf("%d",n%10);printdigits(n/10);}}

4.10 求利润问题(要求用两种选择语句,类似出租车里程计费问题)

#include<stdio.h>#include<math.h>int main(){int cash,flag;scanf("%d",&cash);double profit;flag=cash/100000;switch(flag){case 0: profit=cash*0.1;break;case 1: profit=0.1*100000+(cash-100000)*0.075;break;case 2: case 3: profit=100000*0.175+(cash-200000)*0.05;break;case 4: case 5: profit=100000*0.185+(cash-400000)*0.03;break;case 6:case 7:case 8:case 9:profit=100000*0.191+(cash-600000)*0.015;break;default: profit=100000*0.194+(cash-600000)*0.01;break;}printf("switch-case output:\n");printf("profit = %.2f\n",profit); if(cash<=100000)profit=cash*0.1;else if(cash<=200000)profit=0.1*100000+(cash-100000)*0.075;else if(cash<400000)profit=100000*0.175+(cash-200000)*0.05;else if(cash<=600000)profit=100000*0.185+(cash-400000)*0.03;else if(cash<=1000000)profit=100000*0.191+(cash-600000)*0.015;elseprofit=100000*0.194+(cash-600000)*0.01;printf("id-else output:\n");printf("profit = %.2f",profit);return 0;}/*输出结果156890switch-case output:profit = 14266.75id-else output:profit = 14266.75*/

4.11 简单排序,从小到大输出4个整数

//不使用数组很繁琐,但是排序的核心是比较和交换,尤其是交换//交换是最经典的一个套路:temp=a;a=b;b=temp;不管是数组也好,结构体也好框架不会变#include<stdio.h>#include<math.h>void swap(int *a,int *b);int main(){int a,b,c,d;scanf("%d %d %d %d",&a,&b,&c,&d);if(a>b)swap(&a,&b);if(a>c)swap(&a,&c);if(a>d)swap(&a,&d);//此时a已经为最小值//重复操作,使得b,c,d依次通过交换变为升序if(b>c)swap(&b,&c);if(b>d)swap(&b,&d);if(c>d) swap(&c,&d);printf("%d < %d < %d < %d",a,b,c,d);return 0;}void swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;}

4.12 构造坐标点求建筑高度

#include<stdio.h>#include<math.h>int main(){//塔外建筑高度为0,塔内建筑高度为10,判定在塔内还是塔外 //每个圆的半径都为1,且横纵坐标的绝对值都为2,而判定一点是否在园内//只需要判定点掉圆心的距离是否超过半径,所以用两次fabs取绝对值即可。 double x,y,fx,fy,ret; scanf("x=%lf y=%lf",&x,&y);fx=fabs(fabs(x)-2);fy=fabs(fabs(y)-2);ret=sqrt(fx*fx+fy*fy);if(ret<=1&&ret>=0)printf("YES,height is 10m");elseprintf("No,height is 0m"); return 0;}/*输出结果x=0.5 y=0.7No,height is 0m-----------------x=2.1 y=2.3YES,height is 10m*/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。