目录
易错点与注意点
#include<stdio.h>
int main()
{
int age = 40;
if (age < 18)
{
printf("少年\n");
}
//错误:判断条件不能直接写"18 <= age <30"
else if (18 <= age <30)
{
printf("青年\n");
}
return 0;
}
//代码1与代码2本质一样
//代码1
if (true)
{
return 1;
}
return -1;
//代码2
if (true)
{
return 1;
}
else
{
return -1;
}
#include<stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
if (5 == i)
{
continue;
}
printf("%d ", i);
i++;
}
return 0;
}
//运行结果:0 1 2 3 4 之后进入死循环
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for ( ; i < 3; i++)
{
for (; j < 3; j++)
{
printf("hello\n");
}
}
return 0;
}
//运行结果:打印3个 hello
#include <stdio.h>
int main()
{
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hello\n");
}
return 0;
}
//运行结果:打印2个 hello
//下面代码中循环要循环几次? 0次
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 0, j = 0; j = 0; i++, j++)
{
j++;
}
return 0;
}
小练习
实现1!+2!+3!+....+n!
//实现n!
#include <stdio.h>
int main()
{
int n = 0;
int result = 1;
printf("请输入n的值:\n");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
result *= i;
}
printf("n的阶乘是:%d", result);
return 0;
}
//实现1!+2!+3!+....+n!
#include <stdio.h>
int main()
{
int n = 0;
int result = 1, sum = 0;
printf("请输入n的值:\n");
scanf("%d", &n);
for (int j = 1; j <= n; j++) //外循环:1 2 3....
{
result = 1; //每次阶乘前一定要初始化
for (int i = 1; i <= j; i++) //内循环:1! 2! 3!...
{
result *= i;
}
sum += result;
}
printf("n的阶乘是:%d\n", result);
printf("n的各项阶乘的和是:%d\n", sum);
return 0;
}
//实现1!+2!+3!+....+n!---改进版
#include <stdio.h>
int main()
{
int n = 0;
int result = 1, sum = 0;
printf("请输入n的值:\n");
scanf("%d", &n);
for (int j = 1; j <= n; j++)
{
result *= j;
sum += result;
}
printf("n的阶乘是 %d \n", result);
printf("n的各项阶乘的和是 %d \n", sum);
return 0;
}
在有序数组中,用二分法查找某一个数
//在有序数组中,用二分法查找某一个数
//错误代码
#include <stdio.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int num = 5;
int len = sizeof(arr) / sizeof(arr[1]);
int i = (len - 1) / 2;
while (1)
{
if (arr[i] > num)
{
i = i / 2;
}
else if (arr[i] < num)
{
//i = i + (len - i) / 2; //这种写法6找不到,死循环
i = i + (len - 1 - i) / 2; //这种写法10找不到,死循环
}
else
{
break;
}
}
printf("下标是: %d", i);
return 0;
}
//正确代码
#include <stdio.h>
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int num = 10;
int len = sizeof(arr) / sizeof(arr[0]);
int left = 0, right = (len - 1);
int mid = (left + right) / 2;
while (arr[mid] != num)
{
if (arr[mid] > num)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
mid = (left + right) / 2;
}
printf("下标是:%d", mid);
return 0;
}
演示多个字符从两端移动,向中间汇聚
//演示多个字符从两端移动,向中间汇聚
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
int main()
{
char str1[] = "I am handsome!!";
char str2[] = "***************";
int len = strlen(str2);
int start = 0, end = len - 1;
while (start <= end)
{
str2[start] = str1[start];
str2[end] = str1[end];
printf("%s\n", str2);
start++;
end--;
Sleep(1000);
system("cls"); //清屏
}
printf("%s\n", str2);
return 0;
}
>>>sleep函数
------将进程挂起设定的时长
1.Windows下:
#include <windows.h>
void Sleep(DWORD dwMilliseconds); 单位:毫秒
2.Linux下:
#include <unistd.h>
unsigned int sleep(unsigned int seconds); 单位:秒 (更精确用usleep,微秒)
>>>system函数
----执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数command为命令名,在windows系统下参数字符串不区分大小写
#include <stdlib.h>
int system(const char * command)
求两个数的最大公约数
//求两个数的最大公约数
#include <stdio.h>
int main()
{
int m = 0, n = 0;
printf("请输入两个整数:\n");
scanf("%d %d", &m, &n);
//最大公约数不会大于两个数中较小的那个
int max = m > n ? n : m;
while (1)
{
if (m%max == 0 && n%max == 0)
{
printf("最大公约数是:%d\n", max);
break;
}
max--;
}
return 0;
}
//辗转相除法
#include <stdio.h>
int main()
{
int m = 0, n = 0, t = 0;
printf("请输入:\n");
scanf("%d %d", &m, &n);
while (t = m % n)
{
m = n;
n = t;
}
printf("最大公约数是:%d\n", n);
return 0;
}
打印1000-2000之间的闰年
//打印1000-2000之间的闰年
//能被4整除,不能被100整除 或者 能被400整除
#include <stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 1000; i <= 2000; i++)
{
if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
{
printf("%d ", i);
count++;
}
}
printf("\n一共%d个闰年\n", count);
return 0;
}
打印100-200之间的素数
//打印100-200之间的素数
#include <stdio.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
for (j = 2; j < i; j++)
{
if (i % j == 0)
break;
}
if (i == j)
{
printf("%d ", i);
}
}
return 0;
}
//优化
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
for (i = 101; i <= 200; i += 2) //偶数不可能是素数
{
int j = 0;
int flag = 0;
//假设 s = m * n,则m和n中一定至少有一个数小于等于s开平方
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 1;
break;
}
}
if (flag == 0)
printf("%d ", i);
}
return 0;
}