C语言程序设计考前复习资料

更新时间:2024-04-22 16:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

二级C语言笔试试卷(2009第一次)

(共100分)

注意事项:1.一、二题为客观题,请将答案涂在机读答题卡上

2. 三、四、五、六题为主观题,请将答案做在答题纸上

一.单项选择题。(每小题1分,共20分) 1.一个C程序的执行是从( A )。

(A)本程序的main函数开始,到main函数结束

(B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 (C)本程序的main函数开始,到本程序文件的最后一个函数结束 (D)本程序文件的第一个函数开始,到本程序main函数结束

2.设x、y和z是int型变量,且x = 3,y = 4,z = 5,则下面表达式中值为0的是( D )。

(A) x && y; (B) x <= y; (C) x || y + z && y – z ; (D) !((x

3.以下有关宏替换的叙述不正确的是( D )。 (A)宏替换不占用运行时间 (B)宏名无类型

(C)宏替换只是字符串替换; (D)宏替换是在运行时进行的

4.已知函数的调用形式: fread ( buffer , size , count , fp ) ; 其中buffer代表的是( C )。

(A)一个整型变量,代表要读入的数据项总数 (B)一个文件指针,指向要读的文件

(C)一个指针,指向要读入数据的存放地址 (D)一个存储区, 存放要读的数据项

5. 在位运算中,操作数每左移一位,其结果相当于 ( A )。 (A)操作数乘以2 (B)操作数除以2 (C)操作数除以4 (D)操作数乘以4

6.数字字符0的ASCII值为48,若有以下程序 #include void main() {

char a='1',b='2'; printf(\ printf(\}

程序运行后的输出结果是( C )。 A)3,2 B)50,2 C)2,2 D)2,50

7.有以下程序

#include void main() {

int m=12,n=34;

1

printf(\ printf(\}

程序运行后的输出结果是( C )。

A)12353514 B)12353513 C)12343514 D)12343513

8.已有定义 int k = 2; int *ptr1, *ptr2, 且ptr1和ptr2均已指向变量k , 下面不能正确执行的赋值语句是( B )

A) k = *ptr1 + * ptr2; B) ptr2 = k;

C) ptr1 = ptr2; D) k = * ptr1 *(*ptr2);

9若有定义int i=2,a[10],*p=&a[i];则与*p++ 等价的是( A )。 A)a[i++] B)a[i]++ C)a[i] D)a[++i]

10.有定义int a=3,b=4,c=5; 执行完表达式a++>--b&&b++>c--&&++c后,a,b,c的值分别为(B )。

A)3 4 5 B)4 3 5 C)4 4 4 D)4 4 5

11.已知:int x = 1, y = 2, z =0; 则执行:z = x > y ? 10:20后, z的值为( B )。 A)10 B)20 C)1 D)2

12. 若已定义x和y为double类型,则表达式x=2,y=x+10/4 的值是( C ) 。 A) 2 B) 4 C) 4.0 D) 4.5

13.有定义语句:int b;char c[10];,则正确的输入语句是( B )。 A)scanf(\C)scanf(\

14.在一个源程序文件中定义的全局变量,其作用域为( B )。

A) 定义所处的整个源程序文件 B) 从定义处开始到本源程序文件结束 C) 整个主函数 D) 所处C程序的所有源程序文件中

15.在下面C语言的函数说明语句中,正确的是( A )。 A) int fun(int x, int y); B) int fun(int x,y); C) int fun(x,y); D)int fun(int x; int y);

16.有以下程序 #include void main() {

int m,n,p;

scanf(\ printf(\}

2

若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是( A )。

A) m=123n=456p=789 B) m=123 n=456 p=789 C) m=123,n=456,p=789 D) 123 456 789

17.已知E的ASCII码是69,则执行以下语句的结果是( C )

printf(\A)66 B)A C)B D)E

18.有定义:char *s=”\\t\\”Name\\\\Address\\”\\n”;,那么strlen(s)等于( B )。 A) 15 B) 16 C) 17 D) 18

19. 设有定义:int m=1,n=-1;则执行语句printf(\后的输出结果是( B )

A) –1 B) 0 C) 1 D) 2

20.有以下程序 #include void main() {

