目录
一、更多的练习
关键字不可以做变量名,不可以自己创建。
指针变量32位为4个字节,64位为8个字节。
static可以修饰函数,局部变量,全局变量
switch() 括号里面的参数类型不能是浮点数类型,而int, char都行
打印1~100之间所有3的倍数的数字:
int main()
{
int i = 0;
for (i = 1; i <= 100; i++)
{
if (i % 3 == 0)
printf("%d\n", i);
}
return 0;
}
给定两个数,求最大公约数:
int m = 24;
int n = 18;
int r = 0;
scanf("%d%d", &m, &n);
while (r = m % n)
{
m = n;
n = r;
}
printf("%d\n", n);
return 0;
打印1000~2000年之间的闰年:
int y = 0;
int count = 0;
for (y = 1000; y <= 2000; y++)
{
if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
{
printf("%d ", y);
count++;
}
}
printf("\ncount = %d\n", count);
打印100~200之间的素数:
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
//素数判断一种方法:试除法。比如说13,素数除了1和本身,只需要看2~12之间有没有可以整除13的即可。也就是2~i - 1
int j = 0;
for(j = 2; j < i; j++)
{
if (i % j == 0)
break;
}
if (j == i)
{
count++;
printf("%d\n", i);
}
}
printf("\ncount = %d\n", count);
不过这种算法不够好:
int i = 0;
int count = 0;
for (i = 101; i <= 200; i+= 2)
{
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
break;
}
if (j > sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
仍然不是很好的素数求法,但是也是做了点优化。
数1~100之间所有整数中出现多少个数字9:
int i = 0;
int count = 0;
for (i = 1; i <= 100; i++)
{
if (i % 10 == 9)
count++;
if (i / 10 == 9)
count++;
}
printf("count = %d\n", count);
计算1/1-1/2+1/3-1/4........+1/99-1/100的值:
int i = 0;
double sum = 0.0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
sum += flag * 1.0 / i;
flag = -flag;
}
printf("%lf\n", sum);
求7个整数最大值:
int arr[] = { -4, -7, -3, -1, -5, -2, -6};
int max = arr[0];
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 1; i < sz; i++)
{
if (arr[i] > max)
max = arr[i];
}
printf("max = %d\n", max);
打印乘法口诀表:
int i = 0;
for (i = 1; i <= 9; i++)
{
int j = 1;
for (j = 1; j <= i; j++)
{
printf("%d * %d = %-2d ", i, j, i * j);//这里的格式是因为乘积不仅有单位数还有双位数,为了对齐,统一在左面空出两格,所以就是-2d,如果是右边,那就是2d
}
printf("\n");
}
猜数字游戏
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("*******************************\n");
printf("****** 1. play 0.exit ******\n");
printf("*******************************\n");
}
void game()
{
int ret = 0;
int guess = 0;
//time_t time(time_t* timer)
ret = rand() % 100 + 1;//生成1~100之间随机数
while (1)
{
printf("猜数字: >");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择: ");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
二、goto语句
goto语句可以随意用的语句和标记跳转的标号。既然可以随意去哪,那么它的使用是带些破坏性质的,尽量不使用,除非没有其他代替的了。
int main()
{
printf("hello world\n");
goto again;
printf(" nihao\n");
again:
printf("haha\n");
return 0;
}
只打印hello world和hehe。
goto可能会程序执行顺序打乱,影响逻辑。但是goto也有很好的用处。最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。这种情况下使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。两个例子:
for(...)
for(....)
{
for(....)
{
if(disaster)
goto error;
}
}
error;
if(disaster)
//处理错误情况
关机程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char input[10] = { 0 };
system("shutdown -s -t 300");
again:
printf("电脑将在5分钟内关机,如果输入: 不看了,那么就取消关机\n请输入: ");
scanf("%s", input);
if (strcmp(input, "不看了") == 0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
或者
int main()
{
char input[10] = { 0 };
system("shutdown -s -t 300");
while (1)
{
printf("电脑将在5分钟内关机,如果输入: 不看了,那么就取消关机\n请输入: ");
scanf("%s", input);
if (strcmp(input, "不看了") == 0)
{
system("shutdown -a");
break;
}
}
return 0;
}
结束。2021元旦快乐,去往2022年。