为什么代码最终输出的数据不对,应该怎么改好


#include 
#include 
void main()
{
    int a,b;
    float c;
    printf("请输入两个100以内的整数: ");
    scanf_s("%d%d\n", &a, &b);
    printf("a*a+b*b=");
    c =( a^2)+(b^2);
    if (a * a + b * b> 100)
    {
        printf("%d\n", c);
            printf("此时百位上的数字:");
            printf("%d\n", (a * a + b * b) / 100 % 10);
    }
    else
    {
        printf("%d\n", (a * a + b * b));
        printf("此时个位上的数字:");
        printf("%d\n", ((a ^ 2) + (b ^ 2))% 10);
    }
}
c =( a^2)+(b^2);
不能这么写,^是xor不是乘方
可以写
c = pow(a, 2) + pow(b, 2);
也可以干脆写
c = a * a + b * b;

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7531151
  • 你也可以参考下这篇文章:逆序输出 之(单词整体顺序不变,单词的每个字母逆序输出)
  • 除此之外, 这篇博客: 根据给出的关系矩阵,判断该关系所具有的特性中的 传递性的判断 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    传递性在关系矩阵中的特点并不明显,故用另一个思路:关系R是传递的,当且仅当R∘R⊆R ,通俗来讲就是若R对应的关系矩阵中某一位置的元素为0,则在R∘R对应的关系矩阵的位置上的元素必须为0。
    题目描述
    给定有限集合上二元关系的关系矩阵,判断该关系是否具有传递性?
    源代码

    #include<stdio.h>
    #define N 100
    int mult(int a[N][N],int b[N][N],int n,int c[N][N])
    {
    	int i,j,k;
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			c[i][j]=0;
    		}
    	}
    	for(i=0;i<n;i++)  
    	{   
    		for(j=0;j<n;j++)  
    		{    
    			for(k=0;k<n;k++)    
    			{     
    				c[i][j]+=a[i][k]*b[k][j];    
    			}   
    		}  
    	}
    }
    int main()
    {
    	int n,i,j,a[N][N],b[N][N]={0},c[100][100]={0};
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			scanf("%d",&a[i][j]);
    			b[i][j]=a[i][j];
    		}
    	}
    	mult(a,b,n,c);
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			if(a[i][j]==0)
    			{
    				if(c[i][j]!=0)
    				{
    					printf("该关系不具有传递性!\n");
    					return 0;
    				}
    			}
    		}
    	}
    	printf("该关系具有传递性!\n");
    	return 0;
    }
    
  • 您还可以看一下 周声华老师的线性代数 精讲课程中的 矩阵及矩阵的运算小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^