int a,b,d=25; a=d/10%9; b=a&&(-1);

printf(\}

程序运行后的输出结果是( B )。 A)6,1 B)2,1 C)6,0 D)2,0

二 .基本概念选择填空题(本大题后面有若干备选项,请选择合适的备选项并将其号码填入各小题的空白处。每空2分,共10分)

1.函数main(int argc,char *argv[])中argc表示的是______①____。

2.在C语言中,没有字符串变量,只有字符变量,字符串都存储在以 ② 为结束符的字符数组中。

3.一个函数调用语句为fun((e1,e2,e3),(e4,e5),e6);,其实参个数为__③____。 4.为了避免嵌套的if-else语句的二义性,C语言规定else总是与___④____组成配对关系。

5.当程序打开一个文件时,系统就要在内存中建立一个与该文件对应的 ⑤ 结构体变量,存储该文件的有关信息。

① F ② B ③ J ④ A ⑤ K 备选项: (A) 空格 (B) '\\0' (C) '\\n' (D) 在其之前未配对的if (E) 参数字符串 (F) 命令行参数的个数 (G) 6 (H) 在其之前最近的未(J) 3

配对的if

(K)FILE (L)EOF (M) 命令行参数的字符数

三.程序填空题。(每空2分,共20分)。

3

1. 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩。请填空。

#include void main() {

float sum=0.0,ave,a; int n=0;

