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

文章目录

  • c语言程序设计(第五版)谭浩强课后习题笔记
    • 第一章 程序设计和c语言
      • 1.4 打印 Hello World
      • 1.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.000000
p2 = 1127.965000
p3 = 1127.965000
p4 = 1077.284004
p5 = 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函数的思考

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

  2. 输出ASCII值要用printf函数。

  3. 只有在字符型数据范围内(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 97
int类型:
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;  }
/*输出结果
156890
switch-case output:
profit = 14266.75
id-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.7
No,height is 0m
-----------------
x=2.1 y=2.3
YES,height is 10m
*/

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

  1. 谭浩强c语言课后习题笔记[第6章]

    文章目录 第六章 数组 6.1 筛选法求100以内的素数 6.2 用选择法对10个整数排序 6.3 求3阶矩阵的对角线元素之和 6.4 在有序数组(升序)中插入一个数 6.5 数组逆序排列其数值 6. ...

  2. 【第二章】谭浩强C语言课后习题答案

    1. 什么是算法?试从日常生活中找3个例子,描述它们的算法 算法:简而言之就是求解问题的步骤,对特定问题求解步骤的一种描述. 比如生活中的例子: 考大学 首先填报志愿表.交报名费.拿到准考证.按时参加 ...

  3. 谭浩强C语言程序设计代码示例第6章(笔记)

    谭浩强C语音程序设计代码示例第六章(新手入门笔记) 第一章包含参考书,在线编译工具,代码,注释等. 遵循共享互助原则 谭浩强C语言程序设计代码示例(1-3章) 谭浩强C语言程序设计代码示例第4章(笔记 ...

  4. 谭浩强C语言程序设计代码示例第5章(笔记)

    谭浩强C语音程序设计代码示例第四章(新手入门笔记) 第一章包含参考书,在线编译工具,代码,注释等. 遵循共享互助原则 谭浩强C语言程序设计代码示例(1-3章) 谭浩强C语言程序设计代码示例第4章(笔记 ...

  5. C程序设计-谭浩强 第三版-学习笔记第1章 C语言概述

    第一章 C语言概述 1.C语言历史背景 C语言是在B语言的基础上发展起来的,兼具一般高级语言和低级语言的优点,可用来编写系统软件或应用软件. 1972-1973年,贝尔实验室在B语言基础上设计出C语言 ...

  6. C++程序设计(第二版)谭浩强----程序题课后习题答案第二章

    3. #include<iostream> using namespace std; int main() {char c1 = 'a', c2 = 'b', c3 = 'c', c4 = ...

  7. 谭浩强c语言不讲位运算呢,谭浩强c语言教程_第十二章-位运算谭浩强c语言教程_第十二章-位运算.doc...

    12位运算1 12.1位运算符C语言提供了六种位运算符:1 12.1.1按位与运算1 12.1.2按位或运算2 12.1.3按位异或运算2 12.1.4求反运算3 12.1.5左移运算3 12.1.6 ...

  8. C程序设计-谭浩强 第三版-学习笔记 第2章 程序的灵魂 算法

    第 2 章 算法 --程序的灵魂 程序 = 算法 + 数据结构 (沃思,计算机科学家) 一个程序应该包括两方面: 对数据的描述:在程序中要指定数据的类型和数据的组织形式,即数据结构(data stru ...

  9. 谭浩强c语言程序设计第五版---第一章

    5.编写程序,输出平行四边形**** (1) #include<cstdio> int main(){int i,j,k;for(i=0;i<4;i++){//确定形状的关键代码 f ...

最新文章

  1. ovirt官方安装文档 附录F
  2. python恶搞表情包-哈哈!我用 Python 把你的朋友变成表情包了
  3. (实用)将wordpad添加到Windows PowerShell中
  4. 苹果公司的新的编程语言 Swift 高级语言()两--基本数据类型
  5. 深入理解CSS盒模型 - 程序猿的程 - 博客园
  6. 客座编辑:李建平(1976-),男,博士,中国科学院科技战略研究院系统分析与管理所研究员、所长...
  7. Security Tutorials系列文章第七章:User-Based Authorization(下)
  8. jmeter-01 JMeter HTTP测试的各元件功能演示示例
  9. 光纤基础知识(2)-光纤接头(尾纤)ST,SC,LC,FC
  10. 完整卸载SQL Server2008
  11. cmos功能测试软件,CMOS摄像头开发测试方法(我总结的)
  12. 仿城通网盘仿蓝奏网盘源码
  13. sslv3 poodle漏洞 检测解决方法
  14. Windows 恢复使用老版的图片查看器
  15. 扩展数组方法 给数组原形链追加方法(原型链中的this)
  16. compact php,如何使用php compact()函数
  17. 优酷路由宝YK-L1刷小米路由固件
  18. Android中级工程师面试总结
  19. 皮尔洛任意球破门曼朱季奇扳平 意大利1-1克罗地亚
  20. android 设置自定义主题及切换方案

热门文章

  1. IPVS -三种IP负载均衡技术与八种调度算法
  2. 解决Windows中mfc100.dll文件缺少问题
  3. dnf创建服务器信息失败怎么办,DNF提示图表系统组建失败怎么解决?
  4. AXI总线之AXI-LITE总线分析与实现
  5. 【数据结构和算法】衡量算法的标尺,时间和空间复杂度详解
  6. 我上了985,211,才发现自己一无所有 | 或者,也不能这么说
  7. 学习笔记13-HC-SR04超声波模块
  8. LabVIEW Arduino电子称重系统(项目篇—1)
  9. Xilinx ISE 出现 Bitgen:342 - This design contains pins which have locations (LOC)...解决办法
  10. 虚拟机centos7安装python_Win10家庭版通过Hyper-V安装Centos7+Python3.7过程总结