1.猴子吃桃问题:猴第一天摘下若干个桃子,当即吃一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,见只剩一个桃子。求第一天共摘了多少桃子。
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int n;/*猴子第一天摘得桃子数量*/
int m;/*最后剩下的桃子数量*/
scanf("%d", &m);
for (int i = 1; i <10; i++)
{
n = (m + 1) * 2;
m = n;
}
printf("%d", n);
return 0;
}
注:关键点在于循环了几次,可以在纸上模拟一下两次,三次是什么样子的,就可以判断十天是循环几次。
2.两个乒乓球队进行比赛,各出3人。甲队为 ABC 3人,乙队为 XYZ 3人。巳抽签决定比赛名单 。 有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序输出3对赛手的名单
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char i,j,k;
for ( i='x'; i <= 'z'; i++)
{
for (j = 'x'; j <= 'z'; j++)
{
if (i != j)
{
for (k = 'x'; k <= 'z'; k++)
{
if (k != i && k != j)
{
if (i != 'x' && k != 'x' && k != 'z')
{
printf("a-%c b-%c c-%c", i, j, k);
}
}
}
}
}
}
return 0;
}
3.数组
多个同类型的数据时用数组。
定义:类型 数组名【长度】
初始化:在定义的同时,赋值。如果对一数组只初始化一部分,那么剩下的就是0.
定义时不明写数组的长度,但是赋值,可以自动推导长度,即为刚好放下所有元素的长度。
int a[]={1,2,3};(这是可以的)
不明写数组长度也不赋值,是错误的。
数组长度为变量是不可以的。
数组的编号是从0开始的,所以最后一个数字不要越界溢出。
想要输入和输出整个数组都要用循环.
sizeof(arr)就是整个数组所占的字节。sizeof(arr[0])是一个数字的字节。所以sizeof(arr)/sizeof(arr[0])就可以得到数组的长度了。
4.斐波那契数列(用数组来实现)
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int arr[20] = { 1,1 };
for (int i = 2; i < sizeof(arr) / sizeof(arr[0]); i++)
{
arr[i] = arr[i - 2] + arr[i - 1];
}
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%4d", arr[i]);
}
}
注:1.i < sizeof(arr) / sizeof(arr[0])用这样的式子控制循环次数,一定要重点关注
5.冒泡排序(非常重要)
从头到尾,两两比较,大的往后,小的往前(从小到大排序)
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int arr[] = { 2,3,5,6,4,9,8,1,0,7 };
int len = sizeof(arr) / sizeof(arr[0]);/*数组长度*/
for (int i = 0; i < len - 1; i++)/*循环的趟数*/
{
for (int j = 0; j + 1 < len - i; j++)/*每一趟是从头到尾的,但是不包括已经有序的数据*/
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < len; i++)
{
printf("%d", arr[i]);
}
}
6.二维数组:
定义:类型 数组名【行】【列】
行数和列数可以不写其中一个,但是不能两个都不写。
访问:通过行列下标,下标从0开始。
7.矩阵逆置
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int a[2][3] = { 1,2,3,4,5,6 };
int b[3][2];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
b[j][i] = a[i][j];
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%d", b[i][j]);
}
printf("\n");
}
return 0;
}