设有程序public void mainn()inta;floatbscanf

C语言程序设计试题及答案(十)
C语言程序设计试题及答案(十)
一、选择题:
1.以下不是C语言的特点的是(&&& )
A.C语言简洁、紧凑&&&&&&&&&&&&&&&&& B.能够编制出功能复杂的程序
C. C语言可以直接对硬件进行操作&&&& D.C语言移植性好
2. 以下不正确的C语言标识符是(&&& )。
A.ABC&& &&&&&&&B.abc&& &&&&&&C.a_bc&&&&&&&&&D.ab.c
3.一个c程序的执行是从(&& ).
A.main(&&& )函数开始,直到main(&&& )函数结束
B.第一个函数开始,直到最后一个函数结束
C.第一个语句开始,直到最后一个语句结束
D.main(&&& )函数开始,直到最后一个函数结束
4.以下不正确的语句(设有int p,q)是(&&& )。
A.P*=3;&B.p/=q;&& C.p十=3;&D.p&&=q
5.下列四组选项中,均不是C语言关键字的选项是(&&& ).
A.define&&& B.getc&&&&& C.include&&& D.while&&&&
if&&&&&&&&&& char&&&&&&&& sanf&&&&&&&& go
type&&&&&&&&&& printf&&&&&& case&&&&&&&& pow
6.下面四个选项中,均是合法整形常量的选项是(&& ).
&A.160&&&&&&&&&&&&& B.-0xcdf&&&&&&& C.-01&&&&&&& D.-0x48a
&& -0xffff &&&&&&&& &&&01a&&&&&&&&&& 986,012 &&&& 2e5
&& &&&&011&&&&&&& &&& &&&0xe&&&&&&&& &&&& 0668&&&&&&&& 0x
7. 下面四个选项中,均是不合法浮点数的选项是(&& ).
&A.160.&&&&&&&&&&& B.123&&&&&&&&&& &C.-.18&&&&&&& D.-e3
0.12&&&&&&&&&& &&& 2e4.2&&&&&&&&&& &&& 123e4&&& && 0.234
&&& &&&e3&&&&&&&&& &&&&&&& .e5&&&&&&&&&&&& && 0.0&&&&&&&& && 1e3
8. 若有代数式3ae/bc,则不正确的C语言表达式是(&)
&& A.a/b/c*e*3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B.3*a*e/b/c
&&&&& &&C.3*a*e/b*c&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D.a*e/c/b*3
9. 若以下变量均是整形,且num=sum=7;则计算表达式sUM=num++,sUM++,++num后sum的值为(&).
A.7&&&&&&&&& B.8&&&&&&&& C.9&&&&&&&&&&&&&&& D.10
10.若有定义:int a=7; float x=205 ,y=4.7; 则表达式x+a%3*(int)(x+y)%2/4的值是(&)。
&&&&& A.2.500000&&&&&&&&& B.2.750000&&&&&&&&& C.3.500000&&&&&&&&& D.0.000000
11. sizeof(float)是(&)。
A.一个双精度型表达式&&&&&&&&&&&&&& B. 一个整型表达式
&&&&& &C.一种函数调用&&&&&&&&&&&&&&&&&&&&&&& D. 一个不合法的表达式
12. 设int n=3;则n十十的结果是(&&& )。
&&& &A.2&& &&&&&&B.3&&&&&&C.4&&& &&&D.5
13. 设有说明: 则表达式w*x+z-y值的数据类型为(&& )。
&&&&& A.float&&&&&&&&&&&&&& B.char&&&&&&&&&&&&&& C.int &&&&&&&&&&&&&&& D.double.
14. 若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是(&).
A. scanf(&%d%d1x,%1e&,&x,&y,&z);
B. scanf(&%2d*%d%1f&,&x,&y,&z);
C. scanf(&%x%*d%o&,&x,&Y);
D. scanf(&%x%o%6.2f&, &x,&y,&z);
15. 以下说法正确的是(&).
A. 输入项可以为一个实型常量,如scanf(&%f&,3.5);
B. 只有格式控制,没有输入项,也能进行正确输入,如scanf(&a=%d,b=%d&);
C. 当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(&%4.2f&,&f);
D. 当输入数据时,必须指明变量的地址,如scanf(&%f&,&f);
16. 以下程序的执行结果是(&& )。
#include&stdio.h&
sum=pad=5;
pad=sum++;
printf(&%d\n&,pad);
A.7 &&&&&&&&B.6 &&&&&&&&&&&&&&C.5 &&&&&&&&&&&&&&&&&&&D.4
17. 巳知字母A的ASCII码是65,以下程序的执行结果是(&)。
#include&stdio.h&
&char c1='A',C2='Y';
&printf(&%d,%d\n&,c1,c2);
A.A,Y &&&&&&&&B.65,65 &&&&&&&&&C.65,90 &&&&&&&&&&&&&D.65,89
18. 为了避免嵌套的if-else语句的二义性,c语言规定else总是与(&& )组成配对关系。
A.缩排位置相同的if
B.在其之前末配对的if
C.在其之前未配对的最近的if
D.同一行上的if
19. 逻辑运算符两侧运算对象的数据类型(&).
&A.能是0或1
&B.只能是0或非0正数
&C.只能是整型或字符型数据
&&&&& D.可以是任何类型的数据
20. 设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是(&& ).
A.&x&&&&y&
C. x||y+z&&y-z
D.!((x<y)&&!z ||1)
21. 若希望当A的值为奇数时,表达式的值为&真&,A的值为偶数时,表达式的值为&假&。则以下不能满足要求的表达式是(&).
A.A%2==1&&& B.!(A%2==0)&&& C.!(A%2)&&& D.A%2
22. 以下不正确的if语句形式是(&).
A.if(x>y&&x!=y);
B.if(x==y)x十=y;
C.if(x ! =y)scanf(&%d&,&x) e1se scanf(&%d,&y);
D.if(x<y){x十十;y十十;}
23. 以下if语句语法正确的是(&).
A.if(x>0)
&&& printf(&%f&,x)
&&& else printf(&%f&,-x);
B.if(x>0)
{x=x+y;printf(&%f&,x);}
else printf(&%f&,-x)
C.if(x>0)
{x=x+y;printf(&%f&,x);}
else printf(&%f&,-x)
D.if(x>0)
{x=x+y;printf(&%f&,x);}
else printf(&%f&,-x)
else printf(&%f&,-x);
24. 阅读以下程序
{int a=5,b=0,c=0;
if(a=b+c) printf(&***\n&);
else&&&& printf(&$$$\n&);
以上程序 (&& ).
A.语法有错不能通过编译&&&&&&&&&&&&&&&&&&&&& &B.可以通过编译但不能通过连接
C.输出***&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&D.输出$$$
25. 以下程序运行结果是(&).
{int a=100,x=10,y=20,ok1=5,ok2=0;
&&& if (y!=10)
&&&& If(!ok1)
&&&&&&&&& a=1;
&&&&&& else
&&&&&&&&& if(ok2)&& a=10;
printf(&%d\n&,a);
A.1 &&&&&&&&&&B.0 &&&&&&&&&&&&&c.-1 &&&&&&&&&&&&&&&&&&D.不确定
26. 执行以下程序段后,变量a,b,c得值分别是(&).
int x=10,y=9;
int a,b,c;
a=(--x==y++)? &x: ++y;
A.a=9,b=9,c=9&&&&&&&&&&&&&&&&& B.a=8,b=8,c=10
C.a=9,b=10,c=9&&&&&&&&&&&&&&&& D.a=1,b=11,c=10
27. 若w,x,y,z,m均为int型变量,则执行下面语句后的m值是(&).
w=1;&& x=2;&& y=3;&& z=4;
m=(w&x)? w:x;
m=(m&y)? m:y;
m=(m&z)? m:z;
A.1&&&&&&&&&&& B.2&&&&&&&&&&&&&& C.3&&&&&&&&&&&&&&&& D.4
28. 语句while(!e);中的条件!e等价于(&&& )。
&&& &A.e==0&&& &&&B.e!=1&&&&&&&&&&C.e!=0&&&&& &&&&&&&D.~e
29. 下面有关for循环的正确描述是(&& )
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判定表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环体语句中,可以包含多条语句,但要用花括号括起来
30. C语言中while和do-while循环的主要区别是(&).
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
31.以下程序段(&).
x=-&&1;&do{x=x*x;}&while(! x);
A.是死循环&&&&&&&&&&&&&&&& B.循环执行二次
C. 循环执行二次&&&&&& &&&&D.有语法错误
32. 下面程序的运行结果是(&).
#include &stdio.h&
{int y=10;
do{y--;}while(--y);
printf(&%d\n&,y--);}
A.-1&&&&&&& B.1&&&&&&&&&&& C.8&&&&&&&&&&&& &&&D.0
33. 以下正确的描述是(&).
A.continue语句的作用是结束整个循环的执行
B.只能在循环体内和switch语句体内使用break语句
C.在循环体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出时,只能使用goto语句
34. c语言中(&&& )。
A.不能使用do-while语句构成的循环
B.do-while语句构成的循环必须用break语句才能退出
C.do&whiLe语句构成的循环,当while语句中的表达式值为非零时结束循环
D.do&while语句构成的循环,当while语句中的表达式值为零时结束循环
35. 在C语言中,引用数组元素时,其数组下标的数据类型允许是( )
&&&& A. 整型常量&& B.整型表达式C.整型常量或整型表达式D.任何类型的表达式
36. 在C语言中,一位数组的定义方式为:类型说明符 数组名(&)。
A. [常量表达]&B. 整型表达式C. [整型常量]或[整型表达式] D. [整型常量]
37. 以下不能对二维整形数组a进行正确初始化的语句是(&)。
A.int a[2][3]={0};
B. int a[][3]={{1,2},{0}};
C. int a[2][3]={{1,2},{3,4},{5,6}};
D. int a[][3]={1,2,3,4,5,6};
38. 若有说明:int&a[][4]={0,0};则下面正确的叙述是()。
A. 数组a中每个元素均可得到初值0
&B. 二维数组a的第一维大小为1
C. 因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1
D.只有元素a0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
39. 若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是( )。
A.2&&&&&&&&&& B.3 &&&&&&&&&C.4&&&&&&&&& D.无确定值
40. 下面程序的运行结果是( )。
char c[5]={&a&,&b&,&\0&,&c&c,&\0&};
printf(&%s&,c);}
41. 有两个字符数组a、b,则以下正确的输入语句是(&)。
gets(a,b);
scanf(&%s%s&,a,b);
scanf(&%s%s&,&a,&b);
gets(&a&),gets(&b&);
A. s[j+=]=s[i]&&&&& &&&&B. s[++j]=s[i]
C. s[j]=s[i]; j++&&&& &&D.s[j]=s[i]
42. 若使用一维数组名作函数实参,则以下正确的说法是(&).
A.必须在主调函数中说明此数组的大小
B.实参数组类型与形参数组类型可以不匹配
C.在被调函数中,不需要考虑形参数组的大小
D.实参数组名与形参数组名必须一致
43. 以下正确的说法是(&).
A.如果在一个函数中的复合语句中定义了一个变量,则该变量只在该复合语句中有效
B.在该函数中有效
C.在本程序范围内均有效
D.非法变量
44. 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为(&).
A.自动(auto) B.静态(static)C.外部(extern) D.&寄存器(register)
45. 以下程序的运行结果是(&)。
#define MIN(x,y)&& (x)&(y)?(x):(y)
{int i=10,j+15,k;
k+10*MIN(i,j);
printf(&%d\n&,k);
A.10&& &&&&&&&&B.15&&&&&&&&&&&&C.100&&&&&&&&&&&&&&D.150
46. C语言的编译系统对宏命令的处理是(&)。
A.在程序运行时进行的
B.在程序连接时进行的
C.和C程序中的其它语句同时进行编译的
D.在对源程序中的其它语句同时进行编译的
47. 请读程序
#include&stdio.h&
#defineMUL(x,y)(x)*y
{int a=3,b=4,c;
c=MUL(a++,b++);
printf(&%d\n&,c);&& &&&&
上面程序的输出结果是(&)。
A.12 &&&&&&B.15&&&&&&C.20&&&&&&&D.16
48. 以下程序的输出结果为(&)。
#definePT&&& 5.5
#defineS(x)&& PT*x*x
{inta=1,b=2;
printf(&%4.1\n&,S(a+b));
A.12.0 &&&&&&&B.9.5 &&&&&&C.12.5 &&&&D.33.5
49. 在&文件包含&预处理语句的使用形式中,当#include后面的文件名用&&括起时,寻找被包含文件的方式是( )。
A.仅仅搜索当前目录
B.仅仅搜索源程序所在目录
C.直接按系统设定的标准方式搜索目录
D.先在源程序所在目录搜索,再按系统设定的标准方式搜索
50. 以下正确的描述是( )。
A.C语言的预处理功能是指定完成宏替换和包含文件的调用
B.预处理指令只能位于C源程序文件的首部
C.凡是C源程序中行首以&#&标识的控制行都是预处理指令
D.C语言的编译预处理就是对源程序进行初步的语法检查
51. 设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是(&)。
&A.c=*p1+p2;&& &&B.p2=c&&& &&C.p1=p2&& &&&&D.c=*p1*(*p2);
52. 设有下面的程序段:
&&&&&&&&& chat s[]=&china&; char *p; p=s;
&&&&&&&&& 则下列叙述正确的是(&)。
A.s和p完全相同
B.数组s中的内容和指针变量p中的内容相等
C.s数组长度和p所指向的字符串长度相等
D.*p与s[0]相等
53. 下面程序的运行结果是(&)。
&&&&&&&& #include&stdio.h&
&&&&&&&& #include&string.h&
&&&&&&&& main()
&&&&&&&& {
char *p1,*p2,str[50]=&abc&;
p1=&abc&;&p2=&abc&;
strcpy(str+1,strcat(p1,p2));
printf(&%s\n&,str);
A. abcabcabc&& B.bcabcabc&C. aabcabc&& D.cabcabc
54. 若有定义:int a[2][3];则对数组a的第i行第j列(假设i,j已正确说明并赋值)元数值的正确引用为( )。
&&&&&&& A.*(*(i+j)+j)&B.(a+i)[j]&& C.*(a+i+j)&&&& D.*(a+i)+j
55. 若有定义:int&(*p)[4];则标识符p(&)。
A.是一个指向整型变量的指针
B.是 一个指针数组名
C.是一个指针,它指向一个含有四个整型元素的一维数组
D.定义不合法
56. 若有以下定义和赋值语句,则对b数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的非法引用为(&)。
int b[2][3]={0},(*p)[3];
A.*(*(p+i)+j)&&&&&& &&&B.*(p[i]+j)
C.(p+i)+j&&&&&&&&&&&&&& D.(*(p+i))[j]
57. 当说明一个结构体变量时系统分配给它的内存是(&).
A.各成员所需内存量的总和
B.结构中第一个成员所需内存量
C.成员中占内存量最大者所需的容量
D.结构中最后一个成员所需内存量
58. C语言结构体类型变量在程序执行期间(&).
A.所有成员一直驻留在内存中
B.只有一个成员驻留在内存中
C.部分成员驻留在内存中
D.没有成员驻留在内存中
59. 以下对C语言中共用体类型数据的叙述正确的是(&& )。
&&&&&& A.可以对共用体变量名直接赋值
&&&&&& B.一个共用体变量中可以同时存放其所有成员
&&&&&& C.一个共用体变量中不可能同时存放其所有成员
&&&&&& D.共用体类型定义中不能出现结构体类型的成员
60. C语言共用体型变量在程序运行期间&(&)&& 。
&&&&&&&&& A.所有成员一直驻留在内存中
&&&&&&&&& B.只有一个成员驻留在内存中
&&&&&&&&& C.部分成员驻留在内存中
&&&&&&& &&D.没有成员驻留在内存中
61. 请读程序片段:
printf(&%d\n&, ~x);
上面程序片段的输出结果是(&& ).
62. 在位运算中,操作数每左移一位,其结果相当于(&& ).
A.操作数乘以2
B.操作数除以2
C.操作数除以4
D.操作数乘以4
63. 系统的标准输入文件是指(&)。
A. 键盘&&&&&&& B .显示器&&&&&&& C .软盘&&&&&&& D. 硬盘
64. 当顺利执行了文件关闭操作时,fclose函数的返回值是(&)。
&A .-1&&&&&& B. TURE&&&&&&& C. 0&&&&&& D.1
65. 已知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是&&&&&&&&& (&)。
&&&&& A .一个整形变量,代表要读入的数据项总数
&&&&& B .一个文件指针,指向要读的文件
&&&&& C .一个指针,指向要读入数据的存放地址
&&&&& D.一个存储区,存放要读的数据项
二、填空题:
1. C程序的基本单位是&&&& &&&&&。
2. 表达式10%3的结果是&&&&&&&&&& 。
3. 假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为 &&&&&&&&。
4. 在C语言中(以16位PC机为例),一个float型数据在内存中所占用的字节数为&&&&& ;
5.C语言所提供的基本数据类型包括:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 。
6.表达式pow(2.8,sqrt(double(x))) 值的数据类型为&&&&&&&&&&&&&&&&& 。
7.以下程序的执行结果是&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 。
#include&stdio.h&
float f=3.5;
printf(&%f,%g&,f,f)
8. 以下程序的执行结果是&&&&&&&&&&&&&&&&& 。
#include&stdio.h&
float f=31.41592;
printf(&%f,%e&,f,f)
9. 以下程序的执行结果是&&&&&&&&&&&&&&&&&&&&&&&&& 。
#include&stdio.h&
int a,b,c;
a=2;b=3;c=1;
printf(&%d\n&,a);
&printf(&%d\n&,b);
printf(&end\n&);
10. 在C语言中,表示逻辑&真&值用&&&&&&&&&&&&&&&& .
11. 有int x,y,z; 且x=3,y=-4,z=5,则表达式(x&&y)= =(xz)的值为&&&&&&&&&&&&& 。
12. 下面程序从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。
int n=0,c;
c=getchar();
while(&&&&&&&&&&&&& )
&{if(c&=&0&&&c&=&9&) n++;
&c=getchar();
13. 执行下面程序段后,k值是&&&&&&&&&&&&&&&&&&&&&& .
k=1;n=263;
do{k*=n%10; n/=10 }&while(n);
14. 下面程序段中循环体的执行次数是&&&&&&&&&&&&&&&&&& .
do{b+=2;a-+2+b; }while (a&=0);
15. 若for循环用以下形式表示:
&&&&&&&&&&&&& for(表达式1;表达式2;表达式3)&& 循环体语句
&&&&&&&& 则执行语句for(i=0;i&3;i++)&printf(&*&);时,表达式3执行&&&&&&&&& 次。
16. 以下程序的输出结果是__________。
{int s[10]={1,2,3,4,5,6,7,8,9,10},*p=s;
printf(&%d\n&,*(p+4));
17. 若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为:&&&&&&&&&&& 。(假设a[0][0]位于数组的第一个位置上。)
18. 在C语言中,二维数组元素的内存中的存放顺序是&&&&&&&&&&&&&& 。
19. 在C 语言中,一个函数一般由两个部分组成,它们是&&&&&&&&&&&&&&&&&&&&&&&&&& 。
20. 以下程序的运行结果是&&&&&&&&&&&&&&&&&& 。
&&&&&&&&& #include&stdio.h&
&&&&&&&&& f(int a[])
&&&&&&&&& {int i=0;
&&&&&&&&&& while (a[i]&=10)
{printf(&%d&,a[i]);
{int a[]={1,5,10,9,11,7};
21. 设有以下宏定义:#define WIDTH 80
&&&&&&&&&&&&&&&&&&& #define LENGTH (WIDTH+40)
则执行赋值语句:k=LENGTH*20;(k为int 型变量)后,k的值是&&&&&&&&&&&&&&& 。
22. 下面的运行结果是&&&&&&&&&&&&& &&&。
      #define MUL(z)&& (z)*(z)
&&&&&&&&&&& main()
&&&&&&&&&&& {
&&&&&&&&&&&&&&&& printf(&%d\n&,MUL(1+2)+3);
&&&&&&&&&&& }
23. 下面程序的运行结果是&&&&&&&&&&&&&&& 。
&&& #define EXCH(a,b)&{int t;t=a;a=b; b=t;}
&&& main()
&&& {int x=5,Y=9;
EXCH(x,y);
printf(&x=%d,y=%d\n&,x,y);
24. 下面程序段的运行结果是&&&&&&&&&&&& 。
char s[80], *sp=&HELLO!&;
sp=strcpy(s,sp);
25. 下面程序段的运行结果是&&&&&&&&&&&& 。
&&&&&&&&&&& char s1=&AbcdEf&,s2=&aB&;
&&&&&&&&&&& s1++;
t=(strcmp(s1,s2)&0);
print(&%d\n&,t)
26. 下面程序段的运行结果是&&&&&&& &&&&。
&&&&&&&&& char *p=&PDP1-0&;
&&&&&&&&& int I,d;
&&&&&&&&& for(I=0;I&7;I++)
{d=isdigit(*(p+ii));
if(d!=0)&printf(&%c *(p+I));
27. 当运行以下程序时,从键盘输入 book&CR&
(&CR&表示回车, 表示空格),则下面程序段运行的结果是&&&&&&&&&&&&&& 。
char a1[80],a2[80],*s1=a1,*s2=a2;
gets(s1);gets(s2);
if(!strcmp(s1,s2)) printf(&*&):
else printf(&#&);
printf(&%d&,strlen(strcat(s1,s2)));
28. 若已定义:
struct&num
} n={1,3,5.0};
struct num * pn = &n;
则表达式 (*pn).a+pn-&f的值是&&&&&&&&&& 。
29. 在C语言中,&运算符作为双目运算符时表示的是&&&&&&& &运算.
30. 在C语言中,文件的存取是以字符为单位的,这种文件被称作&&&&&&&&&& 文件。
三、编程题:
1.将一个字符串的内容颠倒过来。
2. 求整形数组的最大值。
3. 求字符串的长度(不用strlen)。
4. 编写程序,将字符串str中的所有字符&k&删除。
5.找出二维数组的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组也可能没有鞍点。
6.a是一个2*4的整型数组,且各元素均已赋值.函数max_value可求出其中的最大元素值max,并将此值返回主调函数.今有函数调用语句max=max_value(a);请编写max_value函数.
7. 设计函数,实现字符串连接操作(不使用strcat)。
8. 以下程序的功能是应用下面的近似公式计算e的n次方.函数f1用来计算每项分子的值,函数f2用来计算每项分母的值.请编写f1和f2函数.
ex=1=x=x2\2!+x3\3!&(前20项的和)
9. 从键盘上输入若干个学生的成绩,计算出平均成绩,并输出不及格的成绩和人数。
10.设计函数,在二维数组中产生如下形式的扬辉三角形。
&&&& 1&&& 1
&&&& 1&&& 2&&& 1
&&&& 1&&& 3&&& 3&&& 1
&&&& 1&&& 4&&& 6&&& 4&&& 1
&&&& &&&&&&
11. 回文是从前向后和从后向前读起来都一样的句子。写一个函数,判断一个字符串是否为回文,注意处理字符串中有中文也有西文的情况。
12.约瑟夫环问题:编号为1,2,3,&&&,n的n个人按顺时针方向围坐一圈,每人持有一个正整数密码。一开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针报数,报到m时停止,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计程序求出出列顺序。
一、选择题
1. B 2.D 3.A 4.D 5.A 6.A 7.B 8.C 9.A 10.A 11.B 12.B 13.D 14.D 15.D 16.A 17.D 18.C 19.D 20.D 21.C 22.C 23.B 24.D 25.C 26.B 27.A 28.A 29.D 30.A 31.C 32.B 33.B 34.D 35.C 36.D 37.C 38.D 39.B 40.B 41.B 42.A 43.A 44.A 45.B 46.D 47.A 48.B 49.C 50.C 51.B 52.D 53.C 54.A 55.C 56.C 57.A 58.A 59.C 60.B 61.C 62.A 63.A 64.C 65.C
二、填空题
1.函数 &2. 1 3. 9 &4. 4 &5.单精度型、双精度型、整型、字符型和枚举型 6.双精度型(或:doubLe型) 7.3..5 &8.&31..14159e+01 9.end 10.非0的数字 11.1 12.c!='\n' 13.36&14.3 15.3&16.5&& 17.i*m+j+i 18.按行主顺序存放 19.函数说明部分和函数体&20.5&10&9&21.2400&22.12&23.x=8,y=5 24.hELLO!
25.1 26.1*0* 27.#9 28.6.0&29.按位与 30.流式
三、编程题
1. 解:注意交换位置的控制方法,参考程序如下:
#include &stdio.h&
#include &string.h&
void change(char&str[])
{ int len,i,j;
&len=strlen(str);
&for (i=0,j=len-1;i&len/2;i++,j--)
&& { c=str[i];
&&&& str[i]=str[j];
&&&& str[j]=c;
{ char str[80];
&printf(&Enter string:&);
&gets(str);
&change(str);
&printf(&\n result is: %s\n&,str);
2.解:参考程序如下:
#include &stdio.h&
int max(int a[],int n)
&for (i=1;i&n;i++)
&&& if (a[i]&mx) mx=a[i];
{ int a[8]={23,4,6,12,33,55,2,45};
&printf(&max is %d\n&,max(a,8));
3.解:参考程序如下:
#include &stdio.h&
int strlen(char str[])
&for (i=0;str[i]!='\0';i++);
{ char str[80];
&printf(&Enter string:&);
&gets(str);
&printf(&\n string length is: %d \n&,strlen(str));
4. 解:将从字符串中删除所有字符&k& 的功能定义为函数。参考程序如下:
#include &stdio.h&
void delchar(char str[],char c)
{ int i,j;
&for (i=0,j=0;str[i]!='\0';i++)
&&&& if (str[i]!=c)
&&&& str[j++]=str[i];
&str[j]='\0';
{ char str[80];
&gets(str);
&delchar(str,'k');
&puts(str);
5.解:依鞍点定义,对数组每行元素循环,找到当前行上最大元素,记下所在的列号,再判断此元素是否为对应列的最小元素。将寻找打印数组鞍点的操作定义为函数,如果没有鞍点,函数返回-1。参考程序如下:
#include &stdio.h&
#define N 10
#define M 10
int andian(int a[][M],int n,int m)
{ int i,j,k,max,
&int flag1,flag2=0; /*flag1标记每一行的最大值是否鞍点,flag2标记矩阵是否有鞍点*/
&for (i=0;i&n;i++)
&& { max=a[i][0];
&&&& for (j=1;j&m;j++)
&&&&&& if (a[i][j]&max)
&&&& &&&&&& { max=a[i][j];maxcol=j;}
&&&& for (k=0,flag1=1;k&n&&flag1;k++)
&&&&&& if (a[k][maxcol]&max)
&&&& &&&&&&&& flag1=0;
&&&& if (flag1==1)
&&&&& { printf(&\n%3d %3d %5d\n&,i,maxcol,max);
&&&& &&&&&&&& flag2=1;
&if (flag2==0)
&&&& &return -1;
{ int i,j,n,m,a[N][M];
&printf(&Enter row && col:&);
&scanf(&%d%d&,&n,&m);
&printf(&Enter array element:&);
&for (i=0;i&n;i++)
&&& for (j=0;j&m;j++)
&&&&& scanf(&%d&,&a[i][j]);
&printf(&\n&);
&for (i=0;i&n;i++)
&{ for (j=0;j&m;j++)
&&&&& printf(&%d &,a[i][j]);
&&& printf(&\n&);
&if (andian(a,n,m)==-1)
&&&& printf(&\n no andian \n&);
6. max_value(int arr[][4])
max(int arr[ ][4])
max=arr[0][0];
for(i=0;i&2;i++)
for(j=0;j&4;j++)
if(arr[i][j]&max)max=arr[i][j];
return(max);
7. 解:注意结束字符的判断和处理,目标字符串的长度应足够长。参考程序如下:
#include &stdio.h&
void scat(char s1[],char s2[])
{ int i,j;
&for (i=0;s1[i]!='\0';i++);
&for (j=0;s2[j]!='\0';j++)
&&& s1[i++]=s2[j];
&s1[i]='\0';
{ char s1[80]=&Good &;
&char s2[10]=&morning&;
&scat(s1,s2);
&printf(&%s\n&,s1);
8. ex=1=x=x2\2!+x3\3!&(前20项的和)
float f2(int n)
float f1(int x,int n)
{ float exp=1.0;int n,x;
printf(&Input a number:&)&
scanf(&%d&,&x);&printf(&%d\n&,x);
exp=exp+x;
for(n=2;n&=19;n++)&exp=exp+f1(x,n)/f2(n);
printf(&\nThe is exp(%d)=%8.4f\n&,x,exp)&
运行结果:Input a number:3
&&&&&&&&&&&&&&&&& The is exp(3)=20.0855
float f2 (int n)
{if(n==1)return1;
else return(f2(n-1)*n);
float f1(intx,intn)
{int I; float j=1;
for(I=1;I&=n;I++)j=j*x;
9.解:用输入负数表示输入结束。参考程序如下:
#include &stdio.h&
{ float score[200],ave,sum,x;
&printf(&Enter score:&);
&scanf(&%f&,&x);
&while (x&0&&n&200)
&& { sum+=x;
&&&& score[n++]=x;
&&&& scanf(&%f&,&x);
&ave=sum/n;
&printf(&average= %f\n&,ave);
&for (count=0,i=0;i&n;i++)
&&& if (score[i]&60)
&&&&& { printf(&%f\n&,score[i]);
&&&& &&&&& count++;
&printf(&%d not pass\n&,count);
&&&&&&&&&& }
10.解:扬辉三角形各行数据规律:
(1)&& 每行第一个和最后一个数都是1
(2)&& 从第3行起,(3)&&&&& 除第一和最后一个数外,(4)&& 其余的数都是上一行同(5)&&& 列和前一列两个数的和。
定义函数,将扬辉三角形的数据保存在二维数组中。参考程序如下:
#include &stdio.h&
#define N 10
void yanghui(int a[][N],int n)
{ int i,j;
&for (i=0;i&n;i++)
&&& { a[i][0]=1;
&&&&& a[i][i]=1;
&for (i=2;i&n;i++)
&&& for (j=1;j&i;j++)
&&&&&& a[i][j]=a[i-1][j-1]+a[i-1][j];
{ int i,j,n,a[N][N];
&printf(&Enter n:&);
&scanf(&%d&,&n);
&yanghui(a,n);
&for (i=0;i&n;i++)
&&& { for (j=0;j&=i;j++)
&&&& &&&&&&& printf(&%d &,a[i][j]);
&&&&& printf(&\n&);
11. 解:依回文定义从字符串的起始字符向后,最后一个字符向前依次判断,遇汉字的第一个字符同时处理两个字符。参考程序如下:
#include &stdio.h&
#include &string.h&
int huiwen(char str[])
{ int i,j,len,flag=1;
&len=strlen(str);
&for (i=0,j=len-1;i&=j;i++,j--);
&&&& if (str[i]!=str[j])
&&&& &&&&& { if (str[i]&128&&str[j]&128) /*两侧都是汉字字符*/
&&&& &&&&&&&&&& { if (str[i]==str[j-1]&&str[i+1]==str[j])
&&&&&&&&& &&&&&&&&&&& { i++; j--; }
&&&& &&&&&&&&&&&&& else flag=0;
&&&& &&&&&&&&&& }
&&&& &&&&&&& else flag=0;
&&&& &&&&& }
{ char str[50];
&printf(&Enter string:&);
&gets(str);
&if (huiwen(str))
&&&& printf(&%s is a palindroma\n&);
&&&& printf(&%s is not palindroma\n&);
12.解:设整型数组a中保存n个人的密码,对应的人出列后,数组元素置0作为标志。顺时针确定下一个人的方法,可将下标加1,再对n求余。参考程序如下:
#include &stdio.h&
#define N 100
{ int a[100];
&int i,j,m,n,k=0;
&printf(&Enter n & m:&);
&scanf(&%d%d&,&n,&m);
&printf(&Enter code array :&);
&for (i=0;i&n;i++)
&&&& scanf(&%d&,&a[i]);
&printf(&\nOutput:\n&);
&for (i=0;i&n;i++)
&&& { j=1;
&&&&& while (j&m)
&&&&& { while (a[k]==0) /*跳过已出列的人*/
&&&& &&&&&&&& k=(k+1)%n;
&&&& &&&&& j++;
&&&& &&&&& k=(k+1)%n;
&&&&& while (a[k]==0) /*跳过已出列的人*/
k=(k+1)%n;
&&&&& printf(&%d &,k);
&&&&& m=a[k]; a[k]=0;
分享这篇文章:
大家正在看...
最新热文...
相关文章...
相关评论...
以上就是阳光大学生网为您提供的《C语言程序设计试题及答案(十)》,希望对您有所帮助。
最新热文...
大家都在看...
为您推荐...}

我要回帖

更多关于 c语言void main 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信