第二篇考核题来啦~
#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循环使素数变量和因数变量逐次递增,但要注意因数要比素数小,两个变量相除,若能除尽就说明不是素数,不能除尽就输出并使累加起来.
写在末尾的话:
思考的过程其实都在代码段里面注释了,所以就没有写出来,用的都是很简单的方法,虽然我也摸索了好久,出了好多问题最终才写完的这篇考核题,虽然还没想明白要怎么写这个博客,但是总的来说,一直在学一直在写,从未停下就够了,下一篇考核题再见啦~