吉林大学超星慕课平台——高级语言程序设计 实验02 分支与循环程序设计(2022级)

一. 程序题(共15题,100分)

1. (程序题)

题目编号:Exp02-Basic01,GJBook3-03-03

题目名称:递增排序

题目描述:任意三个实数a、b、c,按照从小到大的顺序输出。

输入:输入三个实数(测试数据均只有一位小数)。

输出:按照从小到大顺序输出之前输入的三个实数,以一个西文空格间隔,且每个实数小数点后保留1位。

样例:

输入:
2.3  5.6  1.2
输出:
1.2 2.3 5.6
#include<stdio.h>

int main() {

float a, b, c;

scanf("%f %f %f", &a, &b, &c);

if (a >=b && b >= c) printf("%.1f %.1f %.1f", c, b, a);

else if (a >= c && c >= b) printf("%.1f %.1f %.1f", b, c, a);

else if (b >= a && a >= c) printf("%.1f %.1f %.1f", c, a, b);

else if (b >= c && c >= a) printf("%.1f %.1f %.1f", a, c, b);

else if (c >= b && b >= a) printf("%.1f %.1f %.1f", a, b, c);

else if (c >= a && a >= b) printf("%.1f %.1f %.1f", b, a, c);





}

2. (程序题)

题目编号:Exp02-Basic02

题目名称:括号统计

题目描述:编程序,判断给定以字符‘@’结束的字符序列中‘(’与‘)’、‘[’与‘]’、‘{’与‘}’的个数是否相等。

输入:输入一串以字符‘@’结束的字符序列,其间可能含有若干空白字符。

输出:个数不相等的括号(按花括号、方括号、圆括号的顺序);如果三种括号的个数都相等,输出NULL。


样例1:

输入:{a+b*c+(d/e-f]}}@
输出:{}[]()

样例2:

输入:{a  +  b*c+(d/e-f]}@
输出:[]()
#include<stdio.h>

int main() {

char z;

int a, b, c, d, e, f;

a = b = c = d = e = f = 0;

do {

z=getchar();

if (z == '@')break;

if (z == '(')a++;

if (z == ')')b++;

if (z == '[')c++;

if (z == ']')d++;

if (z == '{')e++;

if (z == '}')f++;

} while (-1);

if (e != f)printf("{}");

if (c != d)printf("[]");

if (a != b)printf("()");

if (a == b && c == d && e == f)printf("NULL");
}

3. (程序题)

题目编号 :Exp02-Basic03

题目名称:数字求和

题目描述:给定一个整数a,以及另外的5个整数,问题是:这5个整数中,可以被a整除的整数和是多少?
 

输入:输入一行只包括6个小于100的整数,其中第一个整数是a,输入保证a不为零。

输出:输出一行,给出一个整数,是5个数中可以被a整除的所有整数的和。


样例1:

输入:10 10 -20 30 40 11
输出:60

样例2:

输入:11 10 20 30 40 12
输出:0
#include<stdio.h>

int main() {

int a, b, c, d, e, f;

int m = 0;

scanf("%d%d%d%d%d%d" ,&a, &b, &c, &d, &e, &f);

if (b % a == 0)m += b;

if (c % a == 0)m += c; 

if (d % a == 0)m += d;

if (e % a == 0)m += e;

if (f % a == 0)m += f;

printf("%d", m);





}

4. (程序题)

题目编号 :Exp02-Basic04

题目名称:养老金

题目描述:某一国家养老金发放的原则是:

(1)男人(假设用数字1表示)超过65岁每周给50元钱,如果超过70岁每周再加20元钱。

(2)女人(假设用数字2表示)超过60岁每周给45元钱,如果超过65岁每周再加25元钱。

编程序,读入一个人的性别和年龄,输出他每周可领养老金数额。如果一个人还没到拿取养老金的年龄,那么就输出一个适合的信息。


输入:输入一行包括2个整数,分别对应性别和年龄,输入保证性别年龄输入都为合理整数。

输出:如果达到领取养老金年龄,就请输出每周应得养老金数额;否则输出NULL。
 

样例1:

输入:
1 75
输出:
70

样例2:

输入:
2 63
输出:
45
#include<stdio.h>

int main() {

	int a, b, w;

	scanf("%d%d", &a, &b);

	if (a == 1) {

		if (b <= 65) printf("NULL");

		else if (b > 70)printf("70");

		else printf("50");

	}

	if (a == 2) {

		if (b <= 60)printf("NULL");

		else if (b > 65)printf("70");

		else printf("45");

	}

}

5. (程序题)

题目编号:Exp02-Basic05

题目名称:嵌套函数

题目描述:编写程序,当x=1.0、2.0、…、20.0时,计算如下函数到5层嵌套。F(x)=1+1/(1+1/(1+1/(1+1/(1+1/x))))
 

输入:一个浮点数表示x的值,输入保证x不为零。

输出:一个浮点数F(x)的值,保留小数点后3位。


样例:

1
1.625
#include<stdio.h>

