在C语言中用数组输出N*N矩阵,形式如下:如果N为3,显示第一行为123第2行为894,第3行为765,即数据顺时针环绕

Python014

在C语言中用数组输出N*N矩阵,形式如下:如果N为3,显示第一行为123第2行为894,第3行为765,即数据顺时针环绕,第1张

/*本人使用Dev-Cpp 4.9.9.2,老兄,下次问把分加高一点!*/

#include<iostream>

#define N 9

using namespace std

unsigned int n,Sqare[N][N]

void Work()

{

int i=0,j=0,Sum=1,Temp=n*n,num=0

while(Sum<=Temp)

{

while(j<n-num)

{

Sqare[i][j]=Sum++

j++

}

j--

while(i<n-num)

{

Sqare[i][j]=Sum++

i++

}

i--

while(j>0+num)

{

Sqare[i][j]=Sum++

j--

}

j++

while(i>0+num)

{

Sqare[i][j]=Sum++

i--

}

i++,num++

}

}

void Print()

{

unsigned int i,j

for(i=0i<ni++)

{

for(j=0j<nj++)

cout<<Sqare[i][j]<<' '

cout<<endl

}

}

int main()

{

cin>>n

Work()

Print()

cin.get()

cin.get()

return 0

}

C 中调用积运算符之后做溢出检测已经太晚,但调用和运算符之后做检测则一点也不迟,

所以你可以通过对和运算结果的检测实现能检测溢出的积运算,因为 a * b 既是 a 个 b 的和:

-5000000 * 1374389539 等于 -(5000000 * 1374389539)。括号里是 5000000 个 1374389539 的和。

我把能检测溢出的和运算包在 add( ) 里,然后在 multiply( ) 里重复调用 add( )。

add( ) 怎么检测溢出?

和运算的结果若溢出将导致数值的环绕。上溢导致往下环绕,下溢导致往上环绕。

边界状况:

(1)最轻微的上溢是 INT_MAX + 1 :结果是 INT_MIN。

(2)最严重的上溢是 INT_MAX + INT_MAX :结果是 -2。

(3)最轻微的下溢是 INT_MIN - 1 :结果是 INT_MAX。

(4)最严重的下溢是 INT_MIN - INT_MIN :结果是 0。

结论:

(1)所有上溢结果都小于任何一个操作数。

(2)所有下溢结果都大于任何一个操作数。

所以 add( ) 可以用结果和任意选定的一个参数判断溢出,并以落选的参数判断溢出的方向。

add( ) 无法以返回值举报溢出,所以采用 strtol( ) 的举报方法。

不同于 strtol( ) 的是,若没有溢出,add( ) 会把 0 赋值给 errno。

multiply( ) 在这方面跟 add( ) 一样。

当然,应付溢出的最佳方法还是防范:充分了解数据的范围,选择恰当的变量类型。

#include<stdio.h>

#include<string.h>

char str[100]

int IsNumber(char x)

{//判断是否是数字,不是数字,返回0

if(x>='0' &&x<='9')

return 1

else

return 0

}

void main()

{

int i,j

scanf("%s",str)

for(i=0i<strlen(str)i++)

{

if(IsNumber(str[i])==0)

{//如果不是数字,则删除

for(j=ij<=strlen(str)j++)

str[j]=str[j+1]

i--

}

}

strrev(str)//将剩下的逆转

printf("%s\n",str)

}