收藏 分销(赏)

《C程序设计》期末复习练习题及参考答案(1).doc

上传人:二*** 文档编号:4535298 上传时间:2024-09-27 格式:DOC 页数:12 大小:91KB 下载积分:5 金币
下载 相关 举报
《C程序设计》期末复习练习题及参考答案(1).doc_第1页
第1页 / 共12页
本文档共12页,全文阅读请下载到手机保存,查看更方便
资源描述
《C次序 方案 》期末复习练习 题及参考答案 (1) 一、单项选择 题 1. 以下不克不迭 对二维数组a停顿精确 初始化的语句是 A〕int a[2][3]={0}; B〕int a[][3]={{1,2},{0}}; √C〕int a[2][3]={{1,2},{3,4},{5,6}}; D〕int a[][3]={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.0f\n",fun((int)fun(a+c,b),a-c)〕; } 次序 运行 后的输出结果是: A)编译出错 √B)9 C)21 D)9.0 3.假设 有以下调用 语句,那么不精确 的fun函数的函数原型是 main() { … int a[50],n; … fun(n, &a[9]); … } A〕void fun〔int m, int x[]〕; B〕void fun〔int s, int h[41]〕; C〕void fun〔int p, int *s〕; √D〕void fun〔int n, int a〕; 4.下面次序 片断 的实行 结果是: #define MAX 10 int a[MAX], i; main( ) { printf("\n"); sub1( ); sub3(a); sub2( ); sub3(a); } sub2( ) {int a[MAX], i, max=5; for(i=0; i<max; i++) a[i]=i; } sub1( ) {for(i=0; i<MAX; i++) a[i]=i+i;} sub3(int a[ ]) { int i; for(i=0; i<MAX; i++)printf("%d",a[i]); printf("\n"); } A) 0 2 4 6 8 10 12 14 16 18 0 1 2 3 4 10 12 14 16 18 B) 0 1 2 3 4 0 2 4 6 8 10 12 14 16 18 C) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 √D) 0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 18 5. 以下次序 实行 后的输出结果是 #include <stdio.h> main() { int a[3][3], *p, i; p = &a[0][0]; for (i=1; i<9; i++){p[i]=i+1;} printf("%d\n",a[1][2]); } A〕3 √B〕6 C〕9 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; else x = 2; printf("%d\n",x); return 0; } √A) 0 B) 1 C) 2 D) 3 10. 已经清楚 字母'b'的ASCII码值为98,如ch为字符型变量,这表达 式ch='b'+'5'-'2' 的值是〔 〕。 A) 'd' √B) 'e' C) 100 D) 102 11. 有以下次序 #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) gam 12. 有以下次序 #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=%d\n",x); } 次序 的输出结果是〔 〕。 √A) x=8 B) x=5 C) x=7 D) x=6 14. 以下次序 实行 后的输出结果是〔 〕。 #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 = %d\n",a,b); return 0; } A) a = 1,b = 0 B) a = 2,b = 2 C) a = 1,b = 1 √D) a = 2,b = 1 15. 假设 有下面的语句,那么精确 的说法是〔 〕。 int a[10] = {6, 7, 8, 9, 10}; A) 将5个初值依次赋给a[1]至a[5]。 √B) 将5个初值依次赋给a[0]至a[4]。 C) 将5个初值依次赋给a[6]至a[10]。 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.0f\n",fun( (int)fun(a + c, b), a -c) ); return 0; } A) 编译出错 √B) 9 C) 21 D)9.0 18. 以下次序 的运行 结果是 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=%d\n",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=5 19. 有以下次序 main() { int i,s=1; for (i=1;i<50;i++) if(!(i%5)&&!(i%3)) s+=i; printf("%d\n",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,%d\n",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 ,A[3]=  ’m’  。 6、标志 〞a〞跟 ’a’的区不是      〞a〞是字符串常量,而’a’是字符常量。   7、所谓“指针〞的确是       所在             。    “&〞运算符的感染 是      取运算东西 的所在                      。 “*〞运算符的感染 是        取指针变量所指的内容。                    。   三、次序 运行 结果分析题 1.#include <stdio.h> struct STU { char num[10]; float score[3]; }; main() { struct STU s[3]={{"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->score[i]; } printf("%6.2f\n",sum); } 次序 的运行 结果是:270.00 2.#include <stdio.h> main( ) { char s[100]; char c, i; scanf("%c", &c); scanf("%d", &i); scanf("%s", s); printf("%d,%c,%s\n", c, i, s); } 已经清楚 字符’a’的ASCII码值为97,那么当次序 输出:a<空格>97<空格>123<回车>,次序 运行 结果是:97,a,123 3.#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=%d\n", max(a, b)); } 次序 运行 结果是:Max=8 4.以下次序 的输出结果是______________。 #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("%d\n",y); return 0; } int fun(int n) { int f; if(n < 0) {f = 0;printf("error!");} else if( n == 0 || n == 1) f = 1; else f= fun(n -1) * n; return f; } 6.以下函数int strcmp(char *p1,char *p2)比较输出字符串是否 相当 ,假设 相当 那么前去 0,否那么前去 其他 值。当运行 以下次序 时,运行 结果是___-7_____。 #include <stdio.h> #define N 10 int 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 > w[p]) p++; for(i = *n; i > p; i --) w[i] = w[i-1] ; w[p] = x; ++ *n ; } int main() { int array[60] = {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 ", array[i] ); printf("\n"); return 0; } 8.下面次序 的输出结果是__ xyabcABC __。 #include<stdio.h> #include<string.h> main() { char str1[20]="abc", *p1=str1,*p2="ABC", str[50]= "xyz"; strcpy(str+2, strcat(p1,p2)); printf("%s\n", str); } 9. 当运行 以下次序 时,运行 结果是____________。 #include <stdio.h> void search_s(int (*p)[5],int n,int m,int re[4][2]); void main() { int score[4][5]={ {60,90,92,66,55}, {75,40,58,40,90}, {60,80,66,90,55}, {78,45,56,90,57} }; int result[4][2]={0}; //第一列表示 称心 条件 ,第二列表示 平均分数 search_s(score,4,5,result); for(int i=0;i<4;i++) if(result[i][0] == 1) printf("No.%d has selected, The average is %d\n",i+1,result[i][1]); } void search_s(int (*p)[5],int n,int m,int re[4][2]) { 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) { re[i][0] = 1; } else flag = 1; } } re[i][1] = 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=%d\n",sum/n); free(p); } 2.输出一个字符数小于100的字符串string,然后 在string所保存 字符串中的每个字符间加一个空格。 #include<stdio.h> #define MAX 100 void CopyString(char c[],char s[]); void Insert(char s[]); main() { char string[MAX]; scanf("%s",string); Insert(string); printf("%s",string); } void CopyString(char c[], char s[]) { int i; for (i=0; s[i]!='\0'; i++) { c[i] = s[i]; } c[i] = '\0'; } void Insert(char srcStr[]) { char strTemp[MAX]; int i = 0, j = 0; CopyString(strTemp, srcStr); while (strTemp[j] != '\0') { srcStr[i] = strTemp[j]; i++; j++; srcStr[i] = ' '; i++; } srcStr[i] = '\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 a[100],n,k,i; scanf("%d",&n); k=getprime(a,n); for (i=0;i<k;i++) printf("%d ",a[i]); 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%a[i]==0 ) /*揣摸 是否 为已求解素数的倍数*/ break ; /*假设整除,那么m不是素数*/ if (i==k) a[k++] = m; /*m为素数,保存 到数组a中*/ } return k ; /*前去 素数个数*/ } /*假设输出20,那么输出2 3 5 7 11 13 17 19*/ 精选可编辑
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服