2021-11-05二维数组写杨辉三角,水仙花数,判断素数

第二篇考核题来啦~

#include<stdio.h>
int main()
{
	int i, j, n, a[21][21];
	printf("请输入打印的行数:\n");
	scanf("%d", &n);
	for (i = 1; i < n + 1; i++)
	//先确定杨辉三角每一行的开头和结尾都为1 
	{
		a[i][1] = 1;
		a[i][i] = 1;
	}
	for (i = 3; i < n + 1; i++)
		for (j = 2; j <= i - 1; j++)
	//从每一行的第二个数开始循环 
			a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
			//从每一行的第二个数开始,每一个数都是上一行前一个数和上一行同位数的和 
	for (i = 1; i < n + 1; i++)
	{
		for (j = 1; j <= i; j++)
			printf("%6d", a[i][j]);
		printf("\n");
	}
	printf("\n");
	return 0;
}

二维数组

1.定义

一般形式为: 类型名 数组名 [常量表达式] [常量表达式];

第一维,即第一个方括号内的值通常称为行;第二维,即第二个方括号内的值通常称为列

a[0][0]a[0][1]a[0][2]a[0][3]a[0][4]
a[1][0]a[1][1]a[1][2]a[1][3]a[1][4]
a[2][0]a[2][1]a[2][2]a[2][3]a[2][4]

二维数组在概念上是二维的,但在计算机内部,二维数组是按顺序连续存储的,是线性结构.

2.二维数组的引用

引用形式:数组名[行下标][列下标]

下标值应为整型常量或整型表达式,且不能越界.同时二维数组也不能整体赋值,需要依次访问各元素来赋值.常使用嵌套的二重循环来访问二维数组.

例如:定义一个3行2列的数组并输入元素值

int array[3][2];
for(i=0;i<3;i++)
 for(j=0;j<2;j++)
   scanf("%d,&array[i][j]);

3.二维数组的初始化

(1)分行初始化.  二维数组的每一行是一个一堆数组,所以可以有几行就使用几个初始化列表.

例如: int a[3][4]={  {0,1,2,3},{4,5,6,7},{8,9,10,11}  };

(2)将所有的初值写在一个大括号内.即直接省略每一行嵌套的花括号.

例如:int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};

(3)只对部分元素赋值.可以只为部分元素赋初值,剩下的元素值为0

例如:int a[3][4]={ {1},{2},{3} };    (即a[0][0]=1,剩下的元素都为0,其他两行类似)

若为int a[3][4]={1,2,3,4,5}; 即为a[0][0]--a[1][0]依次为1-5,剩下的元素值全是0

(4)省略数组行数.在写出全部元素初值的情况下,第一维的长度可以省略,但第二维的不能

例如:int a[][4]={0,1,2,3,4,5,6,7,8,9,10,11};和int a[3][4]={...}是一样的

------------------------------------------小玖的分隔线------------------------------------------------------

#include<stdio.h>
void main()
{
	int m=0,count=0;
	int n,i;
	printf("要打印多少个数字:"); 
	scanf("%d",&n);
	//这里n先确定好总共输入几个数据,i是数组元素下标
	//count是所有奇数之和,m是奇数个数 
	int a[n];
	//定义一个数组方便等会判断奇数 
  for(i=0;i<n;i++)
  { 
    printf("请输入数字:"); 
	scanf("%d",&a[i]);
  }   //把每个数字赋值给对应的数组元素 
   for(i=0;i<n;i++)
   {
     printf("%d\t",a[i]);
   } 
    //打印出这一组数
    
     for(i=0;i<n;i++)  
    {
    	if(a[i]%2!=0)  //判断是否为奇数 
		{  m=m+1;       
		   count=count+a[i];
		} 
	}
	printf("奇数共有:%d个,奇数和为:%d",m,count); 
}

 这个代码分为两部分,第一部分是输入几个数字,并把他们组成一个数组.第二部分是进行判断和输出.for语句进行循环,使数组下标递增依次进行判断.

------------------------------------------------小玖的分割线-------------------------------------------

             

#include<stdio.h>
int main()
{
	int m,i,j,k;
    // m=i*100+j*10+k;
    //定义了一个百位为i,十位为j,个位为k的三位数m
	for(m=100;m<=999;m++)         //m从100依次加一直到999
	{
		i=m/100;                  //得出百位数
		j=(m-i*100)/10;           //得出十位数
		k=(m-i*100-j*10);         //得出个位数
		if(m==i*i*i+j*j*j+k*k*k)  //用if语句判断m是否为水仙花数
		{
			printf("%d\t",m);
		}
	 } 
     
     return 0;
}

水仙花数

        水仙花数是指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身

        例如:1^3+5^3+3^3=153

        一般严格来说3位数的3次幂数才算水仙花数.

所以这道题先把100-999之间的数先拆分成百位部分,十位部分和个位部分,再根据水仙花数的定义用if语句判断.

----------------------------------------小玖的分割线------------------------------------------------

#include<stdio.h>
int main()
{
	int a,b,c=0;         
	//定义三个变量,a为2-1000之间的数,b为因数,c为所有素数之和 
	for(a=2;a<=1000;a++)
	// a依次加一逐个判断 
	{ 
	  for(b=2;b<=a-1;b++)
	  //b作为因数要小于a 
	  {
	    if(a%b==0)
	    break;
	    //a除以b若能除尽说明a除1外还有因数,故a不是素数 
	   }
	   if(b>=a)
	   //要保证素数的因数小于它本身 
	   {
	   	printf("%d\t",a);
	   	c=c+a;//把所有的素数加起来 
	   }
	} 
	printf("之和为:%d",c);
	return 0;
	
}

素数

素数也称质数,是除了1和它本身外还有因数的数.

该题首先要用两个for循环使素数变量和因数变量逐次递增,但要注意因数要比素数小,两个变量相除,若能除尽就说明不是素数,不能除尽就输出并使累加起来.

写在末尾的话:       

        思考的过程其实都在代码段里面注释了,所以就没有写出来,用的都是很简单的方法,虽然我也摸索了好久,出了好多问题最终才写完的这篇考核题,虽然还没想明白要怎么写这个博客,但是总的来说,一直在学一直在写,从未停下就够了,下一篇考核题再见啦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值