XUT_C_zuoye

一. 顺序结构

1.大小写字母转换

从键盘上输入一个小写字母字符,将其转换为对应的大写字母字符。分别输出转换前后的字母字符及其对应的ASCII码值。
【输入形式】
输入一个小写字母字符。
【输出形式】
分别输出转换前后的字母字符及其对应的ASCII码值。
【样例输入】

b

【样例输出】
b,B

98,66

解:完成此题首先要知道在C语言中大小写字符都有对应的ASCII码值且其遵循着一定的规律。
在这里插入图片描述
我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数
据:
• 字符A-Z的ASCII码值从65~90
• 字符a-z的ASCII码值从97~122
• 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
• 数字字符0-9的ASCII码值从48~57
• 换⾏ \n 的ASCII值是:10
• 在这些字符中ASCII码值从0~31这32个字符是不可打印字符,⽆法打印在屏幕上观察

#include<stdio.h>
    int main()
{
    char a;
    scanf("%c",&a);
    printf("%c,%c\n%d,%d\n",a,a-32,a,a-32);
    return 0;
}


%c,%d等 被称为占位符,在printf函数中 占位符与参数要一一对应。
ps:如果有n个占位符那么有n+1个参数。

2.交换变量值

从键盘上输入两个任意整数(两个整数间以逗号分隔),分别保存在x和y变量中,交换两个变量中的值后进行输出。
【输入形式】
输入两个任意整数(两个整数间以逗号分隔)。
【输出形式】
交换两个变量中的值后进行输出(两个整数间以逗号分隔)。
【样例输入】

5,9

【样例输出】
9,5

要实现两个变量的交换,简单举例,有两个瓶子一个装醋一个装酱油,那么如何将两个瓶子所装东西调换呢? 可以想到拿出一个空瓶子,先将醋倒进去,再将酱油倒进醋瓶,最后将空瓶中被倒入的醋倒在酱油瓶中,这样实现了两者交换。
用C语言如何实现呢,代码如下:

#include<stdio.h>
int main()
{  int a;int b ;
   scanf("%d,%d",&a,&b);
   printf("%d,%d\n",b,a);

    return 0;
}

3.求三个数的平均值

编写一个C语言程序,输入a,b,c三个整数值,计算并输出其平均值.
【输入形式】
输入仅一行,输入三个整型数据。(输入数据用一个空格间隔)
【输出形式】
输出仅一行,输出平均值,6位有效位。
【样例输入】

1 2 2

【样例输出】
1.666667

C语言数据计算特点,整数/整数得到整数,小数/整数或整数/小数或小数除小数才能得到小数。
代码示例:

#include<stdio.h>
int main()
{int a;int b;int c;
  scanf("%d%d%d",&a,&b,&c);
  float sum=a+b+c;
  printf("%f\n",sum/3);


return 0;
}


4.求两点之间距离

编一程序,求两点之间的距离。已知直角坐标系中两点(x1,y1)和 (x2,y2),公式求取两点间距离。
【输入形式】
输入仅一行,输入4个任意数(2个坐标点的横纵坐标值)x1,y1;x2,y2
【输出形式】
输出仅一行,输出两点间距离值。
【样例输入】

0 0 1 1(x1=0,y1=0;x2=1,y2=1)

【样例输出】

1.414214

这里要想到数学公式
在这里插入图片描述

#include<stdio.h>
#include<math.h>
int main()
{
float x1,y1;float x2,y2;
scanf("%f%f%f%f",&x1,&y1,&x2,&y2);
double k=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2),l;
l=sqrt(k);//这里要对k进行开平方用到数学函数,则要引用头文件 include<stdio.h>
printf("%f\n",l);
 return 0;
}

5.摄氏温度转化为华氏温度和绝对温度

编一程序,将输入的摄氏温度C转换为华氏温度F和绝对温度K。 转换公式为: F=9/5C+32 K=273.16+C
【输入形式】
输入仅一行,输入一个摄氏温度数C
【输出形式】
输出仅一行,输出其华氏温度F和绝对温度K,输出数据间隔为一个空格,输出数据保留2位小数。
【样例输入】

36.2

【样例输出】
F=97.16 K=309.36

根据题目要求,输入摄氏温度,依据给定公式计算出华氏温度和绝对温度并输出
代码示例:

#include<stdio.h>
int main()
{
    float C,F,K;
    scanf("%f",&C);
    F=9.0/5*C+32;
    K=273.16+C;
    printf("F=%.2f K=%.2f\n",F,K);//题目要求保留两位小数,则对应写法为%.2f
    return 0;
}