printf(\ scanf(\ while(a>=0.0) {

sum=sum+a;

_____①_________; //n++ scanf(\ }

ave=sum/n;

printf(\

}

2. 下面程序的功能是将一个字符串str的内容颠倒过来,请填空。 #include void main() {

char str[]={\ char *p1,*p2,ch; p1=str; p2=str;

while(*p2!='\\0')p2++;

____②________; //p2-- while(p1

ch=*p1;*p1=*p2;*p2=ch;

____③_____; //p1++ p2--; }

puts(str); }

3. 以下程序中,fun函数的功能是求m行4列二维数组每行元素中的最大值。请填空。 #include

int fun(int,int,int(*)[4]); void main() {

int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},i; for(i=0;i<3;i++)printf(\④ )); // i,4,a

4

printf(\}

int fun(int m,int n,int a[][4]) {

int j,x; x=a[m][0];

for(j=0;j4. 下面的程序是用来在数组table中查找x,若数中存在x程序输出数组中第一个等于x的数组元素的下标,否则输出-1。请填空。

#include

int table[10]={12,34,54,23,45,33,78,87,59,97},x; int lookup(int t[],int key,int n) {

int k;

for(k=0;k

if(t[k]==key) ⑥ ; //break

if( ⑦ )k=-1; // k>=n return k; }

void main() {

scanf(\

printf(\}

5.下列函数insert实现在一维数组v中插入一个元素x,且要求将该元素插入到下标为i位置,数组原有下标为i及以后的元素都将向后移动一个元素的位置,i>=0。如果i大于等于元素的个数,则x插到数组的末尾。原有的元素个数存放在指针n所指向的变量中,插入后元素个数加1。主函数验证了该函的功能。请填空。

#include

void insert(int v[],int *n,int x,int i); void main() {

int a[20]={1,2,3,4,5,6,7}; int key=11; int n=7,*p=&n;

insert(a,p,key,14);

for(key=0;key<*p;key++)printf(\ putchar('\\n'); printf(\}

5

void insert(int v[],int *n,int x,int i) {

int j;

if(___⑧____) //i<*n for(j=*n-1; j>=i; ____⑨____) //j-- _____⑩____=v[j]; //v[j+1] else

i=*n; v[i]=x; (*n)++; }

四.阅读程序题(每小题5分,共30分) 1.下面程序的运行结果为:( f=6 ) #include int f(int num,int run) {

static int fact,i; if(run==0) {

fact=1; i=1; }

fact *=i; if(++i<=num) f(num,1); return(fact); }

void main() {

int i=0;

printf(\}

2.下面程序的运行结果是:( 6 3 ) #include main() {

int a[]={1,3,5,7,9},b[4]={2,4,6,8},*p=a,*q=b; p+=2; q++;

*p=(*q)%3+5; *(++q)=*(p--)-3;

printf(\

6

printf(\}

3.运行程序时输入-6931,则输出结果是: ( -1396 ) #include

void printopp(long int n) {

int i=0;

if(n==0)return; else

while(n) {

if(n>0||i==0)

printf(\ else

printf(\ i++; n/=10; } }

void main() {

long int n;

scanf(\ printopp(n); printf(\}

4.下面程序的运行结果是: ( 34 ) #include #define N 2

#define Y(n) ((N+1)*n) main() {

int z;

z=2*(N+Y(5)); printf(\}

5.以下程序的运行结果为( 9 ) #include void main() {

long fun(int n);

7

printf(\}

long fun(int n) {

long s;

if(n==1||n==2) s=2; else

s=n+fun(n-1); return s; }

6. 以下程序的运行结果为(4321 ) #include void main() {

void fun(int *x,int *y); int a[]={1,2,3,4},j,x=0; for(j=0;j<4;j++) {

fun(a,&x);

printf(\ }

printf(\}

void fun(int *x,int *y) {

static int t=3; *y=x[t]; t--; }

五.编程序(每小题10分,共20分) 1.编写程序求下面数列

21,32,53,85,13218,13?的前20项之和。参考程序:

#include main() {

double x,sum; int i;

for(i=1,x=2,sum=0;i<=20;i++) {

sum=sum+x;

8

x=1+1/x; }

printf(\\\n\}

2. 函数fac的原型为long fac(int k);,函数利用静态变量实现:连续以1,2,3,??,n 为参数调用该函数后,函数最后返回n!。要求编制该函数并用相应的主函数进行测试。

参考程序:

#include void main() {

long fac(int n); int n,j; long ff;

scanf(\ for(j=2;j<=n;j++) ff=fac(j);

printf(\}

long fac(int n) {

static long ff=1; ff*=n; return ff; }

二级C语言笔试试卷(A)(2008年第一次)

(共100分)

注意事项:1.一、二题为客观题,请将答案涂在机读答题卡上

2. 三、四、五、六题为主观题,请将答案做在答题纸上 一、单项选择题。(每小题1分,共20分)

1. C语言源程序由预处理命令和( )组成。

(A) 函数 (B) 语句 (C) 保留字 (D) 标始符 2. 下面程序段中,与if(x%2)中的x%2所表示条件等价的是( )。 scanf(\

if(x%2) x++;

(A)x%2==0 (B) x%2!=1 (C) x%2!=0 (D) x%2==1 3. 执行下面的C语句序列后,变量b的值是( )。 int a,b,c; a=b=c=1; ++a||++b&&++c;

(A) 错误 (B) 0 (C) 2 (D) 1

4. 设有C语句int a[3][4];,则每次移动过a数组一行元素的指针变量定义形式是( )(A)int *p; (B)int **p;

9

(C)int (*p) [4]; (D)int *p[4]; 5.设有整型变量a, 实型变量f,双精度型变量x,则表达式10+'b'+x*f值的类型为( )。 (A) int (B) float (C) double (D) 不能确定

6.C语言中规定,在函数的参数表中,用简单变量做实参时,它和对应形参之间的数据传递方式是( )。

(A)地址传递 (B)单向值传递

(C)有实参传给形参,再由形参传回给实参 (D)由用户指定传递方式 7.下面程序的输出是( )。 #include void main() {

int x=10,y=3;

printf(\}

(A)0 (B)1 (C)3 (D)不确定的值 8.执行下面的程序段后,B的值为( )。 int x=35; char z='A'; int B;

B=((x&15)&&(z<'a'));

(A) 0 (B) 1 (C) 2 (D) 3 9.以下程序的输出结果为( )。 #include void main() {

int i=0; for(;;)

if(i++==5)break; printf(\ }

(A) 0 (B) 5 (C) 6 (D) 前3个选项都错

10.已知:char s[4] = \执行语句序列p = s;printf(\后,其输出为( )。

A)'c' B)'b' C)'a' D)'d' 11.运行完下列程序后,在屏幕上的内容是( )。 #include void main() {

int a=0; a+=a=12;

printf (\}

A)0 B)6 C)12 D)24

12.已知:int x = 1, y = 2, z =0,则执行z=x>y?(10+x,10-x):(20+y,20-y)后, z的值为

10

( )。

A)11 B)9 C)18 D)22

13. 若已定义x和y为double类型,则表达式x=2,y=x+10/4 的值是( ) 。 A) 2 B) 4 C) 4.0 D) 4.5 14.以下程序的输出结果是( )。 #include int x=3,y=4; void main( ) {

int x=0; x+=y++;

printf(\}

A)3 B) 4 C) 5 D) 6

