《C程序设计》期末复习练习题及参考答案(1).doc
C次序 方案 期末复习练习 题及参考答案 (1)一、单项选择 题 1. 以下不克不迭 对二维数组a停顿精确 初始化的语句是Aint a23=0;Bint a3=1,2,0;Cint a23=1,2,3,4,5,6;Dint a3=1,2,3,4,5,6;2有以下次序 片断 float fun(int x,int y return(x+y);main() int a=2,b=5,c=8;printf"%3.0fn",fun(int)fun(a+c,b),a-c);次序 运行 后的输出结果是:A)编译出错 B)9 C)21D)9.03假设 有以下调用 语句,那么不精确 的fun函数的函数原型是main() int a50,n;fun(n, &a9);Avoid funint m, int x; Bvoid funint s, int h41;Cvoid funint p, int *s; Dvoid funint n, int a;4下面次序 片断 的实行 结果是:#define MAX 10int aMAX, i;main( ) printf("n"); sub1( ); sub3(a); sub2( ); sub3(a);sub2( )int aMAX, i, max=5; for(i=0; i<max; i+) ai=i;sub1( )for(i=0; i<MAX; i+) ai=i+i;sub3(int a ) int i; for(i=0; i<MAX; i+)printf("%d",ai); printf("n");A) 0 2 4 6 8 10 12 14 16 18 0 1 2 3 4 10 12 14 16 18B) 0 1 2 3 4 0 2 4 6 8 10 12 14 16 18C) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4D) 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 185. 以下次序 实行 后的输出结果是#include <stdio.h>main() int a33, *p, i;p = &a00;for (i=1; i<9; i+)pi=i+1;printf("%dn",a12);A3 B6 C9 D随机数6. 以下关于 C语言 次序 的描画精确 的选项是 。 A)main函数可以 在任何所在 出现。B)main函数必须 出现在次序 的结实 位置。C)main函数必须 出现在所欲函数之前。D)main函数必须 出现在所有 函数之后。7. 用C语言 编写的C次序 称为 。A) 源次序 B) 目标 次序 C) 汇编次序 D) 命令 次序 8. 设有定义 int a = 5, b; 实行 以下语句后,b的值不为2的是 。A) b=a%2; B) b=a/2; C) b=6-(-a); D) b=2;9. 以下次序 实行 后的输出结果是 。#include <stdio.h>int main()int x = 0, a = 10, b = 20, c = 15;if(a > b)if(b < c)x = 1;elsex = 2;printf("%dn",x);return 0;A) 0 B) 1 C) 2 D) 310. 已经清楚 字母'b'的ASCII码值为98,如ch为字符型变量,这表达 式ch='b'+'5'-'2' 的值是 。A) 'd' B) 'e' C) 100 D) 10211. 有以下次序 #include<stdio.h>main() static char a ="language",b ="programe"char *p1,*p2;int k;p1=a;p2=b; for(k=0;k<=7;k+)if(*(p1+k) = *(p2+k)printf("%c",*(p1+k);次序 的输出结果是 。A) gae B) gue C) gua D) gam12. 有以下次序 #include <stdio.h>void main()int i,j=4;for (i=j; i<=2*j; i+)switch(i/j) case 0:case 1:printf("*");break;case 2:printf("#");次序 的输出结果是 。A) *# B) *#*# C) #*# D) *#13. 有以下次序 main() int i,j,x =0; for(i=0;i<2;i+) x+;for(j=0;j<3;j+)if(j%2) continue; x+;x+; printf("x=%dn",x);次序 的输出结果是 。A) x=8 B) x=5 C) x=7 D) x=614. 以下次序 实行 后的输出结果是 。#include <stdio.h>int main()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 = %dn",a,b);return 0;A) a = 1,b = 0 B) a = 2,b = 2 C) a = 1,b = 1 D) a = 2,b = 115. 假设 有下面的语句,那么精确 的说法是 。int a10 = 6, 7, 8, 9, 10;A) 将5个初值依次赋给a1至a5。B) 将5个初值依次赋给a0至a4。C) 将5个初值依次赋给a6至a10。D) 因为 数组长度与初值的个数纷歧 样,因而 此语句不精确 。16. 有以下函数定义 ,那么以下差错 的函数调用 是 。int Mul(int a, int b)return a*b;A) if(Mul(x,y); B) z= Mul( Mul(x,y), Mul(x,y) );C) z= Mul( Mul(x,y), x, y ); D) Mul(x, y);17. 以下次序 的运行 结果是 。#include <stdio.h>float fun(int x, int y)return x+y; int main()int a = 2, b = 5, c = 8;printf("%3.0fn",fun( (int)fun(a + c, b), a -c) );return 0;A) 编译出错 B) 9 C) 21 D)9.018. 以下次序 的运行 结果是 int k=0; void fun(int m) m+=k;k+=m;printf("m=%d k=%d ",m,k+); main() int i=4; fun(i+); printf("i=%d k=%dn",i,k); A)m=4 k=5 i=5 k=5 B)m=4 k=4 i=5 k=5 C)m=4 k=4 i=4 k=5 D)m=4 k=5 i=4 k=519. 有以下次序 main() int i,s=1; for (i=1;i<50;i+) if(!(i%5)&&!(i%3) s+=i; printf("%dn",s); 次序 的输出结果是A)409 B)277 C)1 D)91 20. 假设 变量已正判定 义,有以下次序 段 int a=3,b=5,c=7; if(a>b)a=b; c=a; if(c!=a)c=b; printf("%d,%d,%dn",a,b,c); 其输出结果是A)次序 段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 21. 假设 有定义 :float x=1.5;int a=1,b=3,c=2;,那么精确 的switch语句是 A)switch(x) case 1.0:printf("*n"); case 2.0:printf("*n"); B)switch(int)x); case 1:printf("*n"); case 2:printf("*n"); C)switch(a+b) case 1:printf("*n"); case 2+1:printf("*n"); D)switch(a+b) case1:printf(*n); casec:printf(*n);22. 以下次序 的输出结果是#include "stdio.h" main() int i,a=0,b=0; for(i=1;i<10;i+) if(i%2=0) a+; continue; b+; printf("a=%d,b=%d",a,b); A)a=4,b=4 B)a=4,b=5 C)a=5,b=4 D)a=5,b=5 二、填空题1、C语言 中全然 的数据典范 有: 整型 、 实型 、 字符型 。2、在次序 方案 中,需要 用到常量Pi,其中 为结实 值3.14。假设将Pi定义 为标志 常量,其代码为: #define Pi 3.14 ;假设将Pi定义 为常变量,其代码为: const float Pi=3.14; 。3、设a是一维数组,p是指向数组元素的指针变量,且初始化为p = a;假设要通过指针p引用数组a的下标为i的那个 元素,其代码为: *(p+i) 。4、实行 以下语句int a=8; a+=a-=a*a; 后,a的值是 - 112 。5、有如下语句:char A =I am a student; 该字符串的长度是 14 ,A3= m 。6、标志 a跟 a的区不是 a是字符串常量,而a是字符常量。 7、所谓“指针的确是 所在 。 “&运算符的感染 是 取运算东西 的所在 。“*运算符的感染 是 取指针变量所指的内容。 。 三、次序 运行 结果分析题1#include <stdio.h>struct STU char num10; float score3; ; main()struct STU s3="20021",90,95,85, "20022",95,80,75, "20023",100,95,90, *p=s; int i; float sum = 0; for (i=0; i<3; i+)sum = sum + p->scorei; printf("%6.2fn",sum); 次序 的运行 结果是:270.002#include <stdio.h>main( ) char s100; char c, i; scanf("%c", &c); scanf("%d", &i); scanf("%s", s); printf("%d,%c,%sn", c, i, s);已经清楚 字符a的ASCII码值为97,那么当次序 输出:a<空格>97<空格>123<回车>,次序 运行 结果是:97,a,1233#include <stdio.h>int a=13, b=8;int max(int a, int b)int c; c=a>b?a: b; return(c);main( )int a=5; printf("Max=%dn", max(a, b);次序 运行 结果是:Max=84以下次序 的输出结果是_。#include <stdio.h>int main()int i,j;for(i = 0; i < 4; i+)for(j = 0; j < i; j+)putchar('#');for(j = 0; j < 4; j+)putchar('*');printf("n");return 0;次序 运行 结果是:5. 当运行 以下次序 时,运行 结果是_3628800_。#include <stdio.h>int main()int fun(int n);int n = 10, y;y = fun(10);printf("%dn",y);return 0;int fun(int n)int f;if(n < 0)f = 0;printf("error!");else if( n = 0 | n = 1)f = 1; elsef= fun(n -1) * n;return f;6以下函数int strcmp(char *p1,char *p2)比较输出字符串是否 相当 ,假设 相当 那么前去 0,否那么前去 其他 值。当运行 以下次序 时,运行 结果是_-7_。#include <stdio.h>#define N 10int strcmp(char *p1,char *p2) int k; if(p1 = NULL | p2 = NULL) return -1; /揣摸 p1跟 p2是否 为空指针 while(1)if( k = *p1 - *p2)break; else if (*p1 = 0 |*p2 = 0)break; p1+ ; p2+ ; return k;int main()char a="China" char b="Japan" printf("%d", strcmp(a, b);return 0;7以下次序 的功能 为:已经清楚 数组array中以保存 num个有效整数,并按从小到大年夜 排序,现在再输出一个整数x,并拔出到数组中,保持 数组的数有序,同时更新num的值。假设 输出要拔出的数:70 那么拔出一个数后的数组包含 5个数,次序 运行 结果是:24 55 70 99 110 #include <stdio.h>void fun(int *w, int x, int *n)int i, p;p = 0;w*n = x;while(x > wp) p+;for(i = *n; i > p; i -) wi = wi-1 ;wp = x; + *n ;int main()int array60 = 24, 55, 99, 110;int num = 4,x,i;printf("请输出要拔出的数:");scanf("%d",&x);fun(array,x,&num);printf("拔出一个数后的数组包含 %d个数,分不为:n",num);for(i = 0; i < num; i+)printf("%d ", arrayi );printf("n");return 0; 8下面次序 的输出结果是_ xyabcABC _。#include<stdio.h>#include<string.h>main() char str120="abc", *p1=str1,*p2="ABC", str50= "xyz" strcpy(str+2, strcat(p1,p2); printf("%sn", str);9. 当运行 以下次序 时,运行 结果是_。#include <stdio.h> void search_s(int (*p)5,int n,int m,int re42); void main() int score45= 60,90,92,66,55, 75,40,58,40,90, 60,80,66,90,55, 78,45,56,90,57; int result42=0; /第一列表示 称心 条件 ,第二列表示 平均分数 search_s(score,4,5,result); for(int i=0;i<4;i+) if(resulti0 = 1) printf("No.%d has selected, The average is %dn",i+1,resulti1); void search_s(int (*p)5,int n,int m,int re42) int i,j; int flag; int sum,temp; for(i=0;i<n;i+) sum = 0; flag = 0; for(j=0;j<m;j+) temp = *(*(p+i)+j); sum = sum + temp; if( temp < 60) if(flag = 1) rei0 = 1; else flag = 1; rei1 = sum/m; 四、次序 填空题1阅读 次序 ,在标有下划线的空白 处填入适当 的表达 式或语句,使次序 残缺并符合 题目 恳求 。由键盘输出一个班的某课程的后生成 果,打算 其平均分,然后 输出。注:应用 静态数组实现 #include <stdio.h>#include <stdlib.h>main()int *p=NULL,n,i,sum;printf("please enter array size: ");scanf("%d", &n ); p=(int *)malloc(n* sizeof(int); if (p=NULL) printf("no enough memory!n");exit(0); /或者 return ;printf("please enter the score: ");for(i=0;i<n;i+)scanf("%d",p+i); sum=0 ; for(i=0;i<n;i+) sum=sum+*(p+i) ; printf("aver=%dn",sum/n);free(p); 2输出一个字符数小于100的字符串string,然后 在string所保存 字符串中的每个字符间加一个空格。 #include<stdio.h>#define MAX 100void CopyString(char c,char s);void Insert(char s);main()char stringMAX;scanf("%s",string);Insert(string);printf("%s",string);void CopyString(char c, char s)int i;for (i=0; si!='0' i+)ci = si;ci = '0'void Insert(char srcStr)char strTempMAX;int i = 0, j = 0;CopyString(strTemp, srcStr);while (strTempj != '0')srcStri = strTempj;i+;j+;srcStri = ' ' i+;srcStri = '0'3以下次序 从键盘上输出整数n,输出2到n之间的所有 素数。其中 函数getprime求解2到n之间包含 2与n的所有 素数并保存 在数组a中,同时前去 素数的个数。揣摸 整数m是否 为素数可以 采用以下方法:依次揣摸 m是否 为2到m-1之间各个素数的倍数,假设都不克不迭 整除,那么m是素数。 #include <stdio.h>int main()int getprime(int a,int n); int a100,n,k,i; scanf("%d",&n); k=getprime(a,n); for (i=0;i<k;i+) printf("%d ",ai);printf("n");return 0;int getprime(int a,int n)/*求解2到n之间的所有 素数,保存 到数组a中,并前去 其个数*/ int m,i,k=0; for ( m=2; m<=n ; m+ ) /*依次揣摸 m是否 为素数*/ for ( i=0; i<k; i+ ) /*对已求解素数停顿循环 */ if ( m%ai=0 ) /*揣摸 是否 为已求解素数的倍数*/ break ; /*假设整除,那么m不是素数*/ if (i=k) ak+ = m; /*m为素数,保存 到数组a中*/ return k ; /*前去 素数个数*/*假设输出20,那么输出2 3 5 7 11 13 17 19*/精选可编辑