二.选择结构

1.奇偶数判断

给定一个整数,判断该数是奇数还是偶数。
【输入形式】
输入仅一行,一个大于零的正整数n。
【输出形式】
输出仅一行,如果n是奇数,输出odd;如果n是偶数,输出even。
【样例输入】

5

【样例输出】
odd

要判断一个数是奇数还是偶数可以看其除以2之后的余数,若余数为0则为偶数,否则为奇数

#include<stdio.h>
int main()
{   int n=0;
     scanf("%d",&n);
     if(n%2==0)
     {
         printf("even\n");
     }
    else
    {
        printf("odd\n");
    }
     return 0;
}


2.求三个数的最大值

编一程序,将3个整数a、b、c由键盘输入,输出其中的最大者
【输入形式】
输入仅一行,输入3个整数
【输出形式】
输出仅一行,输出3个数中的最大值
【样例输入】

3 2 6

【样例输出】
max=6

先两两进行比较确定一个最大值,再用第三个数和最大值进行比较,如果大于最大值则将第三个数赋给最大值

代码示例如下:

#include<stdio.h>
int main()
{
  int a; int b; int c; int max;
  scanf("%d%d%d",&a,&b,&c);
  if(a>b)
  {
      max=a;
  }
  else
  {
      max=b;
  }
  if(c>max)
  {
      max=c;
  }
  printf("max=%d\n",max);
    return 0;
}


3.输入0-6的数字,输出对应星期的英文

请输入0-6的数字,输出对应星期的英文。如果输入不正确,则输出"Error"。0~6星期对应为: Sunday, Monday,Tuesday,Wednesday,Thursday,Friday,Saturday。
【输入形式】
输入任意一个整数。
【输出形式】
如果输入的整数在0~6之间,将输出对应星期的英文,否则输出“Error”。
【样例输入】

0

【样例输出】

Sunday

一开始拿到题目很容易想到用if语句判断输入的值来完成输出,但switch语句更适合来解决此类问题。
首先介绍switch语句:

switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重
的 else if 改成更易⽤、可读性更好的形式。

在这里插入图片描述
上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀。
注:
• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式

代码示例如下:

#include<stdio.h>
   int main()
{  int x;
    scanf("%d",&x);
    switch(x)
    {
        case 0:printf("Sunday");break;
        case 1:printf("Monday");break;
        case 2:printf("Tuesday");break;
        case 3:printf("Wednesday");break;
        case 4:printf("Thursday");break;
        case 5:printf("Friday");break;
        case 6:printf("Saturday");break;
        default:printf("Error\n");
    }


    return 0;
}




4.三个数排序

编写程序,实现输入3个整数,要求按由大到小的顺序输出。 说明:对这个程序进行测试时,需要6组测试数据均能得到正确的输出结果,才能说明程序正确。 a b c a c b b a c b c a c b a c a b
【输入形式】
输入仅一行,输入三个整数。
【输出形式】
输出仅一行,按从大到小顺序输出这三个整数。
【样例输入】

2 4 3

【样例输出】
4>3>2

上面我们说过较为简单的求三个数最大值,这里要实现三个数的比较大小,可以用打擂台的方式实现。
具体操作,先将一个变量定为最大,用剩余变量和其进行比较,若有变量对应的值比它大,则将这个变量赋为最大值

代码实现如下:

#include<stdio.h>
int main()
{
    int a;int b;int c;int k=0 ;
    scanf("%d%d%d",&a,&b,&c);
    if(a<b)
    {
        k=b;
        b=a;
        a=k;

    }
     if(a<c)
    {
        k=c;
        c=a;
        a=k;
    }
     if(b<c)
      {
        k=c;
        c=b;
        b=k;
      }
        printf("%d>%d>%d",a,b,c);
   return 0;
}

5.分段函数

编程按下式计算y的值,x的值由键盘输入。(可用if和switch实现) x、 y均按float类型
在这里插入图片描述
【输入形式】
输入仅一行,输入一个数值。
【输出形式】
输出仅一行,输出相应的数据值(小数点后保留2位有效位)或no definition(两单词中间有一空格)。
【样例输入】

1

【样例输出】

y=0.84

