1. 求两数的最大公约数
(解法一:暴力求法)
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int min = (a < b) ? a : b;
int m = min;
while (1)
{
if (a % m == 0 && b % m == 0)
{
break;
}
m--;
}
printf("%d\n", m);
return 0;
}
(解法二:辗转相除法)
例如有数24和18求最大公约数 ,令a=24,b=18;a%b=6,令c=6;再让a=18,b=6;a%b=0,c=0;此时6为24和18的最大公约数。
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d", &a, &b);
while (c = a % b)
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}
2.计算1到100的所有整数中出现多少个数字9
注意:99出现了两个9.
int main()
{
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);
return 0;
}
3.求10个整数中的最大值
不能用二分查找法,因为不能保证数字有序
int main()
{
int arr[10] = { 0 };
int i = 0;
for (i = 0;i < 10;i++)
{
scanf("%d", &arr[i]);
}
int max = arr[0];
for (i = 1;i < 10;i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("%d\n", max);
return 0;
}
4.在屏幕上输出九九乘法表
int main()
{
int i = 0;
for (i = 1;i <= 9;i++)
{
int j = 0;
for (j = 1;j <=i;j++)
printf("%d*%d=%-2d ", i, j, i * j);
printf("\n");
}
return 0;
}
注意:1.%2d右对齐,%-2d左对齐。
2.想让行距变宽一点可以将%-2d后的空格改为\t
3.将i=9改为i=n可打印其他行数的乘法口诀表
打印效果如下:
5.二分查找法
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
scanf("%d", &k);
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if (left > right)
printf("找不到\n");
return 0;
}
注意:1.mid应该放在循环内部计算,因为每一次循环都要重新计算mid。
2.循环的条件是left<=right
另外,为了防止 left+right 超出数据范围,可以将 mid 的计算公式改为 mid=left +(right-left)/2.
6. 编写代码,演示多个字符从两端移动,向中间汇聚
#include<windows.h>
#include<stdlib.h>
int main()
{
char arr1[] = "welcome to China!!!";
char arr2[] = "###################";
int left = 0;
int right = strlen(arr2) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
system("cls");
left++;
right--;
}
return 0;
}
注意:1.使用Sleep函数可以使程序延缓打印下一条指令,要引用头文件 windows.h
2.system是一个库函数,可以执行系统命令,cls是清空屏幕,要引用头文件 stdlib.h
7.编写代码实现,模拟用户登录情景,并且只能登录三次。
问题描述:
只允许输入三次密码,如果密码正确,则提示登陆成功,如果三次均输入错误,则退出程序。
#include<string.h>
int main()
{
int i = 0;
char password[20] = { 0 };
for (i = 0;i < 3;i++)
{
printf("请输入密码:>");
scanf("%s", password);
if (strcmp(password , "abcdef")==0)
{
printf("登陆成功\n");
break;
}
else
{
printf("密码错误。");
}
if (i == 3)
{
printf("三次密码均输入错误,退出程序。\n");
}
}
return 0;
}
注意:比较字符串是否相等不能用等号,而要用strcmp函数,要引用头文件string.h