当前位置 博文首页 > HyDraZya的博客:【C语言基础】练习题
#include <stdio.h>
int main()
{
int i = 0;
int n = 0;
int ret = 1;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
ret = ret * i;
}
printf("ret = %d\n", ret);
//32以上的数字会溢出
return 0;
}
#include <stdio.h>
int main()
{
int n = 0;
int ret = 1;
int sum = 0;
for(n=1; n<=10; n++)
{
ret = ret * n;
//n的阶乘
sum = sum + ret;
}
printf("sum = %d\n", sum);
return 0;
}
//sum = 4037913
方法1:
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 7;
int i = 0;
int sz = sizeof(arr)/sizeof(arr[0]);
for(i<0; i<sz; i++)
{
if(k == arr[i])
{
printf("找到了,下标是:%d\n", i);
break;
}
}
if(i == sz)
printf("找不到\n");
return 0;
}
??方法2(二分/折半查找算法):
#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 7;
int left = 0;//左下标
int sz = sizeof(arr)/sizeof(arr[0]);
int right = sz-1;//右下标
while(left <= right)
{
int mid = (left+right)/2;
if(arr[mid] > k)
{
right = mid-1;
}
else if(arr[mid] < k)
{
left = mid+1;
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if(left>right)
{
printf("找不到\n");
}
return 0;
}
注:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
char arr1[] = "welcome to bit!!!";
char arr2[] = "#################";
int left = 0;
//int right = sizeof(arr1)/sizeof(arr1[0])-2;
int right = strlen(arr1)-1;
while(left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
//休息一秒
Sleep(1000);
system("cls");//执行系统命令的一个函数
//cls - 清空屏幕
left++;
right--;
}
printf("%s\n", arr2);
return 0;
}
#include <stdio.h>
#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, "123456") == 0)//== 不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp
{
printf("登录成功\n");
break;
}
}
if(i==3)
printf("三次密码均错误,退出程序\n");
return 0;
}
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d %d", &a, &b, &c);
//算法实现
//a中放最大值
//b次之
//c中放最小值
if(a<b)
{
int tmp = a;
a = b;
b = tmp;
}
if(a<c)
{
int tmp = a;
a = c;
c = tmp;
}
if(b<c)
{
int tmp = b;
b = c;
c = tmp;
}
printf("%d %d %d\n", a, b, c);
return 0;
}
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=100; i++)
{
if(i%3 == 0) //%——取模
printf("%d ", i);
}
getchar();
return 0;
}
当m<n时模就是m,相当于m除以n得0余m,然后在数值上换位,仍是m>n
#include <stdio.h>
int main()
{
int m = 0;
int n = 0;
int r = 0;
scanf("%d %d", &m, &n);
while(m%n)
{
r = m%n;
m = n;
n = r;
}
//辗转相除法
printf("%d\n", n);
getchar();
getchar();
return 0;
}
方法1:
#include <stdio.h>
int main()
{
int year = 0;
int count = 0;
for(year = 1000; year<=2000; year++)
{
//判断year是否为闰年
//1.能被4整除并且不能背100整除是闰年
//2.能被400整除是闰年
if(year%4==0 && year%100!=0)
{
printf("%d ", year);
count++;
}
else if(year%400==0)
{
printf("%d ", year);
count++;
}
}
printf("\ncount = %d\n", count);
return 0;
}
方法2:
#include <stdio.h>
int main()
{
int year = 0;
int count = 0;
for(year = 1000; year<=2000; year++)
{
//判断year是否为闰年
//1.能被4整除并且不能背100整除是闰年
//2.能被400整除是闰年
if((year%4==0)&&(year%100!=0)||(year%400==0))
{
printf("%d ", year);
count++;
}
}
printf("\ncount = %d\n", count);
getchar();
return 0;
}
(1)试除法:
#include <stdio.h>
int main()
{
int i = 0;
int count = 0;
for(i=100; i<=200; i++)
{
//判断i是否为素数
//素数判断的规则
//1.试除法
//产生2 -> i-1的
int j = 0;
for(j=2; j<i; j++)
{
if(i%j == 0)
{
break;
}
}
if(j == i)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
(2)将所有素数视为奇数:
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
int count = 0;
for (i=101; i<=200; i+=2)
{
for (j = 2; j < i; j++)
{
if (i%j == 0)
break;
}
if (j == i)
{
printf("%d ", i);
count++;
}
}
printf("\ncount = %d\n", count);
return 0;
}
(3)除了2以外,所有可能的质因数都是奇数,先尝试2,再尝试从3开始知道x/2的所有奇数:
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
int count = 0;
for(i=101; i<=200; i+=2)
{
for(j = 2; j < i/2; j++)
{
if(i%j == 0)
{
break;
}
}
if(j == i / 2)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
(4)使用sqrt函数:
?i=a*b
a和b中至少有一个数字<=开平方i
#include <stdio.h>
#include <math.h>//调用sqrt函数
int main()
{
int i = 0;
int count = 0;
//sqrt - 开平方的数学库函数
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);
return 0;
}
(5)筛选法:?
只要尝试小于sqrt(x)的素数即可,而这些素数,在前面已经算出,将已经算出的素数,先保存起来,然后用于后续的试除。
步骤:
1.先将1去除(1不是素数)
2.用2除它后面的各个数,把能被2整除的数去除,即把2的倍数去除掉
3.用3除后面的各个数,把能被3整除的数去除,即把3的倍数去除掉
4.分别用5…作为除数除这些数后面的数
这些操作需要一个很大的容器去装载所有数的集合,只要满足这些步骤,即将大于1的且是2、3、4…的倍数全部置为0,一直到数据集合的末尾,最终不是0的数就是素数。
#include <stdio.h>
int main()
{
int i = 9;
int j = 0;
int arr[100];
int count = 0;
for(i=0; i<100; i++)
{
arr[i] = i + 1;
}
for(i = 0; i < 100; i++)
{
j = i - 1;//通过0、1、2
while(j > 1)
{
if(arr[i] % j == 0)
arr[i] = 0;
j = j - 1;
}
}
for(j = 1; j < 100; ++j)
{
if (arr[j] != 0)
{
printf("%d ", arr[j]);
count++;
}
}
printf("\ncount = %d\n", count);
return 0;
}
#include <stdio.h>
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;
}
#include <stdio.h>
int main()
{
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);
getchar();
return 0;
}
#include <stdio.h>
int main()
{
int arr[] = {-1,-2,-3,-4,-5,-6,-7,-8,-9,-10};
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);
return 0;
}
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=9; i++)
{
//打印一行
int j = 1;
for(j=1; j<=i; j++)
{
printf("%d*%d=%d\t", i, j, i*j);
}
printf("\n");
}
return 0;
}
1.电脑生成一个随机数
2.猜数字
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
printf("****************************\n");
printf("**** 1.play 0.exit ****\n");
printf("****************************\n");
}
//1为玩游戏(真),0为退出(假)
//RAND_MAX-32767
void game()
{
//1.生成一个随机数
int ret = 0;
int guess = 0;
//拿时间戳来设置随机数的生成起始点
//time_t_time(time_t * timer)
//time_t
ret = rand()%100+1;//生成1-100的随机数
//2.猜数字
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;
}
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main()
{
char input[20] = {0};
//shutdown -s -t 60
//system() - 执行系统命令
system("shutdown -s -t 60");
again:
printf("请注意,你的电脑将在1分钟内关机,如果输入:我是猪,就取消关机\n请输入>:");
scanf("%s", input);
if(strcmp(input,"我是猪") == 0)//比较两个字符串用strcmp()
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
cs