【C语言经典100题】(1月7日-day25)

文章讲述了两个C语言编程问题的解决方案:一是计算并逆序打印不超过5位正整数的各位数字;二是找到3x4矩阵中的最大元素及其坐标。通过示例代码展示了如何实现这些功能,并进行了反思和优化。
摘要由CSDN通过智能技术生成

cr:经典

题目25 

给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

思路:

计算位数这个比较好实现,除以十然后计数,直到除完十结果是零的时候停止就可以了;但是逆序打印各位数字的话,首先要把每一位都找出来,然后才能打印。我的想法是用数组或者取余,但是数组的话无法确定要定义一个多大的数组,而且空下的位置是不是零?如果是的话,那怎么保证打印出来自己想要的数字呢?所以我打算先用取余的方法来操作。

先输入这个正整数,然后把这个数字存到另一个新的变量中去;接着除以十,再给计数变量加一,直到除完得到零;然后对那个新变量取10的余数,取出来直接输出,然后一直取余,直到余数为零。

代码:

#include<stdio.h>
main()
{
	int a, b, c, d, e, x;
	printf("输入一个不多于5位的正整数:");
	scanf("%d", &x);
	a = x / 10000;
	b = x % 10000 / 1000;
	c = x % 1000 / 100;
	d = x % 100 / 10;
	e = x % 10;
	printf("\n");
	if (a != 0) {
		printf("5位数,倒叙输出结果:%d %d %d %d %d\n", e,d,c,b,a);
	}else if (b != 0) {
		printf("4位数,倒序输出结果:%d %d %d %d\n", e,d,c,b);
	}else if (c != 0) {
		printf("3位数,倒序输出结果:%d %d %d\n", e,d,c);
	}else if (d != 0) {
		printf("2位数,倒序输出结果:%d %d\n", e,d);
	}else{
		printf("1位数,倒序输出结果:%d\n", e);
	}
}

对方:

//  Created by www.runoob.com on 15/11/9.
//  Copyright © 2015年 菜鸟教程. All rights reserved.
//
 
#include <stdio.h>
 
int main( )
{
    long a,b,c,d,e,x;
    printf("请输入 5 位数字:");
    scanf("%ld",&x);
    a=x/10000;        /*分解出万位*/
    b=x%10000/1000;   /*分解出千位*/
    c=x%1000/100;     /*分解出百位*/
    d=x%100/10;       /*分解出十位*/
    e=x%10;           /*分解出个位*/
    if (a!=0){
        printf("为 5 位数,逆序为: %ld %ld %ld %ld %ld\n",e,d,c,b,a);
    } else if(b!=0) {
         printf("为 4 位数,逆序为: %ld %ld %ld %ld\n",e,d,c,b);
    } else if(c!=0) {
         printf("为 3 位数,逆序为:%ld %ld %ld\n",e,d,c);
    } else if(d!=0) {
         printf("为 2 位数,逆序为: %ld %ld\n",e,d);
    } else if(e!=0) {
         printf("为 1 位数,逆序为:%ld\n",e);
    }
}

反思&收获:

没有按照我自己的思路来写,有问题,就直接按照对方的思路来写了。


cr:小林

例25

C语言实现求3*4的矩阵中制最大的那个元素的值,以及其所在的行号列号。

思路:

先定义一个3*4的数组,然后在定义的时候直接输入数值,接着写双层for循环,遍历数组。将第一个元素的值赋给max,有大于max的则直接覆盖,最后输出max。

代码:

#include<stdio.h>
main()
{
	int x, y, a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} }, max;
	max = a[0][0];
	for (x = 0; x < 3; x++) {
		for (y = 0; y < 4; y++) {
			if (a[x][y] > max) max = a[x][y];
		}
	}
	printf("最大值是 %d\n", max);
}

对方:

反思&收获:

写完才发现少完成了一个题目要求:输出最大值的坐标。

#include<stdio.h>
main()
{
	int x, y, a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} }, max, j, k;
	max = a[0][0];
	printf("矩阵为:\n");
	for (x = 0; x < 3; x++) {
		for (y = 0; y < 4; y++) {
			printf("%-3d", a[x][y]);
			if (a[x][y] > max) max = a[x][y];
			j = x, k = y;
		}printf("\n");
	}
	printf("\n最大值:%d\n", max); 
	printf("最大值坐标:第%d行,第%d列\n", j + 1, k + 1);
}

改善了一下,这样看起来就赏心悦目多了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜東

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值