C语言:数组编程核心步骤(部分)

本文分享了两道编程题目,一是将阿拉伯数字转换为罗马数字,利用三维数组实现;二是统计输入字符串中单词的字母个数。核心算法包括对数字的分解和指针的运用,同时探讨了空指针NULL的概念。通过这两个示例,可以提升对指针和数组的理解以及在实际问题中的应用。
摘要由CSDN通过智能技术生成

以下分享个人做了编程题之后的发现及能力提升。

本次分享:

  1. 代码展示
  2. 代码分析(核心部分着重);

示例一:
阿拉伯数字翻译成罗马数字;

这道编程题的原答案是用指针做的,之后老师改成了三维数组来解决:
代码展示

#include<stdio.h>
#include<string.h>
int main()
{
	 char a[][10][10]={"","I","II","III","IV","V","VI","VII","VIII","IX",
						"","X","XX","XXX","XL","L","LX","LXX","LXXX","XCC",
						"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"
						};
	int n,t,i,m;
	printf("Please input number: ");
	scanf("%d",&n);
	printf("Output:\n");
	if(n<=0 || n>=1000)
	{
		printf("Input error!\n");
		return 0;
	}
	printf("%d=",n);
	for(m=0,i=1000;m<3;m++,i/=10)
	{
		t=(n%i)/(i/10);//核心。
		printf("%s",a[2-m][t]);
	}                          
	putchar(10);
	return 0;
}

需要三维数组,然后提取出百位,十位,各位,然后一一对应到三维数组里就可以实现转换。

核心算法部分:

	for(m=0,i=1000;m<3;m++,i/=10)
	{
		t=(n%i)/(i/10);
		printf("%s",a[2-m][t]);
	}                          

m=0;m<3;用1000来mod可以实现分离个位十位百位

putchar(10);
此处的putchar(10)输出为’\0’,作换行输出,作用类似于printf("\n");

由此段(n%i)/(i/10)表达式得出:
值得注意的是n%m(n<m)时其值是1.并非0(因为以往总认为是0)…

示例二:
统计单词字母个数;

代码展示:

#include <stdio.h>
#include <string.h>

int main()
{
        char str[1000];                // 用来读取整个字符串
        char *pStr;                        // 一个字符指针,用来存储以空格和点号分割的字符串
	    int iCount = 0;        // 记录已经有多少数字输出了,由于每个数字间用一个空格分开,因而需要记录数字的输出数目
		printf("please input str:");
        gets(str);
		
                pStr = strtok(str, " .");        // 先用空格和点号作一次切割
              				printf("Output:\n");
                while(pStr)
				{
                        if(iCount++)
						{
                                putchar(' ');        // 数字间使用一个空格分割
                        }
                        printf("%d", strlen(pStr));        // 输出单词的长度
                        pStr = strtok(NULL, " .");        // 做下一次分割
                }

                putchar('\n');                        // 别忘了换行
        

        return 0;
}


由于此处涉及到了指针的运用导致不得不提前涉猎(本来预计寒假开始)…

代码分析在代码中都一 一 体现了,
char *pStr strtok(str," .");
pStr = strtok(NULL, " ."); 这几个涉及指针部分,先学这部分可以解决类似问题。

此处对代码中的NULL作特别说明;
*p=NULL,指针的变化是p指向了一个地址未0的内存,这就提醒不能对此指针进行引用操作。NULL其实就是0x0.
空指针指没有定位内存的指针,值为NULL(0)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值