【C语言】经典题目(二)

C站的小伙伴们,大家好呀^^!
这一篇文章是C语言之经典题目,快来跟我一起进入C语言的世界吧!
C语言其他刷题篇在这里哦:
【C】语言经典题目(一)
【C语言】字符串—刷题篇

【C语言】经典题目二

  • 求三角形面积
  • 判断某一年是否为闰年
  • 根据三角形类型输出
  • 求S=a+aa+aaa+ …… 的值
  • 回文字
  • 镜像串

求三角形面积

给出三角形的边长,求三角形的面积。
利用海伦公式求三角形面积
area=根号下 s*(s-a)*(s-b)(s-c)
其中s=(a+b+c)/2

#include 
#include 
int main (void)
{
	float a,b,c,s,area;
	printf("Please input a,b,c:\n");
	scanf("%f%f%f",&a,&b,&c);
	if (a+b<=c || a+c<=b || b+c<=a)
		printf("不能构成三角形\n");
	else
	{
		s=(a+b+c)/2;
		area=sqrt(s*(s-a)*(s-b)*(s-c));
		printf("三角形的面积为%.2f\n",area);
	}
	return 0;
}

判断某一年是否为闰年

判断是否为闰年:

  • 能被400整除
  • 能被4整除但不能被100整除
  • 设置标志量leap进行判断,若leap为1,则为闰年,若为0,则不是闰年。
#include 
int main (void)
{
	int year,leap;//leap标志变量
	printf("请输入年份:\n");
	scanf("%d",&year);
	if (year%400==0) //能被400整除是闰年
		leap=1;
	else if (year%4==0 && year%100!=0)//能被4整除但不能被100整除是闰年
		leap=1;
	else 
		leap=0;
	if (leap)
		printf("该年份为闰年\n");
	else
		printf("该年份不是闰年\n");
	return 0;
}

根据三角形类型输出

编写程序,要求程序运行时,从键盘输入三角形的三边长(整型)输出三角形的类型代码。
若三角形为等边三角形,输出1;若三角形为等腰三角形,输出2其他三角形,输出0;若输出的三条边不能构成三角形,输出error!

#include 
int main (void)
{
	int a,b,c;
	printf("请输入三角形的三边长:\n");
	scanf("%d%d%d",&a,&b,&c);
	if (a==b && a==c )  //等边三角形
		printf("1\n");
	else if ((a==b && a!=c) || (a==c && a!=b) || (b==c && b!=a)) //等腰三角形
	 //逻辑与运算符11级
		printf("2\n");
	else if (a+b<=c || a+c<=b || b+c<=a) //不能构成三角形
	 //逻辑或运算符12级
		printf("error!\n");
	else 
		printf("0\n");
	return 0;
}

求S=a+aa+aaa+ …… 的值

求S=a+aa+aaa+ …… 的值,其中a是一个数字,n表示a的位数,例如2+22+222+2222+22222(此时n为5)n由键盘输入。
定义变量:
sum表示总和,记得初始化为0
term表示当前项的值
找规律:
后一项是前一项的10倍+a

#include 
int main (void)
{
	int a,n,term,sum,i;
	printf("请输入一个数字a:\n");
	scanf ("%d",&a);
	printf("请输入a的位数:\n");
	scanf("%d",&n);
	term=a;  //term代表当前项的值
	sum=0;  //sum表示总和
	for (i=1;i<=n;i++)
	{
		sum+=term;  //把当前项的值累加到sum中
		term=term*10+a;
	}
	printf("S的值为%d\n",sum);
	return 0;
}

回文字

所谓回文串,就是反转以后和原串相同,如abba和madam。

样例输入
ISAPALINILAPASI
样例输出
ISAPALINILAPASI – is a regular palindrome.

分析:对输入的字符串,利用双指针,,判断第一个是否等于最后一个,第二个是否等于倒数第二个……直到i

设置标志量,若在字符串中有对称元素不相等的,则将标志量改为0。根据标志量判断,若flag为0,(则不用进行进一步的判断),退出循环。

根据标志量进行输出:若标志量为0,则说明不是回文字。若标志量为1,则说明是回文字。

【C语言】经典题目(二)_第1张图片

#include
#include
int main (void)
{
    int i,k,n;
    int flag=1;//标志量
    char s[128]={0};
    gets(s);
    n=strlen(s);//字符串长度
    for (i=0,k=n-1;i<k;i++,k--)
    {
        if (s[i]!=s[k])
        {
            flag=0;
            break;
        }       
    }
    if (flag==1)
    printf("%s --is a regular palindrome.\n",s);
    else
    printf("%s --is not a regular palindrome.\n",s);
}

镜像串

所谓镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。
镜像字符如下:
【C语言】经典题目(二)_第2张图片
分析:镜像字符是固定的一些常量,我们需要使用常量数组来存放一些存在的镜像字符。

与判断回文字一样,镜像串同样首尾判断,利用双指针进行同时移动,直到一个小于另一个即可。
可以定义两个常量字符数组a和b,b中存放与a对应的镜像字符。

设置标志量,若在字符串中有对称元素不相等的,则将标志量改为0。并在外层循环中,根据标志量判断,若flag为0,(则不用进行进一步的判断),退出循环。

根据标志量进行输出:若标志量为0,则说明不是镜像串。若标志量为1,则说明是镜像串。

【C语言】经典题目(二)_第3张图片

#include 
#include
int main(void)
{
    const char a[80]="AEHIJLMOSTUVWXYZ12358";
    const char b[80]="A3HILJMO2TUVWXY51SEZ8";
    char s[80];
    int i,k,n,j;
    int flag=1;//设标志量
    gets(s);
    n=strlen(s);
    for (i=0,k=n-1;i<k;i++,k--)//对字符数组s进行遍历
    {
        for(j=0;a[j]!='\0';j++)
        {
            if (s[i]==a[j])//在数组a中查找s[i]
            {
                if(s[k]!=b[j])//判断与s[i]对应的s[k]是否是是[i]的镜像
                {
                    flag=0;
                }
            }
        }
        if (flag==0) break;
    }
    //根据标志量判断输出
    if(flag==0)
    printf("%s--is a not mirrored string.\n",s);
    if (flag==1)
    printf("%s--is a mirrored string.\n",s);
    return 0;
}

你可能感兴趣的:(C语言刷题,c语言,算法,开发语言)