15.在下面C语言的函数说明语句中,正确的是( )。 A) int fun(int x, int y); B) int fun(int x,y); C) int fun(x,y); D)int fun(int x; int y);

16.有定义:int x,y=10,*p=&y;,则能使得x的值也等于10的语句是( )。 A) x=p; B) x=&p; C) x=&y; D) x=*p;

17.有定义:int a[5][4], (*p)[4]=a;,则*(*(p+2)+3)等于( )。 A) a[2][0] B) a[2][1] C) a[2][2] D) a[2][3]

18.有定义:char* s=\,那么strlen(s)等于( )。 A) 15 B) 16 C) 17 D) 18

19.设有定义:int m=1,n=-1;则执行语句printf(\后的输出结果是( ) A) –1 B) 0 C) 1 D) 2

20.设有C语句:struct T{ int n; double x; }d,*p;,若要使p指向结构体变量中的成员n,正确的赋值语句是( )。

(A)p=&d.n (B)*p=d.n

(C)p=(struct T *)&d.n (D)p=(struct T *)d.n

二. 基本概念选择填空题(本大题后面有若干备选项,请选择合适的备选项并将其号码填入各小题的空白处。每空2分,共10分)

1.C语言源程序由预处理命令和函数组成,无论有多少个函数,只能有一个主函数,其函数名是 ① 。

2.表达式x*=x+b等价于表达式 ② 。

3.在C语言中 ③ 语句是一条限定转移语句,其语句功能为提前结束本次循环体的执行过程而直接进入下一次循环。 4.结构体数据类型仍然是一类变量的抽象形式,系统不会为数据类型分配存储空间。要使用结构体类型数据,必须要 ④ 。

5. 调用feof来判断文件是否结束,如果已经读到结束则其返回值是: ⑤ 。

备选项: (A)void (B)x=x*x+b (C)continue (D)x=x*(x+b) (E)break (F)定义结构体成员 (G)定义结构体类型变量 (H)定义联合体类型变量 (I)0

11

(J)非0 (K)main (L)goto ① K ② D ③ C ④ G ⑤ J 三.程序填空题。(每空2分,共20分)。

1.程序的功能是:统计输入的字符串中小写字母的个数.

#include main() {

char c; int num=0;

while((c=getchar())!= ① ) { if(c<'a'||c>'z') continue; ② }

printf(\}

① '\\n' ② num++;

2. 下面程序的功能是输出数组中的各字符串,请填空完成程序。 #include void main() {

char * a[]={\ int j=0;

for(; ③ ;j++)puts(____④_____); }

③ j<4 ④ *(a+j))

3. 下面程序用于计算1+(1+2)+(1+2+3)+??+(1+2+3+??+10),请完善程序。 #include void main() {

int total,sum,m,n; total=0;

for(m=1;m<=10;m++) {

sum=0;

for(n=1; ⑤ ;n++)sum=sum+n; ⑥ ; }

printf(\}

⑤ n<=m ⑥ total+=sum;

4.函数fun的功能是判断一个3位整数的个位数字和百位数字之和是否等于其十位上的数字,是则返回\否则返回\,请填空完成函数。 #include

⑦ fun(int n)

12

{

int g,s,b; g=n; s=n/10; b=n/100; if((g+b)==s)

return \ else

return ⑧ ; }

