汇编程序:用减奇数法开平方(16位)
命题:从 1 开始,把连续 n 项奇数的等差数列,求和,可以得到 n^2。
证明:1 + 3 + 5 + ... + (2n-1) = (1 + (2n-1)) * (n/2) = n^2。
那么,隐袜对于任意正整数 M,都会有:
M = 1 + 3 + 5 + … + ( 2n - 1 ) + ε
= n^2 + ε
= N + ε
式中 N 是完全平方数,N = n^2。
式中 ε 是小于 2n - 1 的误差。
由此灶喊激,可推出“减奇数开平方”的算法。
即:在 M 中依次减去 1、3、5、...,直到不够减为止;
够减的次数 n,即为 N 的平方根。
程序可见:
这种求平渗尘方根的方法,效率很高,远远高于牛顿迭代法。
2001年4月份全国高等教育自学ks计算机基础与程序设计试题及答案
一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。
1.I/O设备指的是计算机的()
A、存储设备
B、输入和输出设备
C、控制器
D、运算器
2.具有只读功能的内存储器好游是指()
A、ROM
B、RAM
C、硬盘
D、CD-ROM
3.C语言源程序的基本单位是()
A、过程
B、函数
C、子程序
D、语句
4.字符串常数"CHINA"在内存中存储时占的字节数是()
A、5个
B、6个
C、7个
D、8个
5.设有int p,q;以下不正确的语句是()
A、p*=3
B、p/=q
C、p+=3
D、p&&=q
6.如果a=1,b=2,c=3,d=4,则表达式a>b?a:cA、1
B、2
C、3
D、4
7.下面程序段的运行结果是( )
main( )
{Int a=11,b=10
a-=b+1;
printf("%dn",a);
}
A、1
B、0
C、2
D、5
8.下列程序段执行后输出结果为()
int i=-1;
if(i<=0)printf("****n");
else printf("%%%%n");
A、****C
B、%%%%
C、%%%%C
D、****
9.若所用变量已正确地定义,则下列程序段输出结果为()
a=10;b=50;c=30;
if(a>b)a=b
b=c;c=a
printf("a=%d,b=%d,c=%dn",a,b,c);
A、a=10,b=50,c=10
B、a=10,b=30,c=10
C、森洞a=50,b=30,c=10
D、a=50,b=3,c=50
10.下述循环的循环次数是()
int k=2;
while(k=0)printf("%d",k);
k--;printf("n")
A、无限次
B、0次
C、1次
D、2次
11.在下列选项中,没有构成死循环的程序段是()
A、int i=100;
while(1)
{i=i0+1;
if(i>100)break;
}
B、for(;;)此袜枯
C、int k=1000;
do(++k;) while(k>=10000);
D、int s=36;
while(s);--s;
12.若有以下定义和语句,且0<=i<10,则对数组元素的错误引用是()
int a[]={0,1,2,3,4,5,6,7,8,9},*p,i;
p=a
A、*(a+i)
B、a[p-a]
C、p+i
D、*(&a[i])
13.下面能正确将字符串"Boy"进行完整赋值 *** 作的语句是()
A、char s[3]={'B','o','y'};
B、char s[ ]="Boy";
C、char s[3]={"Boy"};
D、char s[3];
s[0]='B';s[1]='o';s[2]='y'
14.以下程序段的输出结果是( )
char arr[ ]="ABCD";
char*ptr;
for(ptr=arr;ptrprintf("%sn",ptr);
A、ABCD
B、
A
C、
D
D、
ABCD
B
C
BCD
C
B
CD
D
A
D
15.下面说法不正确的是()
A、一个源程序文件由一个或多个函数组成。
B、一个C程序由一个或多个源程序文件组成。
C、一个C程序以函数为独立的编译单位。
D、一个C程序必须有一个main()函数。
16.C语言的auto型变量是()
A、存储在动态存储区中。
B、存储在静态存储区中。
C、存储在计算机CPU的寄存器中。
D、存储在外存储器中。
17.以下程序的运行结果是()
void swapl(x,y)
int x,y;
{int t;t=x;x=y;y=t;}
void swap2(p1,p2)
int *p1,*p2;
{*p1=*p2;*p2=*p1;}
main()
{int a=3,b=5,*x1=&a,*x2=&b;
swap1(a,b);
printf("a=%d,b=%dn",a,b);
swap2(x1,x2);
printf("a=%d,b=%dn",a,b);}
A、
a=5,b=3
B、
a=3,b=5
C、
a=5,b=3
D、
a=3,b=5
a=5,b=3
a=3,b=5
a=3,b=3
a=5,b=5
18.下列定义中,不是指针数组定义的是( )
A、int *p[5];
B、float *q[4];
C、int (*r)[6];
D、char *w[7];
19.以下程序的运行结果是()
#define sl(x)(3.14*(x)*(x))
#include
main()
{float x,s;
s=s1(10);
printf("%.2fn",s);}
A、3.14
B、31.40
C、314.00
D、6.28
20.测试文件是否结束函数的函数名是()
A、feof
B、EOF
C、eof
D、FEOF
二、多项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的五个选项中有二至五个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。多选、少选、错选均无分。
21.下列哪些设备属外存储设备()
A、RAM
B、光盘
C、硬盘
D、软盘
E、磁带
22.?X*.C可以代表的文件是()
A、AXCD.C
B、AXCD.D
C、ABX.C
D、RX.C
E、XX1234.C
23.若有int x;float y;指出下面结果为整型数的表达式()
A、(int)(x+y)
B、(int)x+y
C、'a'+x
D、x+(int)y
E、x*y
24.若所用变量已正确定义,下列for循环语句中语法正确的有()
A、for(x=0;i=0;i<=10;i++)
x++;
B、for(x=0,i=0,i<=10,i++)
x++;
C、for(x=0,i=0;i<=10;i++)
x++;
D、i=0;x=0;
for(i<=10;i++)
x++
E、i=0;x=0;
for(;i<=10;i++)
x++
25.若有定义及赋值:()
int y,*p,*p1;
p=&y;p1=p;*p1=4;
则可以输出变量y的地址的语句是
A、printf("%un",y);
B、printf("%un",p);
C、printf("%un",*p);
D、printf("%un",&y);
E、printf("%un",*p1);
26.若有定义及赋值:()
int a[10]={0,1,2,3,4,5,6,7,8,9},*p;
p=a;
则引用a中值为5的元素的表达式是
A、a[5]
B、a[4]
C、*(a+5)
D、p[5]
E、*(p+4)
27.若有定义及赋值:()
int a[6][6],*p;
p=*a;
则下列各式中表示地址的表达式是
A、a[1]
B、a[1]+1
C、a[3][3]
D、&a[1][3]
E、p[0][0]
28.若有定义及赋值:()
int x[5][6],*p;
p=*x;
则不能正确引用数组元素x[0][2]的值的表达式是
A、x[0][2]
B、p[0][2]
C、x[0]+2
D、*x+2
E、*(*x+2)
29.下面各式正确的是()
A、struct 1_num
{long num;struct 1_num*next;}num1,*p1;
p1=&num1;
B、struct animal
{char name [30],float weight,}rabbits;
C、struct star
{int bh,char name [20],}my_star;
my_star.name="moon";
D、struct {char x[20];char y[30];int u;}x1,y;
E、struct food
{int code;char name [30];struct food *p;};
struct food *tail;
30.设有int y,u=0,x=15,下列各项中能使y值为0的是()
A、y=x∧x;
B、y=x∣u;
C、y=x>>4;
D、y=x&u;
E、y=~u;
第二部分非选择题
三、填空题(本大题共10小题,每小题1分,共10分)
31.写出查看A盘TC子目录下扩展名为C的所有文件的目录 *** 作命令C:>____________。
32.组成C程序的基本单位是____________。
33.putchar()函数的功能是____________。
34.当s=7时,执行以下程序段后x=____________。
if((s>0)&&(s<=10))
if((s>=3)&&(s<=6))x=2;
else if((s>1)||(s>8))x=3;
else x=1;
else x=0;
35.设i和x都是int型,则for循环语句最多执行次数为____________。
for(i=0,x=0;I<=9&&x!=876;i++)scanf("%d",&x);
36.以下程序的输出结果是____________。
main()
{int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;
for(i=0;i<4;i++)p[i]=&a[i*3];
printf("%dn",p[3][2]);}
37.定义变量可以在函数内部,也可以在函数外部,在函数内部定义的变量称为____________。
38.若有定义int x=3,*p;则使p指向变量x的赋值语句为____________。
39.共用体的所有成员共享同一段存储空间,它的各个成员的数据类型可以是____________。
40.设有FILE*fp;则关闭fp所联系文件的C语句是____________。
四、简答题(本大题共4小题,第41、42每小题2分,第43、44每小题3分,共10分)
41.简述在Turbo C 2.0集成开发环境下完成一个C程序的全过程。
42.写出下列程序段所对应的数学式子。
if(x!=0)
if(x>0)y=1;
else y=-1;
else y=0;
43.定义char *string="I am a boy";
和定义char *string;
string="I am a boy";
等价吗?为什么?
44.简述C对ASCII码文件或二进制文件的 *** 作步骤。
五、阅读分析题(本大题共10小题,每小题2分,共20分)
45.阅读下列程序,写出运作结果
main()
{int a=100,b=-1;
printf("a=%d,%xn",a,a);
printf("b=%x,%un",b,b);}
46.下面是判断一个学生考试成绩及格与否的程序(成绩A,或B,或C者为及格;成绩为D者不及格):
main()
{char mark=''A'';
switch(mark)
{case''A'':
case''B'':
case''C'':printf(">=60n");
case''D'':printf("<60n");
default:printf("Errorn");}}
该程序执行后会产生什么错误?请分析并予以更正。
第47题,第48题,第49题请参阅下面程序,并回答相关问题
main()
{int u,v,a,b,t,r;
u=24;v=16;
if(u>v){t=u;u=v;v=t;}
a=u;b=v;
while((r=%ba)!=0)
{b=a;a=r;}
printf("a=%dn",a);
}
47.程序的输出结果是多少?
48.该程序完成什么功能?
49.若将while循环替换为do-while循环,请写出相应的程序段。
第50题,第51题,第52题请参阅下面程序,并回答相关问题。
long fac(int n)
{if(n>0)return n*fac(n-1);
else return 1L;
}
main( )
{int i,m;
long s=0;
scanf("%d",&m);
for(i=1;i<=m;i++)
s=s+fac(i);;
printf("%1dn",s);
}
50.该程序的功能是什么?fac函数是一个什么函数?
51.若fac函数的返回值定义为int型,合适吗?
52.如果求(1!)!+(2!)!+(3!)!+…+(m!)!,程序如何修改?
第53题、第54题请参阅下面程序,并回答相关问题。
struct food
{int amount;
struct food*next;
}*head=NULL;
void create(int each_amt)
{struct food * p;
p=(struct food*)malloc(sizeof(struct food));
p→amount=head_amt;
p→next=head;
head=p;
}
53.语句p=(struct food *)malloc(sizeof(struct food));
和p→amount=each_amt;是功能是什么?
54.语句p→next=head;head=p;的功能是什么?
六、程序设计题(本大题共2小题,第55题8分,第56题12分,共20分)
55.对任意一个3行3列的二维整型数组,编程实现:
(1)从键盘对数组元素赋初值。
(2)查找每一列中元素值最大的元素并输出其值及行下标和列下标。
(假设数组中各元素值都不相同)
56.编写字符串拷贝函数将指针str2指向的字符串复制到由指针str1所指的字符串中。请在主函数中调用字符串拷贝函数并输出str1指向的字符串。
(不得用C中的strcpy标准库函数)
计算机基础与程序设计试卷参考答案
一、单项选择题(本大题共20小题,每小题1分,共20分)
1.B
2.A
3.B
4.B
5.D
6.C
7.B
8.D
9.A
10.B
11.C
12.C
13.B
14.D
15.C
16.A
17.D
18.C
19.C
20.A
二、多项选择题(本大题共10小题,每小题2分,共20分)
21.BCDE
22.ADE
23.ACD
24.CE
25.BD
26.ACD
27.ABD
28.CD
29.ADE
30.ACD
三、填空题(本大题共10小题,每小题1分,共10分)
31.DIR A:TC*.C
32.函数
33.向终端输出一个字符
34.3
35.10次
36.12
37.局部变量
38.p=&x
39.不相同的
40.fclose(fp)
四、简答题(本大题共4小题,第41、42题每题2分;第43、44题每题3分,共10分)
41.[参考答案]
(1)利用编辑功能生成C源程序。
(2)利用编译功能生成相应的目标程序。
(3)利用连接功能生成可执行程序。
(4)运行可执行程序。
42. [参考答案]
y=-1(x<0)
y=0(x=0)
y=1(x>0)
43. [参考答案]
(1)等价。(1分)
(2)因为string是字符型指针变量。(1分)
(3)无论哪种赋值方式都只是将字符串的首地址赋给了string,而不是将整个字符串赋给了string。(1分)
44[参考答案]
(1)按规定的格式打开文件。(1分)
(2)对打开的文件进行读/写 *** 作。(1分)
(3)关闭已打开的文件。(1分)
五、阅读分析题(本大题共10小题,每小题2分,共20分)
45. [参考答案]
a=100,64(1分)
b=ffff,65535(1分)
46. [参考答案]
(1)该程序有逻辑错误。当mark为''A''(或''B''或''C'')时,三条printf语句全部要执行一次。(1分)
(2)要得到正确的结果,应做下面修改:(1分)
case''C':printf(">=60n");break;
case''D'':printf("<60n");break;
47. [参考答案]
a=8(2分)
48. [参考答案]
该程序用于求u和v的最大公约数。(2分)
49. [参考答案]
while语句可以改为:(2分)
r=b%a;
do
{
if(f= =0)break;
b=a;a=r;
}while((r=b%a)!=0);
50. [参考答案]
51. [参考答案]
不合适。会产生整数溢出。
即使定义为long型,输入的m值也不宜过大,否则仍会产生溢出。(2分)
52. [参考答案]
只要将s=s+fac(i)改为:
s=s+fac(fac(i))即可。(2分)
53. [参考答案]
(1)前一句用于创建一个新结点,并使指针P指向新结点。(1分)
(2)后一句用于接受调用程序的实参,并将其值赋给新结点的成员amount。(1分)
54. [参考答案]
(1)前一句用于将新结点与原head指向的结点串接在一起。(1分)
(2)后一句用于使head指向新加入的结点P。(1分)
六、程序设计题(本大题共2小题,第55题8分,第56题12分,共20分)
55. [参考答案]
参考程序如下:
#include
void main(void)
{
int i,j,im,jm,x[3][3],max;
for(i=0;j<3;i++)
for(j=0;j<3;j++)
scanf("%d",&x[i][j]);
for(j=0;j<3;j++)
{
max=x[0][j];im=0;jm=j;
for(i=1;i<3;i++)
if(max {
max=x[i][j];
im=i;
jm=j;
}
printf("i=%d j=%d max=%dn",i,j,max);
}
}
56. [参考答案]
参考程序如下:
#include
void strcpy(char *,char * );
void main(void)
{
char *str1,*str2="abcdef";
strcpy(str1,str2);
printf("%s",str1);
}
void strcpy(char *s1,char *s2)
{
int i=0;
while((s1[i]=s2[i])!='''')
i++;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)