一、单项选择题,请将正确答案填在横线处。
(每小题2分,共20分)1. 一个算法应该具有"确定性"等5个特性,下面对另外4个特性的描述中错误的是______。
A.有零个或多个输入B.有零个或多个输出C.有穷性D.可行性2.下述标识符中,______不是合法的标识符。
A.A#CB.getchC.vodD.ab3. 下列关于单目运算符++.--的叙述中正确的是______。
A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量D.它们的运算对象可以是char型变量.int型变量和float型变量5. 以下程序的输出结果是______。
#include<stdio.h>void main(){ int a=5,b=4,c=6,d;printf("%d\n",d=a>c?(a>c?a:c):(b));}A.5B.4C.6D.不确定6. 有以下程序main(){int a=0,b=0,c=0,d=0;if(a=1) b=1;c=2;else d=3;printf(“%d,%d,%d,%d\n”,a,b,c,d);}程序输出______。
A.0,1,2,0B. 0,0,0,3C.1,1,2,0D.编译有错7. C语言中,下列叙述正确的是______。
A.不能使用do-while语句构成的循环B.do-while语句构成的循环,必须用break语句才能退出C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环8. 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是______。
A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元9. 有如下程序#define N 2#define M N+1#define NUM 2*M+1main(){ int i;for(i = 1; i <= NUM; i++)printf("%d\n",i);}该程序中的for循环执行的次数是______。
A.5B.6C.7D.811. 以下能正确定义一维数组的选项是______。
A.int a[5]={0,1,2,3,4,5};B. char a={'A','B','C'};C. char a[]={0,1,2,3,4,5};D.int a[5]="0123";13. 若有以下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则值为6的表达式是______。
A.p+5B.*(p+6)C.*p+=5D. *p+614.以下叙述中正确的是______。
A.构成C程序的基本单位是函数B.可以在一个函数中定义另一个函数C.main()函数必须放在其它函数之前D.所有被调用的函数一定要在调用之前进行定义15. 已有定义:char a[]=”xyz”,b[]={‘x’,’y’,’z’};,以下叙述正确的是_____。
A.数组a和b的长度相同 B.a数组长度小于b数组长度C.a数组长度大于b数组长度 D.上述说法都不对二、阅读程序,在每小题后面写出程序的运行结果。
(每题4分,共20 分)1.有如下程序:#include <stdio.h>void main(){ static int a[3][3]={{3,2,1},{4,5,6},{-2,9,1}};int i,j,sum=0;for(i=0;i<3;i++)for(j=0;j<3;j++)if(i==j) sum=sum+a[i][j];printf("sum=%d\n",sum);}运行结果:2.有如下程序:#include <stdio.h>fun(int a,int b){ int i,p=1;for(i=1;i<=b;i++)p=p*a;return(p);}void main(){ int x=5;printf("%d\n",fun(x,3));}运行结果:3.有如下程序:#include <stdio.h>void findmin (int *s,int t,int *k){ int p;for(p=0,*k=p;p<t;p++)if(s[p]<s[*k])*k=p; }void main(){ int a[10]={65,32,21,43,12,8,67,87,9,10};int i,*k=&i;findmin(a,10,k);printf("%d,%d\n",*k,a[*k]);}运行结果:4.有如下程序:#include <stdio.h>struct s{int n;int a[20];};void f(int *a,int n){ int i;for(i=0;i<n-1;i++)a[i]+=i;}void main(){ int i;struct s s={10,2,3,1,6,8,7,5,4,10,9};f(s.a,s.n);for(i=0;i<s.n;i++)printf("%d,",s.a[i]);printf("\n");}运行结果:5.有如下程序:#include <stdio.h>struct STU{ char name[10];int num;float totalscore;};void f(struct STU *p){ struct STU s[2]={{"sundan",20044,550},{"penghua",20045,537}},*q=s;++p; ++q; *p=*q;}void main(){ struct STU s[3]={{"yangsan",20041,703},{"lisiguo",20042,580}};f(s);printf("%s %d %3.0f\n",s[1].name,s[1].num,s[1].totalscore);}运行结果:三、完善程序,在横线上填上完整的语句,使程序完成指定的功能。
(每空2分,共20分)1.输出100到999之间能被3和7同时整除的数以及它们的个数#include <stdio.h>void main(){ int k,count=0;for(k=100;k<=999;k++)if(_________________________){ printf("%4d",k);_______________; }printf("%d",count);}2.译密码。
为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。
可以按以下规律将电文变成密码:将字母A变成其后的第4个字母,字母W变成字母A,X变成B,Y变成C,Z变成D。
#include <stdio.h>void main(){ char c;while((c=getchar())!='\n'){ if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){ c=____________;if(c>'Z'&&c<='Z'+4||c>'z')c=________________; }printf("%c",c); }printf("\n");}3.判断n是否是素数。
#include <math.h>#include <stdio.h>void main(){ int n,i,k;scanf("%d",&n);______________;for(i=2;i<=k;i++)if(n%i==0)______________;if(i>=k+1) printf("%d is a prime\n",n);else printf("%d is not a prime\n",n);}4.函数功能:从s所指字符串中,找出t所指子串的个数作为函数值返回。
例如当s所指字符串中的内容为:“abcdabfab”,t所指字符串的内容为:“ab”,则函数返回值为3。
#include <stdio.h>#include <string.h>int fun(char *s,char *t){ int n=0;char *p,*r;while(*s){ p=s;r=t;while(*r)if(_________________){ r++;p++;}elsebreak;if(_______________)n++;s++;}______________;}void main(){ char s[50],t[50];int m;printf("\nPlease enter string S:");scanf("%s",s);printf("\nPlease neter substring t:");scanf("%s",t);m=fun(s,t);printf("\nThe result is : m=%d\n",m);}四、程序改错,根据程序的功能,找出程序中的错误并改正。
(每处错误2分,共20分)1.用选择法对10个整数按由大到小顺序排序。
(1)#include <stdio.h>(2)void sort(int x[],int n)(3){int i,j,k,t;(4) for(i=0;i<n-1;i++)(5) { k=0;(6) for(j=i+1;j<n;j++)(7) if(x[j]>x[k])(8) k=j;(9) if(k!=i)(10) {t=x[i];(11) x[i]=x[k];(12) x[k]=t;}}}(13)void main()(14){ int *p,i,a[10];(15) p=&a;(16) for(i=0;i<10;i++)(17) scanf("%d",p);(18) p=a;(19) sort(p,10);(20) for(i=0;i<10;i++)(21) {printf("%d ",p);(22) p++;}}错误1:5改正1:k=i;错误2:17改正2:scanf("%d",p++);错误3:21改正3:{printf("%d ",*p);2.求广义费波纳级数的第n项。