C语言/C++常见习题问答集锦(六)

C语言/C++常见习题问答集锦(六)

程序之美

在这里插入图片描述

1、给定a, b, c三个整数表示三条边,问这三边能否构成一个直角三角形,如果能,输出直角三角形面积,如果不能,输出-1。

Input
输入包含3个整数a, b, c,表示三条边。

1 ≤ a,b,c ≤ 100,保证三个数全为整数。

Output
如果三边能构成直角三角形,则输出三角形面积(保证面积为整数),否则输出-1。

Sample Input 1

5 12 13
Sample Output 1

30
Sample Input 2

1 2 3
Sample Output 2

-1

#include<stdio.h>

int main()
{
float a, b, c;
int sq = 0;

scanf("%f%f%f",&a, &b, &c);

if (a+b>c&&a+c>b&&b+c>a)
{
if (a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a){
		printf("是直角三角形!\n");
		if(a*a+b*b==c*c){
		sq = a*b/2;
	}
	else if(a*a+c*c==b*b){
		sq = a*c/2;
	}
	else{
		sq = b*c/2;
	}

printf("直角三角形面积为:%d\n", sq);
}
else
printf("不是直角三角形! -1\n");
}
else
	printf("不能构成三角形! -1\n");
	
return 0;
} 

在这里插入图片描述

2、求自然数1至n之间各奇数平方和sum
用while循环编程,求自然数1至n之间各奇数平方和Sum.
输入格式:无
输出结果格式为:sum=

列如:
输入 5
输出 sum=35

#include <iostream>

int main(void)
{

int i =1, n;    //循环的初始值

cout<<"请输入整数N:"<<endl;

scanf("%d", &n);

int sum = 0;//放和的变量        

while(i<=n){

if(i%2!=0){

	sum= sum+(i*i); 
}

i++;
}

cout<<"平方和是:"<<sum<<endl;

getchar();

return 0;

}

3、继承与派生

#include <iostream>

using namespace std;

class Base
{
private:
int m;

public:
Base(int a):m(a){}
Base(const Base &copy){m=copy.m;}
void Show() const
{cout<<"m:"<<m<<endl;}
};

class Derived:private Base
{
protected:
int n;

public:
Derived(int a,int b):Base(a),n(b){}
void Show() const
{
Base::Show();
cout<<"n:"<<n<<endl;
}
};

int main(void)
{
Derived obj(10,18);
obj.Show();
getchar();

return 0;
}

在这里插入图片描述

4、输入九位数作为数组 ,求平均数并输出大于平均数的数组元素

#include <stdio.h>
#include<stdlib.h>

int main()
{

int i,sum;
double ave;
int a[9];

sum=0;ave=0;

printf(“Enter 9 numbers:\n”);

for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}

ave=sum/9.0;

printf(“ave=%f\n”,ave);

for(i=0;i<9;i++)
{
if(a[i]>ave)
{
printf(“大于平均数的值=%d\n”,a[i]);
}
}

system(“pause”);

return 0;
}

在这里插入图片描述

5、c语言大数加法
描述
计算a+b,不用考虑负数.
格式
输入格式
分两行输入。0<a,b<10500 ,注意数据范围!!!
输出格式
输出只有一行,代表a+b的值
样例
样例输入 Copy
1001
9099样例输出 Copy
10100

#include <bits/stdc++.h>

using namespace std;

int numa[260], numb[260], ans[260], l1, l2, l, cnt2;
char a[260], b[260];

int main(){

    scanf("%s", &a);
    scanf("%s", &b);

    l1=strlen(a);
    l2=strlen(b);

    for(int i=l1-1; i>=0; --i){
        numa[l1-i-1]=a[i]-'0';
    }

    for(int i=l2-1; i>=0; --i){
        numb[cnt2]=b[i]-'0';
        cnt2++;
    }

    l=max(l1, l2);

    for(int i=0; i<l; ++i){
        ans[i]+=numa[i]+numb[i];
        ans[i+1]=ans[i]/10;
        ans[i]%=10;
    }

    if(ans[l]){
        l++;
    }

    for(int i=l-1; i>=0; --i){
        printf("%d", ans[i]);
    }

    return 0;
}

还有另外一种解法:

#include<stdio.h>
#include<string.h>

char str1[1002]="",str2[1002]="";   //将两字符串置空(虽然意义不大) 

void reciprocal(char str[])     //将字符串颠倒。例:"12345"变为"54321" 
{
    int len=strlen(str);
    for(int i=0; i<(len+1)/2; i++){   
        char p=str[i];
        str[i]=str[len-i-1];
        str[len-i-1]=p;
    }
}

void add(char str1[], char str2[])
{
    int len1=strlen(str1);
    int len2=strlen(str2);
    int temp,one=0;
    
    if(strcmp(str1,str2)>=0){   //如果str1比str2大或相等 
        reciprocal(str1);
        reciprocal(str2);
        for(int i=0; i<len2; i++){  //因为str1比str2大,只进行len2位数的操作 
            temp=str1[i]-'0'+str2[i]-'0'+one;   //temp表示两数字在相同位数上的和再加上前一位的进位(one) 
            one=temp/10;
            temp%=10;
            str1[i]=char(temp+'0');     //此处较懒,直接用str1储存最终结果 
        } 

        while(one!=0) { //注意此处还要考虑str1之后位数的进位情况,如:99999 + 11 
            str1[len2]=char(str1[len2++]-'0'+one+'0');
            one=(str1[len2]-'0'+one)/10;
        }   
    }
    else {
        reciprocal(str1);
        reciprocal(str2);

        for(int i=0; i<len1; i++){  //同上 
            temp=str2[i]-'0'+str1[i]-'0'+one;
            one=temp/10;
            temp%=10;
            str1[i]=char(temp+'0');
        }

        for(int i=len1; i<len2; i++){   //与上面while语句功能相似 
            temp=str2[i]-'0'+one;
            one=temp/10;
            temp%=10;
            str1[i]=char(temp+'0');
        }
        
        if(one!=0) str1[len2]='1';      
    }

    reciprocal(str1);   //将数字换位正常顺序 
}

int main()
{
    scanf("%s",str1);
    scanf("%s",str2);
    add(str1,str2);
    printf("%s\n",str1);        

    return 0;
 } 
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值