int main() {

	float x, y;

	scanf("%f", &x);

	y = 1 + 1.0 / (1 + 1.0 / (1 + 1.0 / (1 + 1.0 / (1 + 1.0 / x))));

	printf("%.3f", y);

}

6. (程序题)

题目编号 :Exp02-Basic06,GJBook3-04-09

题目名称:符合条件自然数

题目描述:编写程序,打印所有小于正整数data且可被11整除的自然数。

输入:从键盘输入一个正整数data

输出:输出所有小于data且可被11整除的自然数,数与数之间以一个空格做间隔,最后一个数后无多余字符。
 

样例1:

输入:50
输出:0 11 22 33 44

样例2:

输入:80
输出:0 11 22 33 44 55 66 77
#include<stdio.h>

int main() {

	int n;

	scanf("%d", &n);

	for (int i = 0; i < n; i += 11) {

		printf("%d ", i);

	}

}

7. (程序题)

题目编号:Exp02-Basic07,GJBook3-03-07

题目名称:倍数

题目描述:任意一个整数n,如果n能同时被3、5、7整除,则n是3、5、7的倍数,如果n只能同时被其中的两个数整除,则n是两个数的倍数,如果n只能被其中一个数整除,则n是一个数的倍数,否则n不是3、5、7的倍数。


输入:输入一个整数。

输出:按照是否是倍数输出。


样例1:

输入:105
输出:3,5,7

样例2:

输入:30
输出:3,5

样例3:

输入:21
输出:3,7

样例4:

输入:35
输出:5,7

样例5:

输入:14
输出:7

样例6:

输入:101
输出:NULL
#include<stdio.h>

int main() {

	int n;

	scanf("%d", &n);

	if (n % 3 == 0)printf("3,");

	if (n % 5 == 0 && n % 7 == 0)printf("5,7");

	if (n % 5 == 0 && n % 7 != 0)printf("5");

	if (n % 3 != 0 && n % 5 != 0 && n % 7 != 0)printf("NULL");




}

8. (程序题)

题目编号 :Exp02-Basic08,GJBook3-04-12

题目名称:三位Armstrong数

题目描述:编写程序,打印所有3位的Armstrong数,Armstrong数是指其值等于它本身每位数字立方和的数,如153就是一个Armstrong数。153=1^{3}+3^{3}+5^{3}
 

输入:无
输出:打印所有3位的Armstrong数,每个Armstrong数间用一个西文空格间隔,最后一个数后无多余字符。

样例:无。详见输入输出说明

#include<stdio.h>

int main() {

	int g, s, b;

	for (int i = 100; i <= 999; i++) {

		g = i % 10;

		s = (i % 100) / 10;

		b = i / 100;

		if (g * g * g + s * s * s + b * b * b == i) { printf("%d ", i); }

	}

}

9. (程序题)

题目编号 :Exp02-Basic09,GJBook3例-04-10

题目名称:斐波纳契序列

问题描述:

开始,有一对小兔子。

 一个月后,变成大兔子开始怀孕;

两个月后, 生出一对小兔子,这时共有两对兔子(一对大兔子, 一对小兔子), 同时大兔子又再次怀孕;

 三个月后, 以前出生的小兔子变成大兔子,以前怀孕的大兔子又生出一对小兔子, 这时共有三对兔子(两对大兔子, 一对小兔子), 所有大兔子又全部怀孕;

 四个月后, 以前出生的小兔子变成大兔子,以前怀孕的大兔子又各生出一对小兔子, 这时共有五对兔子(三对大兔子, 两对小兔子), 所有大兔子又全部怀孕;

五个月后, 以前出生的小兔子变成大兔子,以前怀孕的大兔子又各生出一对小兔子, 这时共有八对兔子(五对大兔子, 三对小兔子), 所有大兔子又全部怀孕;

…… ……

假设在兔子的生养过程中没有死亡。编程序,输入 n , 计算 n 个月后,有多少对兔子, 并输出。

提示:注意序列各项间的递推关系。 

输入:一个非负整数n,表示月份(n≤91)

输出:n 个月后的兔子数(单位:对)

样例1:输入 0   输出 1

样例2:输入 1   输出 1

样例3:输入 2   输出2

样例4:输入10   输出89

int main() {

	long long a[92];

	a[0] = 1;

	a[1] = 1;

	for (int i = 2; i <= 91; i++) { a[i] = a[i - 1] + a[i - 2]; }

	int n;

	scanf("%d", &n);

	printf("%lld", a[n]);

}

10. (程序题)

题目编号:Exp02-Basic10,GJBook3-04-15

题目名称:爱因斯坦阶梯

问题描述:设有阶梯,不知其数,但知:每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨7阶,正好到楼顶。编程序求最少共有多少阶。

输入:无

输出:台阶数目

样例:无。详见输入输出说明。

#include<stdio.h>

int main() {

	int i = 1;

	while (1) {

		if (i % 2 == 1 && i % 3 == 2 && i % 5 == 4 && i % 7 == 0) {

			printf("%d", i);

			break;

		}

		i++;

	}

}

