题目:

#include<stdio.h>
int main()
{
int a, b, c;
while (scanf("%d%d%d", &a, &b, &c) != EOF)
{
if ((a + b) > c && (a + c) > b && (b + c) > a)
{
if ((a == b) && (b == c))
{
printf("Equilateral triangle!\n");
}
else if ((a == b) && (a != c))
{
printf("Isosceles triangle!\n");
}
else
{
printf("Ordinary triangle!\n");
}
}
else
{
printf("Not a triangle!\n");
}
}
}注意点:本题关系式比较多,需要用括号括起来,联系实际生活
题目:

int main()
{
int i = 0;
double sum = 0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
sum = sum + 1.0 * flag / i;
flag = -flag;
}
printf("%lf", sum);
return 0;
}注意:要执行小数除法,sum要double类型,printf格式要%lf
题目:


int main()
{
int count = 0;
for (int i = 0; i < 100; i++)
{
if (i % 10 == 9)
{
count++;
}
if (i / 10 == 9)
{
count++;
}
}
printf("%d", count);
return 0;
}注意:if-if和if-else不一样,后者是求数字有多少个,思路是分个位或十位
题目:


int main()
{
int arr[10] = { 1,3,5,7,2,5,8,4,10,4 };
int max = arr[0];
for (int i = 1; i < 10; i++)
{
if (max < arr[i])
{
max = arr[i];
}
}
printf("%d", max);
return 0;
}题目: 多个字符向两端移动,向中间靠拢
#include<stdio.h>
#include<string.h>
#include<Windows.h>
#include<stdlib.h>
int main()
{
char arr1[] = "welcome to Changsha!!!";
char arr2[] = "**********************";
int left = 0;
int right = strlen(arr1) - 1;
while (left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s", arr2);
Sleep(1000);
system("cls");
left++;
right--;
}
printf("%s", arr2);
return 0;
}使用前提:在有序的数据中查找
#include<stdio.h>
int main()
{
int arr[] = { 1,3,6,8,9,10,20,25,30 };
printf("输入要找的数:");
int key;
scanf("%d", &key);
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;
int flag = 0;
while (left<=right)
{
int mid = left + (right - left) / 2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
printf("找到了,下标为%d", mid);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("找不到\n");
}
return 0;
}进阶
#include<stdio.h>
int binarySearch(int arr[],int x,int y)
{
int left = 0;
int right = x - 1;
while (left <= right)
{
int mid = left + ((right - left) >> 1);
if (arr[mid]<y)
{
left = mid + 1;
}
else if (arr[mid]>y)
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[] = { 1,4,6,8,9,10,14 };
int len = sizeof(arr) / sizeof(arr[0]);
int ret = binarySearch(arr,len,12);
if (ret != -1)
{
printf("找到了,在%d位上\n",ret);
printf("值是%d", arr[ret]);
}
else
{
printf("没找到\n");
}
return 0;
}理清逻辑
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i < 10; i++)
{
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-2d ", j, i, j * i);
}
printf("\n");
}
return 0;
}注意i和j的关系
#include<stdio.h>
int main()
{
int a = 24;
int b = 18;
int c = a % b;
while (c != 0)
{
a = b;
b = c;
c = a % b;
}
printf("%d", b);
return 0;
}while循环结束的条件是c==0,则继续的条件是c!=0
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
int sum = 0;
for (i = 0; i < 10; i++)
{
sum += arr[i];
}
printf("%d\n", sum);
double avg = sum * 1.0 / 10;
printf("%lf\n", avg);
return 0;
}注意:平均值要用double类型和%lf

分析思路

