永发信息网

4、设计一个函数,当给定一个整数后,能得到该数的补码(应考虑该整数是正数或负数)。

答案:3  悬赏:0  手机版
解决时间 2021-11-27 15:14
4、设计一个函数,当给定一个整数后,能得到该数的补码(应考虑该整数是正数或负数)。
最佳答案
#include"stdio.h"
void fun(int n)
{
printf("%x\n",n); //在计算中,正负数都以补码形式存放,直接以16进制输出即可。
}
void main()
{
int n;
scanf("%d",&n);
fun(n);
}追问能说的更明白些么?追答1 在计算中,正负数都以补码形式存放,直接以16进制输出即可。
2 %x表示以16进制格式输出。
3 程序运行情况如下:
-1
ffffffff ------------------->这个就是-1的补码。
请按任意键继续. . .
全部回答
提供算法思路吧,就不给你写函数了:

正数的补码=原码
负数的补码=其绝对值的原码取反+1
所以判断正负,并标记正负,然后取其绝对值,计算原码(逐步%2),存到Bool型数组里
如果符号标记为正,即为补码;
如果符号标记为负,将Bool数组逐位取反,然后再加1.
实验一 C语言程序初步
[实验目的和要求]
1、 熟悉C语言运行环境。
2、 掌握C语言程序的书写格式和C语言程序的结构。
3、 掌握C语言上机步骤,了解运行一个C程序的方法。
4、 本实验可在学习完教材第一章后进行。
[实验内容和步骤]
1、输入一个简单的C语言程序:输入矩形的两条边,求矩形的面积。

[分析与讨论]
1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。
2、总结C程序的结构和书写规则。

实验二 数据类型、运算符和表达式
[实验目的]
1.熟练表达式的表示方法
2.了解表达式的运行结果
3.了解C语言中数据类型的意义
[实验内容和步骤]
1. 用printf函数来输入表达式运行结果
2. 程序试图计算由键盘输入的任意两个整数的平均值:
[问题讨论]
1.“=”和“==”有什么区别?
2.“&”和“&&”、“|”和“||”有什么区别?
3. 如何正确地选用数据类型?

实验三 选择结构
[实验目的]
1、了解条件与程序流程的关系
2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。
[实验内容和步骤]
1、题目
有如下程序段:
{……
if (a>1&&b= =0) x=x/a;
if(a==2||x>1) x=x+1;
}
为了更容易明白程序的逻辑结构,要求用流程图来加以描述。
要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。

[分析讨论]
(1) 用哪一组数据就可使程序中的每个处理语句都执行一次?为了找出程序中各条处理语句中的错误,应该使用什么样的数据对程序进行测试?请上机验证自己的结论。
(2) 用哪两组数据就可以使程序段中的每个分支都运行一次?这种情形与上面的讨论有何不同?如果为了找出程序中积压分支中的错误,应该使用什么样的数据对程序进行测试?请上机验证自己的结论。
(3)用哪两组数据就可以把判定框中的每个条件运算都进行一次?如果为了测试出判定条件中的错误,应使用哪些数据对程序进行测试?请上机验证自己的结论。
(4)用哪四组数据才可以把各种条件的组合都检测一遍? 如果为了测试各种条件的组合的情形,应该使用什么样的测试数据?请上机验证自己的结论。
(5)用哪四组数据才可以把起始到终止的各条路径都覆盖一次?如果为了测试出程序在不同路径下的错误,应该使用什么样的测试数据?请上机验证自己的结论。

实验四 循环结构(1)
[目的和要求]
1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。
2、了解条件型循环结构的基本测试方法。
[实验内容与步骤]
1、下面是一个计算e的近似值(使误差小于给定的δ)的程序。
main()
{double e=1.0,x=1.0,y,detax;
int i=1;
printf(“\n please input enter a error:”);
scanf(“%lf”,&detax);
y=1/x;
while(y>=detax)
{
x=x*I;
y=1/x;
e=e+y;
++i;
}
printf(“%12.10lf”,e);
}
[分析讨论]
(1)、阅读上面的程序,写出程序所依据的计算公式。
(2)、当输入的detax各是什么值时,能分别使程序按下面的要求运行:
.不进入循环;
.只循环一次;
.只循环两次;
.进入死循环(程序将永远循环下去)。
为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
(3)、原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的detax来测试出while语句的循环条件写错了。
(4)、把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。
假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。
(5)、若把原程序中的++i换成i++,观察程序的运行发生了什么变化?
假如不知道这条语句到底是怎么写的,输入什么样的detax就能测试出这条语句写错了.
(6)、把原程序中的while结构改写成do—while结构,再分别按上述的(2)、(3)两步进行实验。