11. (程序题)

题目编号 :Exp02-Basic11,GJBook3-04-03

题目名称:勒让德多项式

题目描述:

编一个程序,输入x、n,计算勒让德(Legendre)多项式的第 n 项(此题假定n取0时,为勒让德多项式第0项)。

输入:一个浮点数和一个整数,分别对应x和n(0<=n<=20)。

输出:一个浮点数,即勒让德多项式第n项的值,注意小数点后保留到第2位。
 

样例1:

输入:3.4 2
输出:16.84

样例2:

输入:3.4 10
输出:30143685.82

样例3:

输入:-3.4 2
输出:16.84
# include<stdio.h>

double Pn(double x, int n);



int main()

{

    double x;

    double result;

    int n;



    scanf("%lf%d", &x, &n);



    result = Pn(x, n);

    printf("%.2lf", result);



    return 0;

}



double Pn(double x, int n)

{

    double res;

    if (n == 0)

        return 1.0;

    else if (n == 1)

        return x;

    else if (n > 1)

    {

        res = ((2 * n - 1) * x * Pn(x, n - 1) / n - (n - 1) * Pn(x, n - 2) / n);

     



        return res;

    }



}

 

12. (程序题)

题目编号 :Exp02-Basic12,GJBook3-04-13

题目名称:数字金字塔

题目描述:编程序,制打印如下所示的n行数字金字塔(n由用户从键盘输入)。

输入:一个正整数 n (≤10)

输出:如上所示的类似数字金字塔。输出由数字 0~9构成的n行数字三角矩阵:其中第一行有1个数,第二行有3个数,依次类推,每个数字占用2位英文字符宽度,宽度不足2位的的在数字左侧补空格;整个数字三角阵,除必要的空格、数字、回车换行符,无多余字符。

样例1:

输入:1
输出:

(注:1的前面有一个空格)

样例2:

输入:3
输出:

(注:末行的第一个数字1前面有一个空格)

#include <stdio.h>

int main() {

	int n;

	scanf("%d", &n);

	for (int i = 1; i <= n; i++) {

		for (int s = 1; s <= 2 * (n - i); s++) { printf(" "); }

		for (int m = 1; m <= i; m++) { printf(" %d", m % 10); }

		for (int h = i - 1; h >= 1; h--) { printf(" %d", h); }

		printf("\n");

	}

}

13. (程序题)

题目编号 :Exp02-Enhance01,GJBook3-04-02

题目名称:计算 e^x

题目描述:请计算上述序列的前101项的和(截止到n取100)

输入:一个浮点数,对应x值。

输出:一个浮点数,即e^x的近似值,小数点后保留到第2位。

注:本题不允许使用math.h头文件和相关的pow和exp等函数。

样例1:

输入:0
输出:1.00

样例2:

输入:4.3
输出:73.70
#include<stdio.h>

int main() {

float x;

double sum = 1.0, num = 1.00;

scanf("%f", &x);

for (int i = 1; i < 99; i++) {

num = num * x / i;

sum = sum + num;}

printf("%.2lf", sum);



}

 

14. (程序题)

题目编号:Exp02-Enhance03

题目名称:公式累加

题目描述:用如下的展开式计算当n为某给定值时,sh(x)的值。

编写程序,对上面的公式读入x,输出序列的和直到尾项的绝对值 小于10^-5。

输入:一个浮点数作为x的值。

输出:一个浮点数,保留小数点后6位。

样例1:

输入:1
输出:1.175198

样例2:

输入:1.5
输出:2.129277
#include<stdio.h>

#include<math.h>

double pro(double x, double n);

int main() {

	double a = 0, b, x;

	scanf("%lf", &x);

	b = x;

	for (int i = 1; fabs(b) >= 1e-5; i++) {

		a += b;

		b = pro(x, i);

	}

	printf("%.6lf", a);

}

double pro(double x, double n) {

	double sum = 1;

	for (int i = 1; i <= 2 * n + 1; i++) {

		sum *= x / i;

	}

	return sum;

}

 

15. (程序题)

题目编号:Exp02-Enhance04,GJBook3-04-14

题目名称:字母矩阵

题目描述:用循环语句控制打印如下图形,其中输出的每个字母占用2个字符宽度(空格在前,字母在后)。

  

输入:无

输出:如上图字母矩阵

说明:请同学们根据字母、位置的规律实现该程序。打表爽一时,考试两行泪~

#include<stdio.h>

int main() {

	char a[] = { 'A','B','C','D','E','F','G','H','I' };

	for (int i = 0; i <= 5; i++) {

		for (int s = i; s <= i + 8; s++) {

			printf(" %c", a[s % 9]);

		}

		printf("\n");

	}

	for (int m = 4; m >= 0; m--) {

		for (int p = m; p <= m + 8; p++) {

			printf(" %c", a[p % 9]);

		}

		printf("\n");

	}





}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值