#include<stdio.h>
#include<math.h>
int main()
{
   float x;
   float y;
   scanf("%f",&x);
   if(0<=x&&x<40)
   {
       if(0<=x&&x<10)
     {
       y=sin(x);
     }
       if(10<=x&&x<20)
     {
       y=cos(x);
     }
       if(20<=x&&x<30)
     {
       y=(exp(x)-1);
     }
      if(30<=x&&x<40)
     {
       y=log(x+1);
      }

    printf("y=%.2f",y);
   }
   else
   {
      printf("no definition");
   }
   return 0;
}

三.选择结构(二)

1.实现简单数值运算

从键盘输入两个数值和一个运算符,自动完成相应的运算。输入的运算符只能是+、-、*、/ 这4种符号,输入的数值及运算结果均定义为float类型,小数点后均只保留2位有效位,除法运算时除数不能为0。当运算符不正确,或者除法运算时除数为0时,输出input error。
【输入形式】
输入有两行,第一行为两个实数,两个实数之间用逗号分隔;第二行输入一个运算符
【输出形式】
输出仅一行,输出相应的运算式及计算结果,或输出input error(两单词中间有一空格)。
【样例输入】

11,5.9
+

【样例输出】

11.00+5.90=16.90

#include <stdio.h>
int main()
{
    float a,b,sum,x,j,k;
    char c;
    scanf("%f,%f\n",&a,&b);
    sum=a+b;
    x=a-b;
    j=a*b;
    k=a/b;
    scanf("%c",&c);
    if(c=='+')
    {
        printf("%.2f+%.2f=%.2f",a,b,sum);
    }
     else if(c=='-')
    {
        printf("%.2f-%.2f=%.2f",a,b,x);
    }

    else if(c=='*')
    {
        printf("%.2f*%.2f=%.2f",a,b,j);
    }
    else if(c=='/'&&b!=0)

    {
        printf("%.2f/%.2f=%.2f",a,b,k);

    }
    else if(c!='+,-*/')
    {
        printf("input error");
    }
    else if(c=='/'&&c==0)

      return 0;
}


2.百分值转换成相应的等级

编一程序,输入一个百分制的成绩(整数类型),按要求输出相应的字符串信息,对应关系为:     excellent 90-100     good 80-89     middle 70-79     pass 60-69 fail 60以下或100以上
【输入形式】
输入仅一行,输入一个百分制的整数分数
【输出形式】
输出仅一行,输出其对应的字符信息
【样例输入】

85

【样例输出】
good

嵌套的if else 结构 注意范围界定

#include<stdio.h>
int main()
{
    int f;
    scanf("%d",&f);
    if(f>=90&&f<=100)

    {
        printf("excellent");
    }
    else if(f>=80&&f<90)
    {
        printf("good");
    }
    else if(f>=70&&f<80)
    {
        printf("middle");
    }
    else if(f>=60&&f<70)
    {
        printf("pass");
    }
    else if(f<60||f>100)
    {
        printf("fail");
    }

    return 0;
}


3.根据月份,旅客订票张数和票价按优惠率计算费用

某航空公司规定:在旅游旺季1月份、7-9月份,如果订票20张及以上,优惠票价的5%,20张以下不优惠;在旅游淡季2-6月份、10-12月份,订票20张及以上,优惠20%,20张以下,优惠10%。编写一个能够根据月份、旅客订票张数和票价按优惠率计算费用的程序。
【输入形式】
输入3行,第1行输入月份(int类型),第2行输入订票张数(int类型),第3行输入单张票价(float类型)。
【输出形式】
输出仅一行,如果月份不在1-12月之间输出month error(两个单词中间有一个空格),否则输出应有的优惠率、优惠额和优惠后的总票价(数值中间用逗号间隔,优惠额和总票价保留小数点后2位)。
【样例输入】

1
22
245

【样例输出】

5%,269.50,5120.50

本题难度较低,但颇为复杂,注意题目要求解析每一句话。


#include   <stdio.h>
int  main()
{
    int  mon,num;//定义月份,和票数
    float pri,yp,tp;//定义优惠率,优惠额,以及优惠后的票价
    scanf("%d",&mon);
    scanf("%d",&num);
    scanf("%f",&pri);
    if (mon==1||(mon>=7&&mon<=9))
    {
        if (num>=20)
        {
            yp=(num*pri)*0.05;
            tp=(num*pri)*0.95;
            printf("5%%,");
            printf("%.2f,%.2f",yp,tp);
        }
        else
        {
            yp=(num*pri)*0;
            tp=(num*pri);
            printf("0%%,");
            printf("%.2f,%.2f",yp,tp);
        }
    }
    else  if ((mon>=2&&mon<=6)||(mon>=10&&mon<=12))
    {
         if (num>=20)
        {
            yp=(num*pri)*0.20;
            tp=(num*pri)*0.80;
            printf("20%%,");
            printf("%.2f,%.2f",yp,tp);
        }
        else
        {
            yp=(num*pri)*0.10;
            tp=(num*pri)*0.90;
            printf("10%%,");
            printf("%.2f,%.2f",yp,tp);
        }
    }
    else
    {
        printf("month error");
    }
    system("pause");
    return  0;
}

