一、选择题
1.以下选项中属于C语言的数据类型是(B)。
A.复合型B.双精度型C.逻辑型D.集合型
2.以下说法中正确的是(C)。
A.C语言程序总是从第一个函数开始执行
B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行
D.C语言程序中的main()函数必须放在程序的开始部分
3.选出下列标识符中不是合法的标识符的是(D)。
A.hot_doB.cat1C._priD.2ab
4.下列描述中不正确的是(C)。
A.字符型数组中可能存放字符串。
B.可以对字符型数组进行整体输入、输出。
C.可以对整型数组进行整体输入、输出。
D.不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。
5.若已定义:inta[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式为(C)。
A.p+1B.a+1C.a++D.++p
6.定义如下变量和数组:inti,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句
for(i=0;i3;i++)printf(%d,x[2-i]);的输出结果是(C)
A.B.C.D.
7.表达式:10!=9的值是(D)。
A.trueB.非零值C.0D.1
8.若有说明:inti,j=7,*p=i;,则与i=j;等价的语句是(B)。
A.i=*p;B.*p=j;C.i=j;D.i=**p;
9.在C程序中有如下语句:char*func(intx,inty);它是(C)。
A.对函数func的定义。B.对函数func的调用。
C.对函数func的原型说明。D.不合法的。
10.以下程序的输出结果是(D)。
charstr[15]=”hello!”;
printf(“%d\n”,strlen(str));
A.15B.14C.7D.6
11.若有如下定义,则(D)是对数组元素的正确的引用。
inta[10],*p;
p=a;
A.*a[10]B.a[11]C.*(p+10)D.*p
12.以下不能正确定义二维数组的语句是(D)
A.inta[2][2]={{1},{2}};B.inta[][2]={1,2,3,4};
C.inta[2][2]={{1},2,3};D.inta[2][]={{1,2},{3,4}};
13.设变量定义为inta[3]={1,4,7},*p=a[2],则*p的值是(C)。
A.a[2]B.4C.7D.1
14.能正确表示a和b同时为正或同时为负的逻辑表达式是(D)。
A.(a=0
b=0)(a0
b0)B.(a=0b=0)(a0b0)
C.(a+b0)(a+b=0)D.a*b0
15.C语言中,合法的字符型常数是___A______。
A.‘A’B.“A”C.65D.A
16.设有数组定义:chararray[]=”China”;则数组所占的空间是__C______。
A.4个字节B.5个字节C.6个字节D.7个字节
17.若变量c为char类型,能正确判断出c为小写字母的表达式是___D____。
A.’a’=c=’z’B.(c=’a’)
(c=’z’)
C.(‘a’=c)and(‘z’=c)D.(c=’a’)(c=’z’)
18.设有定义:longx=-L;则以下能够正确输出变量x值的语句是__B_____。
A.printf(“x=%d\n”,x)B.printf(“x=%ld\n”,x)
C.printf(“x=%8dl\n”,x)D.printf(“x=%LD\n”,x);
19.指出下面正确的输入语句______B____。
A.scanf(“a=b=%d”,a,b);B.scanf(“%d,%d”,a,b);
C.scanf(“%c”,c);D.scanf(“%f%d\n”,f);
20.C语言中以追加方式打开一个文件应选择_____D__________参数。
A.“r”B.“w”
C.“rb”D.“a”
21.设a为整型变量,初值为12,执行完语句a+=a-=a*a后,a的值是(B)。
A.B.C.D.-
22.下列标识符中,不能作为合法的C用户定义标识符的是(B)。
A.a3_b3B.voidC._D.IF
23.下列整数值中,不正确的八进制或十六进制数值常量是(C)。
A.0xcdB.-C.D.0xfdc
24.在C语言中,if语句后的一对圆括号中,用以决定分支流程的表达式为(D)。
A.只能是逻辑表达式B.只能是关系表达式
C.只能是逻辑表达式或关系表达式D.可以是任意表达式
25.以下程序的输出结果为(B)。
main()
{charc;
inti;
for(i=65;i68;i++)
{c=i+32;
switch(c)
{case‘a’:printf(%c,,c);break;
case‘b’:
case‘e’:printf(ok,);
default:printf(end);
}
}
}
A.a,ok,endB.a,ok,endendC.a,ok,end,endD.a,ok,ok
二、判断对错,
1.在TurboC中,实型数据在内存中占4个字节。(√)
2.若有数组定义:inta[10];则a++是合法的表达式。(×)
3.若有宏定义:#definePI3.14i,则系统预编译时会报错。(×)
4.函数的递归调用不过是一个函数直接地调用它自身。(√)
5.定义在main函数后的任何函数都需在main中进行函数声明。(×)
6.若有定义:inta;则scanf(“%d,a);可以给变量a赋值。(×)
7.任何数组在使用前必须先定义。(√)
8.被main函数调用的函数只能是库函数。(X)
9.共用体变量的各个成员所占内存单元的地址相同。(√)
10.在使用缓冲文件系统时,与文件输入和输出相关的数据都先送到缓冲区中。(√)
11.C语言源程序通过了编译、连接之后,生成一个后缀为.EXE的文件。(√)
12.在C程序中,函数既可以嵌套定义,也可以嵌套调用。(X)
13.在C程序中,APH和aph代表不同的变量。(√)
14.表达式5是一个八进制整数。(X)
15.表达式_ya是不合法的C语言标识符。(X)
16.C程序总是从main()函数的第一条语句开始执行的。 (√)
17.a-=7等价于a=a-7。(√)
18.利用fclose函数关闭已打开的文件。(√)
19.数组名可以作为参数进行传递。(√)
20.执行printf(%x,45);,输出45。(X)
21.从循环体中退出只能使用goto语句。(X)
22.假设有inta[10],*p;则P=a[0]与p=a等价。(√)
23.C语言中数据类型只有整型、实型和字符型。(X)
24.C语言的数组下标从1开始。(X)
25.在C语言中定义一个文件指针的方法为:FILE*fp;。(√)
三、阅读程序,写出运行结果
1.intx=6,y=7;
printf(“%d,”,x++);printf(“%d\n”,++y);
程序的输出结果是6,8。
2.floatf=3.7;
printf(“%5.4f,%3.3f”,f,f);
则程序的输出结果是3.,3,。
3.a=3;
a+=(a1)?a:1;printf(“%d”,a);
结果是4。
4.main()
{inta[5]={2,4,6,8,10},*p;
p=a;
printf(%d,,*(p++));
printf(%d\n,*(p+2));}
程序的输出结果是2,8。
5.main()
{inti=29,j=6,k=2,s;
s=i+i/j%k-9;
printf(“s=%d\n”,s);
}
程序的输出结果是S=20。
6.6.以下程序的输出结果为(8,10
)。
main()
{inti=,j=10,*pi,*pj;
pi=i;pj=j;
printf(%d,%d\n,*pi,*pj);
}
7.7.以下程序的输出结果是( abc
)
main()
{chars1[20]=“abc”,s2[20]=“”;
if(strcmp(s1,s2)0)printf(“%s\n”,s1));
elseprintf(“%s\n”,s2);
}
8.8.以下程序的输出结果为()。
#includestdio.h
main()
{inti,j,a[]={0,2,8,4,5};
printf(\n);
for(i=1;i=5;i++)
{j=5-i;
printf(%2d,a[j]);
}
}
9.以下程序的输出结果为()。
#defineN7
main()
{inti,j,a[N][N];
for(i=1;iN;i++)
{a=1;a[1]=1;}
for(i=3;iN;i++)
for(j=2;j=i-1;j++)
a[j]=a[i-1][j-1]+a[i-1][j];
for(j=1;j=4;j++)printf(%2d,a[4][j]);
printf(\n);
}
10.以下程序的输出结果为(13)。
voidmain()
{inty=1,x,*p,a[]={2,4,6,8,10};
p=a[0];
for(x=0;x3;x++)
y+=*(p+x);
printf(%d\n,y);
}
四、程序填空题
1.求矩阵的主、次对角线之和。
main()
{staticinta[3][3]={9,7,5,1,2,4,6,8,0};
inti,j,s1=0,s2=0;
for(i=0;i3;i++)
for(j=0;j3;j++)
{if((1)i==j)
s1=s1+a[j];
if((2)i==2-j)
s2=s2+a[j];
}
printf(“%d\n%d\n”,s1,s2);
}
2.从键盘上输入10个数放入一维数组,然后求其平均值。
main()
{inti;
floata[10],sum,avg;
for(i=0;i10;i++)
(3)scanf(“%f”,a);;
(4)sum=0;;
for(i=0;i10;i++)
(5)sum=sum+a;;
(6)avg=sum/10;;
printf(“average=%f\n”,avg);
}
3.以下程序是建立一个名为myfile的文件,并把从键盘输入的字符存入该文件,当键盘上输入结束时关闭该文件。
#includestdio.h
main()
{
(7)FILE*fp;
charc;
fp=(8)fopen(“myfile”,”w”);;
do
{
c=getchar();
(9)fputc(c,fp);;
}while(c!=EOF);
(10)fclose(fp);;
}
五、填空题
(1)1.C语言的预处理语句以((1)#)开头。
2.表达式7+%5的结果是((2)0)。
3.下列程序段是从键盘输入的字符中统计数字字符的个数,用‘#’结束循环。
intn=0,ch;
ch=getchar();
(2)while((3)ch!=’#’)
(3){if((4)ch=’0’ch=’9’)n++;
c=getchar();}
(4)4.C语言中putchar(c)函数的功能是((5)输出字符c)。
(5)5.int*p;的含义是((6)定义了一个提向整型变量的指针)。
(6)6.定义fp为文件型指针变量的定义方法为((7)FILE*fp)。
7.数组inta[3][4];共定义了((8)12)个数组元素。
(7)8.实型变量的类型说明符有:((9)float)、((10)double)。
六、编程题
1.三个整数a、b、c,由键盘输入,输出其中最大的数。
#includestdio.h
main()
{
inta,b,c,max;
scanf(%d%d%d,a,b,c);
if(a=b)max=a;
elsemax=b;
if(cmax)max=c;
printf(max=%d\n,max);
2.从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印“notexist”。
#includestdio.h
main()
{
inta[10],i;
for(i=0;i10;i++)
scanf(%d,a);
for(i=0;i10;i++)
if(a%7==0){printf(%d,a);break;}
if(i==10)printf(notexist!);
}
3.有一维数组floata[10],其中存放10个学生成绩,写一个函数,求出平均分。
floatavg(floata[10])
{
inti;
floatsum=0.0;
for(i=0;i10;i++)
sum+=a;
returnsum/10;
}
4.编程计算下列表达式:s=n!(n从键盘上输入)
main()
{inti,n;
longt=1;
scanf(%d,n);
for(i=1;i=n;i++)
t=t*i;
printf(%d!=%ld\n,n,t);
}
5.编写函数sum,求3*3实型矩阵的主对角线元素之和。)
floatsum(floata[3][3])
{
inti,j;
floats=0;
for(i=0;i3;i++)
s+=a;
returns;
}
main()
{
floata[3][3]={1,2,3,4,5,6,7,8,9};
printf(sum=%f\n,sum(a));
}
6.编程实现从键盘上输入10个整数存入一维数组,求这10数中的最大值与最小值并输出。
main()
{
inta[10],i,MAX,MIN;
for(i=0;i10;i++)
scanf(%d,a);
MAX=MIN=a[0];
for(i=1;i10;i++)
if(aMAX)MAX=a;
elseif(aMIN)MIN=a;
printf(Max=%d,Min=%d\n,MAX,MIN);
}
7.编写一函数voidsort(inta[],intn),用起泡法实现对数组a中的n个元素从小到大进行排序。
voidsort(inta[],intn)
{inti,j,temp;
for(i=0;in-1;i++)
for(j=0;jn-1-i;j++)
if(a[j]a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}
}
8.编写一计算器程序,完成加、减、乘、除四则运算。首先提示用户输入运算符,然后提示输入两个运算数,最后将计算结果输出。例如:用户输入+,然后输入,程序在屏幕上输出10+20=30。
voidmain()
{
charop;
floatop1,op2,result;
printf(plsinputoperator+,-,*,/:\n);
scanf(%c,op);
printf(plsinputtwooperands:\n);
scanf(%f%f,op1,op2);
switch(op)
{
case+:result=op1+op2;break;
case-:result=op1-op2;break;
case*:result=op1*op2;break;
case/:result=op1/op2;break;
}
printf(%.2f%c%.2f=%.2f\n,op1,op,op2,result);
}
9.从键盘上输入学生的成绩,输出该成绩所对应的等级。成绩等级的划分方法为:=90分,等级为‘A’;80至89分,等级为‘B’;70至79分,等级为C;60至69分,等级为‘D’;60分以下,等级为‘E’。
用if语句实现
#includestdio.h
main()
{floatscore;
chargrade;
scanf(%f,score);
if(score=90)grade=A;
elseif(score=80)grade=B;
elseif(score=70)grade=C;
elseif(score=60)grade=D;
elsegrade=E;
printf(score=%f,grade=%c\n,score,grade);
}
用switch实现:
#includestdio.h
main()
{floatscore;
chargrade;
scanf(%f,score);
switch((int)(score/10))/*将分数除以10,使结果落在0-10之间*/
{
case10:
case9:grade=A;break;
case8:grade=B;break;
case7:grade=C;break;
case6:grade=D;break;
default:grade=E;
}
printf(score=%f,grade=%c\n,score,grade);
}
C程序设计练习题二
一、选择题
1.C语言源程序的基本单位是(B)。
A.过程B.函数C.子程序D.标识符
2.下列程序的输出结果是(C)。
main()
{inta=7,b=5;
printf(%d\n,b=b/a);
}
A.5B.1C.0D.不确定值
3.设a为int型变量,执行下列赋值语句后,a的取值分别是(B)。
a=.;a=(int).%4;
A.,31B.,1C.,31D..,2
4.设有如下程序段,下面描述中正确的是(C)。
intk=10;while(k=0)k=k-1;
A.循环执行一次B.循环是无限循环
C.循环体语句一次也不执行D.循环体语句执行一次
5.在C语言程序中,以下说法正确的是(B )。
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义和函数的调用都不可以嵌套
D.函数的定义和函数的调用都可以嵌套
6.以下程序的输出结果为(A)。
#defineADD(x)x*x
main()
{inta=4,b=6,c=7,d=ADD(a+b)*c;
printf(d=%d,d);
}
A.d=70B.d=80C.d=D.d=
7.已知职工记录描述如下,在TurboC中,系统为变量w分配(C)字节的空间。
structworker
{intno;
charname[20];
charsex;
union
{intday;intmonth;intyear;}birth;
}w;
A.29B.20C.25D.6
8.设有以下定义,值为5的枚举常量是(A)。
enumweek{sun,mon=4,tue,wed,thu,fri,sat}w;
A.tueB.satC.friD.thu
9.下面选项中正确的赋值语句是(设chara[5],*p=a;)(A)。
A.p=abcd;B.a=abcd;C.*p=abcd;D.*a=abcd;
10.C语言中的文件类型只有(D)。
A.索引文件和文本文件两种B.文本文件一种
C.二进制文件一种D.文本文件和二进制文件两种
11.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是(B)。
A.存放读入数据项的存储B.存放读入数据的地址或指向此地址的指针
C.一个指向所读文件的文件指针D.一个整型变量,代表要读入的数据项总数
12.以下程序的输出结果为(C)。
main()
{inti=,j=10;
printf(%d,%d\n,i,j);
}
A.11,9B.9,10C.8,10D.9,9
13.设i和k都是int类型,则for循环语句(D)。
for(i=0,k=-1;k=1;i++,k++)printf(****\n);
A.循环结束的条件不合法B.循环体一次也不执行
C.循环体只执行一次D.是无限循环
14.函数调用语句:fseek(fp,-10L,2);的含义是(A)。
A.将文件位置指针从文件末尾处向文件头的方向移动10个字节
B.将文件位置指针从当前位置向文件头的方向移动10个字节
C.将文件位置指针从当前位置向文件末尾方向移动10个字节
D.将文件位置指针移到距离文件头10个字节处
15.以下程序的输出结果为(D)。
main()
{chars1[40]=country,s2[20]=side;
inti=0,j=0;
while(s1!=\0)i++;
while(s2[j]!=\0)s1[i++]=s2[j++];
s1=0;
printf(%s\n,s1);
}
A.sideB.countryC.sidetryD.countryside
16.下列说法不正确的是(A)。
A.主函数main中定义的变量在整个文件或程序中有效
B.不同函数中,可以使用相同名字的变量
C.形式参数是局部变量
D.在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效
17.在下列程序段中,枚举变量c1的值是(B)。
enumcolor{red,yellow,blue,green,white}c1;c1=white;
A.1B.4C.5D.6
18.设有说明int(*ptr)();其中标识符ptr是(B)。
A.是一个指向整型变量的指针B.它是一个指向函数值是int的函数指针
C.是一个函数名D.定义不合法
19.定义由n个指向整型数据的指针组成的数组p,其正确的方式为(C)。
A.intp;B.int(*p)[n];C.int*p[n];D.int(*p)();
20.以下的for循环(B)。
for(x=0,y=0;(y!=)(x4);x++);
A.执行3次B.执行4次C.循环次数不定D.是无限循环
21.数组名作为实参数传递给函数时,数组名被处理为(C)。
A.该数组的长度B.该数组的元素个数
C.该数组的首地址D.该数组中各元素的值
22.关于return语句,下列正确的说法是(A)。
A.可以在同一函数中出现多次B.在主函数中不能出现
C.必须在每个函数中出现D.只能在除主函数之外的函数中出现一次
23.以下程序的输出结果为(B)。
#defineA3
#defineB(a)(A+1)*a
main()
{intx;
x=3*A+B(7);
printf(x=%d\n,x);
}
A.x=93B.x=37C.x=60D.x=90
24.若有下面的变量定义,以下语句中合法的是(A)。
inti,a[10],*p;
A.p=a+2;B.p=a[5];C.p=a[2]+2;D.p=(i+2);
25.要打开一个已存在的非空文件“file”用于修改,选择正确的语句(C)。
A.fp=fopen(file,r);B.fp=fopen(file,w);
C.fp=fopen(file,r+);D.fp=fopen(file,w+);
二、判断对错,对的划“√”,错的划“×”
1.C语言的常量在程序运行过程中可以重新赋值。(X)
2.inti=20;
switch(i/10)
{case2:printf(A);case1:printf(B);}
的输出结果为A。(X)
3.break语句用在循环体中,可结束本层循环;continue用在循环体中,可结束本次循环。(√)
4.函数的递归调用不过是一个函数直接或间接地调用它自身。(√)
5.函数strlen(ASDFG\n)的值是7。(×)
6.通过return语句,函数可以带回一个或一个以上的返回值。(×)
7.结构体类型只有一种。(×)
8.char*p=girl;的含义是定义字符型指针变量p,p的值是字符串girl。(×)
9.若有定义:char*p(chara[10]);则p是函数名。(√)
10.用fopen(file,r+);打开的文件file可以进行修改。(√)
11.在TurboC中,整型数据在内存中占2个字节。(√)
12.表达式1/4+2.75的值是3。(×)
13.在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。(√)
14.函数若无返回值,则它一定无形参。(×)
15.对整型变量可进行自加或自减运算,而对常量或表达式不可以。(√)
16.算术运算符和赋值运算符的结合方向均从左到右。(×)
17.一个函数中只允许有一条return语句。(×)
18.任何数组在使用时必须先定义。(√)
19.在int*p;和语句printf(“%d”,*p);中的*p含义相同。(×)
20.参加位运算的数据可以是任何类型的数据。(×)
21.getchar()函数的功能是从键盘上输入一个字符串。(×)
22.Continue语句的作用是继续程序中的下一个循环。(×)
23.构成数组的各个元素可以有不同的数据类型。(×)
24.函数一般由函数的说明部分和函数体部分组成。(√)
25.在使用缓冲文件系统时,与文件输入和输出相关的数据都先送到缓冲区中。(√)
三、阅读程序,写出运行结果
1.floataverage(floatarray[10])
{inti;
floataver,sum=array[0];
for(i=1;i10;i++)
sum=sum+array;
aver=sum/10;
return(aver);
}
main()
{floatscore[10]={89,67.5,78,91,56,82.5,65,70,79,88},aver;
inti;
aver=average(score);
printf(“averagescoreis%5.2f\n”,aver);
}
averagescoreis76.60
2.main()
{chara[5]={‘A’,‘B’,‘C’,‘D’,‘E’},*p=a;
for(;pa+5;p++)
printf(“%2c”,*p);
printf(“\n”);
}
ABCDE
3.main()
{inta,b,s=0;
for(a=1,b=1;a=;a++)
{if(b=20)break;
if(b%3==1)
{ b+=3;continue;}
b-=5;
}
printf(“a=%d\tb=%d\n”,a,b);
}
a=8b=22
4.#includestdio.h
voidfun(int*x,inty,int*z)
{
*z=*x+y;
}
main()
{
inta=1,b=3,c=5;
fun(a,b,c);
printf(%d,%d,%d\n,a,b,c);
}
1,3,4
5.hcf(intu,intv)
{inta,b,c,r;
if(uv){c=u;u=v;v=c;}
a=u;b=v;
while((r=b%a)!=0){b=a;a=r;}
return(a);
}
main()
{intu,v,h,l;
u=32;v=48;
h=hcf(u,v);
printf(H.C.F=%d\t,h);
}
H.C.F=16
6.main()
{intnumber=0;
while(number++=1)printf(*%d,,number);
printf(**%d\n,number);
}
*1,*2,**3
7.main()
{inti,num[5];
for(i=0;i5;i++)
num=i*10-2;
printf(%d,num[3]);
}
28
8.main()
{floatc,f;
c=30.0;
f=(6*c)/5+32;
printf(f=%f,f);
}
68.
9.main()
{inta[]={1,2,3,4,5,6},*p;
p=a;*(p+3)+=2;
printf(%d,%d\n,*p,*(p+3));
}
1,6
10.main()
{inty;
fac(4,y);
printf(“y=%d\n”,y);
}
fac(intn,int*t)
{ints;
if((n==1)
(n==0))*t=1;
else{fac(n-1,s);*t=n*s;}
}
y=24
四、阅读程序,在横线上填空
1.百马百担问题:有匹马,驮担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹?
main()
{inthb,hm,hl,n=0;//hb,hm,hl分别代表大马,中马和小马
for(hb=0;hb=;hb+=3)
1.for(hm=0;hm=-hb;hm+=(1)2)
2.{hl=-hb-(2)hm;
if(hb/3+hm/2+2*(3)hl==)
{n++;
printf(hb=%d,hm=%d,hl=%d\n,hb/3,hm/2,2*hl);
}
}
printf(n=%d\n,n);
}
2.用“起泡法”对输入的10个字符排序后按从小到大的次序输出。
#defineN10
charstr[N];
main()
{inti,flag;
scanf(%s,str);
sort((4)str___);
for(i=0;iN;i++)
printf(%c,str);
printf(\n);
}
sort(charstr[N])
{inti,j;
chart;
for(j=1;jN;j++)
for(i=0;(iN-j)(str!=\0);i++)
if(strstr[i+1])
{t=str;
_(5)str=str[i+1]____;
_(6)_str[i+1]=t___;
}
}
3.以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)
例如,矩阵为:
则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。
add(intm,intn,intarr[])
{inti,j,sum=0;
for(i=0;im;i=i+m-1)
for(j=0;jn;j++)
sum=sum+(7)arr[i*n+j];
for(j=0;jn;j=j+n-1)
for(i=1;(8)im-1;i++)
sum=sum+arr[i*n+j];
return(sum);
}
4.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。
#defineN10
main()
{voidmaxmin(intarr[],int*pt1,int*pt2,intn);
intarray[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
p1=a;p2=b;
maxmin(array,p1,p2,N);
printf(max=%d,min=%d,a,b);
}
voidmaxmin(intarr[],int*pt1,int*pt2,intn)
{inti;
*pt1=*pt2=arr[0];
for(i=1;in;i++)
{if(arr*pt1)(9)*pt1=arr;
if(arr*pt2)(10)*pt2=arr;
}
}
5.试求出0以内的“完全数”。(提示:如果一个数恰好等于它的因子之和(因子包括1,不包括数本身),则称该数为“完全数”。如:6的因子是1、2、3,而6=1+2+3,则6是个“完全数”。)
main()
{
inti,a,m;
for(i=1;i0;i++)
{
for(m=0,a=l;a=i/2;a++)
if(i%a==0)11m=m+a;
if(12m==i)printf(%4d,i);
}
}
6.求~间的全部素数。
#include13math.h
main()
{intm,k,i,n=0;
for(m=;m=;m+=2)
{k=sqrt(m);
for(i=;i=k;i++)if(m%i==0)15break;
if(i==16k+1)
{printf(%d,m);n++;}
}
}
7.将一个磁盘文件中的信息复制到另一个磁盘文件中。
#includestdio.h
main()
{17FILE*in,*out;
charch,infile[10],outfile[10];
printf(Entertheinfilename:\n);
scanf(%s,infile);
printf(Entertheoutfilename:\n);
scanf(%s,outfile);
if((in=fopen(infile,r))==NULL)
{printf(Cannotopeninputfile.\n);
exit(0);
}
if((out=fopen(outfile,w))==NULL)
{printf(Cannotopenoutputfile.\n);
exit(0);
}
while(!feof(in))
fputc(18fgetc(in),out);
19fclose(in);
20fclose(out);
}
五、程序填空题
1.有一个3*4矩阵,求其中的最大元素。
max_value((1)intarray[3][4])
{inti,j,max;
max=array[0][0];
for(i=0;i3;i++)
for(j=0;j4;j++)
if(array[j]max)
max=array[j];
(2)returnmax;
}
main()
{inta[3][4],i,j;
for(i=0;i3;i++)
for(j=0;j4;j++)
(3)scanf(“%d”,a[j]);;
printf(“maxvalueis%d\n”,max_value(a));
}
2.输入x、y两个整数,按先大后小的顺序输出x、y。
#include“stdio.h”
main()
{intx,y,*px,*py,(4)*p;
scanf(“%d%d”,x,y);
(5)px=x;;
(6)py=y;;
if(xy)
{p=px;px=py;py=p;}
printf(“MAX=%d,MIN=%d\n”,*px,*py);
}
3.用选择排序法对任意10个整数按照由大到小排序。
main()
{inta[11],i,j,k,t;
printf(Pleaseinput10numbers:\n);
for(i=1;i11;i++)scanf(%d,a);
printf(\n);
for(i=1;i=9;i++)
{(7)k=i;
for(j=i+1;(8)j11;j++)
if(a[j]a[k])k=j;
if((9)k!=i)
{t=a[k];a[k]=a;a=t;}
}
printf(Thesortednumbers:\n);
for(i=1;i11;i++)printf(%d,(10)a);
}
六、简要回答下列问题
1.结构化程序设计中常用的三种程序结构是什么?各自用哪些语句来实现?
三种程序结构:顺序,选择,循环,选择结构用if和switch语句,循环结构包括:whiledo~while和for
2.C语言对字符串操作的函数有哪些(举出2个以上)?
包括求字符串长度strlen,比较两个字符串大小strcmp,连接两个字符串strcat等。
3.C语言的构造类型有哪几种?各自适合描述什么样的问题?
C语言的构造类型有三种,数组、结构体和共用体。数组用来描述相同类型的数据集合;结构体用于描述不同类型的数据组成的复合结构,且不同的数据成员占不同的存贮空间;共用体也用于描述不同类型的数据组成的复合结构,但所有成员的起始地址相同,即占同一段内存空间。
4.函数调用有几种方式?函数的实参和形参是怎么进行结合的?
函数调用有两种方式,一种是表达式方式,另一种是语句方式。实参与形参采用值传递。
5.do—while循环和while循环的区别是什么?
do—while循环是先执行循环体,后判断条件,所以至少要执行一次循环体。而while循环先判断条件,后执行循环体,因此有可能一次也不执行循环体。
七.编程题
1.编写程序,对三个整数x,y,z进行排序,按从小到大的顺序进行输出。
main()
{intx,y,z,temp;
scanf(%d%d%d,x,y,z);
if(xy){temp=x;x=y;y=temp;}
if(xz){temp=x;x=z;z=temp;}
if(yz){temp=y;y=z;z=temp;}
printf(%d,%d,%d\n,x,y,z);
}
2.编写一个函数prime(n),判断一个整数n是不是素数。在主函数中输入一个整数,输出是否是素数的信息。
#includestdio.h
#includemath.h
intprime(intn)
{
inti,k;
k=sqrt(n);
for(i=2;i=k;i++)
if(n%i==0)break;
if(ik)return1;
elsereturn0;
}
main()
{inta;
scanf(%d,a);
if(prime(a))printf(%disaprimenumber!\n,a);
elseprintf(%disnotaprimenumber!\n,a);
}
3.求数列的1/1+1/3+1/5+……前20项的累加和
main()
{inti;floatsum=0;
for(i=1;i=20;i+=2)
sum=sum+1.0/i;
printf(sum=%f\n,sum);
}
4.一个班级有10名学生,每个学生的信息包括学号,姓名和成绩。编写一函数sort,实现按学生成绩降序排列,排序方法任选。在函数之前,定义出函数中要使用的数据类型
structstudent
{
intno;
charname[10];
floatscore;
};
voidsort(structstudenta[],intn)
{
inti,j;
structstudenttemp;
for(i=0;in-1;i++)/*用起泡法对数组进行排序*/
for(j=0;jn-1-i;j++)
if(a[j].scorea[j+1].score)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
5.编写程序打印下面的图形。利用scanf()函数由用户输入星号的行数。
*
**
***
****
*****
*
**
***
****
*****
main()
{intn,i,j;
scanf(%d,n);
for(i=0;in;i++)
{
for(j=0;j=i;j++)
printf(*);
printf(\n);
}
}
6.已知定义int型数组a,数组a中的元素均为三位数。编写函数jsVal(),其功能是:统计出3位数均为偶数的数组元素的个数c。
例如:inta[6]={,,,,,},则统计结果c=3.
intjsVal(inta[],intn)
{
inti,c=0,bw,sw,gw;
for(i=0;in;i++)
{
bw=a/;//计算百位bw
sw=a%/10;//计算十位sw
gw=a%10;//计算个位gw
if(bw%2==0sw%2==0gw%2==0)c=c+1;
}
returnc;
}