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.以下不正确的语句(设有intp,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/ce3???????????????????????????????B.3ae/b/c
???????C.3ae/bc??????????????????????????????D.ae/c/b3
9.若以下变量均是整形,且num=sum=7;则计算表达式sUM=num++,sUM++,++num后sum的值为(?).
A.7?????????B.8????????C.9???????????????D.10
10.若有定义:inta=7;floatx=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.设intn=3;则n十十的结果是(???)。
????A.2????????B.3??????C.4??????D.5
13.设有说明:charw;intx;floaty;doublez;则表达式wx+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
main()
{
intsum,pad;
sum=pad=5;
pad=sum++;
pad++;
++pad;
printf("%d\n",pad);
}
A.7????????B.6??????????????C.5???????????????????D.4
17.巳知字母A的ASCII码是65,以下程序的执行结果是(?)。
#include
main()
{
?charc1=''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’
B.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)e1sescanf(”%d,&y);
D.if(x<y){x十十;y十十;}
23.以下if语句语法正确的是(?).
A.if(x>0)
???printf(“%f“,x)
???elseprintf(“%f”,-x);
B.if(x>0)
{x=x+y;printf(“%f“,x);}
elseprintf(“%f”,-x)
C.if(x>0)
{x=x+y;printf(“%f“,x);}
elseprintf(“%f”,-x)
D.if(x>0)
{x=x+y;printf(“%f“,x);}
elseprintf(“%f”,-x)
elseprintf(“%f”,-x);
24.阅读以下程序
main()
{inta=5,b=0,c=0;
if(a=b+c)printf(“\n”);
else????printf(“$$$\n”);
}
以上程序(??).
A.语法有错不能通过编译??????????????????????B.可以通过编译但不能通过连接
C.输出???????????????????????????????????D.输出$$$
25.以下程序运行结果是(?).
main()
{inta=100,x=10,y=20,ok1=5,ok2=0;
?if(x ???if(y!=10)
????If(!ok1)
?????????a=1;
??????else
?????????if(ok2)??a=10;
?a=-1;
printf(“%d\n”,a);
}
A.1??????????B.0?????????????c.-1??????????????????D.不确定
26.执行以下程序段后,变量a,b,c得值分别是(?).
intx=10,y=9;
inta,b,c;
a=(--x==y++)?–x:++y;
b=x++;
c=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 m=(m m=(m 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=xx;}?while(!x);
A.是死循环????????????????B.循环执行二次
C.循环执行二次??????????D.有语法错误
32.下面程序的运行结果是(?).
#include
main()
{inty=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.inta[2][3]={0};
B.inta[][3]={{1,2},{0}};
C.inta[2][3]={{1,2},{3,4},{5,6}};
D.inta[][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.若有说明:inta[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是()。
A.2??????????B.3?????????C.4?????????D.无确定值
40.下面程序的运行结果是()。
charc[5]={‘a’,’b’,’\0’,’c’c,’\0’};
printf(“%s”,c);}
A.‘a’’b’
B.ab
C.abc
D.ab
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.以下程序的运行结果是(?)。
#defineMIN(x,y)??(x)<(y)?(x):(y)
main()
{inti=10,j+15,k;
k+10MIN(i,j);
printf(“%d\n”,k);
}
A.10??????????B.15????????????C.100??????????????D.150
46.C语言的编译系统对宏命令的处理是(?)。
A.在程序运行时进行的
B.在程序连接时进行的
C.和C程序中的其它语句同时进行编译的
D.在对源程序中的其它语句同时进行编译的
47.请读程序
#include
#defineMUL(x,y)(x)y
main()
{inta=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)??PTxx
main()
{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.设有下面的程序段:
?????????chats[]=”china”;charp;p=s;
?????????则下列叙述正确的是(?)。
A.s和p完全相同
B.数组s中的内容和指针变量p中的内容相等
C.s数组长度和p所指向的字符串长度相等D.p与s[0]相等
53.下面程序的运行结果是(?)。
????????#include
????????#include
????????main()
????????{
charp1,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.若有定义:inta[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已正确说明并赋值)元素地址的非法引用为(?)。
intb[2][3]={0},(p)[3];
p=b;
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.请读程序片段:
intx=20;
printf(“%d\n”,~x);
上面程序片段的输出结果是(??).
A.02
B.–20
C.-21
D.-11
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
main()
{
floatf=3.5;
printf("%f,%g",f,f)
}
8.以下程序的执行结果是?????????????????。
#include
main()
{
floatf=31.41592;
printf("%f,%e",f,f)
}
9.以下程序的执行结果是?????????????????????????。
#include
main()
{
inta,b,c;
a=2;b=3;c=1;
if(a>c)
printf("%d\n",a);
else
?printf("%d\n",b);
printf("end\n");
}
10.在C语言中,表示逻辑“真”值用????????????????.
11.有intx,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x︱︱z)的值为?????????????。
12.下面程序从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。
intn=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.下面程序段中循环体的执行次数是??????????????????.
a=10;
b=0;
do{b+=2;a-+2+b;}while(a>=0);
15.若for循环用以下形式表示:
?????????????for(表达式1;表达式2;表达式3)??循环体语句
????????则执行语句for(i=0;i<3;i++)?printf(“”);时,表达式3执行?????????次。
16.以下程序的输出结果是__________。
main()
{ints[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
?????????f(inta[])
?????????{inti=0;
??????????while(a[i]<=10)
{printf(“%d”,a[i]);
?i++;}
}
main()
{inta[]={1,5,10,9,11,7};
?f(a+1);
}
21.设有以下宏定义:#defineWIDTH80
???????????????????#defineLENGTH(WIDTH+40)
则执行赋值语句:k=LENGTH20;(k为int型变量)后,k的值是???????????????。
22.下面的运行结果是????????????????。
#defineMUL(z)??(z)(z)
???????????main()
???????????{
????????????????printf(“%d\n”,MUL(1+2)+3);
???????????}
23.下面程序的运行结果是???????????????。
???#defineEXCH(a,b)?{intt;t=a;a=b;b=t;}
???main()
???{intx=5,Y=9;
EXCH(x,y);
printf(“x=%d,y=%d\n”,x,y);
}
24.下面程序段的运行结果是????????????。
chars[80],sp=”HELLO!”;
sp=strcpy(s,sp);
s[0]=’h’;
puts(sp);
25.下面程序段的运行结果是????????????。
???????????chars1=”AbcdEf”,s2=”aB”;
???????????s1++;
t=(strcmp(s1,s2)>0);
print(“%d\n”,t)
26.下面程序段的运行结果是???????????。
?????????charp=”PDP1-0”;
?????????intI,d;
?????????for(I=0;I<7;I++)
{d=isdigit((p+ii));
if(d!=0)?printf(“%c(p+I));
}
27.当运行以下程序时,从键盘输入book
book?
(表示回车,表示空格),则下面程序段运行的结果是??????????????。
chara1[80],a2[80],s1=a1,s2=a2;
gets(s1);gets(s2);
if(!strcmp(s1,s2))printf(“”):
elseprintf(“#”);
printf(“%d”,strlen(strcat(s1,s2)));
28.若已定义:
struct?num
{inta;
?intb;
?floatf;
}n={1,3,5.0};
structnumpn=&n;
则表达式(pn).a+pn->f的值是??????????。
29.在C语言中,&运算符作为双目运算符时表示的是????????运算.
30.在C语言中,文件的存取是以字符为单位的,这种文件被称作??????????文件。
?
三、编程题:
1.将一个字符串的内容颠倒过来。
2.求整形数组的最大值。
3.求字符串的长度(不用strlen)。
4.编写程序,将字符串str中的所有字符’k’删除。
5.找出二维数组的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。二维数组也可能没有鞍点。
6.a是一个24的整型数组,且各元素均已赋值.函数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
????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.B2.D3.A4.D5.A6.A7.B8.C9.A10.A11.B12.B13.D14.D15.D16.A17.D18.C19.D20.D21.C22.C23.B24.D25.C26.B27.A28.A29.D30.A31.C32.B33.B34.D35.C36.D37.C38.D39.B40.B41.B42.A43.A44.A45.B46.D47.A48.B49.C50.C51.B52.D53.C54.A55.C56.C57.A58.A59.C60.B61.C62.A63.A64.C65.C
二、填空题
1.函数?2.13.9?4.4?5.单精度型、双精度型、整型、字符型和枚举型6.双精度型(或:doubLe型)7.3.500000,3.5?8.?31.415920,3.14159e+019.end10.非0的数字11.112.c!=''\n''13.36?14.315.3?16.5??17.im+j+i18.按行主顺序存放19.函数说明部分和函数体?20.5?10?9?21.2400?22.12?23.x=8,y=524.hELLO!
25.126.1027.#928.6.0?29.按位与30.流式
?
三、编程题
1.解:注意交换位置的控制方法,参考程序如下:
#include
#include
voidchange(char?str[])
{intlen,i,j;
?charc;
?len=strlen(str);
?for(i=0,j=len-1;i ??{c=str[i];
????str[i]=str[j];
????str[j]=c;
??}
}
main()
{charstr[80];
?printf("Enterstring:");
?gets(str);
?change(str);
?printf("\nresultis:%s\n",str);
}
2.解:参考程序如下:
#include
intmax(inta[],intn)
{inti,mx;
?mx=a[0];
?for(i=1;i ???if(a[i]>mx)mx=a[i];
?returnmx;
}
main()
{inta[8]={23,4,6,12,33,55,2,45};
?printf("maxis%d\n",max(a,8));
}
3.解:参考程序如下:
#include
intstrlen(charstr[])
{inti;
?for(i=0;str[i]!=''\0'';i++);
?returni;
}
main()
{charstr[80];
?printf("Enterstring:");
?gets(str);
?printf("\nstringlengthis:%d\n",strlen(str));
}
4.解:将从字符串中删除所有字符’k’的功能定义为函数。参考程序如下:
#include
voiddelchar(charstr[],charc)
{inti,j;
?for(i=0,j=0;str[i]!=''\0'';i++)
????if(str[i]!=c)
????str[j++]=str[i];
?str[j]=''\0'';
}
main()
{charstr[80];
?inti,j;
?gets(str);
?delchar(str,''k'');
?puts(str);
}
5.解:依鞍点定义,对数组每行元素循环,找到当前行上最大元素,记下所在的列号,再判断此元素是否为对应列的最小元素。将寻找打印数组鞍点的操作定义为函数,如果没有鞍点,函数返回-1。参考程序如下:
#include
#defineN10
#defineM10
intandian(inta[][M],intn,intm)
{inti,j,k,max,maxcol;
?intflag1,flag2=0;/flag1标记每一行的最大值是否鞍点,flag2标记矩阵是否有鞍点/
?for(i=0;i ??{max=a[i][0];
????for(j=1;j ??????if(a[i][j]>max)
??????????{max=a[i][j];maxcol=j;}
????for(k=0,flag1=1;k ??????if(a[k][maxcol] ????????????flag1=0;
????if(flag1==1)
?????{printf("\n%3d%3d%5d\n",i,maxcol,max);
????????????flag2=1;
?????}
??}
?if(flag2==0)
?????return-1;
}
main()
{inti,j,n,m,a[N][M];
?printf("Enterrow&&col:");
?scanf("%d%d",&n,&m);
?printf("Enterarrayelement:");
?for(i=0;i ???for(j=0;j ?????scanf("%d",&a[i][j]);
?printf("\n");
?for(i=0;i ?{for(j=0;j ?????printf("%d",a[i][j]);
???printf("\n");
?}
?if(andian(a,n,m)==-1)
????printf("\nnoandian\n");
}
6.max_value(intarr[][4])
{??????}
?
max(intarr[][4])
{intI,j,max;
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
voidscat(chars1[],chars2[])
{inti,j;
?for(i=0;s1[i]!=''\0'';i++);
?for(j=0;s2[j]!=''\0'';j++)
???s1[i++]=s2[j];
?s1[i]=''\0'';
}
main()
{chars1[80]="Good";
?chars2[10]="morning";
?scat(s1,s2);
?printf("%s\n",s1);
}
8.ex=1=x=x2\2!+x3\3!…(前20项的和)
floatf2(intn)
{?????}
?
floatf1(intx,intn)
{?????}
?
main()
{floatexp=1.0;intn,x;
printf(“Inputanumber:”)’
scanf(“%d”,&x);?printf(“%d\n”,x);
exp=exp+x;
for(n=2;n<=19;n++)?exp=exp+f1(x,n)/f2(n);
printf(“\nTheisexp(%d)=%8.4f\n”,x,exp)’
}
?
运行结果:Inputanumber:3
?????????????????Theisexp(3)=20.0855
?
floatf2(intn)
{if(n==1)return1;
elsereturn(f2(n-1)n);
}
floatf1(intx,intn)
{intI;floatj=1;
for(I=1;I<=n;I++)j=jx;
returnj;
}
?
9.解:用输入负数表示输入结束。参考程序如下:
#include
main()
{floatscore[200],ave,sum,x;
?inti,n,count;
?printf("Enterscore:");
?scanf("%f",&x);
?n=0;
?sum=0.0;
?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 ???if(score[i]<60)
?????{printf("%f\n",score[i]);
?????????count++;
?????}
?printf("%dnotpass\n",count);
??????????}
10.解:扬辉三角形各行数据规律:
(1)??每行第一个和最后一个数都是1
(2)??从第3行起,(3)?????除第一和最后一个数外,(4)??其余的数都是上一行同(5)???列和前一列两个数的和。
定义函数,将扬辉三角形的数据保存在二维数组中。参考程序如下:
#include
#defineN10
voidyanghui(inta[][N],intn)
{inti,j;
?for(i=0;i ???{a[i][0]=1;
?????a[i][i]=1;
???}
?for(i=2;i ???for(j=1;j ??????a[i][j]=a[i-1][j-1]+a[i-1][j];
?}
main()
{inti,j,n,a[N][N];
?printf("Entern:");
?scanf("%d",&n);
?yanghui(a,n);
?for(i=0;i ???{for(j=0;j<=i;j++)
???????????printf("%d",a[i][j]);
?????printf("\n");
???}
}
11.解:依回文定义从字符串的起始字符向后,最后一个字符向前依次判断,遇汉字的第一个字符同时处理两个字符。参考程序如下:
#include
#include
inthuiwen(charstr[])
{inti,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--;}
?????????????????elseflag=0;
??????????????}
???????????elseflag=0;
?????????}
???returnflag;
}
main()
{charstr[50];
?printf("Enterstring:");
?gets(str);
?if(huiwen(str))
????printf("%sisapalindroma\n");
?else
????printf("%sisnotpalindroma\n");
}
12.解:设整型数组a中保存n个人的密码,对应的人出列后,数组元素置0作为标志。顺时针确定下一个人的方法,可将下标加1,再对n求余。参考程序如下:
#include
#defineN100
main()
{inta[100];
?inti,j,m,n,k=0;
?printf("Entern&m:");
?scanf("%d%d",&n,&m);
?printf("Entercodearray:");
?for(i=0;i ????scanf("%d",&a[i]);
?printf("\nOutput:\n");
?for(i=0;i ???{j=1;
?????while(j ?????{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;
???}
}
|
|