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

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

本次分享:

  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)。

猜你喜欢

转载自blog.csdn.net/yooppa/article/details/112315281