void main() {

int n;

scanf(\

printf(\}

⑦ char * ⑧ \

5.下面程序的功能是打印出整数1~1000中满足条件:个位数字的立方等于其本身的所有数,请填空完成程序。 #include void main() { int i,g;

for(i=1;i<1000;i++) {

g= ⑨ ; if( ⑩ ) printf(\ }

printf(\}

⑨ i; ⑩ g*g*g==i

四. 阅读程序题(每小题5分,共30分

1.下列程序的运行结果是(1 2 3 )。 #include void main() {

void add(); int i;

for(i=0;i<3;i++)add(); }

void add() {

static int x=0; x++;

13

printf (\}

2.以下程序的输出结果为 ( 4 ) #include void main() {

int a,b,c,x; a=b=c=0; x=35;

if(!a) x--; else if(b); if(c) x=3; else x=4;

printf(\

} 3.以下程序的输出结果为 (max=10,row=2,colum=1 ) #include void main() {

int i, j, row, colum, max;

int a[3][4] = {1,2,3,4,9,8,7,6,-10,10,-5,2}; max = a[0][0]; for( i=0;i<=2;i++) for(j=0;j<=3;j++) if(a[i][j]>max) {

max = a[i][j]; row = i; colum = j; }

printf( \}

4.下面程序的执行结果是(t=3 )。 #include

#define Min(x,y) (x)<(y)?(x):(y) void main() {

int a=1,b=2,c=3,d=4,t; t=Min(a+b,c+d)*1000; printf(\}

5.以下程序的运行结果是(4321 )

14

#include void fun(int x) {

putchar('0'+x); if(x/10)fun(x/10); }

void main() {

int m=1234; fun(m);

putchar('\\n');

} 6. 以下程序的运行结果是(s=15 ) #include void main() {

int a[]={1,3,5}; int s=1,j,*p=a; for(j=0;j<3;j++) s*=*(p+j);

printf(\}

五、编程序。(每小题10分,共20分)

1.编程序实现功能:一个正整数与3的和是5的倍数,与3的差是6的倍数,求出符合此条件的最小正整数。 参考程序:

#include void main() {

int i;

for(i=3;;i++) {

if((i+3)%5==0 && (i-3)%6==0) {

printf(\ break; } } }

2.编写一个函数reverse(s)将字符串s中的字符位置颠倒过来。例如,字符串“abcdefg”中的字符位置颠倒后变为“gfedcba”。并编写一个主函数来验证该函数的功能。 参考程序:

#include #include

15

void reverse(char s[]) {

int i,j; char c;

for(i=0,j=strlen(s)-1;i

c=s[i]; s[i]=s[j]; s[j]=c; } }

void main() {

char s[100];

puts(\ gets(s); reverse(s); puts(s); }

二级C语言笔试试卷(A)(2007年第一次)

一、单项选择题。(每小题1分,共20分)

1.在C程序的函数调用时,主调函数中的实参和被调函数中的形参( )。 A) 个数、次序必须相同,但数据类型可以不考虑 B) 个数、次序和对应参数的数据类型都应该相同 C) 个数、次序和数据类型均可以不相同

D) 对应参数数据类型应相同,但个数和次序可以不考虑

2.如a为int型,则与表达式a等价的C语言关系表达式是( ) (A) a>0 (B) a!=0 (C) a==0 (D) a<0

3.循环语句for(a=0,b=0;(b!=45)||(a<5);a++);的循环次数是( ) (A) 4 (B) 3 (C) 5 (D) 无数多次 4.设有字符数组a,则正确的输入语句是( )。 (A) gets('a'); (B) scanf(\(C) scanf(\ (D) gets(\

5.enum color{red,green,yellow=5,white,black}定义了一枚举类型。编译程序为值表中各标识符分配的枚举值依次为( )。

A)1、2、3、4、5 B)0、1、5、2、3 C)0、1、5、6、7 D)3、4、5、6、7 6.运行完下列程序后,在屏幕上的内容是( )。 main () { int a=0; a+=(a=12);

printf (\

16

}

A)0 B)6 C)12 D)24

7.若x,y为实数类型的变量,要判断x,y相等,最好使用下列关系表达式( )。 A) x==y; B)x-y==0;

C) fabs(x-y)<1e-8; D)labs(x-y)<1e-8;

8.若有以下的定义、说明和语句,则值为101的表达式是( )。 struct cw { int a; int *b; }*p;

int x0[]={11,12},x1[]={31,32};

static struct cw x[2]={100,x0,300,x1}; p=x;

A) *p->b B) p->a C) ++(p->a) D) (p++)->a 9.以下程序的输出结果是( )。 int x=3,y=4; void main( ) { int x,y=5; x=y++;

printf(\

A)3 B) 4 C) 5 D) 6 10.在C语言中,函数默认的存储类型为( )。 A) auto B) register