四.循环结构(一)

1.求自然数n的各位数字之和

编写程序,求自然数n的各位数字之和,其中n的值由键盘输入。
【输入形式】
输入仅一行,输入n的值。
【输出形式】
输出仅一行,输出相应的和值。
【样例输入】

100

【样例输出】
sum=1

求一个自然数各位数之和首先应以个位求起,对于个位数是多少可以对这个自然数除10取其余数,那么以此类推,若要求十位数对应的数字只要将其也转换到个位即可求得,那么只要对自然数除10即可

代码实现如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n;int sum=0;
    scanf("%d",&n);
    while(n>0)
    {
        sum=sum+n%10;
        n=n/10;//每一次求完最后一位数时将自然数除10使其成为新的自然数
    }
    printf("sum=%d",sum);
    return 0;
}


2.求前n项和

在这里插入图片描述
【输入形式】
输入仅一行,输入n值(n>0)。
【输出形式】
输出仅一行,输出计算出的和值(用float类型)。结果保留小数点后4位
【样例输入】

10

【样例输出】

9.6126

对于这类表达式中含通项公式的问题很好解决,只要根据通项公式写出对应代码。
示例

#include <stdio.h>
int main()
{
    int n,i;float s=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        s=s+(2.0*i-1)*(2.0*i+1)/((2.0*i)*(2.0*i));//用循环来实现将n从1开始每一次通项公式所算出的值求和
    }
    printf("%.4f",s);
    return 0;
}

3.输入10个整数,输出所有负数,并求其和

编一程序,使得从键盘输入10个整数,可以输出其中的所有负数,并输出所有负数的和
【输入形式】
输入10个整数
【输出形式】
输出多行,先输出所有负数,最后输出所有负数和
【样例输入】

11 2 3 -1 9 8 5 4 -2 -3

【样例输出】

-1
-2
-3
sum=-6

#include <stdio.h>
int main()
{
    int numbers[10];//定义一个数组用来存储10个整数
    int sum = 0;
    for (int i = 0; i < 10; i++)
    {
        scanf("%d", &numbers[i]);//使用循环将10个数输入数组numbers中

        if (numbers[i] < 0)
        {
            sum += numbers[i];//判断输入的值,若为负,则对其求和,并输出。下面的循环可以不用,将其中的打印函数,放到此循环亦可
        }
    }
    for (int i = 0; i < 10; i++)
    {
        if (numbers[i] < 0)
        {
            printf("%d\n", numbers[i]);
        }
    }
    printf("sum=%d", sum);
    return 0;
}


4.公式求π值

编一程序,利用公式求π的值,公式为: π/4=1-1/3+1/5-1/7+ …+1/(4n-3)-1/(4n-1) (按double计算保证计算精度)
【输入形式】
输入仅一行,输入n为整数
【输出形式】
输出仅一行,输出π值(保留2位小数)
【样例输入】

3000

【样例输出】

3.14

#include <stdio.h>
int main() 
{
int n;
double pi = 0.0;
int sign = 1;//注意题中所给公式,有正负交替出现,此类问题可以先将运算都以加法处理然后设定一个变量对其赋值1(因为1乘任何数都等于那个数),并在循环中改变变量的正负号,因为循环是一次一次进行,那么一次一次改变正负号就达到了正负交替的效果
scanf("%d", &n);
for(int i = 0; i < n; i++)
	{
	double term = 1.0 / (2 * i + 1);
	pi += sign * term;
	sign = -sign;
	}
pi *= 4.0;
printf("%.2lf\n", pi);
return 0;
}




5.输入两个整数,输出他们的最大公约数

从键盘上输入两个数据,显示它们的最大公约数。
【输入形式】
48 24
【输出形式】
24
【样例输入】

24 36

【样例输出】
12

