C语言期末复习题
更新时间:2024-03-02 10:30:01 阅读量: 综合文库 文档下载
C语言期末复习题
一、单项选择题
1.一个C程序的执行是从
A)本程序的main函数开始,到main函数结束
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 2.下面四个选项中,均是不合法的用户标识符的选项的是 A) A p_o do B)float lao _A C) b-a goto int D) _123 temp INT 3.判断字符型变量c1是否为数字字符的正确表达式为 A)?0?<=c1<=?9? B)(c1>=0)&&(c1<=9) C) (?0?>=c1)||(?9?<=c1) D) (c1>=?0?)&&(c1<=?9?) 4.若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是 A)2.500000 B)2.750000 C)3.500000 D)0.000000 5.在C语言中,要求运算数必须是整型的运算符是 A)/ B)++ C)!= D)%
6. 若有定义:
double a[] = { 2.1,3.6,9.5}; double b = 6.0;
则下列错误的赋值语句是:
A) b = a[2]; B) b = a + a[2]; C) a[1] = b; D) b = a[0] + 7;
7.若定义x为双精度型变量,则能正确输入x值的语句是 。 A)scanf(“%f”,x); B)scanf(“%f”,&x); C)scanf(“%lf”,&x); D)scanf(“%lf”, x); 8.以下不正确的说法是 。
A)实参可以是常量,变量或表达式 B)形参可以是常量,变量或表达式
C)实参可以为任意类型 D)如果形参和实参的类型不一致,以形参类型为准 9.下面程序段的运行结果是 。
char *s=”Nanjing” ; s+=3 ; printf(“%s”,s); A)jing B)字符j C)字符j的地址 D)不确定 10.下面程序段 int k=2;
while (k!=0) {printf(“%d”,k);k--;}
第1页/ 共14页
则下面描述中正确的是 。
A)while循环执行2次 B)循环是无限循环
C)循环题语句一次也不执行 D)循环体语句执行一次 11.若有说明:int *p,m=5,n;以下程序段正确的是 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ;
12.若要对a进行自增运算,则a应具有下面说明 。 A)int a[3][2]; B)char *a[ ]={“12”,”ab”}; C)char (*a) [3] D)int b[10], *a=b;
13.若以下定义和赋值语句:int s[2][3]={0},(*p)[3];p=s;则对数组s的第i行第j列(假设i、j已经正确说明并赋值)元素的合法引用为: A)*(*(p+i)+j) B)*(p[i])+j C)(p+i)+j D)(*p+i)[j] 14.下面程序的运行结果是 。
#iunclude
} cnum[2]={1,3,2,7} ;
printf(“%d\\n”,cnum[0].y/cnum[0].x*cnum[1].x) ; } A)0 B)1 C)2 D)6 15.函数rewind的作用是 。
A)使位置指针重新返回文件的开头 B)将位置指针指向文件中所要求的特定位置 C)使位置指针指向文件的末尾 D)使位置指针自动移至下一个字符位置
16.
二、基础知识填空
1.在C语言中,没有专门的输入输出的语句,其输入输出都是用函数来完成的,格式化输入操作是由库函数 [1] 完成的。
2.三种基本程序结构是循环结构、选择结构和 [2] 。
a2?b23.数学表达式的C语言表达式是 [3]
x?y4. 设有数组定义: char array []=\则数组 array所占的内存空间为 [4] 5.x,y,z是整型变量,写出x,y,z三个变量中至少有两个为正数的逻辑表达式是: [5] 。
6.用continue语句只能用在循环语句的循环体内,其作用是: [6] 。 7.若有定义语句:int a[4]={1,2,3,4},*p;p=a;则++(*p)的值是 [7] 。 8.若有#define ADD(x) x+x
第2页/ 共14页
int m=1,n=2,k=3,sum ; sum = ADD(m+n)*k ; 则sum的值为 [8] 9.若有定义:
struct num{ int a ;
int b ; float f ;
} n = {1,3,5.0} ;
struct num *pn = &n ;
则表达式(*pn).a+pn->f的值是 [9] 。
10.若执行fopen函数时发生错误,则函数的返回值是 [10] 。
三、程序阅读题
1.输入100,200回车后,下面程序执行结果是 #include
void swap(int *,int *); int main() {
int a, b, *pa=&a, *pb=&b; scanf(“%d,%d”,&a,&b); swap (pa,pb);
printf(“a=%d,b=%d\\n”,a,b); return 0; }
void swap (int *p1,int *p2) {
int *p; p=p1; p1=p2; p2=p; }
2.若运行以下程序时,输入2473↙,则程序的运行结果是 。 #include
int c;
while ((c=getchar( )) !=?\\n?) switch (c-?2?)
{
case 0 :
case 1 : putchar (c+4) ;
case 2 : putchar (c+4) ; break ; case 3 : putchar (c+3) ;
default : putchar (c+2) ; break ; }
printf(“\\n”); return 0; }
第3页/ 共14页
3.输入6,下面程序的执行结果是: #include
unsigned long int fact (unsigned int ); int main()
{ unsigned int n,fac; scanf(\ fac=fact (n);
printf(\ return 0; }
unsigned long int fact (unsigned int n) {
unsigned int result; if(n==0||n==1) result=1; else
result=n*fact(n-1); return result; }
4.下面程序的输出结果是 。 #include
{ int i,a=5,sum; for(i=0;i<3;i++) sum=fun(a);
printf(\ return 0; }
int fun(int a) {
int b=0;
static int c=3; b++; c++;
return(a+b+c); }
5.下面程序运行的结果是 #include
void copy_string(char *,char *); int main() {
char a[]=\ char b[]=\ copy_string(a,b);
第4页/ 共14页
printf(\return 0 ; }
void copy_string(char *from,char *to) {
for(;*from!='\\0';from++,to++) *to=*from; *to='\\0'; }
6.下面程序执行的结果是 #include
void inv(int [], int ); int main()
{ int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10);
for(i=0;i<10;i++)
printf(\
printf(\return 0; }
void inv(int x[], int n) { int t,i,j,m=(n-1)/2; i=0; j=n-1;
for(;i<=m;i++,j--)
{ t=x[i]; x[i]=x[j]; x[j]=t; } }
7.写出下面程序的运行结果 。 #include
char name[20] ; int age ;
} person[ ] = { “liming”, 22, “wanghua”, 21,”zhangping”,20 } ; int main ( )
{ int old = 0 ;
struct man *p=person, *q ; for ( ; p<=&person[2]; p++)
if (old
8.输入9,5回车后,下面程序执行结果是 #include
void swap(int *,int *); int main() {
第5页/ 共14页
int a, b, *pa=&a, *pb=&b; scanf(“%d,%d”,&a,&b); swap (pa,pb);
printf(“a=%d,b=%d\\n”,a,b); return 0;
}
void swap (int *p1,int *p2) {
int p; p=*p1; *p1=*p2; *p2=p;
printf(“*p1=%d,*p2=%d\\n”,*p1,*p2); }
9.以下程序输出结果是 。 #include
int x=1,y=0,a=0,b=0; switch(x) {
case 1:switch (y)
{
case 0 : a++ ; break ; case 1 : b++ ; break ; }
case 2:a++; b++; break; case 3:a++; b++;
}
printf(“a=%d,b=%d”,a,b); return 0; }
10.输入6,下面程序的执行结果是: #include
unsigned int fact (unsigned int ); int main()
{ unsigned int n,fac; scanf(\ fac=fact (n);
printf(\ return 0; }
unsigned int fact (unsigned int n) {
unsigned int result; if(n==1||n==2) result=1; else
第6页/ 共14页
result=fact(n-1)+fact (n-2); return result; }
11.下面程序的输出结果是 。 #include
{ int x=7,y=3,s,j; for(j=0;j<3;j++) {
s=fun(x,y);
printf(\ }
return 0; }
int fun(int a,int b) {
static int n=1,i=2; i=n+1; n=i+a-b; return(n); }
12. 当运行以下程序时,从键盘输入:AhaMA□Aha
char s[80],c='a'; int i=0;
scanf(\
while(s[i]!='\\0') {
if(s[i]==c) s[i]=s[i]-32; else if(s[i]==c-32) s[i]=s[i]+32; i++; }
puts(s); return 0; }
13.下面程序执行的结果是 #include
void inv(int *, int ); int main()
{ int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10);
第7页/ 共14页
for(i=0;i<10;i++)
printf(\
printf(\return 0; }
void inv(int *x, int n)
{ int t,*p,*i,*j,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i<=p;i++,j--)
{ t=*i; *i=*j; *j=t; } }
14.下面函数的功能是 int strcmp(char *s,char *t) {
while (*s && *t && (*s == *t)) {
s++; t++; }
return *s - *t; }
四、程序填空题
1.以下程序输出a,b,c三个整数,并按从小到大排序,请完善程序。 #include
{ int a,b,c,t;
scanf(\ if( [1] ) {
t=a; a=b; b=t; }
if(a>c) {
[2] ; a=c; c=t; }
if(b>c) {
t=b;
[3] ; c=t; }
printf(\return 0;
第8页/ 共14页
}
2.下面程序是实现两个M?N矩阵相加,请完善程序。
#include
void add(int x[][N],int y[][N],int z[][N]); int main()
{ int i,j,a[M][N],b[M][N],c[M][N]; for(i=0;i scanf(\ add( [4] ); for(i=0;i for(j=0;j printf(\ printf(\ } return 0; } void tran(int x[][N],int y[][N],int z[][N]) { int i,j; for(i=0;i z[i][j]= [5] ; } 3.下面函数的功能是将两个字符串s1和s2连接起来,请填空使程序完整。 void conj(char *s1,char *s2) { char *p=s1 ; while (*s1) [6] ; while (*s2) { *s1= [7] ; s1++,s2++; } *s1=?\\0? ; } 4.函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据赋0到m-1的值。 #include #include struct aa *next; } NODE; NODE *Creatlink(int n, int m) { NODE *h=NULL, *p, *s; int i; 第9页/ 共14页 /**********found***********/ p=(NODE* )malloc(sizeof(NODE)); h=p; p->next=NULL; for(i=1; i<=n; i++) { s=(NODE *)malloc(sizeof(NODE)); s->data=rand()%m; /*rand()为随机函数*/ s->next=p->next; [8] ; p=p->next; } /**********found***********/ return h; } outlink(NODE *h) { NODE *p; p=h->next; while( [9] ) { printf(\ p=p->next; } printf(\} int main() { NODE *head; head=Creatlink(8,22); outlink(head); return 0; } 5.以下程序输出x,y,z三个数中的最小值,请完善程序。 #include int main ( ) { int x,y,z,min ; scanf(“%d %d %d”,&x,&y,&z); if(x>y) [10] ; else min=x; if( [11] ) min=z; printf (“%d”,min); return 0; } 6.下面程序是实现M?N矩阵的转置,请完善程序。 #include 第10页/ 共14页 #define M 3 #define N 4 void tran(int x[][N],int y[][M]); int main() { int i,j,a[M][N], [12] ; for(i=0;i scanf(\ tran(a,b); for(i=0;i for(j=0;j printf(\ printf(\ } return 0; } void tran(int x[][N],int y[][M]) { int i,j; for(i=0;i [13] ; } 7.下面程序是实现二分法查找输入的数x是否在数组中,请完善程序。 #include int a[8]={6,12,18,42,44,52,67,94}; int low=0,mid,high=7,found,x; found=0; scanf(\ while(( [14] )&&(found==0)) { mid=(low+high)/2; if(x>a[mid]) [15] ; else if(x if( [16] ) printf(\查找成功!所在的位置在:%d\\n\ else printf(\没有找到!\\n\ } 第11页/ 共14页 8.下面函数是在具有如下数据结构的链表中删除一个结点,请完善程序。 struct Node { int data; struct Node *next; }; struct Node * delete_node(struct Node * head,int num) { struct Node *p = head; struct Node *prep = p; if( head == NULL ) return head; while( p != NULL ){ if ( p->data != num ){ prep = p; p = p->next; } else break; } if ( head == p )/* 删除点恰在head指针处,须修改head指针*/ [17] ; else if ( p->next != NULL) [18] ; else /*删除点恰在最后一结点,直接将前一个结点的next域置空 */ prep->next = NULL; if ( p == NULL ) printf(“Not exist!\\n”); else free(p); return head; } 五、改正下面程序错误(注:错误在注释语句/****found****/下面1~3行以内): 1.下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。 t?1?1111?????(?1)m?1 234m例如,若输入5,则应输出0.783333。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include /**********************found***********************/ int fun(int m) { double t=1.0,j=1.0; 第12页/ 共14页 int i; /**********************found***********************/ for(i=1;i j=-1*j; t+=j/i; } return t; } int main() { int m; scanf(\ printf(\return 0; } 2.给定如下程序,其中函数fun的功能是求k!(k<13),所求的阶乘的值作为函数值返回值,请改正程序中的错误,使程序能得出正确的结果。 /************found************/ #include /************found************/ if k > 0 return (k*fun(k-1)); /************found************/ else if (k=0) return 1; } int main() { int k ; scanf(“%d”,&k); printf(\ return 0; } 六、编程题 1x313x5135x7?????????的近似值(直到最1.输入x和eps>0,计算x??242462468后一项的绝对值小于eps)。 2.设一个班级有N个人,学生信息包括姓名、学号和三科成绩,编程求每个人的三门课程的总成绩,输入m、n,把三科总成绩在[m,n]之间的学生信息保存在另外一个结构体数组 第13页/ 共14页 中,并输出这些学生的信息。 3.输入一个无符号长整型数,将该数各数位上的奇数数字组成一个新的数,且高位上的数仍然在高位。如:输入12345678,得到的结果是1357 4.设一个班级有N个人,学生信息包括姓名、学号和三科成绩,编程求每个人的三门课程的总成绩,并按总成绩由高分到低分排序,并输出相应的学生成绩。 5.有一个数组,内放10个整数,要求编写一个程序,完成以下功能: (1) 函数实现数组中各数值的键盘输入; (2) 找出数组中最小的数和它的下标; (3) 将(2)中找到的数和数组中最前面的元素对换; (4) 函数实现数组中各数值的输出。 6.有一个数组,内放10个整数,要求找出最小的数和它的下标。然后把它和数组中的最前面的元素对换。 7. 求Fibonacci数列中前20个数。Fibonacci数列的前两个数为1,1,以后每一个数都是前两个数之和。该数列的前n个数为1,1,2,3,5,8,13,……用数组存放数列的前20个数,并输出之(按一行5个数输出)。 第14页/ 共14页
正在阅读:
C语言期末复习题03-02
卫生院学习雷锋规章制度06-22
门当户对是过时婚恋价值观辩论赛驳论09-13
关于屈原的古诗词【宋代】(50首)04-02
农机专业教学计划05-09
行政事业单位财务支出报销审批程序的优化05-23
关于电大自我鉴定锦集08-22
幼儿色彩画的实践与研究03-02
润滑油公司实体绩效管理规定细则04-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 复习题
- 期末
- 语言