C语言-第10周做题总结-循环结构2

id:404 A.输出三角形字符阵列

题目要求

本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。

输入

输入在一行中给出一个正整数n(1≤n<7)。

输出

输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。

输入样例

4

输出样例

A B C D
E F G
H I
J

题解

  • n表示输出n行,且第一行有n个字母,第二行有n-1个字母,第三行,,,以此类推,直到最后一行只剩一个字母;故,因有两重循环,第一重循环是从第一行到第n行,第二重循环从第一行有n个字母到第n行只有一个字母。而输出字母则需要用到字符输出的知识。
  • 第一重循环的开始条件是n > 0,此后每循环一轮n–,直到n = 0
  • 第一重循环嵌套的第二重循环中,用一个变量count来计数,当count > t 时结束循环,循环中每次都要让ch++;

代码

#include <stdio.h>

int main()
{
	int n, count, t;
	char ch;
	scanf("%d", &n);
	t = n;
	ch = 'A';
	
	while (t > 0)
	{
		for (count = 1; count <= t; count++)
		{
			printf("%c ", ch);
			ch++;
		}
		printf("\n");
		t--;
    }
    
	return 0;
}

id:478 B.求幂级数展开的部分和

题目描述

已知函数ex可以展开为幂级数1+x+x2/2!+x3/3!+⋯+xk/k!+⋯。现给定一个实数x,要求利用此幂级数部分和求e^x的近似值,求和一直继续到最后一项的绝对值小于0.00001。

输入

输入在一行中给出一个实数x∈[0,5]。

输出

在一行中输出满足条件的幂级数部分和,保留小数点后四位。题目保证计算结果不超过双精度范围。

输入样例

1.2

输出样例

3.3201

题解

  • 此题仅需一重循环,则是实现阶乘
  • 循环的条件是最后一项的绝对值小于0.00001,阶乘的实现需要其每次乘以循环的轮数即可,并不需要每次都从1开始乘

代码

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
	int i = 1;
	double x, sum, j, k;
	scanf("%lf", &x);
	sum = 1.0;
	j = 1.0;
	k = 1.0;
	
	while (fabs(j) > 0.00001)
	{
		k *= i;
		j = pow(x, i) / k;
		sum += j;
		i++;
	}
	printf("%.4f", sum);
	
	return 0;
}

id:403 C.输出整数的 各位数字

题目描述

本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。

输入

输入在一行中给出一个整型范围内的非负整数。

输出

从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。

输入样例

123456

输出样例

1 2 3 4 5 6

题解

  • 此题需要用到两个循环,第一个循环用来计算输入的数有多少位,第二个循环用来将输入的数从高位到低位依次输出
  • 令输入的数为n,第一个循环进行的条件是n > 9,循环中,用一个变量j来记n的位数,每进行一轮,n /= 10, j *= 10,当n < 9时,结束第一个循环
  • 在第二个循环中,令一个变量k记录n的最高位的那个数,每分解一次最高位,则输出一次k,并且 n %= j; j /= 10,直到j < 0时结束循环
  • 另外,第一个循环用do while可以有效处理输入的数为0的情况,还需要注意输入的数时个位的情况

代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int n, t, j, k;
	scanf("%d", &n);
	t = n;
	j = 1;
	do
	{
		t /= 10;
		j *= 10;
	}
	while (t > 9);
	t = n;
	while (j > 0)
	{
		k = t / j;
		if ( n < 10)
		{
			printf("%d", n);
			return 0;
		}
		else
		{
			printf("%d ", k);
		}
		t %= j;
		j /= 10;
	}
	
	return 0;
}

id:34 D.判断回文数

题目描述

从键盘输入任意正整数,判断该数是否是回文数。所谓回文数就是从左到右读这个数与从右到左读这个数是一样的。例如12321、1221都是回文数。

输入

测试案例的个数n
第一个测试值
第二个测试值

第n个测试值

输出

各个测试值是否是回文数,是,就输出Yes,不是,就输出No

输入样例

3
4554
123
121

输出样例

Yes
No
Yes

题解

  • 此题需要两重循环,第一重循环用来处理读进来的n个数,第二个循环用来将每一个测试值逆序,并用if语句判断逆序后是否和测试值相等
  • 第一重循环进行的条件是循环次数小于等于n,并在循环中输入n个测试值
  • 将测试值赋值给变量j,第二重循环的条件是j大于零,每次循环都将j的最低位取出并乘以10再加上下一次取出的最低位,并且j要除以10,将此次的最低位舍弃
  • 第二重循环结束后用if语句进行比较逆序的数和测试值是否相等

代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int n, t, i, m, r, j;
    scanf("%d", &n);
	t = n; 
	
	for (i = 1; i <= n; i++)
	{
		r = 0;
		scanf("%d", &t);
		j = t;
		while (j > 0)
		{
			m = j % 10;
			r = r * 10 + m;
			j /= 10; 
		}
	    if (r == t)
		{
		    printf("Yes\n");
		}
		else
		{
			printf("No\n");
		}
    }
	return 0;
}

id:400 E.验证“哥德巴赫猜想”

题目描述

数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入

输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

输出

在一行中按照格式“N = p + q”输出N的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例

24

输出样例

24 = 5 + 19

题解

  • 此题需要两层循环,第一层循环从p = 2开始到 < N为止,并再用一个循环判断此时的p是否为素数,当找到p的第一个素数时,启用第二层循环,在p的第一个素数的情况下,判断q = N - p是否为素数,若为素数,则输出,若不为素数,则回到第一层循环,从上一次p的下一个数开始寻找下一个素数

代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	int N, p, q, i, j;
	scanf("%d", &N);
	for (p = 2; p < N; p++)
	{
		for (i = 2; i * i <= p; i++)
		{
			if (p % i == 0)
			{
				break;
			}
		}
		if (i * i > p)
		{
			q = N - p;
			for (j = 2; j * j <= q; j++)
			{
				if (q % j == 0)
				{
					break;
				}
			}
			if (j * j > q)
		    {
		    	printf("%d = %d + %d\n", N, p, q);
		    	break;
			}
		}
    }
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值