#include<stdio.h>
int main()
{
int input;
while (scanf("%d", &input) != EOF)
{
for (int i = 0; i < input;i++)
{
for (int j = 0; j < input; j++)
{
if (i == j || i + j == input - 1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}

#include<stdio.h>
int main()
{
int input;
while (scanf("%d", &input) != 0)
{
for (int i = 0; i < input; i++)
{
for (int j = 0; j < input; j++)
{
if (i == 0 || i == input - 1)
{
printf("* ");
}
else if (j == 0 || j == input - 1)
{
printf("* ");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
由于VS上不支持变长数组,所以下面拿2行3列来举例
#include<stdio.h>
int main()
{
int arr[2][3];
for (int i = 0; i <2; i++)
{
for (int j = 0; j < 3; j++)
{
scanf("%d", &arr[i][j]);
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%d ", arr[j][i]);
}
printf("\n");
}
}跟前几个题一样,需要仔细观察,本题的关键是打印时,由原来的2行3列变为3行2列,原来的下标
[i][j]换成[j][i]
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
for (int j = 9; j >= 0; j--)
{
printf("%d ",arr[j]);
}
return 0;
}#include<stdio.h>
int main()
{
int arr1[] = { 1,2,3,4 };
int arr2[] = { 5,6,7,8 };
int len = sizeof(arr1) / sizeof(arr1[0]);
for (int i = 0; i < len; i++)
{
printf("%d ", arr1[i]);
}
printf("\n");
for (int i = 0; i < len; i++)
{
printf("%d ", arr2[i]);
}
printf("\n===========\n");
for (int i = 0; i < len; i++)
{
int temp = arr1[i];
arr1[i] = arr2[i];
arr2[i] = temp;
}
for (int i = 0; i < len; i++)
{
printf("%d ", arr1[i]);
}
printf("\n");
for (int i = 0; i < len; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}每次i向前变化时,都要重新定义
temp


如何在不排序的情况下,把它给合并排序

#include<stdio.h>
int main()
{
int n;
int m;
scanf("%d%d", &n, &m);
int arr1[1000] = { 0 };
int arr2[1000] = { 0 };
for (int i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);
}
for (int i = 0; i < m; i++)
{
scanf("%d", &arr2[i]);
}
int i = 0;
int j = 0;
while (i < n && j < m)
{
if (arr1[i] < arr2[j])
{
printf("%d ", arr1[i]);
i++;
}
else if (arr1[i] > arr2[j])
{
printf("%d ", arr2[j]);
j++;
}
else
{
printf("%d ", arr1[i]);
i++;
}
}
while (i < n)
{
printf("%d ", arr1[i]);
i++;
}
while (j < m)
{
printf("%d ", arr2[j]);
j++;
}
return 0;
}_Bool is_prime(int x)
{
if (x == 1)
{
return true;
}
for (int i = 2; i < x; i++)
{
if (x % i == 0)
{
return false;
}
}
return true;
}
int main()
{
for (int i = 1; i < 100; i++)
{
if (is_prime(i))
{
printf("%d ", i);
}
}
return 0;
}void Print(int arr[],int len)
{
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
}
void Reverse(int arr[], int len)
{
int left = 0;
int right = len - 1;
while (left < right)
{
int temp = arr[right];
arr[right] = arr[left];
arr[left] = temp;
left++;
right--;
}
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8 };
int len = sizeof(arr) / sizeof(arr[0]);
Reverse(arr, len);
Print(arr, len);
return 0;
}
分析过程:

int main()
{
int money;
scanf("%d", &money);
int total = money;
int empty = money;
while (empty > 1)
{
total = total + empty / 2;
empty = empty / 2 + empty % 2;
}
printf("%d\n", total);
return 0;
}画图举例观察
分析思路:

#include<stdio.h>
int main()
{
int line;
scanf("%d", &line);
for (int i=0; i < line; i++)
{
for (int j=0; j < line - 1 - i; j++)
{
printf(" ");
}
for (int j=0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
for (int i = 0; i < line - 1; i++)
{
for (int j = 0; j < i + 1; j++)
{
printf(" ");
}
for (int j = 0; j < (line - 1 - i) * 2 - 1;j++)
{
printf("*");
}
printf("\n");
}
return 0;
}观察规律
int main()
{
for (int i = 100; i < 1000; i++)
{
int temp = i;
int count = 0;
while (temp)
{
count++;
temp /= 10;
}
temp = i;
int sum = 0;
while (temp)
{
sum += pow(temp % 10, count);
temp /= 10;
}
if (sum == i)
{
printf("%d ",i);
}
}
return 0;
}i/=i的话,i变成0了,无法求后面i的每一位了,所以先定义临时变量
temp
#include<stdio.h>
int Fuc(int x, int y)
{
if (y == 1)
{
return x;
}
else
{
return x*Fuc(x, y - 1);
}
}
int main()
{
int n;
scanf("%d", &n);
int i;
scanf("%d", &i);
int ret = Fuc(n, i);
printf("%d", ret);
return 0;
}限制条件往往是你思考的起点