c语言程序设计

面向对象程序设计--Java语言第一周编程题:分数

▼魔方 西西 提交于 2020-03-11 03:34:04
分数 题目内容: 设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数。 这个类要提供以下的功能: double toDouble(); 将分数转换为double Fraction plus(Fraction r); 将自己的分数和r的分数相加,产生一个新的Fraction的对象。注意小学四年级学过两个分数如何相加的哈。 Fraction multiply(Fraction r); 将自己的分数和r的分数相乘,产生一个新的Fraction的对象。 void print(); 将自己以“分子/分母”的形式输出到标准输出,并带有回车换行。如果分数是1/1,应该输出1。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的输出。 注意,在创建和做完运算后应该化简分数为最简形式。如2/4应该被化简为1/2。 你写的类要和以下的代码放在一起,并请勿修改这个代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); Fraction a = new Fraction(in

[转]程序员必读书单(转)

拈花ヽ惹草 提交于 2020-03-09 16:39:14
作者: Lucida 微博: @peng_gong 豆瓣: @figure9 原文链接: http://lucida.me/blog/developer-reading-list/ 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读。旨在成为最好最全面的程序员必读书单。 前言 Reading makes a full man; conference a ready man; and writing an exact man. Francis Bacon 优秀的程序员应该具备两方面能力: 良好的 程序设计 能力: 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列); 理解计算机科学的核心概念(例如计算机系统结构、操作系统、编译原理和计算机网络); 熟悉至少两门以上编程语言(例如C++,Java,C#,和Python); 专业的 软件开发 素养: 具备良好的编程实践,能够编写可测试(Testable),可扩展(Extensible),可维护(Maintainable)的代码; 把握客户需求,按时交付客户所需要的软件产品; 理解现代软件开发过程中的核心概念(例如面向对象程序设计,测试驱动开发,持续集成,和持续交付等等)。 和其它能力一样, 程序设计 能力和 软件开发 素养源自项目经验和书本知识

C语言_学习笔记_(二)计算

荒凉一梦 提交于 2020-03-08 18:04:47
一、变量 变量是一个保存数据的地方,用一个变量保存了数据,它才能参加到后面的计算中。 1.变量的定义 <类型名称><变量名称> int price; int amount; int price,amount; 2.变量的名字 变量需要一个名字,变量的名字是一种“标识符”,它是用来识别这个和那个的不同的名字。 标识符有标识符的构造规则。基本的原则是:标识符只能由字母、数字和下划线组成,数字不可以出现在第一个位置上,C语言的关键字(保留字)不可以用做标识符。 C语言的保留字:auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,if,in,long,return,short,signed等等 3.赋值和初始化 赋值: 和数学不同,a=b在数学中表示关系,即a和b的值一样;而在程序设计中,a=b表示要求计算机做一个动作:将b的值赋给a。 关系是静态的,而动作是动态的。在数学中,a=b和b=a是等价的,而在程序设计中,两者的意思完全相反。 初始化: 当赋值发生在定义变量的时候,就是变量的初始化。 int price = 0; 所有的变量在第一次被使用之前都应该被赋值一次。 4.变量类型 C语言是一种有类型的语言,所有变量在使用之前必须定义或声明,所有的变量必须具有确定的数据类型。

C语言I作业09

偶尔善良 提交于 2020-03-07 02:15:42
一、本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10027 我在这个课程的目标是 熟练掌握好C语言,培养自己的思维能力,同时加快敲代码速度。 这个作业在那个具体方面帮助我实现目标 帮助我熟练的掌握循环的嵌套使用 参考文献 百度百科、CSDN博客、C语言程序设计 二、本周作业 1.PTA实验作业 1.1 找完数 所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。 输入格式 输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。 输出格式 逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。 若区间内没有完数,则输出“None”。 输入样例: 2 30 输出样例 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14 1.1.1数据处理 数据表达: 用了m,n,i,j,sum,k,count=0;其中m,n代表区间[m,n];i,j,k代表循环起点;sum代表因子之和;count表示用于判断是否是完数

C语言I博客作业08

杀马特。学长 韩版系。学妹 提交于 2020-03-06 04:41:34
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 C语言I博客作业08 我在这个课程的目标是 学习C语言,码代码,为后面的学习打好基础 这个作业在哪个具体方面帮助我实现目标 更加了解编程及代码题的编写 参考文献 PTA系统常见问题解答 ; C语言基础知识 ; whlie 1.PTA实验作业 1.1 jmu-c-二进制转10进制 输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input! 输入样例1: 11111111 输出样例1: 255 输入样例2: 34 输出样例2: error input! 1.1.1数据处理 数据表达:用了变量num,i,item,sum,s,其中num表示二进制字符,sum表示十进制数,s表示用于之后的输出计算;其中#include<string.h>为用字符串处理函数的头文件;其中%s为字符串型格式符。 数据处理:伪代码 include<stdio.h> include<math.h> include<string.h> 运用到了字串符头文件 int main() { 定义字符型变量num;整形变量i,item,sum,s 将新取值1赋值给s,将0赋值给sum 输入num 运用for循环 for(i=0;num[i]>0;i++) { 如果num[i] 不等于'0' 并且 num[i

C语言程序设计100例之(30):删数问题

99封情书 提交于 2020-03-03 09:41:02
例30 删数问题 问题描述 从键盘输入一个高精度正整数num(num不超过250位),任意去掉S个数字后剩下的数字按原先后次序将组成一个新的正整数。编写一个程序,对给定的num和s,寻找一种方案,使得剩下的数字组成的新数最小。 输入格式 num (高精度的正整数)和S(需要删除的数字个数)。 输出格式 最后剩下的最小数。 输入样例 51428397 5 输出样例 123 (1)编程思路。 由于键盘输入的是一个高精度正整数num(num不超过250位),因此用字符串数组来进行存储。 为了尽可能地逼近目标,选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符。然后回到串首,按上述规则再删除下一个数字。重复以上过程s次,剩下的数字串便是问题的解了。 也就是说,删数问题采用贪心算法求解时,采用最近下降点优先的贪心策略:即x1<x2<…<xi<xj;如果xk<xj,则删去xj,得到一个新的数且这个数为n-1位中为最小的数N1,可表示为x1x2…xixkxm…xn。对N1而言,即删去了1位数后,原问题T变成了需对n-1位数删去k-1个数的新问题T′。新问题和原问题相同,只是问题规模由n减小为n-1,删去的数字个数由k减少为k-1。基于此种删除策略,对新问题T′,选择最近下降点的数进行删除

C语言程序设计100例之(31):全排列问题

瘦欲@ 提交于 2020-03-03 09:40:20
例31 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 n(1≤n≤9) 输出格式 由1~n组成的所有不重复的数字序列,每行一个序列。序列中每个数字占5个宽度。 输入样例 3 输出样例 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 (1)编程思路。 采用递归的方法来生成全排列。 (2)源程序。 #include <stdio.h> int a[9],flag[10]={0}; void dfs(int pos,int n) { if (pos==n) // 已有n个数 { for (int i=0;i<n;i++) printf("%5d",a[i]); printf("\n"); } else { for(int i=1;i<=n;i++) { if(flag[i]) continue; a[pos]=i; flag[i]=1; dfs(pos+1,n); flag[i]=0; } } } int main() { int n; scanf("%d",&n); dfs(0,n); return 0; } 习题31 31-1 选书 本题选自洛谷题库 (https://www.luogu.org/problem/P1657) 题目描述 学校放寒假时,信息学奥赛辅导老师有1,2

C语言程序设计100例之(32):组合问题

元气小坏坏 提交于 2020-03-03 09:39:13
例32 组合问题 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 例如n=5,r=3,所有组合为:123,124,125,134,135,145,234,235,245,345。 输入格式 一行两个自然数n,r(1<n<21,1≤r≤n)。 输出格式 所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。 输入样例 5 3 输出样例 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 (1)编程思路。 用递归来完成。 设函数void dfs(int pos,int num)表示为第pos(0≤pos≤r-1)个数取值,取值可以为num~n之一。显然,若r-pos>n-num+1,则后面剩下的数不够,直接剪枝;否则,在num~n中取一个数i(num≤i≤n)赋给a[pos],继续为下一个位置pos+1取数,即递归调用函数dfs(pos+1,i+1)。 (2)源程序。 #include <stdio.h> int a[21],n,r; void dfs(int pos,int num) { if (pos==r) // 已有r个数 { for

C语言程序设计100例之(29):拉丁方阵

非 Y 不嫁゛ 提交于 2020-03-03 08:28:12
例29 拉丁方阵 问题描述 构造 NXN 阶的拉丁方阵,使方阵中的每一行和每一列中数字1到N只出现一次。如N=4时: 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 输入格式 一个正整数n(2<=n<=9)。 输出格式 生成的n*n阶方阵。 输入样例 4 输出样例 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 (1)编程思路。 观察给出的例子,可以发现:若将每一行中第一列的数字和最后一列的数字连起来构成一个环,则该环正好是由1到N顺序构成;对于第i行,这个环的开始数字为i。按照此规律可以很容易的写出程序。 (2)源程序。 #include <stdio.h> int main() { int n; scanf("%d",&n); int i,k,t; for(i=0; i<n; i++) { t=i%n; // 确定该拉丁方阵第i行的第一个元素的值 for(k=0; k<n; k++) // 按照环的形式输出该行中的各个元素 printf("%d ",(k+t)%n+1); printf("\n"); } return 0; } 习题29 29-1 奇数阶魔方 本题选自杭州电子科技大学OJ题库 (http://acm.hdu.edu.cn/showproblem.php?pid=1998) Problem Description 一个 n

C语言学习笔记(八)--数组

若如初见. 提交于 2020-03-02 06:40:39
1 数组 在程序设计过程中我们往往需要处理一批相同类型的数据,如果使用基本类型定义变量来储存,显然是不方便的,这是我们就需要使用数组了。 2 数组特点 1.数组大小必须是确定的,不能随机改变的。 2.数组的元素必须是相同类型的,不允许出现混合类型。 3 一维数组 3.1 一维数组的定义: 类型说明符 数组名 [ 常量表达式 ] ; 例如: int a[10] 数组的生命需要注意以下几个问题: 1.数组的命名规则与变量相同; 2.常量表达式代表的是数组元素的个数,也就是数组的长度; 3.数组的下标是从 0 开始的,最后一个元素的下标是数组长度减 1 ; 4.数组的定义可以和普通变量一起声明和定义 Float i,j[]; 3.2 一维数组的引用:数组名 [ 下标表达式 ]; 例如: int a[5]; a[3]=10; 其中下标表达式可以是任意类型的表达式,但值必须是非负整型的。 数组分配内存空间是连续的空间,地址从低地址到高地址。 例子代码: #include "stdio.h" main() { float score[10]; int i; printf("please input scores:\n"); for (i=0;i<10;i++) /*数组下标为0~9*/ scanf("%f",&score[i]); /*依次输入每个数组元素*/ printf("\n");