/*
最大公约数:即两个数据中公共约数的最大者。
求解的方式比较多,暴力穷举、辗转相除法、更相减损法、Stein算法算法
此处主要介绍:辗转相除法
思路:
例子:18和24的最大公约数
第一次:a = 18  b = 24  c = a%b = 18%24 = 18
      循环中:a = 24   b=18
第二次:a = 24   b = 18  c = a%b = 24%18 = 6
      循环中:a = 18   b = 6
第三次:a = 18   b = 6   c=a%b = 18%6 = 0
  循环结束  
此时b中的内容即为两个数中的最大公约数。
*/
int main()
{
	int a = 18;
	int b = 24;
	int c = 0;
	while(c=a%b)
	{
		a = b;
		b = c;
	}
	printf("%d\n", b);
	return 0;
}

6.求一个数除以9的商等于它各位数字的平方和

从键盘输入两个正整数m和n(m和n是三位数),输出m到n之间满足如下条件的数:该数除以9的商等于它各位数字的平方和。例如:224,它除以9的商为24,而22+22+42=24。
【输入形式】
输入仅一行,输入两个正整数m和n(m和n是三位数),两个数用空格分开。
【输出形式】
输出多行,输出相应结果,一个数一行。
【样例输入】

325 700

【样例输出】

453
535
561
635
661

#include <stdlib.h>
#include<stdio.h>
int main()
{
	int x, y, i, s;
	int a, b, c, d;
	scanf("%d%d", &x, &y);
	for (i = x;i <= y; i++)
	{
		s = i / 9;
		a = i / 100;//得到百位数
		b = i / 10 % 10;//得到十位数
		c = i % 10;//得到个位数
		d = a * a + b * b + c * c;
		if (s == d)
			printf("%d\n", i);

	}
	return 0;
}

五.循环结构(二)

1.求所有含6的整数的和

计算1~n(n为大于1且小于1000的整数)以内的所有含6的整数的和。
【输入形式】
输入仅一行,输入n的值(整型)。
【输出形式】
输出仅一行,输出所有含6的整数的和sum。
【样例输入】

120

【样例输出】
sum=1311

#include <stdio.h>
#include <stdlib.h>
int containsSix(int num)//函数定义,函数定义是一种特殊的函数声明。用整形数字接受传过来的值
{
    while (num > 0)
    {
        if (num % 10 == 6)//含6的整数可以通过判断最后一位是否是6,将原值除10,依次判断
        {
            return 1;
        }
        num /= 10;
    }
    return 0;
}
int main()
{
    int n;
    int sum = 0;
    scanf("%d", &n);
    if (n <= 1 || n >= 1000)
    {
        return 1;//这一步一般可以省略,这里意思是题目要求了n的范围,指定一个范围若输入的值在范围内则返回1,程序还会继续向下。
    }
int i;
    for( i = 1; i <= n; i++)
    {
        if (containsSix(i))//这里可以将判断过程封装成一个函数,也可以写在一个主函数中。
        {
            sum += i;
        }
    }
    printf("sum=%d\n", sum);
    return 0;
}

2.任意输入n个数,输出最大和最小值及对应的序号

编一程序,对于任意输入的n个整数,可输出其中的最大数和最小数,并输出它们在序列中的位置序号。
【输入形式】
输入第一行:输入n值。 输入第二行:输入n个整数。
【输出形式】
输出仅二行 第一行:输出最大值和最小值 第二行:输出最大值序列号和最小值序列号。
【样例输入】

4
78 98 88 97

【样例输出】

max=98,min=78
maxi=2,mini=1

#include <stdio.h>

int main()
{
	int n = 0;//总共多少个数字
	scanf("%d", &n);
	char ch[50];//定义一个数组
	for (int p = 0; p < n; p++)//数组下标从'0'开始,所以循环变量从0开始计算,在n-1结束
		scanf("%d", &ch[p]);//利用for循环不断输入数组中
	int max, min, maxi, mini;//分别定义最大值,最小值,最大值下标,最小值下标
	max = ch[0];//假设最大值是第一个数
	min = ch[0];//同样假设最小值
	maxi = 1;//最大值序号,注意,序号和下标不是一个东西!!!
	mini = 1;//最小值序号
	for (int i = 0; i < n; i++)//这里也要满足i < n,从0开始,到n的前一项结束
	{
		if (ch[i] > max)
		{
			max = ch[i];
			maxi = 1 + i;
		}
		if (ch[i] < min)
		{
			min = ch[i];
			mini = 1 + i;
		}
	}
	printf("max=%d,min=%d\nmaxi=%d,mini=%d", max, min, maxi, mini);
	return 0;
}


