水仙花数+判断素数并累加

1.打印如图所示的杨辉三角,要求打印出 n 行,n 由键盘输入。

思路:在网上查了杨辉三角的定义后,想到了老师上课讲的兔子数列,但仔细查看了杨辉三角的概况发现百度百科给出了相应的公式,在草稿本上了大概构思了整体框架,写出如下代码: 

#include <stdio.h>
#include <strings.h>
int main ()
{
	int n,i,s,k;
	char m[n];      //m控制每行几个数
	char j[n];      //j数组辅助m数组运算 
	s=1;         
	printf ("请输入要打印的行数:\n");
	scanf ("%d",&n);
    for (i=0;i<n;i++)   //i为行数 
	{
		printf ("%d",s);   //输出开头的1 
		for (k=1;k<n;k++)     //k为每行对应的个数编号 
		{
		         	           //j为m上一行 
         m[k]=j[k-1]+j[k];    //m数组的运算 (上一行两数相加)
		 printf ("%-4d",m[n]);   //输出m数组 
	    }
	    printf ("%d",s);    //输出结尾的1,使中间的循环数输出在两个1之间 
	    printf ("\n");            //每完成一次循环自动换行 
	}
	return 0;
}

但是j数组也就是上一行的数组代码不知如何表示,这串代码运行出来也只是一个无效代码,然而转头一想,这个n行n和数,应该有操作空间,故我在开头增加了一个判断语句,奇数行执行j数组,偶数行执行m数组,敲下如下代码

#include <stdio.h>
#include <strings.h>
int main ()
{
	int n,i,s,k;
	char m[n];      //m控制每行几个数
	char j[n];      //j数组辅助m数组运算 
	s=1;         
	printf ("请输入要打印的行数:\n");
	scanf ("%d",&n);
	if (n%2!=0) 
    {
	 for (i=0;i<n;i++)   //i为行数 
	 {
		printf ("%d",s);   //输出开头的1 
		for (k=1;k<n;k++)     //k为每行对应的个数编号 
		{
         j[k]=m[k-1]+m[k];    //j数组的运算 (上一行两数相加)
		 printf ("%-4d",m[n]);   //输出j数组 
	    }
	    printf ("%d",s);    //输出结尾的1,使中间的循环数输出在两个1之间 
	    printf ("\n");            //每完成一次循环自动换行 
	 }
    }
    else 
	{
    	printf ("%d",s);   //输出开头的1 
		for (k=1;k<n;k++)     //k为每行对应的个数编号 
		{
         m[k]=j[k-1]+j[k];    //m数组的运算 (上一行两数相加)
		 printf ("%-4d",m[n]);   //输出m数组 
	    }
	    printf ("%d",s);    //输出结尾的1,使中间的循环数输出在两个1之间 
	    printf ("\n");            //每完成一次循环自动换行 
	 }
	return 0;
}

但经过实际操作发现,这串代码陷入了和初始代码一样的问题中,就是开头那几行的代码问题始终无法输出。故深感学习不到位,csdn上的代码套用也不明白,今决定日后应抓紧时间多看网课,尽快掌握相关知识。日后再对此代码进行修改。

2.请编程实现:输入几个整数,判断其中奇数的个数,并输出奇数的累加和。 (要求:数据的个数及原始数据由键盘输入)

我高看我自己了,数组没学到位,数组定义出了问题,输入几个整数这里出了问题,到底怎么让输入的几个数在数组里面,数组的变量定义没到位,主要是数组具体不同的定义方式出了问题,不管怎么定义,打出的代码都是无效代码,现已放弃,下次改进。

3.打印出 100~999 之间的所有水仙花数。

首先查到了水仙花数的定义:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

从百度上找到的个十百位怎么表达(设一个数为n,则在C语言中其个位、十位、百位、千位依次这样计算:n/1%10,n/10%10,n/100%10,n/1000%10)

敲出以下代码:

#include <stdio.h>
int main ()
{
	int i,j,k,m;
	for (i=100;i<=999;i++)
	{
	 j=i/1%10;                  //个位数 
	 k=i/10%10;                 //十位数 
	 m=i/100%10;                //百位数 
	 if (i=j^(3)+k^(3)+m^(3))   //水仙花定义 
	   printf ("%d\n",i);
	}
	return 0;
}

结果emmmm,显然易见的错了

更改水仙花数定义后

#include <stdio.h>
int main ()
{
	int i,j,k,m;
	for (i=100;i<=999;i++)
	{
	 j=i/1%10;                 //个位数 
	 k=i/10%10;                 //十位数 
	 m=i/100%10;                //百位数 
	 if (i=j*j*j+k*k*k+m*m*m)   //水仙花定义 
	   printf ("%d\n",i);
	}
	return 0;
}

得到结果:

。。。。。。。。。哎

4.写一个判断素数的函数,在主函数中调用素数的判断函数,求出 2 到 1000 之间的素数的累加和,将结果输出。

首先搞一个把2~1000的素数弄出来,再相加

#include <stdio.h>
int main ()
{
	int n,i,j;
	int sum;
	sum=0;
	for (n=2;n<=1000;n++)
	{
		for (i=2;i<n;i++)
		{
			if (n%i == 0)break;    //被整除,不是素数。 
		}
		if (i>=n)
		{
			sum=sum+n;
		}
	}
	printf ("%d\n",sum);
	return 0;
}

输出结果为76127

不足:关于数组的运用还是过于生疏,对特有数字的代码定义解释不到位

改进:先将数组的内容看明白,结合一些题目进一步理解运用,在看到一个专有名词后,应先将其定义看透,在草稿本上进行初步构造,如还有不理解,在网络上查找他人思路,将其理解,与自己的思路对比,学习他人的想法,改进自己的思路

学习路还漫长,同志仍需努力。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值