题目:
将三个数字从大到小排列
int main()
{
int a, b, c,d;
scanf("%d%d%d", &a, &b, &c);
if (a < b)
{
d = a;
a = b;
b = d;
}
if (a < c)
{
d = a;
a = c;
c = d;
}
if (b < c)
{
d = b;
b = c;
c = d;
}
printf("%d,%d,%d\n", a, b, c);
return 0;
}
题目
打印1-100之间所有3的倍数
int main()
{
int i;
for (i = 1; i <= 100; i++)
{
if (0 == i % 3)
{
printf("%d\n", i);
}
}
return 0;
}
题目
求两个数最小公约数
int main()
{
int a;
int b;
scanf("%d,%d", &a, &b);//
int t = 0;
while (t = a % b)
{
a = b;
b = t;
}
printf("%d\n", b);
return;
}
- 注,scanf()中的格式决定了输入格式,如上述代码就要输入“A,B”,不能用空格
题目
输出闰年
int main()
{
int year;
int count = 0;
for (year = 1000; year < 2100; year++)//何为闰年
{
if (0 == year % 4 && 0 != year % 100)//1.可以被四整除,且不能被100整除
{
printf("%d ", year);
count++;
}
else if (0 == year % 400)//2.可以被400整除
{
printf("%d", year);
count++;
}
}
printf("共有%d年\n", count);
return 0;
}
注,错误代码:Run-Time Check Failure #3 - The variable 'count' is being used without being initialized.
原因:变量count(int count)没有初始化。所以应该给count初始赋值
什么变量必须初始赋值?对于声明的变量,如果在后面使用的时候,是给a赋值的语句,可以不给a赋值。但如果使用的时候需要使用变量的值如(count++)
精简版:
int main()
{
int year;
int count = 0;
for (year = 1000; year < 2120; year++)
{
if ((0 == year % 4 && 0 != year % 100) || (0 == year % 400))
{
printf("%d,", year);
count++;
}
}
printf("共有%d年\n", count);
return 0;
}
题目
打印100-200之间的素数
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
//试除法
//素数只能被1和本身整除
int j = 0;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (i == j)
{
printf("%d,", i);
count++;
}
}
printf("\n素数共%d", count);
return 0;
}
优化版:
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
for (j = 2; j < sqrt(i); j++)
{
if (i % j == 0)
{
break;
}
}
if (j > sqrt(i))
{
printf("%d,", i);
count++;
}
}
printf("\n素数共%d", count);
return 0;
}
sqrt()为库函数开平方,需要引用math.h文件,
算法解释:以一个数为例,36,sqrt(36)=6,而36也可以写成4*9、3*12、2*18,无论是哪种情况,一定有一个乘数是小于平方根的。所以,在2-sqrt(i)这个范围之内找不到可以整除i的数字,那么这个数一定是素数
**
此算法仍然可以进行优化:
对于100-200之间的数,偶数一定不是素数,那么就可以将外部循环改写成for(i = 101; i < 200; i += 2),以提高运行效率
题目
打印100以内整数出现9的次数
int main()
{
int a = 0;
int count = 0;
for (a = 0; a <= 100; a++)
{
if (9 == a % 10)
{
count++;
}
if (9 == a / 10)
{
count++;
}
}
printf("共%d次\n", count);
return 0;
}
题目
打印1-1/2+1/3-1/4……1/100
int main()
{
int i;
int b = 0;
float sum = 0;
for (i = 1.0; i <= 100; i++)
{
b = i % 2;
if (b == 0)
{
sum -= 1.0 / i;
printf("%f ", sum);
}
else
{
sum += 1.0 / i;
printf("%f ", sum);
}
}
printf("\nsum=%f", sum);
return 0;
}
1.0/i 可以得出小数
题目
求最大、最小值
int main()
{
int arr[] = { 5,6,12,-5,16,-2,-6,49,36,91,-1212 };
int max = arr[0];
int min = arr[0];
int i;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
if (arr[i] < min)
{
min = arr[i];
}
}
printf("最大值%d\n", max);
printf("最小值%d\n", min);
return 0;
}
注,这里要考虑到符号的问题,所以给max和min初始值的时候,不要赋值为0,要避免数组中没有0的情况下,错误的输出0.
题目
打印乘法表
int main()
{
int i = 0;
int j = 0;
int k = 1;
int sum = 0;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= k; j++)
{
sum = i * j;
printf("%dx%d=%-2d ", j, i, sum);//
}
k++;
printf("\n\n");
}
return 0;
}
直接打印出来的表格不美观这里就用到了左对齐(%-2d)和右对齐(%2d)。
题目
猜数字游戏
void game()
{
int ra = 0;
int input = 0;
ra = rand() % 100 + 1;//获得100以内的随机数
while (1)
{
printf("\n猜个数!\n");
scanf("%d",&input );
if (input > ra)
{
printf("\n大了\n");
}
else if (input < ra)
{
printf("\n小了\n");
}
else
{
printf("\n厉害\n");
break;
}
printf("\n你刚输了个 %d \n", input);
}
}
int main()
{
srand((unsigned int)time(NULL));//时间戳强制转换类型
int i;
int rec = 0;
menu();
do
{
printf("\n^^^^玩就挑个数咯^^^^^\n");
scanf("%d", &rec);
switch (rec)
{
case 1:
printf("\n开始了哈\n");
game();
break;
case 0:
printf("\n明天见\n");
break;
default:
printf("\n1 or 0 \n");
break;
}
} while (rec );
return 0;
}
rand()函数需要引入头文件#include
time()函数需要引入头文件#include
goto语句
常用于终止程序在某些深度嵌套的结构的处理过程,这种情况是break达不到的目的
关机程序
int main()
{
char arr[30] = { 0 };
printf("输入“不要关机”来取消关机\n");
system("shutdown -s -t 60 ");//cmd关机命令
onemore:
printf("请输入\n");
scanf("%s", &arr);
if (strcmp(arr, "不要关机") == 0)//比较两个字符串strcmp()
{
system("shutdown -a");//cmd取消关机命令
}
else
{
goto onemore;
}
return 0;
}
strcmp()函数,比较两个字符串 引入头文件#include<string.h>
返回值大于0,表示前字符串大于后字符串;
返回值小于 0,表示前字符串小于后字符串;
返回值等于 0,表示前字符串等于后字符串;·