C) static D) extern

11.有定义:float y,*p=&y;,假定变量y在内存中所占地址为100~103。那么p的值为( )。

A) 100 B) 101 C) 102 D) 103

12. 有定义:int a[10], n, *p1=a,*p2=&a[9];,则正确的赋值语句为( )。 A) n=p2-p1; B) n=p2*p1; C) n=p2+p1; D) n=p1/p2; 13.调用strlen(\的结果为( )。 (A) 4 (B) 5 (C) 8 (D) 10

14.执行下面程序中输出语句后,a的值是( ) #include main( ) {

int a;

printf(\}

A)65 B)20 C)15 D)10

15.若有定义int x,y;下面选项中合法的if语句( )

(A)if(a==b)x++; (B)if(a=b)x++; (D)if(a=>b)x++;

17

16.执行下面的程序后,a的值是( ) #include

#define SQR(X)X*X main() {

int a=10,k=2,m=3; a/=SQR(m)/SQR(k); printf(\ }

A)10 B)1 C)5 D)0

17.若t为double类型,表达式(t=1,t+5,t)的值是( ) A)1 B)6.0 C)1.0 D)6

18.在C语言中,下面关于数组的描述正确的是( )。 (A)数组的大小是固定的,但可以有不同类型的数组元素 (B)数组的大小是可变的,但所有数组元素的类型必须相同 (C)数组的大小是固定的,所有数组元素的类型必须相同 (D)数组的大小是可变的,可以有不同的类型的数组元素 19.下述程序的输出结果是( ) #include void main() {

int a,b,c=241; a=c/100%9; b=-1&&-1;

printf(\}

(A)2,0 (B)2,1 (C).6,1 (D)0,-1

20若有以下说明和语句,则下列引用方式不正确的是( ) struct worker {int no; char *name; }work,*p=&work;

A.work.no B.(*p).no C.p->no D.work->no

二、基本概念选择填空题(本大题后面有若干备选项,请选择合适的备选项并将其号码填入各小题的空白处。每空2分,共10分)

1.在C语言中,一个函数一般由两个部分组成,它们是函数说明部分和(① )。2 2.任何程序都可调用标准函数exit(),当它被调用时,它( ② )程序的执行。 5 3.一个C语言程序在可以被执行之前,必须通过的5个处理程序是:编辑程序、预处理程序、编译程序、汇编程序和 ③ 。8

4.在C语言中没有固有的输入和输出语句,但是用C语言编写的程序可以用函数调用的形式来实现输入、输出,这些函数由 ④ 提供。7 5.函数rewind的作用是_____⑤___________。4 备选项:

1.主函数 2.函数体 3.函数首部 4. 使指针指向文件的开头 5. 终止 6.用户自定义函数 7.

18

标准I/O库/系统 8. 连接程序 9.判断文件指针是否指向文件末尾 三、程序填空题。(每空2分,共20分)。

1.以下程序的功能是从键盘上输入一行字符,将其中的小写字母转换为大写字母。请填空。 #include \