3.大小写字母转换

将输入字符序列ABCdef变换,大写转换为小写,小写转换为大写输出。
【输入形式】
输入仅一行,输入字符序列
【输出形式】
输出仅一行,字符转换。大写变小写,小写变大写,其它字符不变
【样例输入】

ABC&d#ef

【样例输出】

abc&D#EF

#include<stdio.h>
int main()
{
    int i;
    char a[100];
    gets(a);//这里也可以用scanf来输入
    for(i=0; a[i]!='\0'; i++)//字符串结尾的标志是\0,所以循环条件是!=\0
          if(a[i]>='A' && a[i]<='Z')//这里本质是对于字符ASCII码值的判断
              a[i] += 32;
          else if(a[i]>='a' && a[i]<='z')
                   a[i] -= 32;
    puts(a);//同理可以printf输出
    return 0;
}


4.打印“完数”

编写程序,完成打印1000以内所有的完数。 完数:该数的各因子之和正好等于该数本身 例如:6=1+2+3 28=1+2+4+7+14 所以: 6、28都是完数。 对于一个整数m,如何判断它是否完数? 从数学知识可以知道,一个数m的(除该数本身外)所有因子都在1~m/2之间。 算法中要取得因子之和,只要在1~m/2之间找到所有整除m的数,将其累加起来即可。 如果累加和与m本身相等,则说明m是一个完数,将m输出。
【输入形式】
输入仅一行,输入2 个正整数m 和n(m≥1,n≤1000)
【输出形式】
输出m ~n 之间的所有完数 输出多行:每行1个完数 。
【样例输入】

1 100

【样例输出】

6
28

#include <stdio.h>
int main()
{
	int min,max,i,j,sum;
		scanf("%d%d",&min,&max);//用min max 限制范围
	for(i=min;i<=max;i++)
	{
		sum=0;
		for(j=1;j<=i/2;j++)//从数学知识可以知道,一个数m的(除该数本身外)所有因子都在1~m/2之间
		{
		if(i%j==0)
		sum+=j;
		}
	if(i==sum)
	printf("%d\n",i);
	}
return 0;
}

5.

在这里插入图片描述

#include <stdio.h>
int main() 
{
    int a, n;
    scanf("%d %d", &a, &n);
    int Sn = 0;
    int term = 0;
    int i;
    for ( i = 1; i <= n; i++) 
    {
        term = term * 10 + a; // 计算每一项
        Sn += term; // 累加到Sn
    }
    printf("Sn=%d\n", Sn);
    return 0;
}


6.求一个分数序列的值

有一分数序列     2/1,3/2,5/3,8/5,13/8,21/13…    即:后一项的分母为前一项的分子,后项的分子为前一项的分子与分母之和,编程求该数列的前n项之和。 n从键盘输入。
【输入形式】
输入仅一行,输入n值。
【输出形式】
输出前n项分数序列的和。
【样例输入】

3

【样例输出】

sum=5.166667

#include <stdio.h>
int main() 
{
    int n;
    scanf("%d", &n);
    double sum = 0;
    double a = 2;
    double b = 1;
    double temp;
    int i;
    for ( i = 1; i <= n; i++) 
    {
        sum += a / b;
        temp = a;
        a = a + b;//后项的分子为前一项的分子与分母之和
        b = temp;//后一项的分母为前一项的分子,
    }
    printf("sum=%.6f\n", n, sum);
    return 0;
}

7.输出同构数

编一程序,输出2~999之间的所有同构数。 所谓同构数是指这样的数,它出现在它的平方的右侧,如5的平方=25,25的右端是5,所以5是一个同构数。
【输入形式】
输入仅一行,输入2个整数,比如2和 9
【输出形式】
输出多行,分行输出2到9之间的所有的同构数。
【样例输入】

2 9

【样例输出】

5
6

#include <stdio.h>
int S(int num) 
{
    int square = num * num;//判断这个数是不是同构数,先得出其平方
    while (num > 0) 
    {
        if (num % 10 != square % 10)//如果不是则程序终止
            return 0;//if只控制这一条语句
        num /= 10;
        square /= 10;
    }
    return 1;
}
int main() 
{
    int start, end;
    scanf("%d %d", &start, &end);
    if (start < 2 || end > 999 || start > end) //确定范围
    {
        return 1;
    }
    int i;
    for ( i = start; i <= end; i++) 
    {
        if (S(i))//判断如果是同构数则打印
            printf("%d\n", i);
    }
    return 0;
}
  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值