栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言循环的一些题目

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言循环的一些题目

本人是大三学生,希望跨考cs。在这个平台会分享一些自己做的题目,萌新起路,请多多指教。

常见的几个通项公式问题。

​
//计算求和 通项问题
#include 
int main()
{
    double sum;//注意这里要把sum格式改成double形式
    sum=1;
    int n;
    for (n=2 ; n<=1000;n++)
    {
        sum=sum+1.0/n;
        
    }
    
    printf("%lf %dn",sum,n);
    return 0;
}

//通项求和问题
#include 
int main()
{
    double k;//这里用i来代替k
    int i=1;
    double x;//注意除法用double格式
    for(i=1;i<=100;i++)
    {
        k=k+i;
    }
    for(i=1;i<=50;i++)
    {
        k=k+i*i;
    }
    for(x=1.0;x<=10;x++)
    {
        k=k+1/x;
    }
    printf("%.2lf",k);
    return 0;
}

//计算通项求和
#include 
int main()
{
    double n,t,sum;
     n=1.0;
     sum=1.0;
     t=0.0;
    do
    {
        t=1/(n*(n+1));
        sum=t+sum;
        n++;
    }
    while(t>=0.001);
     printf("%.5lf",sum);
    return 0;
    
}

//依旧是通项构造
#include 
#include 
int main()
{
    double sinx,x,eps;
    int f,t;
    f=1;
    int n;
    n=0;
    t=1;
    sinx=0;
    double b;
    b=0;
    scanf("%lf lf",&x,&eps);
    while(fabs(b)>=eps)
    {   t=n*(n+1)*t;//重点在于这个阶乘的构造,阶乘都是乘自身,但是这个需要对比多余的量,多出两项可解
        b=f*pow(x,2*n+1)/t;
        sinx=sinx+b;
        f=-f;
        n=n+2;
    }
    printf("%lf",sinx);
    return 0;
}

//提醒注意正负吧
#include 
int main()
{
    int n,i,sum;
    i=0;
    sum=0;
    scanf("%d",&n);
    if(n>=0)
    {
        for(i=n;i<=2*n;i++)
    {
        sum=i+sum;
    }
    }
    else{
        for(i=2*n;i<=n;i++)
        {
            sum=i+sum;
        }
    }
    printf("%d",sum);
    
    return 0;
}


​

这几个通项公式求和问题都比较简单

麦子问题

也是循环的一种直接应用吧,值得注意的是要注意范围,int的范围不够

//麦子问题,提醒你注意范围,利用k作循环次数控制解放i
#include 
int main()
{
    double i,sum,k,j;//注意int的范围
    sum=0;
    i=1;
    for(k=1;k<=64;k++)//循环64次
    {
        sum=i+sum;
       i=2*i;
    }
   j=1.42e8;
   printf("%.2e %.2e",sum,1.0*sum/j);
   return 0;
}

小马中马大马问题,实质就是让你解线性方程组,用if来控制输出就行了,for用来遍历

//整数解问题
#include 
int main()
{
    int a,b,c;
        printf("大马t中马t小马n");
    for(a=0;a<=33;a++)

    
        for(b=0;b<=50;b++)
        {
            c=100-a-b;
            if(c%2==0)//这个我也是用if语句来控制c是2的倍数
          if(  3*a+2*b+c/2==100)//if语句来控制输出,还有注意是==

        printf("%dt%dt%dn ",a,b,c);

        }
    
    return 0;
}

反序数问题大概流程其实大家都清楚,但是反序数这道题的核心思想就是遍历,我一开始设未知数没初始化是行不通的,遍历满足条件的输出就行了,知道利用遍历来做,一个个找就行了

//反序数问题
#include
int main()
{
	int a,b,c,d,n;
	int sum = 0;
	
	for(n = 1000;n < 1111;n++){
	
		a = n / 1000;
		b = (n % 1000) / 100;
		c = (n % 100) / 10;
		d = n % 10;

	sum = ((1000 * d) + (100 * c) + (10 * b) + a);
		if((9 * n) == sum)		
	printf("%d 的九倍是他的反序:%dn",n,sum);

	}
}

阿姆斯特朗数问题我是参照了

C语言求解阿姆斯特朗数_fengchuixia的博客-CSDN博客_c语言阿姆斯特朗数

这位博主设置最大数和最小数很精巧,我一开始直接默认是三位数了,当然她的代码里面我也学到了利用一个第三变量检验输出,还有保护变量

#include
int main()
{
int i,j,sum,p,flag;i=100;
j=1;
flag=1;
p=1;
for(i=100;i<1000;i++)
{
     p=i;//要保护i,这个特别重要,因为i如果进入运算,会被破环,不满足条件
     sum=0;//这个也特别重要因为循环里面sum是累加的
    while(p)//因为每次乘法固定,可以利用循环来做
     {j=p%10;
     p=p/10;
     sum+=j*j*j;
     }
    if(sum==i)
    {
        printf("%dn",sum);
        flag=0;//flag 来监测 ,注意检验写在循环外面
   }
 } 
 if(flag==1)
printf("none");
 return 0;
}

