本程序片段使某文本框只能输入正整数的两个整数有序输出根据此原理叙述或者写出文本框只能输入正整数一个字符串使有序(增序)输出的原理或程

C语言程序设计试题_伤城文章网
C语言程序设计试题
C 语言试题班号 姓名题号 分数一二三四五六七八九十总分附加题一、选择题: (20 分,每题 2 分) 1.以下不正确的 C 语言标识符是( ) 。 A. ABC B. abc C. a_bc D. ab.c 2.C 程序是由 构成的。 A. 主程序与子程序 B. 主函数与若干子函数 C. 一个主函数与一个其它函数 D. 主函数与子函数 3.以下说法中正确的是: 。 A. 在 C 语言中,实参与其对应的形参各占独立的存储单元; B. 在 C 语言中,实参与其对应的形参共占同一个存储单元; C. 在 C 语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元; D. 在 C 语言中,形参是虚拟的,不占存储单元。 4.设 n=3;则 n++的结果是( ) 。 A. 2 B. 3 C. 4 D. 5 5.设整型变量 n=10,i=4,则赋值运算 n%=i+1 执行后,n 的值是( ) 。 A. 0 B. 1 C. 2 D. 3 6.凡是函数中未指定存储类别的局部变量其隐含的存储类别是( ) 。 A. 自动(auto) B. 静态(static) C. 外部(extern) D. 寄存器(register) 7.在 while(x)语句中的 x 与下面条件表达式等价的是: 。 A. x= =0 B. x= =1 C. x!=1 D. x!=0 8.若有以下说明和语句: struct worker { ~char * }work, *p=& 则以下引用方法不正确的是( ) 。 A. work.no B. (*p).no C. p-&no D. work-&no 9.以下对二维数组进行正确初始化的是( ) 。 A. int a[2][3]={{1,2},{3,4},{5,6}}; B. int a[][3]={1,2,3,4,5,6}; C. int a[2][]={1,2,3,4,5,6}; D. int a[2][]={{1,2},{3,4}}; 10.二维数组 a 有 m 列,则在 a[i][j]之前的元素个数为: 。 A) j*m+i B) i*m+j C) i*m+j-1第 1 页(共 6 页) 班级:学号:姓名:D) i*m+j+1 二、给出下列程序的运行结果:(20 分,前四题每题 3 分,后两题每题 4 分) 1.#include&stdio.h& main() { int i=16,j,x=6; j=i+++1; x*=i=j; printf(“%d,%d\n”,j,x); } 运行结果是: 2.#include&stdio.h& #include&math.h& main() { int a=1,b=4,c=2; float x=10.5,y=4.0,z; z=(a+b)/c+sqrt((double)y)*1.2/c+x; printf(“%f\n”,z); } 运行结果是: 3.#include&stdio.h& main() { int a,b,c,d; a=c=0; b=1; d=20; if(a) d=d-10; else if(!b) if(!c) d=25; else d=15; printf(“d=%d\n”,d); } 运行结果: 4. main() { int i=10; switch(i){ case 9: i+=1; case 10: i+=1; case 11: i+=1;2 班级:学号: } printf(“%d”,i);姓名:default : i+=1;} 运行结果: 5.#include&stdio.h& main() { int a[]={1,2,3,4},i,j,s=0; j=1; for(i=3;i&=0;i--) { s=s+a[i]*j; j=j*10; } printf(&s=%d\n&,s); } 运行结果: 6.func(int x) { x=20; } main() { int x=10; func(x); printf(“%d”,x); } 运行结果: 三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (20 分,每空 2 分) 1.已知能被 4 整除而不能被 100 整除的或者能被 400 整除的年份是润年,则判断某一年是否是润年的程序如下: main() { int year, scanf(“%d”,&year); if( ) leap=1; else leap=0; if( ) printf(“是润年”); else printf(“不是润年”); } 2.将 100 至 200 间不能被 3 整除的数输出: main() {3 班级:学号: for(n=100;n&=200;n++) { if(n%3==0) printf(“%d ”,n); }姓名:;} 3.判断 m 是否是素数 #include &math.h& main() { int m,i,k; scanf(“%d”,&m); k=sqrt(m); for(i=2;i&=k;i++) if(m%i==0) ; if(i&=k+1) printf(“%d is a prime number\n”,m); else printf(“%d is not a prime number\n”,m); } 4.给定一 3*4 的矩阵,求出其中值最大的元素的值,及所在的行列号。 main() { int i,j,row=0,colum=0, static int a[3][4]={{1,2,3,4}{9,8,7,6}{10,-10,-4,4}}; ; for(i=0;i&=2;i++) for(j=0;j&=3;j++) if(a[i][j]&max) { max=a[i][j]; ; ; } printf(“max=%d,row=%d,colum=%d\n”,max,row,colum); } 5. 下面函数的功能是将两个字符串 s 和 t 连接起来。 char *conj(char *s, char *t) { char *p=s; while(*s) ; while(*t) { *s= ; s++; t++; } *s=’\0’;4 班级: }学号: ;姓名:四、编程(40 分) -4 1.计算 1-1/2+1/3-1/4+?+1/99-1/100+?,直到最后一项的绝对值小于 10 为止。 (13 分) 2.输入一行字符,分别统计求出其中英文字母、空格、数字和其他字符的个数并输出结果。 (13 分) 3.任意从键盘输入 10 个整数,按从小到大的顺序排序,并输出结果。 (14 分)C 语言 考试题班号 姓名题号 分数一二三四五六七八九十总分附加题说明:请将答案写在答题纸的相应题号后面! ! ! ! ! 一、填空题:(24 分 每空 1.5 分) 1 . 已 知 : int *p, 则 语 句 p=&a; 中 的 运 算 符 & 的 含 义 是 ( 1 ) 。 2. 凡 在 函 数 体 内 没 有 明 显 存 储 类 别 说 明 的 变 量 是 ( 2 ) 。 3 . 已 知 : str uct { } 则 size of(tes t) 的 值 是 ( 3 ) 。 4. 程 序 填 空 : ( 1 ) 下 面 的 程 序 是 main 函 数 利 用 函 数 abcd 来 交 换 main 中 的 两 个 变 量 的 值 。 # include &stdio.h& m ain() { float x= 10,y=20; abcd( 4 ) ; printf( “ %f,%f ” ,x,y); } a bcd(x,y) ( 5 ); { temp=( 6 ) ; ( 7 ); ( 8 ); } ( 2 ) 下 面 的 程 序 是 使 用 冒 泡 法 对 输 入 的 10 个 数 据 从 小 到 大 排 序 。 排 好 序 的 10 个 数 分 两 行 输出。 #include &stdio.h& main()5 班级: { (学号: 9 );姓名:int j,k; pri ntf( “ input 10 numbe rs please \n ” ); for (j=0; ( 10 ) ;j++)scanf ( “ %f ” ,&a[j]); pri ntf( “ \n ” ); for (j=0; ( for(k= 0; ( if( 13 ) 11 12 ) ;j++) ) ;k++){ x= a[k]; ( 14 );a[ k+1]=x; } printf ( “ The sorted 10 nu mbers:\n ” ); for(j= 0; ( { if( 16 15 ) ) ;j++)pri ntf( “ \n ” ); prin tf( “ %f\t ” ,a[j]) ; } printf ( “ \n ” ); } 二、单项选择题: (20 分 每题 2 分) 1. C 语 言 中 基 本 数 据 类 型 包 括 ( A. 整 型 、 实 型 、 逻 辑 型 B. 整 型 、 实 型 、 字 符 型 C. 整 型 、 字 符 型 、 逻 辑 型 D. 整 型 、 实 型 、 逻 辑 型 、 实 型 )。2 . 已 知 int i,a; 执 行 语 句 ” i=(a=2* 3, a*5),a+6; ” 后 , 变 量 a 的 值 是 ( ) 。 A. 6 B. 12 C. 3 0 D. 36 3. C 语 言 中 规 定 函 数 的 返 回 值 的 类 型 是 由 ( ) 。 A. return 语 句 中 的 表 达 式 类 型 所 决 定 B. 调 用 该 函 数 时 的 主 调 用 函 数 类 型 所 决 定 C. 调 用 该 函 数 时 系 统 临 时 决 定6 班级:学号:姓名:D. 在 定 义 该 函 数 时 所 指 定 的 函 数 类 型 所 决 定 4 . 不 能 进 行 ++ 和 -- 运 算 的 数 据 类 型 是 ( ) 。 A. 指 针 B. doub le C. int D. long )。5 . 为 了 判 断 两 个 字 符 串 s1 和 s2 是 否 相 等 , 应 当 使 用 ( A. C. if(s1==s2 ) B. if(s1=s2 ) Dif(strcpy(s1 ,s 2))if (st rcmp(s1,s2))6. 若 有 以 下 说 明 和 语 句 : struct stu { char * }st udent , *p=& 则以下引用方法不正确的是( ) 。 A. studen t.no B. (*p).n o C. p-&no D. student-& no 7. 以 下 不 是 死 循 环 的 语 句 为 ( ) 。 E. for(; ; x+=k); F. while(1){x++}; G. for(k=10; ;k--)su m+ =k; H. for(;(c=getchar() )! = ’ \n ’ ;)printf( “ % c ” ,c); 8. 以 下 错 误 的 描 述 是 ( ) 。 A. 不 同 的 函 数 中 可 以 使 用 相 同 的 变 量 名 B. 形 式 参 数 是 局 部 变 量 C. 一 个 函 数 内 部 定 义 的 变 量 只 能 在 本 函 数 范 围 内 有 效 D. 在 一 个 函 数 内 部 的 复 合 语 句 中 定义的变量可以在 本函数范围内有效 9. 若 用 数 组 名 作 为 函 数 调 用 时 实 参 , 则 实 际 上 传 递 给 形 参 的 是 ( ) 。 A. 数 组 首 地 址 B. 数 组 的 第 一 个 元 素 值 C. 数 组 中 全 部 元 素 的 值 D. 数 组 元 素 的 个 数 10 . 已 知 int a,*p=& 则 为 了 得 到 变 量 a 的 值 , 下 列 错 误 的 表 达 式 是 ( ) 。 A . *&p B . *p C . p[0] D . *&a 三、判断下列问题描述及语句正确与否,正确的打“√” 。 (16 分 每题 2 分) 1.C 的关键字都是小写的。 2.一个复合语句是作为一个语句处理的且在逻辑上相互关联的一组语句。 3.# define PI=3.14159 4.局部变量在进入代码块时生成,退出代码块时消失。 5.int a=.函数可以嵌套定义,也可嵌套调用。 7. switch 与 if 不同,switch 只能测试是否相等,而 if 中还能测试关系和逻辑表达式。 8.break 和 continue 语句都可用于选择结构和循环结构中。 四、读程序,写出运行结果:(20 分 每题 5 分) 1 . main()7 班级:学号:姓名:{ int a= 5,b=4,x,y; x=a++*a++*a+ +; printf( “ a=% d,x=%d \n ” ,a,x); y=--b*--b*-- printf( “ b=%d,y=% d\ n ” ,b,y); } 2 . #include&stdio .h & ma in() { struct s1 {char c[4], *}s1={ “ abc ” , ” de f ” }; struct s2 {char * struct s 1 s s1;}s2 ={ “ ghi ” ,{ ” jkl ” , ” mno ” }}; printf( “ %c%c\n ” ,s1.c[0],*s1.s) ; printf( “ %s%s\n ” ,s 1.c,s1.s); printf( “ %s%s\n ” ,s 2.cp,s2.ss1.s); printf( “ %s%s\n ” ,+ +s2.cp,++s2.ss1.s ); } 3 . #include&stdio .h & fu nc(int b[]) { for(j=0;j&4;j++) b[j]=j; } ma in() {i nt a[4],k; func(a); for(k=0;k&4;k++) printf( “ %d\n ” ,a [k ]); } 6. void fun() { static in t a=5; a ++; p rintf( “ a =%d\n ” ,a); } main() { for(m=0;m&=1;m++) fun(); } 五、编程(20 分) 1.有一个 3 ? 4 的矩阵,找出最大值及该值所在位置。(10 分) 2.写一个函数,计算 x 的 n 次方。 (10 分)8 班级:学号:姓名:班号 C 语言程序设计 试题 姓名 三 四 五 六 七 八 九 十 总分题号 分数一二注意:请将答案写在答题纸上,否则无效! ! ! 一、判断题:(12 分 每题 2 分) 1、C 语言规定:在一个源程序中,main 函数的位置必须在最开始。 2、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是 8。 3、凡是函数中未指定存储类别的局部变量,其隐含的存储类别为静态存储。 4、C 语言中规定函数的返回值的类型是由 return 语句中的表达式类型所决定。 5、在 C 语言中对文件操作必须先关闭当前文件,然后再打开一个新文件。 6、C 语言程序的基本单位是语句。 二、选择题:(20 分 每题 2 分) 1、假设已定义 char a[10]和 char *p=a, 下面的赋值语句中,正确的是: A) a[10]=”Turbo C”; B) a=”Turbo C”; C) *p=”Turbo C”; D) p=”Turbo C”;9 班级:学号:姓名:2、下面关于运算符优先顺序的描述中正确的是: A)关系运算符& 算术运算符& 赋值运算符& 逻辑与运算符 B)逻辑 运算符& 关系运算符& 算术运算符& 赋值运算符 C)赋值运算符& 逻辑与运算符& 关系运算符& 算术运算符 D)算术运算符& 关系运算符& 赋值运算符& 逻辑与运算符 3、以下正确的描述是。 A)continue 语句的作用是结束整个循环的执行 B)只能在循环体内和 switch 语句体内使用 break 语句 C)在循环体内使用 break 语句或 continue 语句的作用相同 D)从多层循环嵌套中退出时, 只能使用 goto 语句 4、用 8 位无符号二进制数能表示的最大十进制数为 A) 127 B) 128 C) 255 D)256 5、下列叙述中正确的是: A) C 语言中既有逻辑类型也有集合类型 B) C 语言中没有逻辑类型但有集合类型 C)C 语言中有逻辑类型但没有集合类型 D) C 语言中既没有逻辑类型也没有集合类型 (第 1 页 共 8 页) 6、以下对 C 语言函数的有关描述中,正确的是: A)调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B)函数既可以嵌套定义又可以递归调用 C)函数必须有返回值,否则不能使用函数 D) 程序中有调用关系的所有函数必须放在同一个源程序文件中 7、在 C 语言中,不正确的 int 类型的常数是: A) 32768 B)0 C) 037 D) 0xaf 8、以下叙述中不正确的是: A)在不同的函数中可以使用相同名字的变量 B)函数中的形式参数是局部变量 C)在一个函数内定义的变量只在本函数范围内有效 D)在一个函数内的复合语句中定义的变量在本函数范围内有效 9、以下说法中正确的是: A)#define 和 printf 都是 C 语句 B)#define 是 C 语句,而 printf 不是 C)printf 是 C 语句,但#define 不是 D)#define 和 printf 都不是 C 语句 10、若有以下定义和语句:double r=99,*p=&r; *p=r;则以下正确的叙述是: A)以下两处的*p 含义相同,都说明给指针变量 p 赋值 B)在“double r=99,*p=&r;”中,把 r 的地址赋值给了 p 所指的存储单元10 班级:学号:姓名:C)语句“*p=r;”把变量 r 的地址值赋给指针变量 p D)语句“*p=r;”取变量 r 的值放回 r 中 三、填空题:(24 分 每空 2 分) 1、下面程序的功能是:输入一行字符,统计其中有多少个单词,单词之间 用空格分开。请填空完成。 # include &stdio.h& main() {char str[81]; int I,( 【1】 ); gats(str); for(I=0;( 【2】 )!=’\0’;I++) if(c==’ ’)word=0; else if( 【3】 ) {word=1; ( 【4】 )} printf(“There are %d word in line. \n”,num); } 2、下面程序的功能是:用选择排序法对数组中 10 个数据按由小到大排序。请填空完成。 void sort(int a[],int n) {( 【5】 ) for(I=0;I&n-1;I++) { ( 【6】 ) for(j=I+1;j&n;j++) if(a[j]&a[k])k=j; if( ( 【7】 )){t=a[k];a[k]=a[I];a[I]=t;} } } main() {int b[10],I; printf(“enter the array\n”); for(I=0;I&10;I++) scanf(“%d”.&b[I]); ( 【8】 ) printf(“the sorted array: \n”); for(I=0;I&10;I++) printf(“%d “,b[I]); printf(“\n”); } 3、判断 m 是否是素数 #include &math.h& main() { int m,i,k; scanf(“%d”,&m); ( 【9】 ) for(i=2;i&=k;i++)11 班级:学号:姓名:if(m%i==0) (【10】 ); if(i&=k+1) printf(“%d is a prime number\n”,m); else printf(“%d is not a prime number\n”,m); } 4、假设当年产值为 100,工业产值的增长率分别为 6%、8%、10%、12%时, 求工业产值分别经过多少年可实现翻番。请填空完成。 main() {int y[4],i; float s[4]={100,100,100,100},c[4]={.06,.08,.10,.12}; clrscr(); for(i=0;i&4;i++) {y[i]=0; while( 【11】 ) {s[i]=s[i]*(1+c[i]); ( 【12】 )} printf(&\ny=%d\ts=%.2f\tc=%.2f&,y[i],s[i],c[i]); } } 四、读程序,写出程序运行结果。(24 分 每题 4 分) 1、 main() {int x=10,y=10,I; for(I=0;I&8;y=++I) printf(“%d %d”,x--,y); } 2、main() {int m=37,n=13; while(m!=n) {while(m&n) m=m-n; while(n&m) n-=m; } printf(“m=%d\n”,m); } 3、main() { int x=9; for(;x&0;x--) {if(x%3==0) {printf(“%d”,--x); } } } 4、 main() { int a=7,b=2; float x=2.5,y=4.7,z; z=x+a%3*(int)(x+y)%2/4;12 班级:学号:姓名:printf(“%f\n”,z); z= (a+b)/2+(int)x%(int)y; printf(“%f”,z); } 5、main() {int x[]={0,1,2,3,4,5,6,7,8,9}; int s,I,*p; s=0; p=&x[0]; for(I=1;I&10;I+=2) s+=*(p+I); printf(“sum=%d”,s); } 6、main() {int k=4,m=1,p; p=func(k,m); printf(&%d&,p); p=func(k,m); printf(&%d&,p); } func(int a,int b) {static int m=0,i=2; i+=m+1; m=i+a+b; return(m); } 五、编程题:(20 分 每题 10 分) 1、利用指针完成。输入两个整数,按先大后小的顺序输出。 2、编程完成两个字符串的连接。 (不使用 strcat( )函数) 。一、判断题: (12 分) 1、 2、 3、 4、 5、 6、 二、选择题: (共 20 分,每题 2 分) 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 三、填空题: (共 24 分,每空 2 分) 1、 2、 3 、 4、 5、 6、 7、 8、 9、 10、 11、 12、 四、读程序,写出程序的运行结果(共 24 分,每题 4 分) 1、 2、 3、 4、 5、 6、13 班级:学号:姓名:五、编程: (20 分) 1、2、14 班级:学号:姓名:C 语言 考试题班号 姓名题号 分数一二三四五六七八九十总分附加题说明:考试成绩分为三部分:实验成绩占 10 分,卷面笔试成绩占 45 分,机考成绩占 45 分,满分为 100 分。本试 卷为卷面笔试部分,卷面满分为 45 分。 一、填空题(6 分,每题 2 分)15 班级:学号:姓名:1. C 语 言 中 基 本 数 据 类 型 包 括 。 2 .已知能被 4 整除而不能被 100 整除的或者能被 400 整除的年份是闰年,则判断某一年 year 是否是闰年的表达式 为: 。 3.设有下列登记表,采用最佳方式对它进行类型定义。 姓名 性别 出生年月 年 月 日 低收入 家庭收入状况 中等收入 高收入 家庭收入 状况标记姓名用 name 表示, 性别用 sex 表示, 出生年月用 birthDay 表示, 年用 year 表示,月用 month 表示,日用 date 表 示,家庭收入状况用 salary 表示,低收入用 low 表示,中等收入用 middle 表示,高收入用 high 表示,家庭收入状 况标记用 mark 表示。二、判断下列问题描述正确与否,正确的打“√” ,错误的打“×” 。(3 分 ,每题 1 分) 1.#define PI=3.14159;不是 C 语句。 ( ) 2.在 C 语言中,可以用 typedef 定义一种新的类型。 ( ) 3.共用体所占的内存空间大小取决于占空间最多的那个成员变量。 ( ) 三、选择题: (10 分,每题 1 分) 1.以下不正确的 C 语言标识符是( ) 。 A. AB1 B. a2_b C. _ab3 D. 4ab 2.若有定义 int (*p)[4],则标识符 p 是一个 。 A、指向整型变量的指针变量 B、指向函数的指针变量 C、指向有四个整型元素的一维数组的指针变量 D、指针数组名,有四个元素,每个元素均为一个指向整型变量的指针 3.若 用 数 组 名 作 为 函 数 调 用 时 实 参 , 则 实 际 上 传 递 给 形 参 的 是 ( ) 。 A. 数 组 首 地 址 B. 数 组 的 第 一 个 元 素 值 C . 数 组 中 全 部 元 素 的 值 D. 数 组 元 素 的 个 数 4.C 语 言 中 规 定 函 数 的 返 回 值 的 类 型 是 由 ( ) 。 E. return 语 句 中 的 表 达 式 类 型 所 决 定 F. 在 定 义 该 函 数 时 所 指 定 的 函 数 类 型 所 决 定 G. 调 用 该 函 数 时 系 统 临 时 决 定 H. 调 用 该 函 数 时 的 主 调 用 函 数 类 型 所 决 定 5.以 下 错 误 的 描 述 是 ( ) 。 A. 不 同 的 函 数 中 可 以 使 用 相 同 的 变 量 名 B. 形 式 参 数 是 局 部 变 量 C. 一 个 函 数 内 部 定 义 的 变 量 只 能 在 本 函 数 范 围 内 有 效 D. 在 一 个 函 数 内 部 的 复 合 语 句 中 定 义 的 变 量 可 以 在 本 函 数 范 围 内 有 效 6.为 了 判 断 两 个 字 符 串 s1 和 s2 是 否 相 等 , 应 当 使 用 ( )。A. if(s1 == s2) if(s1 = s2) C. if(strcpy(s1,s2)) D .if(strcmp(s1,s2) == 0)16B. 班级:学号:姓名: 。7.在 while(x)语句中的 x 与下面条件表达式等价的是: A. x!=0 B. x==1 C. x!=1 D. x==0 8.若有以下说明和语句: struct stu { char * }s tudent, *p=& 则以下引用方法不正确的是( ) 。 A. stud ent.no B. (*p) .no C. p-&no D. student-& no 9.以下对二维数组进行正确初始化的是( ) 。 I. int a[2][3]={{1,2},{3,4},{5,6}}; J. int a[2][3]={{1,2},{},{4,5}}; K. int a[][3]={1,2,3,4,5,6}; L. int a[2][]={{1,2},{3,4}}; 10.二维数组 a 有 m 行 n 列,则在 a[i][j]之前的元素个数为( A. j*n+i B. i*n+j C. i*n+j-1 D. i*n+j+1 四、写出下列程序的运行结果。(4 分,每题 1 分) 1.#include&stdio.h& void fun(int x) { x=20; } main() { int x = 10; fun(x); printf(&x = %d\n&, x); } 运行结果是: 2.#include&stdio.h& vo id fun(int b [4 ]) { for(j=0; j&4; j++ ) b[j]=j; } ma in() { int a[4] = {1,2,3, 4}, fun(a); for(k=0; k&4; k++ ) printf(&%d\n&, a[ k] );17) 。 班级: } 运行结果是:学号:姓名:3.#include&stdio.h& main() { int i = 10; switch(i) { case 9: case 10: case 11:default : } printf(&i = %d\n&, i); } 运行结果是:i+=10; i+=10; i+=10; i+=10;4. #include&stdio.h& void fun () { static i nt a=5; a++; prin tf(&a=%d\ n&, a); } main() { for(m=0; m&=1; m+ +) fun(); } 运行结果是: 五、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (3 分,每空 1 分) 从键盘输入 10 个整型数据,放入数组 a 中,求其最大值及其所在元素的下标位置,并输出。 main() { int a[10], n, pos, for (n=0; n&10; n++) scanf(&%d&, &a[n]); max = ; pos = ;18 班级:学号:姓名:for (n=0; n&10; n++) { if (a[n] & max) { max = a[n]; pos = ; } } printf(&max=%d, pos=%d\n&, max, pos); } 六、下面程序是有错误的程序,请找出其中的错误,并将正确的语句写在相应错误语句的右方空白处。 (5 分) #include &stdio.h& #include &math.h& int isprime(int m) main() { int n, printf(&Input n:&); scanf(&%d&, n); flag = isprime(n); if(flag) printf(Yes!\n&) else printf(&No!\n&); } /* 函数功能:判断 m 是否为素数 函数参数:整型变量 m 返回值: 返回 1 时,表示 m 是素数;返回 0 时,表示 m 不是素数 */ int isprime(int *m) { for (i=2; i&=sqrt(m); i++) { if(m%i = 0) return 0; } return 1; } 七、在下面任意选择 2 道题编程(14 分,每题 7 分) 1. 从键盘任意输入某班 30 个学生的成绩,将成绩按照由高到低顺序打印。 2. 自己定义一个函数,以实现和函数 strlen 相同的功能,即任意输入一个字符串,调用该函数可以计算输入 字符串的实际长度,然后打印 3. 编程计算 1! + 2! + 3! + 4! + ?. + 10!的值19 班级:学号:姓名:C 语言 考试题班号 姓名题号 分数一二三四五六七八九十总分附加题说明:考试成绩分为两部分:实验占 10%,卷面笔试占 90%,满分为 100 分。本试卷为卷面笔试部分,卷面满分为 90 分。 一、填空题(10 分,第 1 小题 4 分,其余每空 1 分) 1.设有下列登记表,请采用最佳方式定义一种数据类型来表示这些数据的集合。 婚姻状况marital 离婚日期 婚姻状况 未婚 已婚married divorcedDay 标记 年龄 marry single 配偶 子女 日 年 月 Flag Age 姓名 人数 year month date marital mark 其中,配偶姓名用 spouseName 表示,子女人数用 children 表示。 职业 姓名 性别 name sex profession2. C 语 言 中 构 造 数 据 类 型 包 括 、 、 。 3 . C 语言中用_______表示逻辑值“假” ,用________表示逻辑值“真” 。 4 . char *p[10]; 这条语句的含义是: __ ___ _ 。 二、判断下列问题描述正确与否,正确的打“√” ,错误的打“×” 。(4 分 ,每题 1 分)_1.如果在程序中定义静态变量和全局变量时,未明确指明其初始值,那么它们可以在程序编译阶段自动被初始 化为 0 值。 ( )20 班级:学号:姓名: ) )2.在 C 语言中,可以用 typedef 定义一种新的数据类型。 ( 3.在 C 语言中,实参与其对应的形参各占独立的存储单元。 ( 4. 在 C 语言中,函数的定义可以嵌套。 ( )三、选择题: (10 分,每题 2 分) 1.若 用 数 组 名 作 为 函 数 调 用 时 的 实 参 , 则 实 际 上 传 递 给 形 参 的 是 ( A. 数 组 的 首 地 址 B. 数 组 的 第 一 个 元 素 值 C . 数 组 中 全 部 元 素 的 值 D. 数 组 元 素 的 个 数 2.判 断 两 个 字 符 串 s1 和 s2 相 等 , 应 当 使 用 ( )。 A. if (s1 == s2) B. if (s1 = s2) C. if (!strcmp(s1,s2 )) D. if (strcmp(s1 ,s 2)) 3.在 while(x)语句中的 x 与下面条件表达式等价的是: 。 A. x!=0 B. x==1 C. x!=1 D. x==0 4.二维数组 a 有 m 行 n 列,则在 a[i][j]之前的元素个数为( ) 。 A. j*n+i B. i*n+j C. i*n+j-1 D. i*n+j+1 5.设有声明语句:int a=1,b=0;则执行以下语句后输出为: 。 switch (a) { case 1: switch (b) { case 0: printf(&**0**&); case 1: printf(&**1**&); } case 2: printf(&**2**&); } A)**0** B) **0****2** C)**0****1****2** D) 有语法错误 四、写出下列程序的运行结果。(6 分,每题 2 分) 1.#include&stdio.h& void Fun(int *y) { printf(&*y = %d\n&, *y); *y = 20; printf(&*y = %d\n&, *y); } main() { int x = 10; printf(&x = %d\n&, x); Fun(&x); printf(&x = %d\n&, x); } 运行结果是:21) 。 班级:学号:姓名:2.#include&stdio.h& in t Fun(int x) { static int y = 0; y += } ma in() { intx = 10, y = 0,for(k=0; k&2; k++ ) { y = Fun(x); printf(&y = %d\n& , y); } } 运行结果是: 3.#include&stdio.h& main ( ) { char a[] = &programming& , b[] = &language& ; char *p1, *p2 ; p1 = p2 = for (i=0; i&7; i++) { if (*(p1+i) == *(p2+i)) printf(&%c& ,*(p1+i)) ; } printf(&\n&); } 运行结果是: 五、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (10 分,每空 2 分) 1. 下面这个程序用于读入 5 个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。读入 5 个数据 后,程序结束运行。 #include &stdio.h&22 班级: main() { int学号:姓名:i,for (i=1; i&=5; i++) { printf(&Please enter n:&); scanf(&%d&, &n); if (n &= 0) _____________; printf(&n = %d\n&, n); } printf(&Program is over!\n&); } 2. 韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从 1 至 5 报数,最末一个士兵报的数为 1; 按从 1 至 6 报数,最末一个士兵报的数为 5;按从 1 至 7 报数,最末一个士兵报的数为 4;最后再按从 1 至 11 报数, 最末一个士兵报的数为 10。下面程序的主要功能是计算韩信至少有多少兵。 #include &stdio.h& main() { int x = 1; int find = 0; for (x=1; ________; x++) { if (x%5==1 && x%6==5 && x%7==4 && x%11==10) { printf(& x = %d\n&, x); ____________; } } } 3. 下面程序是计算字符串中实际字符的个数,即实现和字符串处理函数 strlen 相同的功能。 unsigned int MyStrlen(char str[]) { unsigned int len = 0, for (i=0; str[i]!= ; i++) { } } 六、在下面这个程序中,要求其实现的功能是对用户输入的任意整数计算其阶乘,输入小于等于-1 的数时退出程 序。下面给出的是一个有错误的程序,请找出其中的错误,并改正之。 (10 分) #include &stdio.h& #define END -1; long Factorial(int x); main() {23 班级:学号:姓名:while (1); { printf(&input x:); scanf(&%d&, x); if (x &= END) break else printf(&%d! = %d\n&, x, Factorial(x)); } } long Factorial(int x) { for (i=1, i&=x, i++) result *= } 七、编程(40 分,第 1 和 2 小题各 10 分,第 3 小题 20 分) 1.编程计算 1!+2!+3!+??+10!的值。 2. 从键盘任意输入 10 个不相同的整数,然后,输入要查找的数 x,如果在这 10 个数中找到 x,则打印“Found!” ; 如果找不到,则打印“Not found!” 。 3.从键盘任意输入某班 20 个学生的成绩,打印最高分,并统计不及格学生的人数。24 班级:学号:姓名:C 语言 试题 题号 分数 一 二 三 四 五 六 七 卷面总分班号 姓名说明:本试卷卷面满分为 100 分。总成绩将按平时实验成绩和卷面笔试成绩各自所占比例折合后累加计算。 一、判断对错,正确的打“√” ,错误的打“×” 。 (8 分,每题 1 分) 1. 指针变量和变量的指针是同一个名词不同说法。 ( ) 2. 在 C 语言中,二维数组元素是按行存放的。 ( ) 3. 数组不可以整体赋值。 ( ) 4. 向函数传递参数时,实参和形参不可以重名。 ( ) 5. 一个数组能够存储不同类型的数据( ) 。 6. 指向不同类型数组的两个指针不能进行有意义的比较。 ( ) 7. union ch { int a[3]; }; 这样的一个数据类型共占用内存数为 6 字节。 ( ) 8. 设有定义:char a[2][3]={1,2,3,4}; 则数组元素 a[1][1]的值为 0。 ( ) 二、 单项选择题: (10 分,每题 2 分) 1.下列对字符串的定义中,错误的是: 。 A) char str[7] = &FORTRAN&; B) char str[] = &FORTRAN&; C) char *str = &FORTRAN&; D) char str[] = {'F','O','R','T','R','A','N',0}; 2.设有声明语句:int a=1,b=0;则执行以下语句后输出: 。 switch (a) { case 1: switch (b) { case 0: printf(&**0**&); case 1: printf(&**1**&); } case 2: printf(&**2**&); } A)**0** B)**0****2** C)**0****1****2** D)有语法错误 3.在 while(x)语句中的 x 与下面条件表达式等价的是: A) x!=0 B) x==1 C) x!=1 D) x==0 4.已知 struct sk {25。 班级:学号:姓名: }data,*p; 若有 p=&data 则对 data 中成员 a 的正确引用是________。 A) (*p).data B) (*p).a C) p-&data.a D) p.data.a 5.C 语言中形参的缺省存储类别是: 。 A) 自动(auto) B) 静态(static) C) 寄存器(register) D)外部(extern) 三、 1. 写出下列程序的运行结果。(10 分,每题 2 分)#include &stdio.h& main() { int x = 8 , y = 12; printf(&%d %d\n&, x++, ++y); printf(&%d %d\n&, x, y); } 运行结果是:2. #include &stdio.h& main() { int x, scanf(&%2d%*3s%2d&, &x, &y); printf(&%d&, x + y); } 程序执行时从键盘输入:L 运行结果是:3. #include &stdio.h& void Func(int b[]) { for (j=0; j&4; j++) { b[j] = } } main()26 班级: {学号:姓名:static int a[] = {5,6,7,8},i; Func(a); for (i=0; i&4; i++) { printf(&%d\n&, a[i]); } } 运行结果是:4. #include &stdio.h& main() { int cube( int y ); for(x=1;x&=5;x++) printf(“%d ”, cube( x ) ); } int cube( int y ) { return 2*y; }运行结果是: 5. #include &stdio.h& void Func(void); main() { for (i = 0; i & 2; i++) { Func(); } } void Func(void) { static int times = 1; printf(&Func() was called %d time(s).\n&, times++);27 班级: } 运行结果是:学号:姓名:四、 阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (12 分,每空 2 分) 1. 下面这个程序用于读入 5 个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。读入 5 个数据 后,程序结束运行。 #include &stdio.h& main() { int i, for (i=1; i&=5; i++) { printf(&Please enter n:&); scanf(&%d&, ); if (n &= 0) _____________; printf(&n = %d\n&, n); } printf(&Program is over!\n&); } 2. 下面函数实现 strcmp 的功能, 将两个字符串 s 和 t 进行比较, 然后将两个字符串中第一个不相同字符的 ASCII 码值之差作为函数值返回。 int MyStrcmp(char s[], char t[]) { for (i=0; s[i] == t[i]; i++ ) { if (s[i] == ) return 0 ; } return ( ); }3.下面程序模拟了鹘子的 6000 次投掷,用 rand 函数产生 1 到 6 之间的随机数 face,然后统计 1 到 6 每一面出现 的机会存到数组 frequency 中。 main() { int face,roll,frequency[7]={0}; strand(time(NULL)); for(roll=1;roll&=6000;roll++) { face= ; ++ ; } for(face=1;face&=6;face++) { printf(“%d,%d”,face,frequency[face]);28 班级: } }学号:姓名:五、 在下面给出的程序中,有 9 处错误(包括语法错误和逻辑错误) ,请找出其中的错误,并改正之。 (18 分, 每找对 1 个错误,加 1 分,每修改正确 1 个错误,再加 1 分。 ) 1.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。 #include &stdio.h& #include &string.h& #define ARR_SIZE = 80; main() { char str[ARR_SIZE]; int len, int letter=0,digit=0,space=0,other=0; printf(&请输入一个字符串:&); gets(str); len = strlen(str); for (i=0; i& i++); { if (a=&str[i]&=z || A=&str[i]&=Z) { letter ++; } else if (0=&str[i]&=9) { digit ++; } else if (str[i]=' ' ) { space ++; } else other ++; } printf(&英文字符数:%d\n&, letter); printf(&数字字符数:%d\n&, digit); printf(&空格数:%d\n&, space); printf(&其他字符数:%d\n&, other); } 2.任意输入英文的星期几,在查找星期表后输出其对应的数字。 #include main() { int int char &string.h&i, findFlag = 0; x[10];29 班级:学号:姓名: &Monday&, &Tuesday&, &Wednesday&, &Thursday&, &Friday&, &Saturday&};char weekDay[7][] = {&Sunday&,printf(&请输入一个字符串:&); scanf(&%s&, &x); for (i=0; i & 7 && !findF i++) { if (x = weekDay[i]) { pos = findFlag = 1; } } if (findFlag=1) { printf(&%s 是 %d\n&, x, pos); } else { printf(&没有找到!\n&); } } 六、 编程(42 分,每小题 14 分) 1.编程计算 a+aa+aaa+??+aa?a(n 个 a)的值,要求 n 和 a 由用户从键盘输入。 2. 给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。90 分以上为‘A’,80~89 分为 ‘B’,70~79 分为‘C’,60~69 为‘D’,60 分以下为‘E’。 3. 从键盘任意输入某班 10 个学生的成绩, 计算总成绩并统计成绩不及格的学生人数, 要求用一维数组做函数参数, 在函数中实现输出总成绩及不及格的学生人数。班号 姓名 C 语言 试题 题号 分数 说明:本试卷卷面满分为 100 分。总成绩将按平时实验成绩和卷面笔试成绩各自所占比例折合后累加计算。 一、单项选择题: (10 分,每题 2 分) 1.以下能对外部的二维数组 a 进行正确初始化的语句是: 。 A) int a[2][] = {{1,0,1},{5,2,3}};30一二三四五六七八九创新实践分卷面总分 班级:学号:姓名:B) int a[][3] = {{1,2,1},{5,2,3}}; C) int a[2][4] = {{1,2,1},{5,2},{6}}; D) int a[][3] = {{1,0,2},{},{2,3}}; 2.若且有下面的程序片断,则输出结果为: for (x=3; x&6; x++) { printf((x%2) ? &**%d& : &##%d\n&, x); } A) **3 ##4 **5 A) x!=0 4.已知 struct sk { int float }data,*p; 若有 p=&data 则对 data 中成员 b 的正确引用是________。 A) (*p).data C) p-&data.b B) (*p).b D) p.data.b 。 D) i*m+j+1 B) x==1 B) ##3 **4 ##5 。 C) x!=1 D) x==0 C) ##3 **4##5 D) **3##4 **5 。3.在 if(x)语句中的 x 与下面条件表达式等价的是:5.若二维数组 a 有 m 列,则在 a[i][j]之前的元素个数为: A) j*m+i B) i*m+j C) i*m+j-1 二、写出下列程序的运行结果。(10 分,每题 2 分) 1.#include &stdio.h& main() { int i, j, int a[2][5] = {1,20,32,14,5,62,87,38,9,10}; m = a[0][0]; for (i=0; i&2; i++) for (j=0; j&5; j++) if( m&a[i][j] ) m = a[i][j]; printf(“m = %d\n”, m); } 运行结果是:2. #include &stdio.h& main() { int x, scanf(&%2d%*2s%2d&, &x, &y);31 班级: }学号: printf(&%d&, x*y);姓名:程序执行时从键盘输入:L 运行结果是:3. #include &stdio.h& void Func(int b[]) { for (j=0; j&4; j++) { b[j] = j+1; } } main() { static int a[4] = {5,6,7,8},i; Func(a); for (i=0; i&4; i++) { printf(&%d\n&, a[i]); } } 运行结果是:4. s tr uc t d at e { }; v oi d fun c( st ruc t dat e *p ) { p -&y ea r = 2 00 0; p -&m on th = 5; p -&d ay = 22 ; } m ai n( ) { d.y ea r = 1 99 9; d.m on th = 4;32 班级:学号:姓名:d.d ay = 23 ; pri nt f( “ % d,% d, %d \ n” , d .y ea r, d. mo nth , d.d ay ); fun c( &d ); pri nt f( “ % d,% d, %d \ n” , d .y ea r, d. mo nth , d.d ay ); } 运行结果是:5. #include &stdio.h& void Func(void); main() { for (i = 0; i & 2; i++) { Func(); } } void Func(void) { int times = 1; printf(&Func() was called %d time(s).\n&, times++); } 运行结果是:三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (8 分,每空 2 分) 1. 下面这个程序用于读入 5 个整数,当程序读入的数据为正整数时,则显示该数,否则,程序结束运行。 #include &stdio.h& main() { int i, for (i=1; i&=5; i++) { printf(&Please enter n:&); scanf( ); if (n &= 0) _____________; printf(&n = %d\n&, n); } printf(&Program is over!\n&);33 班级: }学号:姓名:2. 下面函数实现 strcmp 的功能,将两个字符串 s 和 t 进行比较,然后将两个字符串中第一个不相同字符的 ASCII 码值之差作为函数值返回。 int MyStrcmp(char s[], char t[]) { for (i=0; ; i++) { if (s[i] == ‘\0’) return } return (s[i]-t[i]); } 六、在下面给出的 4 个程序中,共有 15 处错误(包括语法错误和逻辑错误) ,请找出其中的错误,并改正之。 (30 分,每找对 1 个错误,加 1 分,每修改正确 1 个错误,再加 1 分。 ) 1.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。 # in cl ude & st dio .h & # in cl ude & st rin g. h& # de fi ne AR R_ SIZ E = 8 0; m ai n( ) { c ha r str [A RR _SI ZE ]; i nt le n, i nt le tt er, di gi t,sp ac e, pri nt f( & 请 输 入 一 个 字 符 串 : &) ; get s( st r); l en = st rl en (st r) ; f or ( i=0 ; i& i++ ) { i f (a =&s tr [i ]&= z && A= &s tr[ i] &= Z) { + + } e ls e if (' 0' =&s tr [i] &= '9 ') { + + } e ls e if (s tr [i] =' ' ) { + + } e ls e + + } p ri nt f(& 英 文 字 符 数 :% d\ n& , l et te r);34; 班级:学号:姓名:p ri nt f(& 数 字 字 符 数 :% d\ n& , d ig it ); p ri nt f(& 空 格 数 : %d \n& , sp ace ); p ri nt f(& 其 他 字 符 数 :% d\ n& , o th er ); } 2.任意输入一个字符串,在星期表中查找该字符串,若找到,则打印”已找到”,否则打印”没找到”。 # in cl ude & st rin g. h& m ai n( ) { i nt i nt c ha r c ha ri; fi nd F x[1 0] ; wee kD ay [ 7] [1 0]= { &S und ay &, &M on day &, &T ue sda y& , &W ed nes da y& , &T hu rsd ay &, &F ri day &, &S at urd ay &} ;p ri nt f(& 请 输 入 一 个 字 符 串 :& ); s ca nf (&% s& ,x ); f or ( i=0 ; i & 7 & & ! fi nd F i ++) { i f (x = we ek Day [i ]) { f in dF lag = 1 ; } } i f (! fin dF la g) { p rin tf (& 找 到 \n &); } e ls e { p rin tf (& 没 找 到 ! \n &) ; } } 3.爱因斯坦数学题。爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨 2 阶,则最后剩下 1 阶,若每步 跨 3 阶,则最后剩下 2 阶,若每步跨 5 阶,则最后剩下 4 阶,若每步跨 6 阶,则最后剩下 5 阶,只有每步跨 7 阶, 最后才正好 1 阶不剩。请问,这条阶梯共有多少阶? #include &stdio.h& main() { intx , find = 0;while (!find)35 班级: {学号:姓名:if (x % 2 == 1 && x % 3 == 2 && x % 5 == 4 && x % 6 == 5 && x % 7 == 0) { printf(& x = %d\n&, x); x++; } } } 4.下面函数 Squeez()的功能是删除字符串 s 中所出现的与变量 c 相同的字符。 void Squeeze(char s[], char c); { int i,j; for (i=0; s[i]!='\0'; i++) { if (s[i] != 'c') { s[i] = s[j]; j++; } } } 七、编程(42 分) 1.利用?2?2 2 4 4 6 6 ? ? ? ? ? ? ...前 100 项之积,编程计算 π 的值。 (15 分) 1 3 3 5 5 72. 编写一个函数 Inverse,实现将字符数组中的字符串逆序存放的功能。 (15 分) 3.从键盘任意输入某班 10 个学生的成绩,计算并打印平均分并统计成绩在平均分以上的学生人数。要求按照如下 给出的函数原型进行编程: int FindAver(int score[],int n, int *pAver); 要求用一维数组和指针变量做函数参数编程实现计算平均分并统计成绩在平均分以上的学生人数,然后在主函 数中打印这些统计结果,不能使用全局变量编程。 (12 分) 班号 C 语言 试题 姓名 题号 分数 说明:本试卷卷面满分为 100 分。总成绩将按平时实验成绩和卷面笔试成绩各自所占比例折合后累加计算。 一、单项选择题: (10 分,每题 2 分) 1.以下能对外部的二维数组 a 进行正确初始化的语句是: A) int a[2][] = {{1,0,1},{5,2,3}}; B) int a[][3] = {{1,2,1},{5,2,3}}; C) int a[2][4] = {{1,2,1},{5,2},{6}};36一二三四五六七八九创新实践分卷面总分。 班级:学号:姓名: 。D) int a[][3] = {{1,0,2},{},{2,3}}; 2.若且有下面的程序片断,则输出结果为: for (x=3; x&6; x++) { printf((x%2) ? &**%d& : &##%d\n&, x); } A) **3 ##4 **5 A) x!=0 4.已知 struct sk { int float }data,*p; 若有 p=&data 则对 data 中成员 b 的正确引用是________。 A) (*p).data C) p-&data.b B) (*p).b D) p.data.b 。 D) i*m+j+1 B) x==1 B) ##3 **4 ##5 。 C) x!=1 D) x==0 C) ##3 **4##5 D) **3##4 **53.在 if(x)语句中的 x 与下面条件表达式等价的是:5.若二维数组 a 有 m 列,则在 a[i][j]之前的元素个数为: A) j*m+i B) i*m+j C) i*m+j-1 二、写出下列程序的运行结果。(10 分,每题 2 分) 1.#include &stdio.h& main() { int i, j, int a[2][5] = {1,20,32,14,5,62,87,38,9,10}; m = a[0][0]; for (i=0; i&2; i++) for (j=0; j&5; j++) if( m&a[i][j] ) m = a[i][j]; printf(“m = %d\n”, m); } 运行结果是:2. #include &stdio.h& main() { int x, scanf(&%2d%*2s%2d&, &x, &y); printf(&%d&, x*y); }37 班级:学号:姓名:程序执行时从键盘输入:L 运行结果是:3. #include &stdio.h& void Func(int b[]) { for (j=0; j&4; j++) { b[j] = j+1; } } main() { static int a[4] = {5,6,7,8},i; Func(a); for (i=0; i&4; i++) { printf(&%d\n&, a[i]); } } 运行结果是:4. s tr uc t d at e { }; v oi d fun c( st ruc t dat e *p ) { p -&y ea r = 2 00 0; p -&m on th = 5; p -&d ay = 22 ; } m ai n( ) { d.y ea r = 1 99 9; d.m on th = 4; d.d ay = 23 ; pri nt f( “ % d,% d, %d \ n” ,38 班级:学号:姓名:d .y ea r, d. mo nth , d.d ay ); fun c( &d ); pri nt f( “ % d,% d, %d \ n” , d .y ea r, d. mo nth , d.d ay ); } 运行结果是:5. #include &stdio.h& void Func(void); main() { for (i = 0; i & 2; i++) { Func(); } } void Func(void) { int times = 1; printf(&Func() was called %d time(s).\n&, times++); } 运行结果是:三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (8 分,每空 2 分) 1. 下面这个程序用于读入 5 个整数,当程序读入的数据为正整数时,则显示该数,否则,程序结束运行。 #include &stdio.h& main() { int i, for (i=1; i&=5; i++) { printf(&Please enter n:&); scanf( ); if (n &= 0) _____________; printf(&n = %d\n&, n); } printf(&Program is over!\n&); } 2. 下面函数实现 strcmp 的功能,将两个字符串 s 和 t 进行比较,然后将两个字符串中第一个不相同字符的 ASCII39 班级:学号:姓名:码值之差作为函数值返回。 int MyStrcmp(char s[], char t[]) { for (i=0; ; i++) { if (s[i] == ‘\0’) return } return (s[i]-t[i]); } 六、在下面给出的 4 个程序中,共有 15 处错误(包括语法错误和逻辑错误) ,请找出其中的错误,并改正之。 (30 分,每找对 1 个错误,加 1 分,每修改正确 1 个错误,再加 1 分。 ) 1.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。 # in cl ude & st dio .h & # in cl ude & st rin g. h& # de fi ne AR R_ SIZ E = 8 0; m ai n( ) { c ha r str [A RR _SI ZE ]; i nt le n, i nt le tt er, di gi t,sp ac e, pri nt f( & 请 输 入 一 个 字 符 串 : &) ; get s( st r); l en = st rl en (st r) ; f or ( i=0 ; i& i++ ) { i f (a =&s tr [i ]&= z && A= &s tr[ i] &= Z) { + + } e ls e if (' 0' =&s tr [i] &= '9 ') { + + } e ls e if (s tr [i] =' ' ) { + + } e ls e + + } p ri nt f(& 英 文 字 符 数 :% d\ n& , l et te r); p ri nt f(& 数 字 字 符 数 :% d\ n& , d ig it ); p ri nt f(& 空 格 数 : %d \n& , sp ace );40; 班级: }学号:姓名:p ri nt f(& 其 他 字 符 数 :% d\ n& , o th er ); 2.任意输入一个字符串,在星期表中查找该字符串,若找到,则打印”已找到”,否则打印”没找到”。 # in cl ude & st rin g. h& m ai n( ) { i nt i nt c ha r c ha ri; fi nd F x[1 0] ; wee kD ay [ 7] [1 0]= { &S und ay &, &M on day &, &T ue sda y& , &W ed nes da y& , &T hu rsd ay &, &F ri day &, &S at urd ay &} ;p ri nt f(& 请 输 入 一 个 字 符 串 :& ); s ca nf (&% s& ,x ); f or ( i=0 ; i & 7 & & ! fi nd F i ++) { i f (x = we ek Day [i ]) { f in dF lag = 1 ; } } i f (! fin dF la g) { p rin tf (& 找 到 \n &); } e ls e { p rin tf (& 没 找 到 ! \n &) ; } } 3.爱因斯坦数学题。爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨 2 阶,则最后剩下 1 阶,若每步 跨 3 阶,则最后剩下 2 阶,若每步跨 5 阶,则最后剩下 4 阶,若每步跨 6 阶,则最后剩下 5 阶,只有每步跨 7 阶, 最后才正好 1 阶不剩。请问,这条阶梯共有多少阶? #include &stdio.h& main() { intx , find = 0;while (!find) { if (x % 2 == 1&& x % 3 == 2 && x % 5 == 441 班级: {学号:姓名:&& x % 6 == 5 && x % 7 == 0) printf(& x = %d\n&, x); x++; } } } 4.下面函数 Squeez()的功能是删除字符串 s 中所出现的与变量 c 相同的字符。 void Squeeze(char s[], char c); { int i,j; for (i=0; s[i]!='\0'; i++) { if (s[i] != 'c') { s[i] = s[j]; j++; } } } 七、编程(42 分) 1.利用?2?2 2 4 4 6 6 ? ? ? ? ? ? ...前 100 项之积,编程计算 π 的值。 (15 分) 1 3 3 5 5 72. 编写一个函数 Inverse,实现将字符数组中的字符串逆序存放的功能。 (15 分) 3.从键盘任意输入某班 10 个学生的成绩,计算并打印平均分并统计成绩在平均分以上的学生人数。要求按照如下 给出的函数原型进行编程: int FindAver(int score[],int n, int *pAver); 要求用一维数组和指针变量做函数参数编程实现计算平均分并统计成绩在平均分以上的学生人数,然后在主函 数中打印这些统计结果,不能使用全局变量编程。 (12 分)C 语言 试题 题号 分数42班号 姓名 二 三 四 五 六 七 创新实践分 卷面总分一 班级:学号:姓名:说明:本试卷卷面满分为 100 分。总成绩将按平时实验成绩和卷面笔试成绩各自所占比例折合后累加计算。 七、判断对错,正确的打“√” ,错误的打“×” 。 (8 分,每题 1 分) 9. C 语言程序总是从主函数开始执行,在主函数结束。 ( ) 10. 数组不可以整体赋值。 ( ) 11. 一个数组能够存储不同类型的数据( ) 。 12. 向函数传递参数时,实参和形参可以重名。 ( ) 13. 指向不同类型数组的两个指针能进行有意义的比较。 ( ) 14. 因为数组名是指向数组第一个元素的指针,所以可以与指针操作完全一样的方式操作数组名。 ( ) 15. struct ch { int a[3]; }; 这样的一个数据类型共占用内存数为 10 字节。 ( ) 16. 设有定义:char a[2][3]={1,2,3,4}; 则数组元素 a[1][1]的值为 4。 ( ) 八、 单项选择题: (10 分,每题 2 分) 1.以下能对外部的二维数组 a 进行正确初始化的语句是: 。 A) int a[2][] = {{1,0,1},{5,2,3}}; B) int a[][3] = {{1,2,1},{5,2,3}}; C) int a[2][4] = {{1,2,1},{5,2},{6}}; D) int a[][3] = {{1,0,2},{},{2,3}}; 2.若且有下面的程序片断,则输出结果为: 。 for (x=3; x&6; x++) { printf((x%2) ? &**%d& : &##%d\n&, x); } A) **3 B) ##3 C) ##3 D) **3##4 ##4 **4 **4##5 **5 **5 ##5 3.在 if(x)语句中的 x 与下面条件表达式等价的是: 。 A) x!=0 B) x==1 C) x!=1 D) x==0 4.已知 struct sk { }data,*p; 若有 p=&data 则对 data 中成员 b 的正确引用是________。 A) (*p).data B) (*p).b C) p-&data.b D) p.data.b 5.若二维数组 a 有 m 列,则在 a[i][j]之前的元素个数为: 。 A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+1 九、 1. 写出下列程序的运行结果。(10 分,每题 2 分)#include &stdio.h& main() { int i, j, int a[2][5] = {1,20,32,14,5,62,87,38,9,10};43 班级:学号:姓名:m = a[0][0]; for (i=0; i&2; i++) for (j=0; j&5; j++) if( m&a[i][j] ) m = a[i][j]; printf(“m = %d\n”, m); } 运行结果是:2. #include &stdio.h& main() { int x, scanf(&%2d%*2s%2d&, &x, &y); printf(&%d&, x*y); } 程序执行时从键盘输入:L 运行结果是:3. #include &stdio.h& void Func(int *b) { for (j=0; j&4; j++) { *(b+j) = } } main() { static int a[4] = {5,6,7,8},i; Func(a); for (i=0; i&4; i++) { printf(&%d\n&, a[i]); } } 运行结果是: 4. #include &stdio.h& main() {44 班级:学号: int cube( int y );姓名:for(x=1;x&=5;x++) printf(“%d ”, cube( x ) ); } int cube( int y ) { return y*y; }5. #include &stdio.h& void Func(void); main() { for (i = 0; i & 2; i++) { Func(); } } void Func(void) { int times = 1; printf(&Func() was called %d time(s).\n&, times++); } 运行结果是: 十、 阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (12 分,每空 2 分) 1. 下面这个程序用于读入 5 个整数,当程序读入的数据为正整数时,则显示该数,否则,程序结束运行。 #include &stdio.h& main() { int i, for (i=1; i&=5; i++) { printf(&Please enter n:&); scanf( ); if (n &= 0) _____________; printf(&n = %d\n&, n); } printf(&Program is over!\n&);45 班级: }学号:姓名:2. 下面函数实现 strcmp 的功能,将两个字符串 s 和 t 进行比较,然后将两个字符串中第一个不相同字符的 ASCII 码值之差作为函数值返回。 int MyStrcmp(char s[], char t[]) { for (i=0; ; i++) { if (s[i] == ‘\0’) return } return (s[i]-t[i]); } 3.编程输出下三角形式的乘法九九表 main() { int m,n; for (m=1;m&10;m++) { for(n=1; ;n++) { ; } printf(“\n”); } 十一、 在下面给出的程序中,有 9 处错误(包括语法错误和逻辑错误) ,请找出其中的错误,并改正之。 (18 分, 每找对 1 个错误,加 1 分,每修改正确 1 个错误,再加 1 分。 ) 1.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。 # in cl ude & st dio .h & # in cl ude & st rin g. h& # de fi ne AR R_ SIZ E = 8 0; m ai n( ) { c ha r str [A RR _SI ZE ]; i nt le n, i nt le tt er, di gi t,sp ac e, pri nt f( & 请 输 入 一 个 字 符 串 : &) ; get s( st r); l en = st rl en (st r) ; f or ( i=0 ; i& i++ ) ; { i f (a =&s tr [i ]&= z && A= &s tr[ i] &= Z) { + + } e ls e if (0 =& str [i ]&= 9)46; 班级: {学号:姓名:+ + } e ls e if (s tr [i] =' ' ) { + + } e ls e + + } p ri nt f(& 英 文 字 符 数 :% d\ n& , l et te r); p ri nt f(& 数 字 字 符 数 :% d\ n& , d ig it ); p ri nt f(& 空 格 数 : %d \n& , sp ace ); p ri nt f(& 其 他 字 符 数 :% d\ n& , o th er ); } 2.任意输入一个字符串,在星期表中查找该字符串,若找到,则打印”已找到”,否则打印”没找到”。 # in cl ude & st rin g. h& m ai n( ) { i nt i nt c ha r c ha ri; fi nd Fla g = 0; x[1 0] ; wee kD ay [ 7] [1 0]= { &S und ay &, &M on day &, &T ue sda y& , &W ed nes da y& , &T hu rsd ay &, &F ri day &, &S at urd ay &} ;p ri nt f(& 请 输 入 一 个 字 符 串 :& ); s ca nf (&% s& , & x); f or ( i=0 ; i & 7 & & ! fi nd F i ++) { i f (x = we ek Day [i ]) { f in dF lag = 1 ; } } i f (f ind Fl ag =1) { p rin tf (& 找 到 \n &); } e ls e { p rin tf (& 没 找 到 ! \n &) ; } }47 班级:学号:姓名:十二、 编程(42 分,每小题 14 分) 1.利用?2?2 2 4 4 6 6 ? ? ? ? ? ? ...前 100 项之积,编程计算 π 的值。 1 3 3 5 5 72.编程设计一个简单的计算器程序。要求根据用户从键盘输入的表达式: 操作数 1 运算符 op 操作数 2 计算表达式的值,指定的算术运算符为加(+) 、减(-) 、乘(*) 、除(/) 。 3. 从键盘任意输入某班 10 个学生的成绩, 计算平均分并统计平均分以上的学生人数, 要求用一维数组做函数参数, 在函数中实现输出平均分及平均分以上的学生人数。班号 C 语言 试题 题号 分数 说明:本试卷卷面满分为 100 分。总成绩将按平时实验成绩和卷面笔试成绩各自所占比例折合后累加计算。 一、单项选择题: (10 分,每题 2 分) 1.以下对一维数组的定义中,正确的是: 。 A) #define MAX 5 B) int MAX=5; int a[MAX]; int a[MAX]; C) int MAX; D) #define MAX 5; Scanf(“%d”,&MAX); int a[MAX];48姓名 二 三 四 五 六 七 八 九 创新实践分 卷面总分一 班级:学号:姓名:int a[MAX]; 2.以下程序运行时输入 8,则程序运行后 t 的值是: 。 main() { scanf(“%d”,&t); if(t--&=8) printf(“%d\n”,t--) ; else printf(“%d\n”,t++) ; } A)9 B)8 C)7 D)6 3.有以下程序段 main() { int i=1,sum=0,n; scanf(“%d”,&n); do { i+=2; sum+= }while(i!=n); printf(?%d”,sum); } 若使程序的输出值为 8,则应该从键盘输入的 n 的值是: A) 1 B) 3 C) 5 D) 7 4.若有以下定义及语句: struct s1 { char a[3]; }t={‘a’,’b’,’c’,4},*p; p=&t; 则输出值为 c 的语句是________。 A) printf(“%c\n”,p-&t.a[2]); B) printf(“%c\n”,(*p).a[2]); C) printf(“%c\n”,p-&a[3]); D) printf(“%c\n”,(*p).t.a[2]); 5.C 语言规定:在一个源程序中,main 函数的位置 A)必须在程序的最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在程序的最后 。。二、写出下列程序的运行结果。(10 分,每题 2 分) 1. #include &stdio.h& main() { int i,j; for(i=1; i&=3; i++) { for(j=i; j&=1; j--)49 班级:学号: printf(&* “); printf(&\n“); }姓名:} 运行结果是:2. #include &stdio.h& main() { int a,b,c; scanf(&%2d%2d%*2c%2d&,&a,&b,&c); printf(&%d\n&, a+b-c); } 程序执行时从键盘输入:L 运行结果是: 3. #include &stdio.h& #include &string.h& main() { char *p=”abcde”,a[20]=”ABC”,*q=a; p+=3; printf(“%s\n”,strcat(q,p)); } 运行结果是: 4. #include &stdio.h& i nt f un( ) { a ut o int x =1 ; s ta ti c i nt y =1; x += 2; y += 2; r et ur n x + } m ai n( ) { i nt a ,b; a =f un (); b =f un (); p ri nt f( “ % d ,% d\ n” ,a ,b ); }50 班级: 运行结果是: 5.学号:姓名:#include &stdio.h& main() { int k=0; char c=’A’; do { switch(c++) { case ‘A’: k++; case ‘B’: k--; case ‘C’: k+=2; case ‘D’: k=k%2; case ‘E’: k=k*10; default: k=k/3; } k++; }while(c&’G’); printf(“k=%d\n”,k); } 运行结果是:三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (10 分,每空 2 分) 1. 下面这个程序的功能是将字符串 s 中所有的字符 c 删除。 #include &stdio.h& main() { char s[80]; int i, printf(&Please enter string s:&); gets(s) ; for (i=j=0;_______ ; i++) { if(s[i]!=’c’) _______; } s[j]=’\0’; puts(s); } 2. 以下程序的功能是输出二维数组中最大值所在行内最小元素的值。 #include &stdio.h& int fun(int a[4][5]) { int i,j,m=0,n=0, for (i=0; i&4; i++ ) for(j=0;j&5;j++) if(a[m][n]&a[i][j])51 班级: {学号: ____ ; ______;姓名:} ____________; for(j=1;j&5;j++) { if(min&a[m][j]) min=a[m][j]; } } main() { int a[4][5]={{2,3,6,4,1},{25,54,23,28,26}, {7,9,15,20,35},{67,18,30,88,38}}; int i,j, for(i=0;i&4;i++) { for(j=0;j&5;j++) printf(“%3d”,a[i][j]); printf(“\n”); } min=fun(a); printf(“%d\n”,min); }四、在下面给出的 4 个程序中,共有 15 处错误(包括语法错误和逻辑错误) ,请找出其中的错误,并改正之。 (30 分,每找对 1 个错误,加 1 分,每修改正确 1 个错误,再加 1 分。 ) 1.下面程序的功能是对 a 数组中的元素按从大到小的顺序排序。 # in cl ude & st dio .h & # de fi ne N 10 ; m ai n( ) { i nt a [N] ={ 2, 17, 8, 3,2 4, 53 ,82 ,1 ,2 9,1 01 } ; i nt i ,j, k, f or (i =0; i& 9; i++ ) { k = f or (j =i+ 1; j& 10 ; j+ +) i f( a[ j]& a[ k] ) k = i f( k= i) { t =a [j ]; a [j ]= a[i ];52 班级: } } }学号: a [i ]=姓名:2.下面程序的功能是交换变量 a 和 b 中的值。 # in cl ude & st dio .h & m ai n( ) { i nt a, b, *p, *q ,* p =& q =& p ri nt f(& 请 输 入 变 量 a 和 b 的 值 : &) ; s ca nf (&% d% d& , & p, &q) ; * t= * * p= * * q= *t p ri nt f(& 交 换 后 a 和 b 的 值 : a= %d b =% d\ n&, a, b) ; } 3.假设某袋子中装有 3 个红球,5 个白球,6 个黑球,现从该袋子中任意取出 8 个球,下面程序的功能是输出这 8 个球中至少有一个白球的所有方案。 #include &stdio.h& main() { int i,j,k; for(i=0;i&=3;i++) for(j=0;j&=5;j++) { k=8-i-j; if(0&=k&=6) printf(“hong=%d\t,bai=%d\t, hei=%d\t\n”,i,j,k); } } 4.以下程序有若干语法错误。 # in cl ude & st dio .h & s truct date {m;d; } struct stu { char n[10]; }s={“Wang”,{},30}; main() {53 班级:学号:姓名:printf(“%c,%d,%d\n”,s.n,s.d,s.a); } 五、编程(40 分) 1.打印如下图案。 (12 分) ***** ***** ***** ***** ***** 2. 输入 8 个整数放入一维数组 w 中,输出交换前的数组;找出其中最小和最大数,并将他们分别与数组中的第一 个元素和最后一个元素交换位置;输出交换后的数组。 (15 分) 3. 不用标准库函数 strcpy, 自己编写一个函数 MyStrcpy 实现将两个字符串复制的功能, 然后从键盘输入源字符串, 并输出复制后的目的字符串。 (13 分)54 班级:学号:姓名:班号 姓名 C 语言 试题 题号 分数 说明:本试卷卷面满分为 100 分。总成绩将按平时实验成绩和卷面笔试成绩各自所占比例折合后累加计算。 一、单项选择题: (10 分,每题 2 分) 1.char *p[10];该语句声明了一个: 。 A) 指向含有 10 个元素的一维字符型数组的指针变量 p B) 指向长度不超过 10 的字符串的指针变量 p C) 有 10 个元素的指针数组 p,每个元素可以指向一个字符串 D) 有 10 个元素的指针数组 p,每个元素存放一个字符串 2.若且有下面的程序片断,则输出结果为: for (x=3; x&6; x++) { printf((x%2) ? &##%d& : &**%d\n&, x); } A) ##3 **4 ##5 A) x!=0 B) x==1 B) **3 ##4 **5 。 C) x!=1 D) x==0 C) **3 ##4**5 D) ##3**4 ##5 。 一 二 三 四 五 六 七 八 九 创新实践分 卷面总分3.在 while(!x)语句中的!x 与下面条件表达式等价的是: 4.已知 struct point { }; struct rect { struct point pt1; struct point pt2; }; struct rect *rp = & 则下面哪一种引用是不正确的________。 A) C) rt.pt1.x rp-&pt1.x B) (*rp).pt1.x D) rt-&pt1.x5.若二维数组 a 有 m 行 n 列,则下面能够正确引用元素 a[i][j]的为: A) *(a+j*n+i) B) *(a+i*n+j) C) *(*(a+i)+j) D) *(*a+i)+j 二、写出下列程序的运行结果。(10 分,每题 2 分) 1. #include &stdio.h&55。 班级:学号:姓名:main() { int x, scanf(&%2d%*2s%2d&, &x, &y); printf(&%d&, x+y); } 程序运行时输入:L 则程序运行结果是:2. #include &stdio.h& main() { static char *monthName[]= {&Illegal month&, &January&, &February&, &March&, &April&, &May&, &June&, &July&, &August&, &September&, &October&, &November&, &December&}; for (n=1; n&=12; n++) { printf(&%s\n&, monthName[n]); } } 运行结果是:3. #include&stdio.h& #define ARR_SIZE 7 void void YH(int a[][ARR_SIZE], int n); PrintYH(int a[][ARR_SIZE], intn);main() { inta[ARR_SIZE][ARR_SIZE];YH(a, ARR_SIZE-1); PrintYH(a, ARR_SIZE-1); } void YH(int a[][ARR_SIZE], int n) { int i,56 班级:学号:姓名:for (i=1; i&=n; i++) { for (j=1; j&=i; j++) { if (j==1 || i==j) { a[i][j] = 1; } else { a[i][j] = a[i-1][j-1] + a[i-1][j]; } } } } void PrintYH(int a[][ARR_SIZE], int n) { int i , for (i=1; i&=n; i++) { for (j=1; j&=i; j++) { printf(&%4d&, a[i][j]); } printf(&\n&); } } 运行结果是:4. # in cl ude & st dio .h & m ai n( ) { i nt i, f or ( i=1 ; i& =5; i ++) { p ri nt f(& Pl ea se en ter n :& ); s ca nf (&% d& , &n) ; i f (n &= 0 )57 班级:学号:姓名:p ri nt f(& n = %d \ n& , n ); } p ri nt f(& Pr og ram i s o ve r! \n& ); } 程序运行时输入:1 运行结果是: -2 3 -4 5L5. #include &stdio.h& void Func(int n); main() { for (i = 0; i & 2; i++) { Func(i); } } void Func(int n) { static int t = 1; printf(&t=%d\n&, t++); } 运行结果是:三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (8 分,每空 1 分) 1. 下面程序用于读入 10 个字符串,然后找出最大的字符串并打印。 #include &stdio.h& #include &string.h& main() { char str[10][80],maxstring[80]; printf(&Enter ten strings:\n&); for (i=0; i&10; i++) { scanf(&%s&, ); } strcpy(maxstring, str[0]); for (i=1; i&10; i++) { if ( {)58 班级:学号: strcpy(姓名: );} } printf(&The max string is:%s\n&,maxstring); } 2. 下面这个程序用于交换两个数组的对应元素的值。 #include &stdio.h& #define ARRAY_SIZE 10 void Swap(int *x, int *y); void Exchange(int a[], int b[], int n); void InputArray(int a[],int n); void PrintArray(int a[],int n); main() { inta[ARRAY_SIZE], b[ARRAY_SIZE],printf(&Input array lenth n&=10: &); scanf(&%d&, &n); printf(&Input array a:\n&); InputArray(a, n); printf(&Input array b:\n&); InputArray(b, n); Exchange(a,b,n); printf(&After printf(&Array PrintArray(a, printf(&Array PrintArray(b, } void Swap(int *x, int *y) { ; ; ; } void Exchange(int a[], int b[], int n) { for (i = 0; i & i++) { Swap( ); }59swap:\n&); a:\n&); n); b:\n&); n); 班级: }学号:姓名:void InputArray(int a[], int n) { for (i = 0; i & i++) { ; } } void PrintArray(int a[], int n) { for (i = 0;i &i++) { printf(&%d &, a[i]); } printf(&\n&); } 四、在下面给出的 4 个程序中,共有 15 处错误(包括语法错误和逻辑错误) ,请找出其中的错误,并改正之。 (30 分,每找对 1 个错误,加 1 分,每修改正确 1 个错误,再加 1 分。 ) 1.编程计算矩阵相乘之积。 #include&stdio.h& #define ROW 2 #define COL 3 main() { int a[ROW][COL], b[COL][ROW], c[ROW][ROW], i, printf(&Input array a:\n&); for (i=0; i&ROW; i++) { for (j=0; j&COL; j++) { scanf(&%d&, &a[i][j]); } } printf(&Input array b:\n&); for (i=0; i&COL; i++) { for (j=0; j&ROW; j++) { scanf(&%d&, &b[i][j]); } } MultiplyMatrix(a, b, c);60 班级:学号:姓名:printf(&Results:\n&); for (i=0; i&ROW; i++) { for (j=0; j&ROW; j++) { printf(&%6d&, c[i][j]); } printf(&\n&); } } void MultiplyMatrix(int a[ROW][COL],int b[COL][ROW], int c[ROW][ROW]) { int i, j, for (i=0; i&ROW; i++) { for (j=0; j&ROW; j++) { for (k=0; k&COL; k++) { c[i][j] = c[i][j] + a[i][k] * b[j][k]; } } } } 2.编程输入 10 个数,找出其中的最大值及其所在的数组下标位置。 #include &stdio.h& int FindMax(int num[], int n, int *pMaxPos); main() { int num[10], maxValue, maxPos, minValue, minPos, printf(&Input 10 numbers:\n &); for (i=0; i&10; i++) { scanf(&%d&, num[i]); } maxValue = FindMax(num, 10, *maxPos); printf(&Max=%d, Position=%d\n&,maxValue, maxPos); } int FindMax(int num[], int n, int *pMaxPos) { int i, max = num[0]; for (i = 1, i & n, i++) {61 班级:学号: if (num[i] & max) { max = num[i]; *pMaxPos = } }姓名:} 3.韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从 1 至 5 报数,最末一个士兵报的数为 1; 按从 1 至 6 报数,最末一个士兵报的数为 5;按从 1 至 7 报数,最末一个士兵报的数为 4;最后再按从 1 至 11 报数, 最末一个士兵报的数为 10。你知道韩信至少有多少兵吗? #include &stdio.h& main() { while (1) { if (x%5=1 && x%6=5 && x%7=4 && x%11=10) { } x++ } printf(& x = %d\n&, x); } 4.下面函数 Squeez()的功能是删除字符串 s 中所出现的与变量 c 相同的字符。 void Squeeze(char s[], char c); { int i,j; for (i=0; s[i]!='\0'; i++) { if (s[i] != 'c') { s[j] = s[i]; j++; } s[i]='\0'; } } 五、编程(42 分) 1.编程计算 1!+2!+3!+??n!的值,其中,n 值由键盘输入。 (14 分) 2. 不用标准库函数 strcpy,自己编写一个函数 MyStrcpy,实现字符串拷贝功能,在主函数中输入一个字符串,然 后调用函数 MyStrcpy 拷贝这个字符串,并将其输出到屏幕上。 (14 分) 3.从键盘任意输入某班 10 个学生的成绩,对成绩进行由高到低的排序,并打印成绩不及格的学生人数。要求按照 如下给出的函数原型进行编程: void Sort(float score[],int n); int Fail(float score[],int n);62 班级:学号:姓名:要求用一维数组做函数参数编程实现成绩排序和统计成绩不及格的学生人数,然后在主函数中打印这些结果, 不能使用全局变量编程。 (14 分)班号 C 语言 试题 题号 分数 说明:本试卷卷面满分为 100 分。总成绩将按平时实验成绩和卷面笔试成绩各自所占比例折合后累加计算。 一、单项选择题: (10 分,每题 2 分) 1.char (*p)[10];该语句声明了一个: 。 一 二 三 四 五 六 七 八 九 创新实践分 卷面总分 姓名A) 指向含有 10 个元素的一维字符型数组的指针变量 p B) 指向长度为 10 的字符串的指针变量 p C) 有 10 个元素的指针数组 p,每个元素可以指向一个字符串 D) 有 10 个元素的指针数组 p,每个元素存放一个字符串 2.以 下 错 误 的 描 述 是 A) B) C) D) 。不同的函数中可以使用相同名字的变量,互不干扰 形式参数都是局部变量 函数定义可以嵌套 C 语言中的函数参数传递都是单向值传递 。3.以下对二维数组进行正确初始化的是A)int a[2][3]={{1,2},{3,4},{5,6}}; B)int a[][3]={1,2,3,4,5,6}; C)int a[2][]={1,2,3,4,5,6}; D)int a[2][]={{1,2},{3,4}}; 4.已 知 : union { } 则 sizeof(test) 的 值 是 : 。 A)8 B)1 C)4 D)13 5.设有语句 int a = 3; 执行了语句 a += a -= a *= 后,变量 a 的值是________。 A) 3 B) 0 C) 9 D) -12 二、写出下列程序的运行结果。(10 分,每题 2 分) 1. #include &stdio.h& main() { while ((c = getchar()) != '$') {63 班级:学号: putchar(c); } printf(&End!\n&);姓名:} 程序运行时输入 abcdefg$abcdefgL 则程序的运行结果为2. #include&stdio.h& void Fun(int *y) { printf(&*y = %d\n&, *y); *y = 20; printf(&*y = %d\n&, *y); } main() { int x = 10; printf(&x = %d\n&, x); Fun(&x); printf(&x = %d\n&, x); } 运行结果是:3. #include &stdio.h& main() { for (n=1; n&=5; n++) { if (n % 2) { printf(&*&); } else { } printf(&#&); } printf(&$\n&); } 运行结果是:64 班级:学号:姓名:4. # in cl ude & st dio .h & s tr uc t d at e { }; v oi d fun c( st ruc t dat e *p ) { p -&y ea r = 2 00 6; p -&m on th = 11 ; p -&d ay = 18 ; } m ai n( ) { d.y ea r = 2 00 5; d.m on th = 12 ; d.d ay = 10 ; pri nt f( “ % d,% d, %d \ n” ,d .y ear ,d .m ont h, d. da y); fun c( &d ); pri nt f( “ % d,% d, %d \ n” ,d .y ear ,d .m ont h, d. da y); } 运行结果是:5. #include&stdio.h& i nt F un( in t x) { s ta ti c i nt y = 10 ; y + = } m ai n( ) { i nt y = 0, f or ( k=0 ; k& 2; k+ +) { y = F un( k) ; p ri nt f(& y = %d\ n& , y ); } } 运行结果是:65 班级:学号:姓名:三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (8 分,每空 2 分) 1. 下面程序用于从键盘输入任意整数,然后判断其是否为素数。 #include &math.h& #include &stdio.h& int IsPrimeNumber(int number); main() { int n, printf(&Input n:&); scanf(&%d&,&n); ret = IsPrimeNumber(n); if ( ) { printf(&%d is a prime number\n&,n); } else { printf(&%d is not a prime number\n&,n); } } int IsPrimeNumber(int number) { if (number &= 1) return 0; for (i=2; i&=sqrt(number); i++) { if ( return 0; } return 1; } 2. 下面程序用于从键盘输入一行字符,统计其中单词(以空格作为间隔符的字符串)的个数,已知判断是否有新 单词出现的方法为: 当前被检验字符不是空格而前一被检验字符是空格, 则表示有新单词出现。 例如: 输入 How are you 时,要求统计结果为 3。 #include &stdio.h& main() { char str[20]; int i, gets(str); if (str[0] != ' ') {66) 班级:学号: num = 1;姓名:} else { num = 0; } for (i=1; ;i++) { if ( { num++; } } printf(&num=%d\n&, num); })四、在下面给出的 4 个程序中,共有 15 处错误(包括语法错误和逻辑错误) ,请找出其中的错误,并改正之。 (30 分,每找对 1 个错误,加 1 分,每修改正确 1 个错误,再加 1 分。 ) 1.下面程序用于从键盘输入 3*4 矩阵的元素,找出其中的最大值及其所在行列位置,然后输出这个最大值及其所 在行列位置。 # in cl ude & st dio .h & i nt F ind Ma x( int x [3] [4 ], int * pR ow, in t * pC ol ); m ai n( ) { i nt a [3] [4 ], ma x, i, j , row , f or ( i=0 ; i& 3; i+ +) { f or ( j=0 ; j& 4; j+ +) { s ca nf (&% d& , a [i] [j ]); } } m ax = Fi nd Ma x(a ,& row ,& co l); p ri nt f(& ma x= %d, ro w=% d, co l=% d \ n& ,ma x, row ,c ol ); } i nt F ind Ma x( int x [3] [4 ], int * pR ow, in t * pC ol ) { i nt m ax, i , m ax = x[ 0] [0 ]; f or ( i=0 ; i& 3; i+ +) { f or ( j=0 ; j& 4; j+ +) { i f (x [i] [j ] & m ax ) ; { m ax = x[ i] [j ]; * pR ow = * pC ol = } }67 班级:学号: }姓名:} 2.下面程序用于利用?2?2 2 4 4 6 6 ? ? ? ? ? ? ... 前 200 项之积,编程计算 π 。 1 3 3 5 5 7#include &stdio.h& main() { double term, for (n = 2; n &= 100; n = n + 2) { term = ( n * n)/( n - 1) * ( n + 1); result = result * } printf(&result = %f\n&, 2*result); } 3.下面程序用于将输入的两个字符串连接起来,然后打印连接后的字符串。 # in cl ude & st dio .h & # in cl ude & st rin g. h& m ai n( ) { c ha r c ha rf ir st [80 ]; s ec on d[8 0] ;p ri nt f(& In pu t t he fi rs t str in g: &); g ets (f ir st) ; p ri nt f(& In pu t t he se co nd st ri ng :&) ; g et s( sec on d) ; M yS tr Cat (f ir st, s eco nd ); p ri nt f(& Th e res ul t i s : %s \ n& , fir st ); } v oi d MyS tr Ca t(c ha r * de st , c ha r *so ur ce) ; { i nt i = 0, j = 0; w hi le (* (d es t+i )! =' \ 0' ) { i ++ ; } f or ( ; * (s ou rce + i )!= '\ 0' ; i ++ ,j ++) { * (d es t+j ) = *(s ou rce + i ); } * (d es t+j ) = '\0 '; } 4.下面程序用于输入三角形的三条边 a,b,c,判断它们能否构成三角形,若能则指出是何种三角形:等腰三角形、 直角三角形、一般三角形。68 班级:学号:姓名:#include &stdio.h& #include &math.h& main() { float inta, b, flag = 1;scanf(&%d, %d, %d&, &a, &b , &c); if (a+b&c && b+c&a && a+c&b) { if (fabs(a-b)&=0.1||fabs(b-c)&=0.1||fabs(c-a)&=0.1) { printf(&等腰三角形\n&); flag = 0; } else if (fabs(a*a+b*b-c*c)&=0.1 ||fabs(a*a+c*c-b*b)&=0.1 ||fabs(c*c+b*b-a*a)&=0.1) { printf(&直角三角形\n&); flag = 0; } if (!flag) { printf(&一般三角形\n&); } } else { printf(&不是三角形\n&); } } 五、编程(42 分) 1.编程计算 a+aa+aaa+??+aa?a(n 个 a)的值,要求 n 和 a 由用户从键盘输入。 (14 分) 2.自己编写一个函数 Inverse 实现字符串逆序存放的功能, 在主函数中, 从键盘任意输入一个字符串 (可以有空格) , 调用函数 Inverse 实现字符串逆序存放,然后打印逆序存放后的字符串。 (14 分) 要求按照如下函数原型进行编程: void Inverse(char str[]); 或者: void Inverse(char *pStr); 3.从键盘按照成绩由高到低的顺序,输入某班 20 个学生的成绩和学号,然后从键盘任意输入一个学生的学号,查 找出他的成绩并打印。 要求按照如下函数原型进行编程,不能使用全局变量。 (14 分) int Search(long a[], int n, long x);69 班级:学号:姓名:班号 姓名 C 语言 试题 题号 分数 说明:本试卷卷面满分为 100 分。总成绩将按平时实验成绩、机考成绩和卷面笔试成绩各自所占比例折合后累加计 算。 一、单项选择题: (10 分,每题 2 分) 1.设有以下定义: int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int (*ptr)[3] = a, *p = a[0]; 则以下能够正确表示数组元素 a[1][2]的表达式是 A) *((*ptr + 1)[2]) B) *(*(p + 5)) C) (*ptr + 1) D) *(*(a + 1) + 2) 2.有如下程序片段: int i = 0; while(i++ &= 2); printf(&%d&, i); 则正确的执行结果是: A) C) 2 4 B) 3 D) 无结果 。 。 一 二 三 四 五 六 七 八 九 创新实践分 卷面总分3.合法的数组定义是 A) int a[] = &language&; B) int a[5] = {0,1,2,3,4,5}; C) char a = &string&;D) char a[] = {&0,1,2,3,4,5&}; 4.设有如下定义: struct st { }st1, * 若有 pst = &st1; 则下面引用正确的是________。 A) C) (*pst.st1.b) pst-&st1.b B) (*pst).b D) pst.st1.b ,i 的值是 。5.如果 int i = 3, 则 printf(&%d&, -i++ )的输出结果是70 班级: A) -3 4 C) -4 3学号:姓名: B) -4 4 D) -3 3二、写出下列程序的运行结果。(10 分,每题 2 分) 1. #include &stdio.h& main() { int x, scanf(&%2d%*2s%1d&, &x, &y); printf(&%d&, x/y); } 程序运行时输入:2345678L 则程序运行结果是:2. #include&stdio.h& main() { int i = 0; while(i & 3) { switch(i++) { case 0: printf(&fat&); case 1: printf(&hat&); case 2: printf(&cat&); default: printf(&Oh no! &); } putchar('\n'); } } 运行结果是:3. #include&stdio.h& int Square(int i); main()71 班级: { int i=0;学号:姓名:i = Square(i); for( ; i&5; i+=2 ) { static int i = 1; i += Square(i); printf(&%d\t&, i); } printf(&%d\n&, i); } int Square(int i) { return i*i; } 程序运行结果是:4. #include&stdio.h& void inv(int *p, int n); main() { int a[10]={13,7,9,11,0,6,7,5,4,2}; for(i=0; i&10; i++) { printf(&%d,&,a[i]); } printf(&\n&); inv(a,10); for(i=0; i&10; i++) { printf(&%d,&,a[i]); } } void inv(int *p, int n) { int *i, *j, m = (n - 1) / 2, j = p + n - 1; for(i = i &= p + i++, j--) {72 班级: } }学号:姓名:t = *i; *i = *j; *j =程序运行结果:5. #include &stdio.h& struct name { char first[20]; char last[20]; }; struct beam { char ty[30]; }; main() { struct beam * struct beam deb = {6, {&Berbnazel&,&Gwolkapwolk&}, &Arcturan&}; pb=& printf(&%d\n&, deb.limbs); printf(&%s\n&, pb-&ty); printf(&%s\n&, pb-&ty + 2); } 运行结果是:三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (8 分,每空 1 分) 1.下面这个程序的功能是对含有 n 个元素(最多 10 个)的一维数组按升序进行排序。 #include &stdio.h& #define ARRAY_SIZE 10 void Sort(int a[], int n); void InputArray(int a[],int n); void PrintArray(int a[],int n); main() { inta[ARRAY_SIZE],printf(&Input array lenth n&=10: &);73 班级:学号: scanf(&%d&, &n);姓名:printf(&输入数组 a:\n&); InputArray(a, n); Sort(a, n); printf(&打印排序后的数组 a:\n&); PrintArray(a, n); } void Sort(int a[], int n) { int i, j, p, for(i = 0; i & { p = for(j = { if( } if( ) { temp = a[p]; a[p] = a[i]; a[i] = } } } void InputArray(int a[], int n) { for (i = 0; i & i++) { ; } } void PrintArray(int a[], int n) { for (i = 0; i & i++) { printf(&%d &, a[i]); } printf(&\n&); } 2. 下面程序的功能是从键盘输入一行字符,统计其中有多少单词。假设单词之间以空格分开。[提示:判断是否有 新单词出现的方法是------当前被检验的字符不是空格,而前一被检验字符是空格,则表示有新单词出现。]74; i++); j & j++) ) p = 班级:学号:姓名:#include&stdio.h& main() { char str[80]; int i, gets(str); if(str[0] != ' ') { num = 1; } else { num = 0; } for(i = 1 ; str[i] { if(str[i] { num++; } } printf(&num=%d\n&, num); } 四、在下面给出的 4 个程序中,共有 16 处错误(包括语法错误和逻辑错误) ,请找出其中的错误,并改正之。 (30 分,每找对 1 个错误,加 1 分,每修改正确 1 个错误,再加 1 分。只要找对 15 个即可,多找不加分。 ) 1.在给定的一组书名中,从键盘任意输入一个书名(书名可以有空格) 。若找到,则打印该书名,否则打印”没找 到”。 #include &string.h& #include &stdio.h& main() { int i, findFlag=0; char str[][13]={ &Pascal&,&Basic&,&Fortran&, &Java&, &Visual C&, &Visual Basic& }; printf(&请输入一个字符串:&); gets(x); while(i&6 && !findFlag) { if (x == str[i]) { findFlag = 1; } i++; } if (findFlag)75; i++) && str[i-1] ) 班级: {学号: printf(&%s\n&, x);姓名:} else { printf(&没找到!\n&); } } 2.打印 100~200 之间的所有素数。 #include &stdio.h& #include &math.h& main() { int m, for(m = 100; m &= 200; m++) { for(i = 2; i & sqrt(m) && i++) { if(m%i == 0) flag = 0; } if(flag) { printf(&%d &, m); } } } 3.从键盘输入任意一个学生的学号,在班级学生表中(学生表的学号是按升序排序的,且班级最多 30 人 ) 查找该 学号是否存在,存在打印其考试成绩,否则打印“Not find!” 。 #include &stdio.h& #define ARR_SIZE 30; int Search( long *p, int main() { long num[ARR_SIZE], float score[ARR_SIZE]; int i, n,n,longx );printf(&输入班级实际人数:&); scanf(&%d&,&n); printf(&输入学生学号和成绩&); for(i=0; i&n; i++) { scanf(&%ld %f\n&, &num[i], &score[i]); } printf(&输入待查找学号:&); scanf(&%d&, &x);76 班级:学号: pos=Search(num, n, x);姓名:if ( pos + 1 ) printf(&score=%f\n &, score [pos]); else printf(& Not find!\n &); } int { Search( long *p, int i, for ( i=0 ; i & i++ ) { if ( *( p+i ) == x ) { flag = } else { flag = -1; } } return flag } 4.该程序的作用是将一个字符串中的元音字母复制到另一个字符串,然后输出。 #include&stdio.h& main() { char str1[80], str2[80]; printf(&输入一个字符串:&); gets(str1); Cpy(str1[], str2[]); printf(&输出一个字符串\n&); puts(str2); } void Cpy(char s[],char c[]) { int i, for(i=0; s[i] != '\0'; i++) { if(s[i]= 'a'||s[i]= 'A'||s[i]= 'e'||s[i]= 'E'|| s[i]= 'i'||s[i]= 'I'||s[i]= 'o'||s[i]= 'O'|| s[i]= 'u'||s[i]= 'U') { s[i]=c[j]; j++; } }77intn,longx ); 班级:学号:姓名:} 五、编程(42 分) 1.编程计算:1!+3!+5!+?+(2n-1)!的值。其中,n 值由键盘输入。 (14 分) 2. 不用标准库函数 strlen,自己编写一个函数 MyStrlen,实现计算字符串长度的功能。要求在主函数中输入一个 字符串(可以读入空格) ,并在主函数中打印字符串的长度。 (14 分) 请按以下给定的函数原型编写程序: int MyStrlen(char str[]); 或 int MyStrlen(char *p); 注:不按给定的函数原型或使用全局变量编写程序不给分。 3.编写一个函数,求最大值及最大值所在元素的下标。要求在主函数中通过键盘任意输入一组数(最多 10 个) ,且 在主函数中打印最大数及最大数元素的下标。 (14 分) 请按以下给定的函数原型编写程序: void Findmax(int num[], int n, int *pMaxNum, int *pMaxPos); 或 void Findmax(int *p, int n, int *pMaxNum, int *pMaxPos ); 注:不按给定的函数原型或使用全局变量编写程序不给分。班号 姓名 C

我要回帖

更多关于 input只能输入整数 的文章

 

随机推荐