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 <stdio.h>
#include <math.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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<k
设置标志量,若在字符串中有对称元素不相等的,则将标志量改为0。根据标志量判断,若flag为0,(则不用进行进一步的判断),退出循环。
根据标志量进行输出:若标志量为0,则说明不是回文字。若标志量为1,则说明是回文字。
#include<stdio.h>
#include<string.h>
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。
镜像字符如下:
分析:镜像字符是固定的一些常量,我们需要使用常量数组来存放一些存在的镜像字符。
与判断回文字一样,镜像串同样首尾判断,利用双指针进行同时移动,直到一个小于另一个即可。
可以定义两个常量字符数组a和b,b中存放与a对应的镜像字符。
设置标志量,若在字符串中有对称元素不相等的,则将标志量改为0。并在外层循环中,根据标志量判断,若flag为0,(则不用进行进一步的判断),退出循环。
根据标志量进行输出:若标志量为0,则说明不是镜像串。若标志量为1,则说明是镜像串。
#include <stdio.h>
#include<string.h>
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;
}