模塊一 程序設計 1.試題編號:
J1-1《小學生數學輔助學習系統》關鍵算法
(1)任務描述 隨着社會的發展及人們對小學階段的教育重視程度在不斷提高,A 公司決定開發一套小 學生數學輔助學習系統,通過完成趣味試題,采用游戲通關的方式,幫助小學生掌握數學里 的基本概念和計算方法。
任務一:實現趣味試題 1 的關鍵算法並繪制流程圖(30 分) 通過鍵盤輸入某年某月某日,計算並輸出這一天是這一年的第幾天。例如,2001 年 3 月 5 日是這一年的第 64 天。 注意:使用分支結構語句實現。
package ex1;
import java.util.*;
public class ex1_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int year; //年份
int month; //月份
int day; //日
int days; //累計天數
int d=0;
int e = 0;
Scanner scanner = new Scanner(System.in);
System.out.print("輸入年:");
year = scanner.nextInt();
System.out.print("輸入月:");
month = scanner.nextInt();
System.out.print("輸入日:");
day = scanner.nextInt();
days=day;
for (int i = 1; i <month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: {
d = 31;
break;
}
case 4:
case 6:
case 9:
case 11: {
d = 30;
break;
}
case 2: {
/**
* 閏年:①:非整百年數除以4,無余為閏,有余為平;②整百年數除以400,無余為閏有余平
* 二月:平年28天、閏年29天
*/
if ((year % 100 !=0 &&year % 4 == 0) || (year % 100 == 0 && year%400==0)) {
d = 29;
} else {
d = 28;
}
}
default:
break;
}
days+=d;
}
System.out.println(year+"年"+month+"月"+day+"日"+"是這一年的第"+days+"天");
}
}
# -*- coding:utf-8 -*- print("輸入年:") year = int(input()) print("輸入月:") months = int(input()) print("輸入日:") day = int(input()) y = [1,3,5,7,8,10,12] m = [4,6,9,11] d1 = 0 d2 = 0 d3 = 0 d4 = 0 for month in range(1, months): if month in y: d1 = 31 if month in m: d2 = 30 if month == 2: if (year % 4) == 0 and (year % 100) != 0 or (year % 400) == 0: d3 = 29 else: d3 = 28 break d4 = (d1+d2+d3) print("{}年{}月{}日是這一年的第{}" .format(year,months,day,(d4+day)))
任務二:實現乘法口訣助記功能的關鍵算法並繪制流程圖(30 分) 選擇乘法口訣助記功能,輸出階梯形式的 9*9 乘法口訣表,如圖 1.1.1 所示。
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 圖 1.1.1 乘法口訣表 注意:使用循環結構語句實現。
package ex1;
public class ex1_2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 1; i <=9; i++) //i*j
{
for (int j = 1; j <=i; j++)
{
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
# -*- coding:utf-8 -*- for i in range(1,10): for j in range(1,i+1): print("{}*{}={}".format(i,j,i*j),end=' ') print()
任務三:實現趣味試題 2 關鍵算法並繪制流程圖(30 分) 判斷一個整數是否為“水仙花數”。所謂“水仙花數”是指一個三位的整數,其各位數 字立方和等於該數本身。例如:153 是一個“水仙花數”, 因為 153=1^3+5^3+3^3。 注意: 用帶有一個輸入參數的函數(或方法)實現,返回值類型為布爾類型。 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3 2.試題編號:
package ex1;
import java.util.Scanner;
public class ex1_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);// 接收控制台輸入信息
System.out.print("請輸入一個整數:");
try {
int num = scan.nextInt();// 取出控制台輸入的信息
if (isDaffodilNumber(num)) {// 調用isDaffodilNumber()方法
System.out.println(num + "是水仙花數!");// 若為true,輸出是水仙花數
} else {
System.out.println(num + "不是水仙花數!");// 否則,輸出不是水仙花數
}
} catch (Exception e) {
System.out.println("必須輸入整數");// 捕捉異常,輸入的必須為整數,若否,輸出必須輸入整數
}
}
// 用於判斷一個整數是否是水仙花數
public static boolean isDaffodilNumber(int i) {
boolean flag = true;
int a = i / 100; // 取得百位數
int b = (i / 10) % 10; // 取得十位數
int c = i % 10; // 取得個位數
/*
* if ((Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3)) != i) {// 若各位數字立方和不等於該數本身
* flag = false;// 返回false
* }
*/
if (a * a * a + b * b * b + c * c * c != i) {// 若各位數字立方和不等於該數本身
flag = false;//返回false
}
return flag;
}
}
# -*- coding:utf-8 -*- print("輸入一個整數") num = int(input()) a = int(num/100) b = int((num/10)%10) c = num%10 if(a*a*a+b*b*b+c*c*c == num): print("是水仙花") else: print("不是水仙花")
J1-2《幫你算系統》關鍵算法
(1)任務描述 隨着網絡的不斷發展,我們每天接觸的新鮮事物都在不斷增加,處在這一個信息量大爆 炸的時代,我們的時間就尤為重要,為了幫一些人解決時間不充裕的問題,處於創業的某公 司准備開發一套“幫你算”系統,用來解決生活中那些簡單、繁瑣的數學問題。
任務一:實現平均成績計算功能的關鍵算法並繪制流程圖(30 分) 已知某個班有 30 個學生,學習 5 門課程,已知所有學生的各科成績。請編寫程序:分 別計算每個學生的平均成績,並輸出。 注意:定義一個二維數組 A,用於存放 30 個學生的 5 門成績。定義一個一維數組 B,用 於存放每個學生的 5 門課程的平均成績。 ①使用二重循環,將每個學生的成績輸入到二維數組 A 中。
②使用二重循環,對已經存在於二維數組 A 中的值進行平均分計算,將結果保存到一維 數組 B 中。 ③使用循環輸出一維數組 B(即平均分)的值。
package ex2;
import java.util.Scanner;
public class ex2_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] A = new int[30][5]; //存放30個學生5門成績
Scanner s=new Scanner(System.in);
int[] B = new int[30];// 存放每個學生的5門課程的平均成績
int [] total=new int[30];// 存放每個學生的5門課程的總成績
int i, j, k = 0;
// ***********輸入每個學生的每門課程的成績***************
for (i = 0; i <A.length; i++)
{
System.out.println("輸入第"+(i+1)+"個學生的5門課成績");
for (j = 0; j <A[i].length; j++)// 初始化數組
A[i][j]=s.nextInt();
}
// ******************計算每個學生的5門課程的平均分*****************
for (i = 0; i <A.length; i++) {
total[i]=0;
for (j = 0; j <A[i].length; j++) {
total[i] += A[i][j];
}
B[i]=total[i]/ 5;
}
// ******************輸出每個學生的5門課程的平均分*****************
for (i = 0; i <B.length; i++)
System.out.println("第"+(i+1)+"個學生5門課程的平均分為:"+B[i]);
}
}
任務二:實現階乘計算功能關鍵算法並繪制流程圖(30 分) 輸入一個整數 n,計算並輸出他的階乘。 注意:定義一個函數(或方法),用於求階乘的值。 在主函數(或主方法)中調用該遞歸函數(或方法),求出 5 的階乘,並輸出結果。
package ex2;
import java.util.Scanner;
public class ex2_2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n; //
int f;//存儲n的階乘
System.out.println("請輸入一個整數:");
Scanner s=new Scanner(System.in);
n=s.nextInt();
f=factFor(n);
System.out.println(n+"的階乘是:"+f);
}
public static int factFor(int n){
int sum = 1;
if(n == 0){
return 1;
}
for(int i = 1; i <= n; i++){
sum*=i;
}
return sum;
}
}
任務三:實現前項列和計算功能關鍵算法並繪制流程圖(30 分) 有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13 … 求出這個數列的前 20 項之和。
要求:利用循環計算該數列的和。注意分子分母的變化規律。 注意:
a1=2, b1=1, c1=a1/b1; a2=a1+b1, b2=a1, c2=a2/b2; a3=a2+b2, b3=a2, c3=a3/b3; … s = c1+c2+…+c20; s 即為分數序列:2/1,3/2,5/3,8/5,13/8,21/13 … 的前 20 項之和。 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3 3.試題編號:
package ex2;
public class ex2_3 {
public static void main(String[] args) {
double sum = 0;
double n1 =2;
double n2 = 1;
double sn = 0;
for (int i = 0; i <20; i++) {
sum += n1/n2;
sn = n1+n2;
n2 = n1;
n1 = sn;
}
System.out.println(sum);
}
}
J1-3《網絡選拔賽題庫系統》關鍵算法
(1)任務描述 隨着網絡的普及,許多比賽開始采用網絡選拔賽的模式。某大賽組委會決定開發一個網 絡選拔賽題庫系統,實現該系統需要完成以下任務。
任務一:實現統計元音關鍵算法並繪制流程圖(30 分) 輸入一個字符串統計每個元音字母(aeiou)在字符串中出現的次數。 對於結果輸出 5 行,格式如下: a:num1(a 的個數)
e:num2(b 的個數)
i:num3(i 的個數)
o:num4(o 的個數)
u:num5(u 的個數)
例如輸入 aeioubbbccc,輸出:
a:1
e:1
i:1
o:1
u:1
注意:使用分支語句實現。
package ex3;
import java.util.Scanner;
public class ex3_1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
int counta=0,counte=0,counti=0,counto=0,countu=0;
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='a')
counta++;
else if(str.charAt(i)=='e')
counte++;
else if(str.charAt(i)=='i')
counti++;
else if(str.charAt(i)=='o')
counto++;
else if(str.charAt(i)=='u')
countu++;
}
System.out.println("a:"+counta);
System.out.println("e:"+counte);
System.out.println("i:"+counti);
System.out.println("o:"+counto);
System.out.println("u:"+countu);
}
}
任務二:實現 Switch Game 關鍵算法並繪制流程圖(30 分) 有 n 盞燈,編號 1~n(0<n<100)。第 1 個人把所有燈打開,第 2 個人按下所有編號為 2 的倍數的開關(這些燈將被關掉),第 3 個人按下所有編號為 3 的倍數的開關(其中關掉 的燈將被打開,開着的燈將被關閉),依次類推。輸入燈數和人數,輸出開着的燈的編號。
比如輸入:10 2 輸出最后亮燈的編號:1,3,5,7,9 注意:使用循環語句實現。
package ex3;
import java.util.Scanner;
public class ex3_2 {
public static void main(String[] args) {
int i,j=2,n,d,r;
int[]x=new int[100];
Scanner s=new Scanner(System.in);
d=s.nextInt();
r=s.nextInt();
for (i=1;i<=d;i++)//燈的編號
x[i]=i;
while (j<=r)
{
for (i=j;i<=d;i++) //燈數從等於人數開始
{
if (i%j==0) //是人的倍數
{
if (x[i]!=0)//不為0則要關燈
x[i]=0;
else //為0則要開燈
x[i]=i;
}
}
j++; //下一個人數
}
for (i=1;i<=d;i++)
if (x[i]!=0)
System.out.print(x[i]+",");
}
}
任務三:實現 2^x mod n = 1 關鍵算法並繪制流程圖(30 分) 給你一個數字 n,找到滿足 2^x mod n = 1 的最小值 x,如果 x 存在,則輸出“2 ^x mod n = 1”,否則輸出“2 ^? mod n = 1”,您需要用真實的 x 和 n 的值來替代字符串中的變 量。 例如輸入 5,輸出答案為 2^4 mod 5 = 1。 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3 4.試題編號:
package ex3;
import java.util.Scanner;
public class ex3_3 {
public static void main(String[] args) {
int n,t,i;
Scanner s=new Scanner(System.in);
n=s.nextInt();
if(n%2==0||n==1)
{
System.out.println("2^? mod "+n+"= 1");
}
else
{
int ans=1,cnt=0;
while(ans!=1||cnt==0)
{
cnt++;
ans=(ans*2)%n;
}
System.out.println("2^"+cnt+" mod"+n+"= 1");
}
}
}
J1-4《圖形體積計算系統》關鍵算法
(1)任務描述 圖形在我們的生活中無處不在,看看我們的周圍,到處都是圖形的縮影、例如空調是長 方形、水瓶瓶蓋是圓形,這些圖形的計算對於我們的土木工程師來說,那可是非常重要的啊, 所以某公司開發出一套圖形面積計算系統,幫助那些工程師們更好的計算。
任務一:實現計算體積關鍵算法並繪制流程圖(30 分) 根據輸入的半徑值,計算球的體積。輸入數據有多組,每組占一行,每行包括一個實數, 表示球的半徑。輸出對應球的體積,對於每組輸入數據,輸出一行,計算結果保留三位小數。 注:PI = 3.1415927 例如:輸入 2 輸出 33.510 注意:使用公式完成。
package ex4;
import java.util.Scanner;
public class ex4_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
double r=sc.nextDouble();
double pi=3.1415927;
double s=4*r*r*r*pi/3;
System.out.format("%.3f",s).println();
}
}
}
任務二:實現坐標求長度關鍵算法並繪制流程圖(30 分) 輸入兩點坐標(X1,Y1),(X2,Y2),計算並輸出兩點間的距離。輸入數據有多組,每組 占一行,由 4 個實數組成,分別表示 x1,y1,x2,y2,數據之間用空格隔開。 例如輸入: 1 3 4 6 則輸出:4.24 注意:結果保留兩位小數。
package ex4;
import java.util.Scanner;
public class ex4_2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
double x1,y1,x2,y2,distance;
while(sc.hasNext())
{
x1=sc.nextDouble();
y1=sc.nextDouble();
x2=sc.nextDouble();
y2=sc.nextDouble();
distance =Math.sqrt(Math.abs((x1 - x2)*(x1 - x2))+Math.abs((y1 - y2)*(y1 - y2)));
System.out.format("%.3f",distance).println();
}
}
}
任務三:實現圖形面積大小比較關鍵算法並繪制流程圖(30 分) 按順序輸入正方形的邊長(a),長方形的長(l)和寬(d),以及圓的半徑(r),計 算並比較它們哪個圖形面積更大,輸出面積最大的圖形。 例如:輸入 1 3 4 1,輸出:長方形 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3 5.試題編號:
package ex4;
import java.util.Scanner;
public class ex4_3 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int l=sc.nextInt();
int d=sc.nextInt();
int r=sc.nextInt();
double area1=a*a;
double area2=l*d;
double area3=Math.PI*r*r;
if(area1>area2)
{
if(area1>area3)
System.out.println("正方形");
else
System.out.println("圓");
}
else
{
if(area2>area3)
System.out.println("長方形");
else
System.out.println("圓");
}
}
}
J1-5《中國結圖案打印系統》關鍵算法
(1)任務描述 中國結是一種中國特有的手工編織工藝品,它身上所顯示的情致與智慧正是中華古老文 明的一個寫照。它原本是由舊石器時代的縫衣打結,后推展至漢朝的儀禮記事,再演變成今 日的裝飾手藝。當代多用來裝飾室內、親友間的饋贈禮物及個人的隨身飾物。因為其外觀對 稱精致,可以代表中國悠久的歷史,符合中國傳統裝飾的習俗和審美觀念,故命名為中國結。 現在 A 公司想要開發一個中國結圖案打印系統,現在請你完成以下任務。
任務一:實現主結長度關鍵算法並繪制流程圖(30 分)
公司現在需要打印中國結的主結(位於中間,最大的那一個結),為了打印出漂亮新穎的 主結,於是設計打印主結的長度滿足可以被 7 整除這個條件。現在公司需要統計某個范圍內 能被 7 整除的整數的個數,以及這些能被 7 整除的數的和。 從鍵盤上輸入一個整數 N,輸出 1~N 之間能被 7 整除的整數的個數,以及這些能被 7 整 除的數的和。
package ex5;
import java.util.Scanner;
public class ex5_1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請輸入");
int n = sc.nextInt();
int count = 0;
int sum = 0;
for(int i=1;i<n;i++){
if(i%7==0){
count++;
sum+=i;
}
}
System.out.println("1-"+n+"之間能被7整除的數有"+count+"個,他們的和是:"+sum);
}
}
任務二:實現副結長度關鍵算法並繪制流程圖(30 分) 公司設計的中國節還需要副結(主結周圍的結),於是打算設計副結的長度滿足是素數這 個條件。現在公司需要統計出某個范圍內哪些數是素數。 從鍵盤上輸入一個整數 N,輸出 1~N 之間的素數。 注意:用帶有一個輸入參數的函數(或方法)實現,返回值類型為布爾類型。
package ex5;
import java.util.Scanner;
public class ex5_2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n = sc.nextInt(); //輸入n
for(int i=1;i<=n;i++)//
{
if(IsPrime(i))
System.out.print(i+"\t");
}
}
static boolean IsPrime(int x) //判斷是否是素數
{
boolean b=false;
int i;
for (i = 2; i<x; i++) // 1不是素數,所以直接從2開始循環
{
if(x%i==0) break;
}
if (i==x)
b=true;
return b;
}
}
任務三:實現打印中國結圖案關鍵算法並繪制流程圖(30 分) 由於中國結的形狀是菱形圖案,所以現在公司需要設計一個打印菱形的方法。 從鍵盤輸入一個整數 N,打印出有 N*2-1 行的菱形。 例如輸入整數 4,則屏幕輸出如下菱形。
*
* * *
* * * * *
* * *
*
現要求輸入整數為 7,在屏幕中輸出相應的菱形。 要求:用循環結構語句實現。 (2)作品提交要求見本模塊附錄 1 (3)實施條件要求見本模塊附錄 2 (4)評價標准見本模塊附錄 3
import java.util.Scanner;
public class Task3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print("輸入整數:");
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int row = n*2-1;//行
int onrow = row/2+1;//上行數
int downrow = row/2;//下行數
for (int i = 1; i <= onrow ; i++) {//打印上行數
for (int j = 1; j <=onrow-i; j++) //打印空格數
System.out.print(" ");
for (int k = 1; k <= 2*i-1; k++) //打印*數
System.out.print("*");
System.out.println();//換一行
}
for (int i = 1; i <= downrow; i++) {//打印下行數
for (int j = 1; j <= i; j++)//打印空格數
System.out.print(" ");
for (int k = row-2; k >= 2*i-1; k--)//打印*數
System.out.print("*");
System.out.println();//換一行
}
}
}
