题目如下:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它第10次落地时,共经过多少米?第10次反跳多高?
示意图
这里我采用了两种方法:
法一如下:
#include<stdio.h>
void main()
{
int i=1;
float H=100,h=H/2; //h代表每一次反弹后的高度(为原来的一半);
do
{
H=H+2*h; //本句的意思是:(下上下↓+↑↓)后边一上一下为一个循环所经过的高度是相同的;
h=h/2;
i++;
}while(i<=9); //为什么不是i<=10?因为第10次掉下来,恰巧是要求的 h ;
printf("共经过%f米,第10次反弹为%f米\n",H,h);
}
结果:共经过299.609375米,第10次反弹为0.097656米
法二如下:
#include <stdio.h>
int main()
{
int i=1;
float H=100,h=H/2;
for(i=1;i<10;i++){
H=H+2*h;
h=h/2;
}
printf("共经过%f米,第10次反弹为%f米\n",H,h);
}
选择法排序
#include<stdio.h> //选择法排序//
#define N 10
int main()
{
int a[N],i,j,t;
printf("请输入10个数:");
for(j=0;j<10;j++) //累计循环输入10个数;
scanf("%d", &a[j]);
printf("\n");
for(i=0;i<9;i++)//外循环变量i从0循环到8,共9次;
for(j=i+1;j<10;j++)//内循环变量j从i+1循环到9。
if(a[i]>a[j]) //i是前一个数,j是后一个数。
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
printf("排序之后:");
for(j=0;j<10;j++)
printf(" %d ", a[j]);
return 0;
}
输入一个3*3的矩阵,并计算对角线上所有元素之和:
#include<stdio.h>
int main()
{
int a[3][3]={1,2,3,6,5,4,7,8,9},i,j,sum=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d\t", a[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j||i+j==2)
sum+=a[i][j]+1;
printf("对角线的总值为:%d\n",sum);
return 0;
}
一维数组定义的一般形式为:类型名 数组名[常量表达式];
例如:int a[6]; 定义了一个整型一维数组,数组名为a,含有6个元素。
C语言规定,数组元素的下标从0开始,不能为负数。
下标的最大取值由“常量表达式”的值减1确定。
例如:int a[6]; 它的元素分别为a[0], a[1], a[2], a[3], a[4], a[5]。不存在数组元素a[6]!
一维数组元素的引用形式为:数组名[下标]
其中,下标必须是一个整型表达式。
例如:a[3]=5; /* 将5赋值给数组元素a[3] */
a[2]=a[3]-a[a[3]-4]; /*将a[3]与a[1]之差赋值给数组元素a[2]*/
A[1.6]=10; /* 下标错误,下标不能为小数 */
在引用数组元素时,方括号内是表达式,代表下标,可以是变量,
下标的取值范围是[0,数组长度-1]
二维数组的一般形式为:
类型名 数组名[常量表达式1][常量表达式2];
二维数组的引用:数组名[行下标][列下标] /* 注意是先行后列啊 */