设C程序中有对全局变量x和y的定义如下所示,那么关于全局变量x和y的作用域讨论中,正确的是()。doublexstaticdoubley
A.x和y的作用域都不能扩充
B.x和y的作用域都可以扩充到同一程序的其他源文件中去
C.x和y的作用域都只能在它们所在源文件中扩充
D.x和y的作用域都可以在本源文件中扩充,且x的作用域还可以扩充到其他源文件
A.x和y的作用域都不能扩充
B.x和y的作用域都可以扩充到同一程序的其他源文件中去
C.x和y的作用域都只能在它们所在源文件中扩充
D.x和y的作用域都可以在本源文件中扩充,且x的作用域还可以扩充到其他源文件
第1题
在C语言中,定义一个函数 f1如下:
f1(intx,int y)
4
{
static int count=0;
int temp;
temp=x;
x=y;
y=temp;
count++;
}
则下列叙述正确的是()。
A.变量count为全局变量, temp为局部变量。
B.x,y属于函数的形式参数。
C.变量count,temp均为局部变量。
D.函数的功能是实现两个变量值的交换。
E.函数的默认返回值类型为 int,函数没有返回任何值。
F.变量count,temp为局部变量,所占空间在函数退出时释放。
第2题
A.变量x不能作为全局变量使用
B.对于变量x可以直接引用,也可以用“模块名.x”的方式引用。
C.变量x的作用范围只在当前模块中
D.对于变量x不可以直接引用,只能用“模块名.x”的方式引用。
第3题
NN,且
第5题
A.编译出错
B.程序将顺利编译、连接、执行
C.能顺利通过编译、连接,但不能执行
D.能顺利通过编译,但连接出错
第6题
A.func(m,n/10)
B.mul(m,n)
C.mul(a/b,n)
D.mul(c1/c2,a/b)
第7题
设有如下宏定义
#define MYSWAP(z,x,y) {z=x;x=y;y=z;}
以下程序段通过宏调用实现变量a、b内容交换,请填空。
float a=5,b=16,c;
MYSWAP(______,a,b);
第8题
函数
1.实验目的
①掌握定义函数的方法。
②掌握函数实参与形参的对应关系以及“值传递”的方式。
③掌握甬数的嵌套调用和递归调用的方法。
④掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。
⑤学习对多文件程序的编译和运行。
2.实验内容
编程序并上机调试运行。
①已有变量定义和函数调用语句int a=1,b=-5,c; c=fun(a,b);fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请编写fun函数。
Fun(int x,int y)
{ }
②有函数调用语句c=add(a,b);请编写add函数,计算两个实数a和b的和,并返回和值。
double add(double x,double y)
{ }
③利用递归方法求5!。
④利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
⑤有5个人坐在一起,问第五个人的岁数,他说比第四个人大2岁。问第四个人岁数,他说比第三个人大2岁。问第三个人,叉说比第二个人大两岁。问第二个人,又说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人的岁数,就需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
⑥以下程序运行后输入:3,abcde<回车>,则输出结果是______。
#include
move(char*str,int n)
{char temp;int i;
temp=sTR[n-1];
fOr(i=n-1;i>0;i--)str[i]=str[i-1];
str[0]=temp;
}
main()
{chaR s[50];int n,i,z;
scanf("%d,%s",&n,&s);
z=strlen(s);
for(i=1;i<=n;j++)
move(s,z);
printf("%s\n",s);
}
⑦编写函数求:1-1/2+1/3-1/4+1/5-1/6+1/7-…1/n
⑧编程输出如下图形,
即一个由*组成的正六边形,注意是空心的。
3.理解变量的作用范围
①学习static定义静态变量的用法。
#include"stdio.h"
varfunc()
{
int var=0;
static int static_var=0;
printf("\40:var equal%d\n",var);
printf("\40:static var equal%d\n",static_var);
printf("\n");
var++;
static_var++;
}
voidmain()
{inti;
for(j=0;i<3;i++)
varfunc();
}
②学习使用auto定义变量的用法。
#include"stdio.h"
main()
{inti,num;
num=2;
for(i=0;i<3;i++)
{ printf("\40:The num equal%d\n",num);
num++;
{
auto int num=1;
printf("\40:The internal block num equal%d\n",num);
num++;
}
}
}
③学习使用static的另一用法。
#include"stdio.h"
main()
{
inti,num;
num=2
for(i=0;i<3;i++)
{
printf("\40:The hum equal%d\n",num);
num++;
{
static int num=1;
printf("\40:The internal block hum equal%d\n",hum);
num++;
}
}
}
④学习使用external的用法。
#include"stdio.h"
int a,b,c;
void add()
{int a;
a=3;
c=a+b
}
voidmain()
{ a=b=4;
add();
printf("The value of c is equal to%d\n",c);
}
⑤学习使用register定义变量的方法。
voidmain()
{
register int i;
int tmp=0:
for(i=1;i<=100;i++)
tmp+=i;
printf("The sum is%dha",tmp);
}
(6)宏#define命令练习(1)
#include"stdio.h"
#defineTRUE 1
#define FALSE 0
#define SQ(x)(x)*(x)
voidmain()
{
int num;
int again=1;
printf("\40:Program will stop if input value less than 50.\n");
while(again)
{
printf("\40:Please input number==>");
scanf("%d",&num);
printf("\40:The square for this number is%d\n",SQ(num));
if(num>=50)
again=TRUE;
else
again=FALSE;
}
}
第10题
某机存储器容量为64K×16位,该机访存指令格式如下:
其中M为寻址模式:0为直接寻址,1为基址寻址,2为相对寻址,3为立即寻址;I为间址特征(I=1间址);X为变址特征(X=1变址)。 设PC为程序计数器,RX为变址寄存器,RB为基址寄存器,试问: (1)该指令能定义多少种操作? (2)立即寻址操作数的范围。 (3)在非间址情况下,除立即寻址外,写出每种寻址方式计算有效地址的表达式。 (4)设基址寄存器为14位,在非变址直接基址寻址时,指令的寻址范围是多少? (5)间接寻址时,寻址范围是多少?若允许多重间址,寻址范围又是多少?