韩信点兵问题,韩信点兵其实也是遍历的思想,只不过利用break在找到第一个之后就可以跳出循环

//点兵问题
#include 
int main()
{
    int sum;
    sum=0;
    for(sum=1;;sum++)
    {
        if(sum%5==1&&sum%6==5&&sum%7==4&&sum%11==10)
        break;//break跳出循环的功能,很方便找第一个数

    }
         printf("%d",sum);
    return 0;
}

猴子吃桃问题,猴子吃桃也是无法初始化,没有初始数,只能倒过来求,倒过来求反着流程图做就行了

//猴子吃桃问题
#include 
int main()
{
 int sum;
 int cnt;
 cnt=9;
 sum=1;
 while(cnt>=1)
 {
     sum=(sum+1)*2;//注意是先加1再乘2,可以假设第一天14个桃,第二天6个桃,这样就很清楚了,其实正常是sum=sum/2,sum=sum-1,逆序应该是从下往上
    cnt--;
 }
 printf("%d",sum);
 return 0;
}

水手分椰子问题,这个比吃桃问题复杂一点

//水手分椰子问题
#include
int main()
{
    int a,find=0,b,c,d,e,f;;
    for(a=1;!find;a++)
    {
        b=5*a+1;
        c=b/4.0*5+1;//保护b,注意4.0
        d=c/4.0*5+1;
        e=d/4.0*5+1;
        f=e/4.0*5+1;
        if(f%5==1&&e%5==1&&d%5==1&&c%5==1&&b%5==1)//确实没有想到这个,避免了小数问题
        {
            find=1;
            printf("原有%d个椰子",f);
        }
    }
    return 0;
}

这个也是网上找的一个答案,但是我认为不是很好,我看到过一个更好的答案

这个博主发了两种解法,但是我函数不是很熟,只看了一种解法

https://blog.csdn.net/weixin_36138524/article/details/117186537?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link

#include 

int main()
{
int i, j, total, n;
printf("Input n(1");
scanf("%d", &n);
if (n <= 1 || n > 5)
{
printf("Error!");
}
else
{
i = 1;
while(1)
{
total = i;
for(j = 0; j < n; j++)//
{
total = total * 5;
if(total % 4 != 0)//判断能被4整除,确定它是整数,这确实厉害,这一步
break;
total = total / 4;
total += 1;
}
if(j == n)//清零
break;
i++;
}
printf("y=%d", total);
}
return 0;
}

倒三角行九九乘法表,九九乘法表很简单,但是搞成这个下上三角形确实得思考一下

//改成上三角形式数乘表
#include 
int main()
{
	int i,j,m,cnt;
	i = 1;
	j = 1;
    m=0;
	while (i <= 9)
	
	{
		while(j<=9)
		{
			
			if(i*j==1)
			printf("1");
			else 
			printf("%3d",i*j);//倒三角必须从前面判断,所以只能利用m,m可以使使双位末位和单位之间的间距保持一致
			j++;
		
		
	}
		i++;
		j=i;
	m=m+1;
	cnt=m;//保护m,因为每次循环会消耗cnt
	printf("n");
	printf(" ");
	while(cnt>1)
	{printf("   ");//无法在循环里添加空格的原因,因为循环会使空格成倍增加,所以在外循环里写个空格弥补
	cnt--;}	

}
}

编写程序,输入顶行字符和图形的高,输出如下所示图形。

就是菱形的ABCD问题,真把我难住了,不过明白了利用变量来初始化以控制循环的次数之后,就很简单了

参考了这个答主的答案,但是我觉得他的有点复杂,可能是因为没有注释的原因

编写C语言程序,输入顶行字符和图形的高,输出如下所示图形

#include 
int main()
{
int h,i,k,j,t;
scanf("%d,%c",&h,&k);
for(i=0;i<(h+1)/2;i++)//控制次数,先是上三行
{
    for(j=i;j<(h+1)/2-1;j++)
{ 
  printf(" ");
}
printf("%c",k);//打印字母
if(i!=0)//除了第一行以外的空格
{
  for(t=0;t1;i--)//下半部分的开始
{

for(j=(h+1)/2+1-i;j>=1;j--)
{
  printf(" ");
}
printf("%c",k);
if(i!=2)//不是最后一行
{
  for(t=1;t<=2*(i-2)-1;t++)
{
  printf(" ");
  }
  printf("%c",k);

}
printf("n");
k--;
}
return 0;
}

最后,希望一起加油

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290557.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号