main( ) {char c;

while ((c=___ ①__________)!='\\n') // getchar( ) if (c>='a'&&c<='z' ) { c=c-32; printf(\

2.下列程序是从c盘根目录下的文本文件“f1.txt”中读取前10个字符,依次显示在屏幕上。如果文本文件中不足10个字符,则读完为止。 #include “stdio.h” main()

{ FILE *fp; int i;

char c; //(fp=fopen(\

if( ② = =NULL){printf(“file can not open”);exit(0);} for (i=0;i<10;i++)

{if(feof(fp) ) break; c=fgetc(fp); putchar(c);} fclose(fp); }

3.下面程序的功能是输出数组中的各字符串,请填空完成程序。 #include void main()

{ char *a[]={“abcd”,”12345”,”efghijk”,”67890”}; char _____③_________ ; //**p int j=0; p=a;

for(;j<4;j++)

puts( ④ ); // *(p+j) }

4. 以下程序用于求取两个整数的最大公因子。 int mcf(int a, int b) { int temp; while(b) {

temp = ⑤ ; // a%b a = b; b = temp; }

return ( a ); }

5. 下面程序的功能是将一个字符串str的内容颠倒过来,请填空。

19

main()

{char str[]={\ char *p1,*p2,ch; p1=str; p2=str;

while(*p2!='\\0')p2++;

⑥ ; // p2-- while(p1

{ch=*p1; *p1=*p2; *p2=ch; ⑦ ; // p1++ p2--;} }

6. 函数yh的功能是构成一个杨辉三角形,请填空完成该函数。 #include #define N 11 void yh(a[][N]) { int j,k;

for(j=1;j

a[j][j]= ⑧ ; //1 }

for( ⑨ ;j

a[j][k]= ⑩ +a[j-1][k]; // a[j-1][k-1] }

四、阅读程序题(每小题5分,共30分

1.下面程序的输出结果是( 6 )。 #include void main() {

void fun(int *k); int w=5; fun(&w); }

void fun(int *k) {

(*k)++;

printf(\}

2.下面程序的输出结果是( s=1357 )。 #include void main() {

20

char ch[2][5]={\ int j,k,s=0; for(k=0;k<2;k++) p[k]=ch[k]; for(k=0;k<2;k++)

for(j=0;p[k][j]>'\\0'&&p[k][j]<='9';j+=2) s=10*s+p[k][j]-'0'; printf(\}

3.下面程序的输出结果是( 9,19 #include int func(int,int); main() {

int k=4,m=1,p; p=func(k,m); printf(\ p=func(k,m);

printf(\}

int func(int a,int b) {

static int m=1,n=2; n+=m+1; m=n+a+b; return(m); }

4.下面程序的输出结果是(5,6.000000 #include void main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}; int k,s,i; float ave;

for(k=s=i=0;i<10;i++) { if (a[i]%2!=0) continue; s+=a[i]; k++; }

if(k!=0) { ave=s/k;

printf(\ } }

。 )。 21

)5.在下列程序中,若输入为:today is Monday! 则输出结果是 3 words #include void main() { char s[40],c; char *str=s; int num=0,word=0; gets(str);

while((c=*str++)!='\\0') { if(c==' ')word=0; else if(word==0) { word=1; num++; } } printf(\}

6. 下列程序的输出结果是 15,0

#include

unsigned f(unsigned num) {unsigned k=1; do

{k*=num; num/=10; }while(num); return k; }

void main()

{int x=35,y=550;

printf(\ } 五、编程序。(每小题10分,共20分)

1. 写程序删除一个字符串中的所有空格。要求①在主函数输入字符串并输出删除所有空格后的字符串;②删除一个字符串中的所有空格功能用函数实现;例如:输入字符串\is a string\则应输出\。 #include #include void main() {

char *fun(char *str); char s[81],*ds;

22

printf(\ gets(s); ds=fun(s);

printf(\}

char *fun(char *str) {

char *p=str; while(*p) {

if (*p==' ')

strcpy(p,p+1); else p++; }

return str; }

2.编程实现求两个正整数的最大公约数和最小公倍数的功能,要求用一个函数求最大公约数,另外一个函数求最小公倍数。 #include void main() {

int gcd(int m,int n);

int lcm(int m,int n,int g); int m,n,num1,num2;

scanf(\ m=gcd(num1,num2); n=lcm(num1,num2,m);

printf(\}

int gcd(int m,int n) {

int t;

while(n!=0) {

t=m%n; m=n; n=t; }

return m; }

int lcm(int m,int n,int g) {

return m*n/g;

23

}

2008年第一次C语言上机考试题(第一套)

1.(35分)编写程序判定输入的正整数是否“回文数”,所谓“回文数”是指正读反读都相同的数,如:123454321。源程序存入test11.c 参考程序:

#include void main() {

int n,m,r=0;

printf(\ scanf(\ m=n; while(m) {

r=r*10+m; m/=10; }

if(n==r)

printf(\ else

printf(\} 2.(35分)下面程序要实现的功能是:统计文本文件“fname.txt”中的字符个数。请输入并填空完成程序,源程序存入test12.c。 #include #include void main()

{ FILE *fp; long num=0L;

if( ① ==NULL) { printf(\ exit(0); }

while( ② ) { fgetc(fp); num++; }

printf(\ ③ ; }

① (fp=fopen(\② !feof(fp) ③ fclose(fp) 3.(30分)下面程序中,函数fun()的功能是逐个比较s,t两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到a数组中。请输入程序并改正程序中带\的行中的错误,使它能够正确地输出结果。源程序存入test13.c。

24

#include

void fun(char *s,char *t,char *a) {

* int k; // int k=0;

for(;*s&&*t;) {

if(*s<=*t) a[k]=*t; else

a[k]=*s; if(*t&&*s)

* s--,t--; // s++,t++;

k++; }

a[k]='\\0'; }

void main() {

* char s[15]= \

// char s[15]= \

fun(s,t,a); puts(a); } (第二套) 1.(35分)编写函数判断一个整数是否为素数,并编写主函数求100以内的素数。源程序存入test11.c 参考程序:

#include #include void main() {

int i;

int flag(int);

for(i=2;i<=100;i++)

if(flag(i)) printf(\ putchar('\\n'); }

int flag(int n) {

int k,f=1;

for(k=2;k<=sqrt(n);k++) if(n%k==0)f=0; return f; }

25

2.(35分)请补充下列程序中的空白处,使其能输出下图所示的图形。请输入程序并填空,源程序存入test12.c。

#define M 10

#include

void main( ) {

int i,j,k ; for(i=0;i<6;i++) {

for(j=0;j<=M/2-i;j++)printf(\

for( k=0; k<= ① ;k++)printf(\ putchar('\\n'); }

for (i=1; i<=5; i++)

{ for( j=0; ② ;j++)printf(\ for(k=0; k

//① 2*i ② j<=i ③ '\\n' 3.(30分)下列程序是将十进制整数n转换为m进制(m<=16)并输出。请输入程序并改正程序中带\的行中的错误,使它能够正确地输出结果。源程序存入test13.c。 #include void main() {

char x[]={\ int a[64],n,m,k;

* k=1; // k=0 scanf(\ while(n!=0) {

26

* a[k++]= n/m; // a[k++]=n%m; * n=n%m; // n= n/m; } k--;

while(k>=0) {

printf(\ k--; }

putchar('\\n'); }

(第三套)

1.(35分)函数的原型说明为char * str_c(char *s1,char *s2);,其功能是删除字符串s1最后的'\\0',并将字符串s2的内容连接到s1之后,返回连接后的字符串s1。试编制该函数,并用相应的主函数对其进行测试。源程序存入test11.c 参考程序:

#include

char * str_c(char* s1,char* s2) {

char *ps=s1;

while(*s1!='\\0')s1++;

while(*s2!='\\0')*s1++=*s2++; *s1='\\0'; return ps; }

void main() {

char str1[80],str2[80];

puts(\ gets(str1);

puts(\ gets(str2);

puts(str_c(str1,str2)); }

2.(35分)以下程序实现将一个65535以内的十进制数转换为2~16任意进制的数字字符串,并输出之。请输入程序并填空,源程序存入test12.c。

#include void main() {

int i,n,m,mb;

char b[17]=\ printf(\ scanf(\

27

printf(\ scanf(\ i=15; do {

m= ① ; if( ② ) b[i--]=m+0x30; else

b[i--]=m+0x37; n= ③ ; }while( ④ ); puts(&b[++i]); putchar('\\n'); }

① n%mb ② m<10 ③ n/mb ④n>0 3.(30分)下面程序的功能是用选择法,对10个数进行由小到大的排序。请输入程序并改正程序中带\的行中的错误,使它能够正确地输出结果。源程序存入test13.c。

#include #include #include int main() {

int a[10],i,j,t,k;

srand((unsigned)time( NULL)); for(i=0;i<10;i++)

{a[i]=rand()0;printf(\ putchar('\\n'); for(i=0;i<9;i++) {

* k=0; // k=i;

for(j=i+1;j<10;j++)

* if(a[k]>a[i]) // a[k]>a[j] * k=i; // k=i;

* t=a[j];a[j]=a[k];a[k]=t; // t=a[i];a[i]=a[k];a[k]=t;

}

for(i=0;i<10;i++)printf(\ putchar('\\n'); return 0; }

28

本文来源:https://www.bwwdw.com/article/gzbp.html

Top