2015C语言程序设计(2)期末复习题 下载本文

C语言程序设计(2)复习题

判断题:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

C程序是由函数构成的,每一个函数完成相对独立的功能。() 被main函数调用的函数只能是库函数。() 定义函数时,必须要有形参和返回值。()

在C程序中,main函数和自定义的函数都可以有多个。() 函数必须有return语句。()

语句return(a,b);则函数可以返回两个值。()

传值调用时,在函数中形参变量值改变后,不改变实参变量的值。(函数的递归调用不过是一个函数直接或间接地调用它自身。

在 C 程序中 , 函数既可以嵌套定义,也可以嵌套调用。() 传值调用的形参只有在被调用时,才被创建(分配存储单元)。() 自定义函数中若缺省函数值类型,则隐含的类型是int。()

定义为void类型的函数,其含义是调用函数后,函数的返回值为任意的类型。() C语言程序中,若实参是变量,当调用函数时实参和形参各占一个独立的存储单元。() 在C语言中,所有函数之间都可以相互调用。() void类型的函数一定无形参。()

C语言规定,实参应与其对应的形参类型一致。() 构成数组的各个元素的数据类型不一定要相同。() 数组元素的下标必须是整数,不能用实数。() 系统判断字符串结束的标志是’\\n’。 () 定义数组后,可通过赋值运算符=对该数组名直接赋值。例如:int a[5]; a={1,2,3,4,5};()

若有定义语句“int a[10];”则a[10-9/2] 是合法的数组元素。() 若有定义:double a[10]={1.1,2.5},i=1;则a[i]为2.5。() 语句int N=10; int a[N];可以正确定义数组a。() 有定义:int a[10]={1,2,3,4,5};则a[5]为0。()

有数组定义int a[3][3]={{1},{2,3}};,则a[3][3]的值为0。()

若有说明:int a[][3]={1,2,3,4,5,6,7};则数组a第一维大小是3。() 数组定义语句“char c[]= \”与“char c[ ]={‘H’,’e’,’l’,’l’,’o’};”等价。()

在对全部数组元素赋初值时,可以不指定数组长度。() 数组定义 int a[10]; 表示数组名为a,此数组有10个元素,第10个元素为a[9]。() 如果想使一个数组中全部元素的值为1,可以写成 int a[10]={1*10};() char c[]=\是一个合法的为字符串数组赋值的语句。()

用printf函数输出一个字符串时,格式字符为%s,输出项可以是此字符串或存放此字符串的数组的数组名。()

用gets函数可以接收一个含有空格的字符串。()

若有定义语句char s1[ ]=“abc\\0567”;,则表达式strlen(s1)的值为3。() 表达式“c=*p++”的执行过程是先复制*p的值给c后再对p的值加1。()

有定义:int a[5]={10,11,12,13,14},*p=a;,语句printf(“%d”,*p++);的输出结果为11。(

? ? ? ? ? 指针就是地址,因此一个变量的指针就是该变量的地址。()

取地址运算符&与指针运算符*的优先级相同,结合方向为自右向左。() 语句int *p;和语句printf(“%d”,*p);中的*p含义相同。() 语句“double *p=&x,x;”使指针变量p指向变量x。()

有定义:int a[5]={1,3,5,7,9},*p=a;,语句printf(“%d ”,(*p)++);

printf(“%d”,*p);的输出结果为1 2。() ? 若有定义语句“int a[10],i=2;”,则&a[i]与a+i等价。() ? 若a为一维数组名,则*(a+i)与a[i]等价。()

? 若有定义char s1[]=”Hello”,s2[]=”world!”,则strlen(s1) + strlen(s2) 等于strlen(strcat(s1,s2))。()

? 若有定义int a,*p=&a,*q=p;则p指向a,q指向p。()

? 若有定义int a,*p=&a; char *t;由于指针的数据类型实际上是指定指针所能指向对象的数据类型,所以不能将p赋给t。()

? 设有说明struct stud { char num[8];char name[10];int score[4];};,stud只是一个类型名,系统没有为它分配存储空间。() ? C文件使用前需要打开,使用后需要关闭。()

? 在使用fopen()函数时必须先定义一个类型为FILE的文件指针。()

? 若fp是指向某文件的指针,且已读到该文件的末尾,则C语言函数feof(fp)的返回值是0。()

? 在d:盘根目录下建一个新的tx1.txt 文本文件,其打开方式应为p=fopen(\。()

? 若打开文件的方式为“w”而该文件已经存在,则文件中原有数据被清空。(

单选题:

? 设有函数调用语句: m=max(a , max(b,c)); 则函数max有( C )个实参

A. 1 B. 4 C. 2 D. 0 ? 程序中调用了库函数strlen,必须包含头文件( D )。

A.stdlib.h B.math.h C.ctype.h D.string.h ? 以下叙述不正确的是( B )。

A. main函数在C语言中必须有且只有一个

B.C程序的执行从main函数开始,所以main函数必须放在程序最前面 C. 函数可以带参数,也可以不带参数

D. 每个函数执行时,按函数体中语句的先后次序,依次执行每条语句 ? 在C程序中,若对函数返回类型未加说明,则函数的隐含类型为( A )。

A.int B.double C.void D.char

? 有一个函数调用f( (1,2), 3*4 ),则此次调用的是下面哪个函数f( B )?

void f (int a);

void f (int a, int b);

void f (int a, int b, int c);

void f (int a, int b, int c,int d);

? C语言中函数返回值的类型是由( C )决定的。

A.调用该函数的主调函数类型 B.return语句中的表达式类型 C.定义函数时所指定的返回函数值类型 D.调用函数时临时 ? 以下正确的函数说明是( A )。

A.int fun(int , int); B.int fun(int x,y);

C.int fun(x,y); D.int fun(int x; int y); ? 以下叙述错误的是( D )。

A.函数调用可以是单独的语句 B.函数调用可以出现在表达式中 C.函数调用可以作为函数的实参 D.函数调用可以作为函数的形参 ? 以下正确的函数定义是( D )。

A.double fun(int x, int y) B.double fun(int x,y) { z=x+y ; return z ; } { int z ; return z ;}

C.fun (x,y) D.double fun (int x, int y) { int x, y ; double z ; { double z ;

z=x+y ; return z ; } z=x/y; return z ; }

? 一个局部变量,如果没有特别指明它的存储类别,那么它的存储类别为( D )。

A. static B. register C. extern D. auto ? 函数f定义如下,执行语句“sum=f(f(3));”后,sum的值应为( B )。 int f(int m) { static int i=0;

int s=0;

for(;i<=m;i++) s+=i;

return s;

}

A. 21 B. 15 C. 12 D. 6 ? 设有定义语句char s[ ]=\,则s[5]的值是( C )。

A.未知字符 B.’0’ C.’\\0’ D.’E’ ? 当调用函数时,实参是一个数组名,则向函数传送的是( B )。

A.数组的长度 B.数组的首地址

C.数组每一个元素的地址 D.数组每个元素中的值 ? 能对一维数组正确初始化的语句是( C )。

A.int a[5]={0,1,2,3,4,5}; B.int a[5]={};

C.int a[5]={10}; D.int a[5]={1,??,5}; ? 在C语言中,下面关于数组的描述正确的是( C )。

A.数组的大小是固定的,但可以有不同类型的数组元素 B.数组的大小是可变的,但所有数组元素的类型必须相同 C.数组的大小是固定的,所有数组元素的类型必须相同 D.数组的大小是可变的,可以有不同的类型的数组元素

? 假定int类型变量占用4个字节,有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是( D )。

A.3 B.12 C.10 D.40 ? 下列程序段执行后,s的值是( A )。

char ch[]=\

for(i=0;ch[i]>=‘0’&&ch[i]<=‘9’;i++) s=10*s+ch[i]-’0’;为 A.123 B.1 C.3 D.6 ? 要将20,30,40,50 存入数组b中, 下列正确的程序段是( A )。

A.int i,b[4]; for (i=0; i<4; i++) b[i]=(i+2)*10; B.int b[4]; b={20,30,40,50};

C.int b[4]; b[1]=20,b[2]=30,b[3]=40,b[4]=50; D.int b[4]; b[4]={20,30,40,50};

? 若有定义语句“int a[10];”则下列对a中数组元素正确引用的是( C )。

A.a[10] B.a[2.5] C.a[5%2] D.a[5+6] ? 下列哪个语句存在语法错误( C )?

A. char c = ‘A’; B. char c[] = \C. char c = ‘AB’; D. char c[] = \? 已知”char s[] = “ab\\0cd”;”,则数组s的长度为( ),s所存放的字符串

的长度为( )。B

A.6和 5 B. 6和2 C. 5和2 D. 5和5

? 若有定义char st[20]=\,则st中所存放字符串的长度和数组st的长度分别是( C )。

A. 20和20 B. 13和20 C. 5和20 D. 9和9 ? 若有定义char s[]=\,则s中所存放的字符串的长度是( A )。 ? A. 9 B. 12 C. 13 D. 14 ? 以下程序段运行后,x[1]的值为( B )。

int x[5]={5,4,3,2,1}; x[1]=x[3]+x[2+2]-x[3-1];

A. 6 B. 0 C. 1 D. 5 ? 下列能正确定义一维数组a的语句是( D )。

A.int a(20); B.int n=20,a[n]; C.int n;scanf(\,&n); D.#define n 20 int a[n]; int a[n];

? 定义char s[4]=\执行下面语句段后输出结果是( B )。

t=s[0];s[0]=s[2];s[2]=t; printf(\

A、Max B、xaM C、axM D、 xMa ? 设已定义char a[10]和 int j,则下面输入函数调用中错误的是( B )。

A. scanf(\C. gets(a); D. for(j=0;j<9;j++) scanf(\? 判断字符串s1与s2是否相等,应当使用的语句是( D )。

A.if(s1==s2) B.if(s1=s2)

C.if(s1[]==s2[]) D.if(strcmp(s1,s2)==0) ? 若有说明: int a[3][4]={0};则下面正确的叙述是( D )。

A. 只有元素a[0][0]可得到初值0 B. 此说明语句不正确

C. 数组a中各元素都可得到初值,但其值不一定为0 D. 数组a中每个元素均可得到初值0

? 若有说明 int a[3][4];则对a数组元素的正确引用是( C )。

A. a[2][4] B. a[1,3] C. a[1+1][0] D. a(2)(1) ? 在定义int a[5][6];后,a[3][3]前有( C )个元素。

A. 14 B. 18 C. 21 D. 26 ? 若定义如下变量和数组,则下面语句的输出结果是( C )。

int j;

int x[3][3]={1,2,3,4,5,6,7,8,9}; for (j=0;j<3;j++)

printf(\

A. 1 5 9 B. 1 4 7 C. 3 5 7 D. 3 6 9 ? 以下能正确定义数组并正确赋初值的语句是( D )。

A. int N=5,b[N][N]; B. int a[1][2]={{1},{3}};

C. int c[2][]= {{1,2},{3,4}}; D. int d[3][2]={{1,2},{34}}; ? 以下程序段的运行结果是( A )。

char str[3][2]={ 'a', 'b', 'c', 'd', 'e', 'f'}; str[2][0]= '\\0'; printf(\

A. abcd B. ab C. abcd0 D. abcd0f ? 若有字符数组a[80]和b[80],则以下输入语句正确的是( C )。

A. gets(a,b); B. scanf(\C. scanf(\

? 有数组定义语句“char a[20];”,则正确的输入语句为( D )。

A.scanf(\,&a); B.scanf(\C.gets(a[20]); D.gets(a) ; ? 若已有定义 char str[10]; 要将键盘输入的字符串\赋给str,应使用( B )。

A.scanf(\.gets(str); C.str=\.getchar(str); ? 下列程序段的输出结果是( B )。 #define M(x, y) x*y printf(\

A. 20 B. 11 C. 14 D. 24 ? 程序中定义以下宏 #define w 3 #define L w+4

若定义int val;且令val=L*L,则变量val的值为( B )。

A. 14 B. 19 C. 24 D. 49 ? 若有 int a[8]={1,9,8,0,4,2,5,3};则数值为2的表达式是( C )。

A.*a B.a[6] C.*a+1 D.*(a+1)+5 ? 下列程序段的运行结果为( B )。

char s[]=\

A.mn0 B.mn C.Mngy D.mn gy

? 若有定义char s[8]=\则不能代表字符k的表达式是( A )。

A.ps+3 B.s[3] C.ps[3] D.*(ps+3) ? 下面的程序段中循环体执行次数( B )。

char a[5],*t=\while( *s!=‘\\0’ ) { a[i]=*s; s++;}

A、4次 B、3次 C、0次 D、无数次 ? 函数定义如下:

void fun(int x, int y, int *a, int *b) { *a=x+y; *b=x*y; }

能够正确调用fun函数的是( B )。其中m、n是已经定义过的int型变量。 A、fun(5,8,m,n); B、fun(5,8,&m,&n); C、fun(5,8,*m,*n); D、fun(m,n,5,8); ? 若有说明:int i,j=1,*p=&i;则与i=j;等价的语句是( B )。

A.i=*p; B.*p=j; C.i=&j; D.p=&j;

? p和q同为指向int类型的指针,则下面哪个表达式会导致语法错误?( A )

A.p+q B.p-q C.p=q D.p==q

? 下列语句定义p为指向double型变量x的指针,其中正确的是( B )。

A.double x,*p=*x; B.double x,*p=&x;

C.double *p=&x, x; D.double x; int *p; p=&x;

? 已定义以下函数:int fun(int *p){ return *p;},fun函数返回值是( C )。

?

?

?

? ?

?

?

?

?

?

? ?

A.不确定的值 B.形参p中存放的值 C.一个整数 D.形参p的地址值 下面程序的运行结果为( A )。 int a[] = {1,3,5,7}, *p=a; printf(\printf(\

A.1 3 B.1 2 C.3 5 D.3 4

若有定义:char str[]=“ABCD”,*p=str;则语句printf(“%d\\n”,*(p+4));的输出结果是( B )(已知’A’的ASCII码为65)。

A.68 B.0 C.字符D的地址 D.不确定的值 表达式“c=*p++”的执行过程是( A )。

A.复制*p的值给c后再执行p++ B.复制*p的值给c后再执行(*p)++ C.复制p的值给c后再执行p++ D.执行p++后将*p的值复制给c 变量的指针,其含义是指该变量的( B )。

A.值 B.地址 C.名字 D.一个标志 已知定义:

int a[10]={1,3,5,7,9,2,4,6,8,10}, *p=&a[0], *q=a+3; 则表达式p-q的值为( B ):

A. 3 B. -3 C. -6 D. 6 若有定义: char s[] = \

则下面那条语句能输出字符’N’( D )?

A. printf(“%s”, s+5); B. printf(“%c”, s+5); C. printf(“%s”, *(s+5)); D. printf(“%c”, *(s+5));

设已有定义:char *st=\下列程序段中正确的是( A )。

A.char a[12], *p=a+1; strcpy(p,st+4); B.char a[12]; strcpy(++a, st); C.char a[12],*p;strcpy(p, st); D.char a[], *p=a+1;strcpy(p,&st[4]); 若int a=1,b=2,*pa=&a,*pb=&b;,执行语句*pa*=3;b*=2;printf(“%d,%d”,*pa,*pb);后输出( D )。

A.1,2 B.1,4 C.3,2 D.3,4 若有int a=100,b=200,t,*temp,*pa=&a,*pb=&b;则下列各语句组中,不能实现变量a,b值互换的是( C )。

A.t=a; a=b; b=t; B.t=*pa;*pa=*pb;*pb=t; C.temp=pa;pa=pb;pb=temp; D.a=a+b; b=a-b; a=a-b; 下面程序段的输出结果是( A )。 char a[10]= \char b[4]= \strcat(a,b);

printf(“%s”,a);

A.abcdABC B.abcd C.ABC D.ABCabcd 设有下列定义 char s[ ]=\则下列表达式中错误的是( D )。 A.*(p+1) B.*(s+2) C.p=\.s=\设有如下定义:

int a[]={1,3,5,7,9};int *p; 则下列程序段的输出结果为( A )。 p=a;

*(p+2)+=2;

printf (“%d,%d\\n”,*p,*(p+2));

A.1,7 B.1,5 C.5,9 D.3,7

? 有以下的定义语句:

struct student { int num; char name[9]; };

则不能正确定义结构数组并赋初始值的是( C )。

A. struct student stu[2]={1,\,2,\B. struct student stu[2]={{1,\,{2,\C. struct stu[2]={{1,\,{2,\

D. struct student stu[ ]={{1,\,{2,\? 若有以下定义语句:

struct date { int y,m,d; }; struct student

{ int num; char name[9]; struct date bir;}stu,*p=&stu; 则以下对结构变量stu成员的引用错误的是( A )。

A. p–>bir–>y B. p–>bir.y C. stu.bir.y D. stu.name ? 若有以下定义语句: struct student {

int num; char name[9];

}stu[2]={1, \

则以下能输出字符串“lisi”的语句是( C )。 A. printf(\,stu[0].name); B. printf(\,stu[1].name[0]); C. printf(\,stu[1].name); D. printf(\,&stu[2].name[0]);

? 已知有语句FILE *fp; int x=123; fp=fopen(\如果需要将变量x的

值以文本形式保存到磁盘文件out.dat中,则以下函数调用形式中,正确的是( B )。 A.fprintf(\.fprintf(fp,\

C.fprintf(\.fprintf(\? 下面( C )语句是从文件中读取一个字符。

A.ch=getc(); B.fputc(ch,fp); C.fscanf(fp,\.scanf(\

? 以“只读”方式打开文本文件c:\\1.txt,下列语句中哪一个是正确的( B )。

A. fp=fopen(\. fp=fopen(\C. fp=fopen(\. fp=fopen(\

? 对变量定义及初始化为:FILE *p=fopen(\

s;能正确的将文件中的整数、实数、字符输入到各变量的是( D )。 A、fgets(x,a,s,p); B、fprintf(p,”%d,%f,%c”,x,a,s); C、fgetc(x,a,s,p); D、fscanf(p,”%d,%f,%c”,&x,&a,&s);

程序阅读题:

说明:阅读下列程序,在每小题提供的程序运行结果若干可选答案中,挑选一个正确答案。 ? #include 答案:C

void fun(int a,int b,int c) { c=a*a+b*b;} int main() { int x=22; fun(4,2,x);

printf(\ return 0;

}

A. 20 B. 21 C. 22 D. 23 ? #include 答案:A

void fun(int x,int y,int z) { x=456;y=567;z=678; }

int main()

{ int x=10,y=20,z=30; fun(x,y,z);

printf(\return 0; }

A. 30,20,10 B. 10,20,30 C. 456,567,678 D. 678,567,456 ? #include 答案:B

void f(int x,int y) { int t;

if(x

}

int main()

{ int a=4,b=3,c=5; f(a,b); f(a,c); f(b,c);

printf(\ return 0; }

A. 3,4,5 B. 4,3,5 C. 5,3,4 D. 5,4,3 ? #include 答案:C

void f(int n) { while(n--)

printf(\printf(\}

int main() { int a=3;

f(a); return 0; }

A. 3 2 1 0 B. 3 1 C.2 1 0 -1 D. 2 1 0 ? #include 答案:D

int func(int a,int b) { return(a+b);} int main( )

{ int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(\ return 0; }

A. 12 B. 13 C. 14 D. 15 ? #include 答案:C

int k=1; void fun(); void main() { int j;

for(j=0;j<2;j++)

fun();

printf(\

}

void fun()

{ static int k=1; printf(\ k++;

}

A. k=1,k=1,k=1 B. k=1,k=1,k=2 C. k=1,k=2,k=1 D. k=1,k=2,k=3 ? #include 答案:A

int f1(int n)

{ if(n==1)return 1;

else return f1(n-1)+n; }

int f2(int n) { switch(n) { case 1:

case 2:return 1;

default: return f2(n-1)+f2(n-2); } }

int main()

{ printf(\ printf(\ return 0; }

A. 10 B. 24 C. 6 D. 1

3 4 1 2

? 程序运行时,从键盘输入ABC!四个字符后,输出是( )。答案:D

#include int main()

?

?

?

?

{ void receiv(); receiv(); return 0; }

void receiv() { char c;

c=getchar(); putchar(c);

if(c!='!') receiv(); putchar(c); }

A. ABC!! B. ABCABC C. ABC!ABC! D. ABC!!CBA #include 答案:B #define MAX 10 int main()

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

for(i=0;i

printf(\return 0; }

A. sum=55 B. sum=-54 C. sum=-55 D. sum=54 #include 答案:B int main()

{ int i, k, a[10], p[3]; k=5;

for (i=0;i<10;i++) a[i]=i;

for (i=0;i<3;i++) p[i]=a[i*(i+1)]; for (i=0;i<3;i++) k+=p[i]*2; printf(\ return 0; }

#include 答案:D int main()

{ int p[7]={11,13,14,15,16,17,18}, i=0,k=0; while(i<7 && p[i]%2) { k =k+ p[i]; i++; } printf(\return 0; }

A. 58 B. 56 C. 45 D. 24 程序运行时,输入YEAR,输出( )。答案:C #include main()

{ char str[80];

int i; gets(str);

for(i = 0; str[i] != ’\\0’; i++)

if(str[i] <= ’Z’ && str[i] >= ’A’)

str[i] = ‘a’ + ‘Z’ - str[i];

puts(str); }

A. year B. BUZI C. bvzi D. YEAR ? 下面程序执行时输入:HangZhou China ,则输出结果是( )。答案:A

#include int main()

{ char c[81]; int i; scanf(“%s”,c);

for(i=0;c[i]!=‘\\0’;i++)

if(c[i]>=‘a’&&c[i]<=‘z’) c[i]-=32; printf(“%s”,c); return 0;

}

A.HANGZHOU B.HangZhou China C.HangZhou D.HANGZHOU CHINA ? #include 答案:C

int main()

{ int a[6]={5,1,3,7,8,4},i,j,k;

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

k=a[5];

for(j=4;j>=0;j--) a[j+1]=a[j]; a[0]=k; }

for(i=0;i<6;i++)

printf(\ printf(“\\n”);

return 0; }

A. 4 8 7 3 1 5 B. 5 1 3 7 8 4 C. 7 8 4 5 1 3 D. 5 7 3 1 8 4

#include 答案:A int main()

{ int a[3][3]={ {1,2},{3,4},{5,6} },i,j,s=0; for(i=1;i<3;i++)

for(j=0;j<=i;j++)s+=a[i][j]; printf(\return 0; }

A. 18 B. 19 C. 20 D. 21 ? 程序运行时,输入2016 2 1 2016 3 1,输出( )。答案:A #include int main( )

{ int s, x1, y1, z1, x2, y2, z2;

printf(\

scanf(\s = f(x2, y2, z2) - f(x1, y1, z1); printf(\return 0; }

int f(int x, int y, int z) { int k, n;

int tab[2][13] = {

{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} };

n = (x % 4 == 0 && x % 100 != 0 || x % 400 == 0); for(k = 1; k < y; k++) z = z + tab[n][k]; return z; }

A.29 B.28 C.0 D.-1 ? #include

int main()

{ int i,j,t,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; for(i=0;i<3;i++)

for(j=0;j<=i/2;j++) { t=a[i][j];

a[i][j]=a[i][3-j]; a[i][3-j]=t; }

printf(\ printf(\ return 0; }

A.3 11 B.4 12 C.1 9 D.2 10 ? 下面程序执行后的正确输出项是( )。答案:A #include void swap1(int a[ ]) { int t;

t=a[0]; a[0]=a[1]; a[1]=t; }

void swap2(int a,int b) { int t;

t=a; a=b; b=t; }

void main()

{ int x[2]={1,5}; int y[2]={1,5};

swap1(x);

swap2(y[0],y[1]);

printf(\ printf(\ }

A. x:5 1 B. x:1 5 C. x:1 5 D. x:5 1 y:1 5 y:5 1 y:1 5 y:5 1 ? 执行下列程序后的输出结果是( )。答案:A #include char f(char s[],int n) { return (s[n]); } int main()

{ char a[]=\

printf(\ return 0; }

A.D B.C C.B D.A ? 指出正确的程序是( )。答案:B

程序 (1) 程序 (2)

#include #include int main() int main() { {

char *p; char s[80]; double x,y, *p; p=s[0]; x=3.45; p=&x; y=*p; scanf(\ printf(\ }

程序 (3) 程序 (4)

#include #include int main() int main() { {

int x,*p; int *p=&a; *p=x; int a;

printf(\ } }

A.程序 (1) B.程序 (2) C.程序 (3) D.程序 (4) ? 下面程序的输出结果是( )。答案:B #include

void ast(int x,int y,int *cp,int *dp) {

*cp=x+y; *dp=x-y;

x=*cp+*dp; y=*cp-*dp; }

int main()

{ int x,y,c,d; x=7;

y=8;

ast(x,y,&c,&d);

printf(\ }

A.7,8,0,0 B.7,8,15,-1 C.15,-1,15,-1 D.14,16,0,0 ? #include 答案:D

void f(char *s,char *t){ for( ; *s!=‘\\0’; s++); for( ; *t!=‘\\0’ ; s++,t++) *s=*t; *s=‘\\0’; }

int main(){

char a[80],b[80];

printf(“Plese Input strings:\\n”); gets(a); // 输入Hello, ↙ gets(b); // 输入Everyone!↙ f(a,b);

printf(\}

A.Hello, B.Everyone!

C.Everyone!Hello, D.Hello, Everyone! ? #include 答案:A

void swap1(int x, int y){ int t;

t=x; x=y; y=t; }

void swap2(int *px, int *py){ int t;

t = *px; *px = *py; *py=t; }

int main(){ int x=5,y=6; swap1(x,y);

printf(\ swap2(&x,&y);

printf(\}

A. 5 6 B. 6 5 C. 5 6 D. 6 5

6 5 5 6 5 6 6 5

? #include 答案:C

int main() {

int a[6]={5,1,3,7,8,4},i,j,k;

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

k=a[5];

for(j=4;j>=0;j--) a[j+1]=a[j]; a[0]=k; }

for(i=0;i<6;i++)

printf(\ printf(“\\n”); }

A. 4 8 7 3 1 5 B. 5 1 3 7 8 4 C. 7 8 4 5 1 3 D. 5 7 3 1 8 4 ? #include 答案:B

void fun(int a, int b, int *c) { int i,j;

i=a; a=a/10; j=b; b=b/10;

*c=a*1000+j*100+i*10+b; }

int main()

{ int x=41,y=28,z=0; fun(x,y,&z);

printf(\ }

A.41,28,0 B.41,28,4812 C.4,2,0 D.? 程序运行时,输入字母a,输出( )。答案:B #include int main( )

{ char c,s[80]=”Happy New Year”; void f(char *s,char c); int i;

c=getchar( ); f(s,c); puts(s); return 0; }

void f(char *s,char c) { int k=0,j=0;

while(s[k]!=’\\0’){ if (s[k]!=c){ s[j]=s[k]; j++; } k++; }

s[j]=’\\0’; }

A. Happy New Year B. Hppy New Yer

4,2,4812 C. Hay New Year D. Happy Nw Year

? 若运行时从键盘输入:OPEN THE DOOR回车,则程序运行后的输出结果是( )。 #include 答案:B

char fun(char *c){

if(*c>=‘A’ && *c<=‘Z’)*c-=‘A’-’a’;

return *c;

}

int main(){

char s[81],*p=s; gets(s);

while(*p != ‘\\0’){

*p=fun(p);putchar(*p);p++;} printf(\}

A.oPEN tHEN dOOR B.open then door C.OPEN THEN DOOR D.Open Then Door ? 程序运行时,输入12 12 50 10 ,输出( )。答案:D #include struct st { int x,y,z; };

void f(struct st *t,int n); int main () { int k, n;

struct st time;

scanf (“%d%d%d%d”,&time.x,&time.y,&time.z,&n); f (&time,n);

printf(“%d:%d:%d\\n”, time.x,time.y,time.z); return 0; }

void f (struct st *t, int n) { t->z = t->z + n; if( t->z >= 60 ) {

t->y = t->y + t->z / 60 ; t->z = t->z % 60; if ( t->y >= 60 ){

t->x = t->x + t->y / 60 ; t->y = t->y % 60 ;

}

if ( t->x >= 24 ) t->x = t->x % 24 ; }

}

A. 12:12:0 B. 12:12:50 C. 12:12:60 D. 12:13:0

程序填空题:

说明:阅读下列程序说明和相应程序,在每小题提供的若干可选答案中,挑选一个正确答案。 ? 【程序说明】输出10到99之间各位数字之和为12的所有整数,要求定义和调用函数sumdigit(n)计算整数n的各位数字之和。 #include<stdio.h> int main() { int i;

int sumdigit(intn); for(i=10;i<=99;i++)

if(___(1)___) 答案:A printf(\printf(\return 0; }

int sumdigit(int n) { int sum;

___(2)___ 答案:B do {

___(3)___ 答案:C ___(4)___ 答案:D }while(n!=0); return sum; }

(1)A. sumdigit(i)==12 B. sumdigit(i)==i

C. sumdigit(n)==n D. sumdigit(n)==12

(2)A. sum=sum B. sum=0; C. ; D. sum=n; (3)A. sum=0; B、sum=sum+n;

C. sum=sum+n; D. sum=sum+n/10;

? (4)A. n=n*10 B. n=n; C. n=n-10 D. n=n/10;

? 【程序说明】输出50到100之间的所有素数,要求定义和调用函数isprime(m)判断m

是否为素数,当m为素数时返回1,否则返回0。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。 #include #include int main()

{ int i,isprime(int m); for(i=50;i<=100;i++)

if(____(1)____) 答案B printf(\ return 0; }

int isprime(int m) { int i,k;

____(2)____; 答案B

k=sqrt(m);

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

if(m%i==0) ____(3)____; 答案A ____(4)____; 答案A }

【供选择的答案】

(1) A. isprime(m)!=0 B. isprime(i)!=0

C. isprime(m)==0 D.isprime(i)==0

(2) A. if(m!=1)return 1; B. if(m==1)return 0;

C. ; D. if(m==1)return 1;

(3) A. return 0 B. return 1 C. return i<=k D. return (4) A. return 1 B. return 0 C. return D. return i<=k

? 【程序说明】输入一个整数,将它逆序输出。要求定义并调用reverse(int number),

它的功能是返回number的逆序数。例如reverse(12345)的返回值是54321;reverse(-123)的返回值是-321。 #include int main ( ) { int in;

int reverse (int number);

printf (“Enter an integer:”); scanf (“%d”,&in);

printf (“After reversed : %d\\n”, ____(1)____); 答案:C return 0; }

int reverse (int number ) { int flag;

____(2)____; 答案:C flag =number<0?-1:1;

if(____(3)____) number =-number; 答案:B while (number !=0){

res=____(4)____; 答案:B number/=10; }

return flag*res; }

(1) A. reverse( ) B. in C. reverse(in) D. reverse (2) A. res=0 B. int res C. int res=0 D. res (3) A. number>0 B. number<0 C. number!=0 D. number==0 (4) A. number B. res*10+number

C. number/10 D. res*10+number/10 ? 【程序说明】输出150到200之间有且仅有一位数字为9的所有整数。要求定义和调用

函数is(n, digit)判断正整数n是否有且仅有一位数字为digit,若满足条件返回1,否则返回0。

#include

int main()

{ int i,is(int n,int digit); for(i=150; i<=200; i++)

if(____(1)____) printf(\答案:D

return 0;

}

int is(int n,int digit) { int count=0; do {

if(____(2)____) count++ ; 答案:C n= n/10 ;

} while(____(3)____); 答案:B if (____(4)____) return 1; 答案:A else return 0; }

(1) A.!is(n, digit) B. is(i, 9) == 0 C. is(n, 9) != 0 D. is(i, 9) != 0 (2) A. n % 10 == 9 B. n == digit C. n % 10 == digit D. n == 0 (3) A. n / 10 != 0 B. n != 0 C. n != 0 D. n == 0

(4) A. count == 1 B. count != 1 C. count != 0 D. count == 0

n

? 【程序说明】输入n,m,求组合数Cm 。要求定义两个函数jc和cmn分别计算阶乘和组合数

#include

_____(1)_____ 答案:C int i; int t=1;

_____(2)_____ 答案:A t*=i; return t; }

int cmn(int m, int n){

_____(3)______ 答案:B }

int main(){ int n,m;

printf(\ scanf(\

printf(\答案:B

return 0; }

(1) A. int jc(int n); B. int jc(int );

C. int jc(int n){ D. int jc(int ){ (2) A. for(i=1; i<=n; i++) B. for(i=0; i

C. for(i=1; i

B. return jc(m)/(jc(n)*jc(m-n));

C. cmn = fact(m)/( fact(n)* fact(m-n)); D. return fact(m)/( fact(n)* fact(m-n));

(4) A.cmn(int m, int n) B. cmn(m, n) C. cmn() D.cmn

? 【程序说明】输入2个正数a和n,求a+aa+aaa+??+a(n个a)这和,要求定义并调用函数fn(a,n),这它的功能是返回aa?a(n个a)。例如fn(3,2)的返回是33。 #include int main()

{ int i,n,a,sn;

int fn(int a,int n); printf(\scanf(\printf(\scanf(\

_____(1)_____ 答案:A for(i=1;i<=n;i++)

_____(2)_____ 答案:A printf(\return 0; }

int fn(int a,int n) { int i; int tn=0;

for(i=1;i<=n;i++) { tn=tn+a;

_____(3)_____ 答案:B }

_____(4)_____ 答案:D }

(1) A. sn=0; B. ; C. sn=1; D. sn=a; (2) A. sn=sn+fn(a,i); B. sn=sn+fn(a,n);

C. sn=sn+fn(i,a); D. sn=sn+fn(i,n);

(3) A. tn=tn*10 B. a=a*10; C. sn=tn*10; D. sn=sn+a*10 (4) A. return; B. return sn; C. return a; D. return tn; ? 【程序说明】计算并输出Fibonacci序列前10项之和。要求定义和调用函数fun(fib,n),该函数将Fibonacci序列前n项的存放在一维数组fib中。Fibonacci序列:1,2,3,5,8,13,21,34,55,??,该序列的第一个数和第二数据是1,从第三个开始,每个数是前两数之和。

#include int main()

{ int i,sum,a[10];

_____(1)_____ 答案D _____(2)_____ 答案C sum=0;

for(i=0;i<10;i++)

sum+= _____(3)_____ ; 答案B printf(\return 0; }

void fun(int fib[],int n) { int i;

fib[0]=fib[1]=1; for(i=2;i

_____(4)_____ 答案A }

(1) A. fun(int fib[] ,int n); B.void fun(int fib[] ,int n)

C.; D.void fun(int fib[] ,int n); (2) A.fun(fib,10); B.fun(a[],10);

C.fun(a,10); D.fun(a[10],10);

(3) A.fib[i] B.a[i] C.a[10] D.fib[0]

(4) A.fib[i]=fib[i-1]+fib[i-2]; B.fib[i-1]=fib[i-2]+fib[i-3];

C.fib[i+1]=fib[i-1]+fib[i]; D.fib[i]=fib[i-1]+fib[i+1];

? 【程序说明】输入一个字符串(少于80个字符),将其现两端分别加上括号后组成一个新字符串。要求定义和调用函数cat(s,t),该函数将字符串t连接到字符串s。 #include

void cat(char s[],char t[]) { int i,j; i=0;

while(s[i]!='\\0') i++;

____(1)____ 答案:A while(t[j]!='\\0')

{ ____(2)____ 答案:C

j++; }

____(3)____ 答案:B }

int main()

{ char s[80]=\

printf(\gets(t);

____(4)____ 答案:D cat(s,\

printf(\ puts(s); return 0; }

(1) A. j=0; B. s[i]=’\\0’; C. i--;j=0; D. j=i;

(2) A. s[i]=t[j]; B. t[j]=s[i]; C. s[i+j]=t[j] D. t[i]=s[j]; (3) A. t[j]=’\\0’; B. s[i+j]=’\\0’; C. s[j]=’\\0’; D. t[i]=’\\0’;

(4) A. cat(“(“,t); B. cat(t,t); C. cat(“(“,t,”)”); D. cat(s,t) ? 【程序说明】输入5个整数,将它们从小到大排序后输出。 #include int main()

{ int i, j, n, t, a[10];

printf(”Enter 5 integers:”); for(i = 0; i < 5 ; i++)

scanf(”%d”, ___(1)___ ); 答案:A for(i = 1; ___(2)___; i++) 答案:A

for(j = 0; ___(3)___ ; j++) 答案:B if( ___(4)___ ) { 答案:C

t = a[j], a[j] = a[j+1], a[j+1] = t; }

printf(”After sorted:”); for(i = 0; i < 5 ; i++) printf(\

return 0; }

(1) A. &a[i] B. a[i] C. *a[i] D. a[n] (2) A. i < 5 B. i < 4 C. i >= 0 D. i > 4

(3) A. j < 5–i–1 B. j < 5–i C. j < 5 D. j <= 5

(4) A. a[j] < a[j+1] B. a[j] > a[j-1] C. a[j] > a[j+1] D. a[j-1] > a[j+1] ? 【程序说明】输入一个整数n(1

#include int main()

{ int i, index, k, n, temp, a[10]; printf(“Enter n:”); scanf(“%d”, &n);

printf(“Enter %d intergers:”, ___(1)___); 答案:B

for(i = 0; i

if ( a[i] < a [index] ) ___(3)___; 答案:D

___(4)___; 答案:C

}

printf(\:\for(i = 0; i

printf (“%d “, a[i] ) ; return 0; }

(1) A. *n B. n C. &n D. 10

(2) A. index = k B. index = 0 C. index = n D. index = 1

(3) A. i = index B. index = n C. index = k D. index = i (4) A. a[index] = a[k], a[k] = a[index]

B. a[k] = a[index], a[index] = a[k]

C. temp = a[index], a[index] = a[k], a[k] = temp D. temp = a[k], a[index] = temp, a[k] = a[index]

? 【程序说明】输入一个4行4列的矩阵,计算并输出矩阵除四边以外的所有元素之和sum1,再计算和输出该矩阵主对角线以上(含主结角线)的所有元素之和sum2,主对角线为从矩阵左上角到右下角的连线。 #include int main()

{ int j,k,sum; int a[4][4];

printf(\

for(j=0;j<4;j++) for(k=0;k<4;k++)

scanf(\ sum=0;

for(j=0;j<4;j++) for(k=0;k<4;k++)

if( ___(1)___ ) 答案:A sum+=a[j][k]; printf(\ ___(2)___ 答案:B for(j=0;j<4;j++)

for( ___(3)___ ; ___(4)___ ;k++) 答案:B 答案:D sum+=a[j][k]; printf(\ return 0; }

(1) A. j!=3&&k!=3&&j!=0&&k!=0 B、j!=3&&k!=3||j!=0&&k!=0

C、j!=3||k!=3&&j!=0||k!=0 D、j!=3&&k!=3||j!=0&&k!=0 (2) A. sum1=0; B. sum=0; C. sum2=0; D. ; (3) A. k=0 B. k=j C. k=1 D. k=3 (4) A. k<=j B. k>0 C. k>j D. k<4 ? 【程序说明】输入一个3行2列的矩阵,分别输出各行元素之和。 #include int main()

{ int j,k,sum=0; int a[3][2];

printf(“Enter an array :\\n”); for(j=0;j<3;j++) for(k =0;k<2;k++)

scanf(“%d”,____(1)_____); 答案:C for(j=0;j<3;j++){ ___(2)_____ 答案:D for(k =0;k<2;k++)

sum= ____(3)______; 答案:A

printf(“sum of row %d is %d\\n”,____(4)_____,sum); 答案:B

}

return 0; }

(1) A. a[j][k] B. a[k][j] C. &a[j][k] D. &a[k][j] (2) A. A. ; B. sum= -1; C. sum=1; D. sum=0; (3) A. sum+ a[j][k] B. sum+ a[j][j] C. sum+ a[k][k] D. 0 (4) A. k B. j

? 【程序说明】连续输入一批学生的成绩,直到输入成绩的数量超过50或者输入成绩不是有效成绩(有效成绩为0-100),将输入的有效成绩存入数组mark中,在数组中查找并输出最高分。函数getmax(array,n)在有n个元素的一维数组array中找出并返回最大值。 #include #define MAXNUM 50

int getmax( ___(1)___ ) 答案:D { int k,max;

___(2)___ 答案:C for(k=1;k

if(max

int main() { int k,x;

int mark[MAXNUM];

printf(\ k=0;

scanf(\

while( ___(3)___ ) 答案:B { mark[k++]=x; scanf(\ }

if(k>0) printf(\答案:A else printf(\ return 0; }

(1) A. int n;int array[] B. void

C. int *array D. int array[],int n

(2) A. max=0; B. ; C. max=array[0] D. max=array[n]; (3) A. k=0&&x<=100 B. k=0&&x<=100

C. k>MAXNUM&&x>=0||x<=100 D. k>MAXNUM||x>=0||x<=100

(4) A. mark,k B. mark C. mark[] D. mark,n

? 【程序说明】函数inver(char str[ ])的功能是使输入的一个字符串按反序存放。

#include #include inver ( char str[ ] )

{ char t ;

int i , j , len ;

len = ___(1)___ 答案:A

for ( i = 0 , ___(2)___ ; i

t = str[i ] ;

___(3)___ 答案:C str[ j ] = t; } }

int main ( ) { char str[20] ; scanf( \ ___(4)___ 答案:D

printf ( \转换后字符串是:%s\\n \return 0; }

(1) A、strlen(str); B、strlen(str[]); C、str(str); D、str(str[]) (2) A、j=len B、j=len-1 C、j=len+1 D、j=0

(3) A、str[j]=str[i]; B、str[i]=t; C、str[i]=str[j]; D、t= str[j];; (4) A、inver(str[0]); B、inver(*st); C、inver(str[i]) D、inver (str); ? 【程序说明】在a 数组中查找与x 值相同的元素的所在位置。

#include int main()

{ int a[11], x,i;

printf(\ for(i=1;i<=10;i++)

scanf(\

printf(\

scanf(\

a[0]= ____(1)____ ; 答案:D

i=10;

while( x!=a[i] )

____(2)____; 答案:B

if( ____(3)____ ) printf(\答案:C

else printf(\return 0; }

(1) A. 0 B. 1 C. i D. x

(2) A. i++ B. i-- C. break D. continue (3) A. i=0 B. i==0 C. i!=0 D. a[i]==x

? 【程序说明】下面程序的功能是生成并打印某数列的前20项,输入该数列的前两项,

以后每个奇数编号的项是前两项之和,偶数编号的项是前两相差的绝对值。生成的20个数放在一维数组x中,并按每行4项的形式输出。

#include int main()

{ int x[21],i,j;

scanf(\

i=3;

do{

x[i]= __(1)__ ; 答案:A x[i+1]= __(2)__; 答案:D i= __(3)__; 答案:C

} while(i<=20);

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

{ printf(\

if(i%4==0) printf(\

}

return 0; }

(1)A. x[i-1]+x[i-2] B. x[i]+x[i-1] C. x[1]+x[2] D. i-1+i-2 (2)A. fabs(x[i-1]-x[i-2]) B. x[i-1]>x[i-2]?x[i-1]-x[i-2]:x[i-2]-x[i-1] C. fabs(x[i]-x[i-1]) D. x[i]>x[i-1]?x[i]-x[i-1]:x[i-1]-x[i] (3)A. i++ B. i-- C. i+=2 D. i*=2

? 【程序说明】输入一个字符串和一个正整数m,将该字符串中的前m个字符复制到另一

个字符串中,再输出后一个字符串。 #include int main( )

{ char s[80], t[80], i, m;

printf(\ gets(s);

printf(\scanf(\

for(i = 0; ____(1)____; i++) 答案:B ____(2)____; 答案:B

____(3)____; 答案:D

printf(\puts(t); }

(1)A.s[i]!=‘\\0’||i

(3) A.*s = ‘\\0’ B.*t = ‘\\0’ C.s[i]=‘\\0’ D.t[i] = ‘\\0’

2

? 【程序说明】输入一元二次方程ax+bx+c=0的三个系数a、b、c,计算方程的实根。要

求:定义一个计算一元二次方程实数根的函数,并且用函数返回值1表示方程有实数根,返回值0表示方程无实数根。 #include #include

____(1)____{ 答案:D double d = b*b - 4*a*c; if( d>=0){

*r1 = (-b+sqrt(d))/(2*a);

*r2 = (-b-sqrt(d))/(2*a); ____(2)____ 答案:A } else

return 0; }

int main(){

double a,b,c,x1,x2; int flag;

scanf(\ ____(3)____ 答案:B ____(4)____ 答案:C

printf(\ else

printf(\没有实数根\\n\ return 0; }

(1) A. int root(double a, double b, double c, double r1, double r2)

B. void root(double a, double b, double c, double r1, double r2) C. void root(double a, double b, double c, double *r1, double *r2) D. int root(double a, double b, double c, double *r1, double *r2) (2)A. return 1; B. return *r1; C. return *r2; D. return;

(3) A. root(a,b,c,&x1,&x2) B. flag = root(a,b,c,&x1,&x2)

C. flag = root(a,b,c,x1,x2); D. root(a,b,c, x1, x2); (4) A. if(flag==0) B. if(flag<>0)

C. if(flag) D. if(!flag)

? 【程序说明】函数void fun(int *a, int *n)的功能是:求出1到100之间能被5或

者7整除,但不能同时被5和7整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。 #include

void fun(____(1)____){ 答案:D int i;

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

if((i%5==0&&i%7!=0)||(i%5!=0&&i%7==0)) { *a=i; a++;

____(2)____; } 答案:A }

int main()

{ int a[50],i,n=0; fun(a,&n);

for(i=0; ____(3)____ ;i++) 答案:C printf(\ return 0; }

(1) A. int a[],int n B. int *a[],int *n

C. int *a,int &n D. int *a,int *n

(2) A. (*n)++ B. *n++ C. *n=*a D. n=a (3) A. i<50 B. i=n C. i

? 从键盘上输入5个学生的C语言成绩,以格式]写到文本文件aa.txt中。 ? #include

#include int main() { FILE *fp1; int i,score;

fp1=_____(1)_______; 答案:B

for(i=0;i<5;i++){

scanf(\

______(2)_____; 答案:D }

close(fp1); return 0; }

(1)A. fopen(\ C. fopen(\(2) A. fprintf(fp1,\

C. printf(\

? 将F盘根目录下的文本文件”data.txt”读入并显示出来,并统计总共包含的字符数 #include #include int main(){ FILE* fp; char ch; int count=0;

if(_____(1)______){ 答案:D

printf(\文件打开失败!\exit(0); }

while(_____(2)______ ){ 答案:A

_____(3)_______ 答案:A count++; }

printf(\总共包含字符数:%d\\n\fclose(fp); return 0; }

(1) A. (fp=fopen(\

B.(fp=fopen(\C.(fp=fopen(\D.(fp=fopen(\(2) A. (ch=fgetc(fp) ) != EOF B. !feof(fp)

C. fp!= EOF D. (ch=getchar(fp) ) == EOF

(3) A. printf(\

C. puts(ch); D. printf(\? 【程序说明】从”data.txt”文件中读入整数,并输出数据之和。 #include int main(){ FILE *fp; int sum=0, x;

if(____(1)____){ 答案:D

printf(\打开文件失败\\n\ }

while(____(2)____){ 答案:A ____(3)____ 答案:B sum += x; }

printf(\ fclose(fp); return 0; }

(1) A.(fp=fopen(\.(fp=fopen(\

C.fp=fopen(\.(fp=fopen(\(2) A. !feof(fp) B. feof(fp) C. fp!= EOF D. fp==EOF (3) A. fscanf(fp, \

C. fprintf(fp, \

? 输入正整数m和n,将大于整数m且紧靠m的n个素数存入到新建文件sushu.txt中。 #include #include int f(int x) { int k;

for(k=2;k

if(x%k==0) return 0; ____(1)____; 答案:B }

int main()

{ int m,n,count; FILE *fp;

if(____(2)____) { 答案:A

printf(\不能打开文件--> sushu.txt\\n\ exit(0); }

printf(\输入m n:\\n\scanf(\ for(count=0;count

____(3)____; count++; 答案:D

}

fclose (fp); return 0; }

(1) A.else return 1 B.return 1 C.else return x D.return x (2) A.(fp=fopen(\.(fp=fopen(\ C.fp=fopen(\.fp=fopen(\ (3) A.fputc(m,fp) B.printf(\ C.fputs(m,fp) D.fprintf(fp,\

编程序:

? “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1+5+3。

要求编写一个判断水仙花数的函数,在主函数调用该函数判断某个数是否为水仙花数并在主函数中输出所有的水仙花数。 【参考答案】

#include int isflower(int x) { int a,b,c; a=x; b=x/10; c=x/100;

if (a*a*a+b*b*b+c*c*c==x) return 1; else return 0; }

int main() { int i;

for(i=100;i<=999;i++) if (isflower(i)==1) printf(\ return 0; }

? 输入一个实数x和一个整数n(n≥0),计算x的n次幂。要求将计算x的n次幂定义成函数,不允许使用库函数pow。 ? 【参考答案】 #include

double f(double x,int n) { int i; double y;

for(i=y=1;i<=n;i++) y=y*x; return y; }

int main() { int n;

double x,y=1;

3

3

3

scanf(\ y=f(x,n);

printf(\ return 0; }

? 编写程序,输入一个正整数n,计算并输出下列算式的值。要求定义和调用函数total(n)

计算1+1/2+1/3??+1/n。函数返回值的类型是double。 S=Σ1/k=1+1/2+1/3+??+1/n (k的值从1到n) 【参考答案】

#include double total(int n) { int i;

double s=0;

for(i=1;i<=n;i++) s=s+1.0/i; return(s); }

int main() { int n;

double s;

scanf(“%d”,&n); s=total(n);

printf(“%f”,s); return 0; }

? 编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k

的阶乘,函数返回值的类型是double。 n1

s??k?1k!

【参考答案】

#include int main( ) { int i, n;

double x, sum;

double fact(int n); scanf(\ sum = 0;

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

sum = sum + 1/fact(i); printf(\ return 0; }

double fact(int n) { int i;

double res = 1; for(i=1; i<=n; i++) res = res*i; return res; }

? 按下面要求编写程序:

(1)定义函数fun(x)计算x2-3.14x-6,函数返回值类型是double。 (2)输出一张函数表(如下表所示),x的取值范围是[-10,+10],每次增加1,y= 22

x-3.14x-6,要求调用函数fun(x)计算x-3.14x-6。 【参考答案】

#include

double fun(int x)

x y { return x*x-3.14*x-6;

-10 125.40 } int main() -9 103.26

{ int x ;

……

double y;

9 46.74

printf(\

10 62.60 for(x=-10; x<=10; x++)

{ y=fun(x);

printf(\}

return 0; }

? 编写程序,输入100个整数,将它们存入数组a,求数组a中所有奇数之和。 【参考答案】

#include int main()

{ int a[100],i; int sum=0;

for(i=0;i<100;i++) scanf(\ for(i=0;i<100;i++) if(a[i]%2) sum+=a[i];

printf(\ return 0; }

? 输入100个整数,将它们存入数组a中,再输入一个整数x,统计并输出x在数组a中出现的次数。 【参考答案】

#include int main()

{ int a[100], x, i, count=0 ;

printf(\ for ( i=0; i<100; i++) scanf(\

printf(\ scanf(\

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

if ( a[i] == x ) count++; printf( \ return 0; }

? 有n(n≤100)个数,放在一维数组中,统计负数、零和正数的个数。 【参考答案】

#include int main()

{ int i,n,a[100],m,t,k; m=t=k=0;

scanf(\ for(i=0;i

{ scanf(\ if(a[i]<0) m++;

else if (a[i]==0) t++; else k++; }

printf(\负数:%d 零:%d 正数:%d\\n\return 0; }

? 输入一个字符串,统计里面数字字符的个数。如输入为\输出 \数字字符个数为: 4\。 【参考答案】

#include int main(){ char s[200]; int i,count=0; gets(s);

for(i=0;s[i]!='\\0';i++)

if( s[i]>='0' && s[i] <='9') count++;

printf(\数字字符个数为:%d\return 0; }

? 输入10个实数到一维数组中,将数组中的最大值和最小值交换位置。 【参考答案】

#include #define N 10 int main(){

int a[N];

int maxi=0,mini=0,i,t; // maxi、mini为最大、小元素下标 for(i=0;i

scanf(\ for(i=1;i

if(a[mini]>a[i]) mini=i; } t=a[maxi];

a[maxi]=a[mini]; a[mini]=t;

for(i=0;i

printf(\return 0; }

? 编写函数void reverse(char *s);将形参s所指向的字符串反转(如s指向字符串为”hello world”,反转后为”dlrow olleh”)。编写main函数,在main中调用reverse函数,并输出反转后的字符串。 【参考答案】

#include void reverse(char *s){ int t=0,i,j; char c;

while(s[t]!='\\0')

t++; // t为字符串长度,即字符串终止符’\\0’下标 for(i=0,j=t-1; i

int main(){

char s[]=\ reverse(s); puts(s); return 0; }

? 输入一个大于零的正整数,输出该数的各个非零数字之积。要求编写函数f,计算整数的各个非零数字之积(例如,输入1234,函数f返回1×2×3×4的值24;输入205,函数f返回2×5的值10)。在主函数中输入输出结果。 【参考答案】

#include int f(int a)

{ int s=1,t; while(a!=0) { t=a; a=a/10;

if(t!=0) s*=t; }

return s; }

int main()

{ int a,s; scanf(“%d”,&a); s=f(a);

printf(\ return 0;

}

n

? 定义函数power(x,n)计算x,定义函数cal(n)计算1+2+??+n,函数的返回值类型均为double;在main()中输入实数x及正整数n,计算并输出下列算式的值。该算式中,每

n

一项的分子是乘方,分母是累加和,要求调用函数power(x,n)计算x(不允许使用库函数pow),调用函数cal(n)计算1+2+??+n。

x2x3xn y?x??????1?21?2?31?2????n

【参考答案】

#include

double power(double x, int n){ int i;

double r=1;

for(i=0;i

int cal(int n){ int i; int s=0;

for(i=1; i<=n; i++) s += i; return s; }

int main(){

double x, t=0; int n,i;

scanf(\ for(i=1; i<=n; i++)

t += power(x,i)/ cal(i); printf(\

return 0; }

? 输入10个数放在一维数组a中,找出其中最小的数,将它与数组最前面的数交换后输出这10个数。 【参考答案】

#include int main()

{ int i,k,temp,a[10]; for(i=0;i<10;i++) scanf(\ for(k=0,i=1;i<10;i++) if(a[i]

temp=a[0];a[0]=a[k];a[k]=temp; printf(\交换后:\\n\ for(i=0;i<10;i++)

printf(\return 0; }

? 输入100个实数存放在数组a中,输出平均值、最小值及最大值。 【参考答案】

#include int main()

{ double a[100],sum=0,aver,max,min; int i; for(i=0;i<100;i++) {

scanf(“%lf”,&a[i]);

sum+=a[i];

}

aver=sum/100; max=min=a[0];

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

if(min>a[i]) min=a[i]; if(max

printf(“aver=%f\\nmin=%f\\nmax=%f\\n”,aver,min,max); return 0;

}

? 输入一个英文句子,再输入某个字符,统计此字符在句子中出现的次数。 【参考答案】

#include int main()

{ char s[80]; char ch ;

int count=0 , i; gets(s);

ch = getchar();

for(i=0; s[i] != ‘\\0’; i++){ if( s[i] == ch ) count ++; }

printf(\ return 0; }

? 输入矩阵a(6行6列)中的元素,分别计算并输出各行元素之和。 【参考答案】

#include < stdio.h > int main()

{ int a[6][6], m, n, i, j, sum[6] ; printf(\ for(i=0; i<6; i++)

for(sum[i]=0,j=0;j<6;j++) { scanf(\ sum[i]+=a[i][j]; }

printf(\ for(i=0; i

printf(\ return 0; }

? 输入一个正整数n(1≤n≤6),再输入一个n行n列的矩阵,统计并输出该矩阵中非零元素的数量。 【参考答案】

#include < stdio.h > #define N 6 int main()

{ int a[N][N], n, m=0, i, j ; printf(\ do

scanf(\ while ( n<=0 || n>6 ); printf(\ for(i=0; i

{ scanf(\ if( a[i][j]!=0 )

m++ ;

}

printf(\非零元素个数: %d\\n \ return 0; }