C基础 2024.7.16

1.求1000以内所有的质数。质数:只能够1和它本身整除

#include <stdio.h>
 
int main(int argc, char const *argv[])
{
   int i, num;
   // while循环
   printf("1000以内的质数有:\n");
   num = 2;
   while (num <= 1000)
   {
      i = 2;
      while (i < num)
      {
         if (num % i == 0)
            break;

         i++;
      }
      if (i==num)
         printf("%d ", num);

      num++;
   }
   printf("\n");
 
   printf("---------------------------------------------------\n");
 
   // for循环
   for (num = 2; num <= 1000; num++)
   {
      for (i = 2; i < num; i++)
      {
         if (num % i == 0)
            break;
      }
      if (i==num)
      {
         printf("%d ", num);
      }
   }
   printf("\n");
 
   return 0;
}

2.有 1 、 2 、 3 、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#include <stdio.h>
#define MAX_NUM 4

int main() {
	int a[MAX_NUM] = {1, 2, 3, 4};
	int count = 0;
	for (int i = 0; i < MAX_NUM; i++)
	{
		for (int j = 0; j < MAX_NUM; j++)
		{
			if (j == i) continue; // 确保百位和十位数字不重复
			for (int k = 0; k < MAX_NUM; k++)
			{
				if (k == i || k == j) continue; // 确保十位和个位数字也不重复
				printf("%d%d%d\t", a[i], a[j], a[k]);
				count++; // 增加计数器,‌记录有效三位数的数量
			}
		}
	}
	printf("\n一共有: %d个数\n", count); // 输出总数量,‌应为4个不同的三位数组合
	return 0;
}

3.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 结果:peach=1534

1day    x      吃完剩余   x = x/2-1

2day    x                       x=x/2-1

.........................

9day                           (1+1)*2

10day  1       

 

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int i = 0;
	int peach = 0;
	int day=1;
	while(i<9)
	{
		peach = (day+1)*2;
		day = peach;
		i++;
	}
	printf("%d",peach);
	return 0;
}

  

4.99乘法表

1 x 1 = 1

2 x 1 = 2     2 x 2 = 4

3 x 1 = 3    3 x 2 = 6      3 x 3 = 9

4 x 1 = 4    4 x 2 = 6      4 x 3 = 9 4*4=16

#include <stdio.h>

int main(int argc, const char *argv[])
{
	int i=1,j=1;

	for(i = 1;i<10;i++)
	{
		for(j = 1;j<=i;j++)
		{
			printf("%dx%d=%d ",i,j,i*j);
		
		}
		printf("\n");
	}
	return 0;
}

5.完全平方数

在1万以内(不包含1万)查找整数,该整数它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?

完全平方数:完全平方指用一个整数乘以自己例如1*1,2*2,3*3等。所以1,4,9都是完全平方数。

10不是完全平方数,因为10号开根后不是整数

开根号 sqrt(); sqrt(2)--->对2开根号

使用使用sqrt函数,需要包含:#include 编译的时候需要加上 -lm ,例如:gcc 1.c -lm

结果:21 261 1581

#include <stdio.h>
#include <math.h>

int main(int argc, const char *argv[])
{
	int i,a,b;

	i = 1;
	while(i>0 && i<10000)
	{
		i++;
		a = sqrt(i+100);
		b = sqrt(i+268);
		if(a*a==i+100 && b*b==i+268)
		printf("%d\n" ,i);
	}


	return 0;
}

6.题目:有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13... 求出这个数列的前 20 项之和。

答案:结果:32.6603

ps:当前项的分子是下一项的分母, 下一项的分子是当前项的分子+分母

#include<stdio.h>
int main()
{
	int a,b,i=20,tmp; 
	float sum=0;
	a=1;b=2;
	while(i)
	{
		sum+=(float)b/a;
		tmp=a;
		a=b;
		b=tmp+b;
		i--;
	}
	printf("%.2f\n",sum);
	return 0;
}

7.从终端输入一个整数,要求将该整数进行翻转。

例如输入123,要求输出321(三百二十一)

输入-123,要求输出-321.

不考虑翻转后溢出的情况

#include<stdio.h>
int main(int argc, const char *argv[])
{
	int i;
	int j;
	char n[100];
	char m[100];
	printf("请输入一个三位整数:\n");
	i = 0;
	n[i] = getchar();
	while(n[i] != '\n')
	{
		++i;
		n[i] = getchar();
	}
	--i;
	j = 0;
	while(n[j] != '\n')
	{
		m[i] = n[j];
		--i;
		++j;
	}
	printf("倒序是:\n");
	printf("%s\n", m);
}

8.

计算空格个数
定义一个字符类型数组容量足够大即可,从终端获取若干个字符,直到遇到换行结束获取。要求计算出获取到的字符中有几个空格?

#include <stdio.h>

int main(int argc, const char *argv[])
{
	int count = 0;
	char arr1[100];
	int j;

	printf("请输入-------\n");
	for(j = 0;j < 100;j++)
	{
		scanf("%c",&arr1[j]);
		if(arr1[j] == '\n')
		{
			break;
		}
	}
	for(int i = 0;i <= j;i++)
	{
		if(arr1[i] == ' ')
		{
			count++;
		}
	}
	printf("空格有%d个\n",count);
	return 0;
} 

9.判断数据是否存在
定义一个整型数组,要求从终端输入5个数字。再输入一个数字n。判断n是否存在于那5个数字中。  12345 6---》6不在数组中
         123454---》4在数组中

#include <stdio.h>

int main(int argc, const char *argv[])
{
	int arr[5];
	/输入设定的数
	printf("请输入你的五个数\n");
	for(int i = 0;i<5;i++)
	{
		scanf("%d",&arr[i]);
	}
	输入比较的数//
	int n;
	printf("再次输入你要对比的数\n");
	scanf("%d",&n);
	做比较
	int i = 0;
	for(i=0;i<5 && n!=arr[i];i++);

	if(5 == i)
		printf("%d不在数组中\n",n);
	else
		printf("%d在数组中\n",n);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值