实验五 循环结构(2)
[ 目的和要求]
1、 掌握如何正确地控制计数型循环结构的次数
2、 了解对计数型循环结构进行测试的基本方法
3、 了解在嵌套循环结构中,提高程序效率的方法
4、 本实验应在学习了教材第3.3.4进行
[实验内容与步骤]
实验题目:下面是一个循环结构 的C程序。
main()
{
int i ,j;
long sum=0;
for(i=1,i<=20,i++)
for(j=1;j<=3;j++)
sum=sum+(i+1)*(i+1)*(j+2)
printf(“sum is :%d\n”,sum);
}
[ 分析讨论]
(1) 将上述程序中的和分别做什么样修改,能使程序按如下要求运行:
.不循环;
.外循环1次,不进入内循环;
.外循环,内循环各1次;
.外循环1次,内循环2次;
.外循环 2次, 内循环1次;
.外循环19次,内循环3次;
.外循环20次,内循环2次;
.外循环21次,内循环3次。
(2) 试修改程序,以便能知道控制表达式
i=1;j<=20;i++

j=1;j<3;j+=
各执行了多少次?
(3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观
察对换后的外循环与内循环控制表达式执行的总次数有无变化?
(4)将(3)中程序写为
main()
{
int i,j,k;
long sum=0;
for (j=1.j<=3.j++)
{
k=j+2;
for(i=1;i<=20;i++)
sum=sum+(i+1)*(i+1)**k;
}
printf(“sum is :%d\n”,sum);
}
观察程序的执行结果有无变化?
(5)将(3)中程序改写为
main()
{
int I,j,m,n;
long sum=0;
for(j=1;j<=3;j++)
{
m=j+2;
for(I=1;j<=20;I++)
{
n=I+1;
sum=sum+m*m*k;
}
}
printf(“sum is :%d\n”,sum);
}
观察程序的执行结果有无变化?
(1)

实验六 函数(1)
[实验目的]
1.理解和掌握多模块的程序设计与调试的方法。
2.掌握函数的定义和调用的方法。
3.学会使用递归方法进行程序设计。
[实验内容和步骤]
1. 编写一个函数,判断一个数是不是素数。在主函数中输入一个整数,输出是否是素数的信息。
实验步骤与要求:
(1) 编写一个函数prime(n),返回给定整数n是否为素数。
(2) 编写一个主函数,输入一个整数,调用(1)中的函数,判断此整数是否为素数,并输出结果。
(3) 对于属于多函数程序,可以采用每个函数分别进行编辑、编译的方法,然后再连接、运行。如果编译有错时,可分别修改,这样便于调试。实验2和实验3也可以使用这样的调试方法。
2. 用梯形法求函数的定积分。
实验步骤与要求:
(1) 编制一个函数sab(a,b,n),其功能是求函数f(x)在[a,b]上的定积分,其中n为区间[a,b]的等分数。要求该函数在一个独立的文件中。
(2) 编制一个主函数以及计算被积函数值的函数f(x),在主函数中调用(1)中的函数计算并输出下列积分值。要求主函数与函数f(x)在同一个文件中。
(3) 编制另一个主函数以及计算被积函数值的函数f(x),在主函数中调用(1)中的函数计算并输出下列积分值。要求主函数与函数f(x)在同一个文件中。
说明:
用梯形法求定积分,梯形公式为
s=h[f(a)+f(b)]/2+hf(a+kh)其中,h=(b-a)/n
3. 用递归方法编写程序,求n阶勒让德多项式的值,递归公式为
1 (n=0)
pn(x)=x (n=1)
((2n-1)xpn-1(x)-(n-1)pn-2(x))/n (n>1)

[ 分析讨论]
1. 小结函数的定义及调用方法。
2. 小结函数中形参和实参的结合规则。

实验七 函数(2)
[目的与要求]
1、 掌握C语言函数定义及调用的规则。
2、 理解参数传递的过程。
[ 实验内容与步骤]
1、 上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。
main()
{
int,y;
printf(“%d\n”,sum(x+y));
int sum(a,b)
{
int a,b;
return(a+b);
}
}
2、 编写并调试一个求(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。
[分析讨论]
1、 针对以上实验内容写出相应的参数传递过程并分析结果。
2、 讨论参数的传递的几种形式。

实验八 数组(1)
[实验目的]
掌握有关数组和字符串的程序设计方法。
[实验内容和步骤]
1 已知一组数据如下:
6,3,42,23,35,71,98,67,56,38
编写程序,把它们按从小到大的次序排列起来。
程序如下:

# include
# define N 10
main()
{
int a[N]={6, 3, 42, 23, 35, 71, 98, 67, 56, 38};
int i, j, t;
printf(“The array before sorted:”);
for(i=0; iprintf(“%4d”, a[i]);
for(i=0; i<9; i++)
{
for(j=i+1; j<10; j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0; iprintf(“%4d”, a[i]);
return o;
}
[ 分析讨论]
1. 定义数组时下标的用法和注意事项.
2.什么情况下出现下标越界.

 实验九 数组(2)
[目的和要求]
1、掌握数组定义的规则。
2、掌握C语言数组的基本用法。
[实验内容与步骤]
1、编写程序,测试下列数组的定义方式是否正确
(1) main()
{
int n;
scanf(“%d”,&n);
int a[n];
……
}
(2) main()
{
const int n=10;
int a[n];

}
(3) #include
#define M 10
main()
{
int a[M];

}
(4) main()
{
int a[2+2*4];

}
(5) #include
#define M 2
#define N 8
main()
{ int a[M+N];

}
通过这一实验,可以说明什么问题?
2、运行下面的C程序,根据运行结果,可以说明什么?
main( )
{ int num[5]={1,2,3,4,5};
inti i;
for(i=0;i<=5;i++)
printf(“%d”,num[i]);
}
3、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。现在要你设计一个程序,返回一个3 * 5 的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。
4、为一个起泡排序程序设计测试用例,并测试之。

[分析讨论]
通过实验,分析定义与引用数组的区别。

实验十 指 针 (1)
[目的和要求]
1. 熟悉指针的正确用法。
[实验内容和步骤]
1、指出下面程序错误的原因。
main( )
{
int x=10,y=5,*px,*py;
px=py;
px=&x;
py=&y;
printf(“*px=%d,*py=%d,*px,*py);
}

2.下面的程序能获得上述运行结果吗?
main()
{
char *S=”COMPUTER”;
char c;
printf(“which style you want to \n”);
printf(“capital (c) or uncapital(u);”);
c=getchar();
if(c=’c’)
put(s);
else {
s=”computer”;
puts(s);
}
}
分析出错原因。
3.设计一个C程序,用以测试下列各表达式的运算。
(1) y=*px++
(2) y=*++py
(3) y=(*py)++
(4) y=--*ppx++
[分析讨论]
数组与指针的联系。

实验十一 指针(二)
[目的和要求]
1、了解指针参数的特殊性。
2、掌握函数、指针、数组的用法。
[实验内容与步骤]
1、想使指针变量pt1指向a 和b 中的大者,pt2指向小者,以下程序能否实现此目的?
swap(int *p1,int *p2)
{
int *p;
p=p1;p1=p2;p2=p;
}
main()
{
int a,b;
scanf(“%d,%d”,&a,&b);
pt1=&a;pt2=&b;
if(aprintf(“%d,%d\n”,*pt1,*pt2);
}
上机调试此程序。如果不能实现题目要求,指出原因,并修改之。
2、 下面的程序。注意其中的复杂声明语句;
int (*function[4])();
和各标记符的含义,并记录执行结果。
main()
{
int fun1();
int fun2();
int fun3();
int fun4();
int (*function[4])();
int a=10,b=5,i;
function[0]=fun1;
function[1]=fun2;
function[2]=fun3;
function[3]=fun4;
for(I=0;I<4;i++)
printf(“fun no.%d->%d\n”,i+1,execute(a,b,function[i]));
}
execute(int x,int y,int *fun())
{
return(*fun)(x,y);}
fun1(int x, int y)
{
return(x+y);}
fun2(int x,int y)
{
return(x-y);}
fun3(int x,int y)
{
return(x*y);}
fun4(int x,int y)
{
return(x/y);}

[分析讨论]
指针、数组、函数的联系。

实验十二 有关文件的程序设计
[实验目的]
1. 掌握文件建立的方法。
2. 掌握包含文件操作的程序设计和调试方法。
[实验内容和步骤 ]
1 建立一个磁盘文件,其内容是0~90°之间每隔5°的正弦值。
程序如下:
//EX8-1
#include
#include
#include
#define PI 3.14159
main()
{
float S[19];
int i, a;
ofstream out(“fsin.bny”);
if(!out)
{
cout<<”Cannot open file.”<return 1;
}
for(i=0,a=-5; i<19; i++)
{
a+=5;
S[i]=sin(a*PI/180.0);
}
out.write((unsigned char*)&s, sizeof s);
out.close( );
return 0;
}
[ 分析讨论]
文件操作中各函数的功能,具体使用方法.

实验十三 结构体和共用体
[目的和要求]

1、掌握结构体类型方法以及结构体变量的定义和引用。
2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。
3、掌握运算符”.”和”->”的应用。
4、共用体的概念和应用。

[实验内容和步骤]

1、编写程序:有4名学生,每个学生的数据包括学号、姓名、成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。
2、建立一个链表每个结点包括的成员为:职工号、工资。用malloc打印出来。用一个creat 来建立链表,用list来输出数据。5个职工号为101,103,105,107,109。
3、在上题基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。写一函数insert来插入新结点。
4、在上面的基础上,写一函数delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表.
5、你有无办法测试构造链表时,内存空间的动态分配情形?

[分析讨论]

怎样引用结构体变量成员?

实验十四 位运算
[目的和要求]

1. 掌握位运算的概念和方法。
2. 掌握位运算(&,|,^,~)的使用方法。
3. 掌握有关位运算的用法。

[实验内容和步骤]

1. 按习题8.2的要求,编一个程序,将一个整数的高字节和低字节分别输出(用位运算方法)。上机运行。
2. 按习题8.6的要求,编一个程序,使一个整数的低4位翻转。上机运行,用十六进制数输入和输出。
3. 按习题8.10的要求,将一个整数i的各位循环左移4位,设i的值为十六进制数fe13。
4. 按习题8.13的要求,设计一个函数,当给定一个整数后,能得到该数的补码(应考虑该整数是正数或负数)。

[分析讨论]

位运算时应注意什么问题?

实验十五 综合应用举例
[目的与要求]
1、熟悉C语言的端口及硬件控制的方法与原理。
2、了解用C语言实现发声程序所要访问的端口。
[实验内容和步骤]
1、调试课本中例10.8程序,注意调出不同的效果。
2、调试并总结程序中所用的知识点,写出乐谱文件播放的是什么乐谱?
乐谱实例:
6000 h5 1 h3 2 h2 0.5 h3 0.5 h1 4 h2 1 m7 2 m6 0.5 h1 0.5 m5 4 m3 2 m5 1.5
m6 0.5 h1 1.5 h2 0.5 m6 0.5 h1 0.5 m5 1 h5 1.5 h1 0.5 h6 0.5 h5 0.5 h3 0.5
h5 0.5 h2 4 h2 1.5 h3 0.5 m7 1 m6 1 m5 1.5 m6 0.5 h1 1 h2 1 m3 1 h1 1 m6 0
m5 0.5 m6 0.5 h1 0.5 m5 4 h3 1.5 h5 0.5 m7 1 h2 1 m6 0.5 h1 0.5 m5 3 m3 0.
m5 0.5 m3 0.5 m5 0.5 m5 0.5 m6 0.5 m7 0.5 h2 0.5 m6 3 m5 0.5 m6 0.5 h1 1.5
h2 0.5 h5 1 h3 1 h2 1 h3 0.5 h2 0.5 h1 1 m6 0.5 m5 0.5 m3 2 h1 2 m6 0.5 h1
0.5 m6 0.5 m5 0.5 m3 0.5 m5 0.5 m6 0.5 h1 0.5 m5 3 h3 0.5 h5 0.5 h2 0.5 h3
0.5 h2 0.5 h1 0.5 m7 1 m6 1 h5 4##

void play_music(char *filename)
{
FILE *fp;
int rate;
char sound_high[3];
float sound_long;
register int i=0,j;
int sign=0;
float str[1000][2];
if ((fp=fopen(filename,"r"))==NULL)
{
printf("Open file music.doc Errors!\n");
exit(1);
}
fscanf(fp,"%d",&rate);
while(!feof(fp)&&!sign)
{
fscanf(fp,"%s%f",&sound_high,&sound_long);
str[i][1]=rate*sound_long;
switch(sound_high[0])
{
case 'h':
switch(sound_high[1])
{
case '1':
str[i++][0]=1046.5;
break;
case '2':
str[i++][0]=1174.7;
break;
case '3':
str[i++][0]=1318.5;
break;
case '4':
str[i++][0]=1396.9;
break;
case '5':
str[i++][0]=1568;
break;
case '6':
str[i++][0]=1760;
break;
case '7':
str[i++][0]=1975.5;
break;
default: printf("\n Error Music.doc\n");
break;
}
break;
case 'm':
switch(sound_high[1])
{
case '1':
str[i++][0]=523.3;
break;
case '2':
str[i++][0]=587.3;
break;
case '3':
str[i++][0]=659.3;
break;
case '4':
str[i++][0]=698.5;
break;
case '5':
str[i++][0]=784.0;
break;
case '6':
str[i++][0]=880;
break;
case '7':
str[i++][0]=987.8;
break;
default: printf("\n Error music.doc.\n");
break;
}
break;
case 'l':
switch(sound_high[1])
{
case '1':
str[i++][0]=262;
break;
case '2':
str[i++][0]=296;
break;
case '3':
str[i++][0]=329.6;
break;
case '4':
str[i++][0]=349.2;
break;
case '5':
str[i++][0]=392;
break;
case '6':
str[i++][0]=440;
break;
case '7':
str[i++][0]=493.9;
break;
default: printf("\n Error music.doc.\n");
break;
}
break;
case '*':
switch(sound_high[1])
{
case '1':
str[i++][0]=131;
break;
case '2':
str[i++][0]=147;
break;
case '3':
str[i++][0]=165;
break;
case '4':
str[i++][0]=176;
break;
case '5':
str[i++][0]=196;
break;
case '6':
str[i++][0]=220;
break;
case '7':
str[i++][0]=247;
break;
default: printf("\n Error music.doc\n");
break;
}
break;
case '#':
if (sound_high[1]=='#') sign=1;
break;
case 'x':
if (sound_high[1]=='0') str[i++][0]=20;
break;
default:printf("\n ERRor music.doc\n");
exit(1);
}
}
for(j=0;j<=i-1;j++)
{
sound(str[j][0]);
delay(str[j][1]);
}
nosound();
}

[分析讨论]
1.c语言怎样对数据库进行管理?
2.分析程序设计过程中怎样对基础知识进行灵活运用。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我公公过生日,要不要回家去呢?
(2014?浙江模拟)NO2、O2和熔融NaNO3可制作
篮球培训——少城私人教练培训地址好找么,我
请问什么花?
玉清元始天尊、上清灵宝天尊、太清道德天尊,
信阳格子铺在哪?
翻译官苹果灰色老虎菲是什么意思
之前看人气美食拍的在吴江路上的一家小龙虾,
朝为田舎郎,暮登天子堂。是什么意思
《DNF单机版》如何快速升级
有比霍震霆这个名字更霸气的吗
木棉寄生可以泡茶喝吗?
刚需买房,真的不要投资思维吗
1997年9月27日出生的是木命还是水命
从湾仔坐什麼车到深井
推荐资讯
含有锦字的成语有哪些
vivoy18上网太慢,4g手机,怎么调3g
w0uld之后加动词什么?
要几张QQ炫舞中和服的图片(3种样式的),还
QQ幻想现在还有人玩么?大概多少?
求尘染苍穹全文,以及其它好看的父子文,攻宠
哪个网站看nba直播
粒子云加速器是骗子,之前是叫墙外技术的,大
谁知道用loadrunner怎么监控网络流量啊?
供30户人家水的机井建造需要多少钱
买房电商是什么意思
黄色龙卷风科学实验。
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?