2024年4月1日发(作者:邵桂芳)
第一章 习 题
1.1选择题:
⑴ 一个C程序的执行是( A )。
A) 从main()函数开始,直到main()函数结束
B) 从第一个函数开始,直到最后一个函数结束
C) 从第一个语句开始,直到最后一个语句结束
D) 从main()函数开始,直到最后一个函数结束
⑵ 计算机能直接执行的语言是( B)。
A) 汇编语言 B)机器语言 C)高级语言 D) A和B
⑶ 一个C程序是由( C)。
A) 一个主程序和若干子程序组成
B) 若干过程组成
C) 一个或多个函数组成
D) 若干子程序组成
⑷ 下列说法正确的是(B )。
A) C程序书写格式限制严格,一行内必须写一个语句
B) C程序书写比较自由,一个语句可以分行写在多行上
C) C程序书写格式限制严格,要求一行内必须写一个语句,并要求行号
D) C程序中一个语句不可以分写在多行上
1.2填空题:
⑴ 构成C语言程序的基本单位是 函数 。
⑵ C语言源程序文件的后缀是 .c ,经过编译后,生成文件的后缀是 ,obj ,经过连接后,生成文件的后缀是 .exe 。
⑶ 在TURBO C环境中用RUN命令运行一个C程序时,所运行的程序的后缀是 .exe 。
⑷ 一个C语言程序必须有而且只能有一个主函数,它的函数名为 main 。
⑸ 一个函数有两部分组成,第一部分称为 函数首部 ;第二部分称为 函数体 。
⑹ 函数体由符号 { 开始,用符号 } 结束。函数体的前面是 声明 部分,其后是 执行 部分。
1.3上机编辑、调试、运行下列程序,发现错误,并改正之。
/*求1 + 2 + 3 + „„ + 10的和*/
#include
main()
{
int sum,n;
sum = 0;n = 1;
while(n < 10)
{sum = sum + n;
n = n + 1;
}
printf("sum = %d n",sum);
}
第二章 习 题
2.1选择题
⑴ 在以下标识符中,( B )是合法的用户标识符。
A) a#b B) getch C) void D) ab*
⑵ 不合法的八进制数是( B )。 INT X X=23 %o
A) 0 B) 028 C) 077 D) 01
⑶ 不合法的十六进制数是( A )。0x
A) oxff B) 0Xabc C) 0x11 D) 0x19
⑷ 以下选项中正确的整型常量是( B )。
A) 12. B)
-20 C) 1,000 D) 4 5 6
⑸ 以下选项中正确的实型常量是( D )。
A) 0 B) 3. 1415 C) 0.329×102 D) .871
⑹ 以下选项中不正确的实型常量是( B )。
A) 2.607E-1 B) 0.8103e 3 C)
-88.77 D) 871e-2
⑺ 以下变量x, y, z均为double类型且已正确赋值,不能正确表示数学式子x的Cyz语言表达式是 ( A )。
A) x / y*z B) x*(1/(y*z)) C) x / y*1 / z D) x / y / z
⑻ 在C语言中,字符型数据在内存中以( C )的形式存放。
A) 原码 B) 补码 C) ASCII码 D) BCD码
⑼ sizeof(float)是( C )。
A) 一种函数调用 B) 一个不合法的表示形式 C) 一个整型表达式 D)一个实型表达式
⑽ 表达式b =((241 & 15)&&('Z' | 'a'))的值是( B )。
A) 0 B) 1 C) TRUE D) FALSE
⑾ 若变量已正确定义并赋值,符合C语言语法的表达式是( B )。
A) a = a + 7; B) a = 7 + b + c,a ++ C) int(13.4 % 4) D)a = a + 7 = c + b
⑿ 以下叙述中正确的是( A )。
A)a是实型变量,C语言允许进行a = 10,因此可以这样说:实型变量中允许存放整型值
B)在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式
C)执行表达式a = b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值改变为0
D)已有a = 3,b = 5。当执行了表达式a = b,b = a之后,已使a中的值为5,b中的值为3
2.2填空题
ab⑴ 数学式子cos2x ·写成C语言表达式是 cos(x)*cos(x)*((a+b)/(a-b)) 。
ab⑵ a是整型变量,能将a清零的表达式是 a=0 ;能将a中的各二进制为均置成1的表达式是 a=-1 。
⑷ 若a,b和c均是int型变量,则执行下面表达式后,a值为 6 ,b值为 4 ,c值为 2 。
a =(b = 4)+(c = 2)
⑸ 经过下述赋值后,变量x的数据类型是 int 。
int x = 2;
double y;
y=(double)x;
⑹ 若x和n均是整型变量,且x和n的初值均为5,则执行下面表达式后,x值为 10 ,n值为 6 。
x += n ++ x=x+n++
⑺ 若有定义:int b = 7;float a = 2.5,c = 4.7;则下面表达式的值为 5.5 。
a+(int)(b/3*(int)(a+c)/2)%4
⑻若有定义:int m=7,y=2;则执行下面表达式的值后,y值为 -24 。
y += y-=m*= y
⑼ 表达式8 / 4*(int)2.5 /(int)(1.25*(3.7 + 2.3))的类型为 int 。
⑾条件“-1 < x < 3或x <-99”的C语言表达式是 (x>-1&&x<3)||(x<-99) 。
⑿ 若x和a均是整型变量,则执行表达式 ① 后的x值为 12 ,执行表达式 ② 后的x值为 4 。
① x =(a = 4,6*2)
② x = a = 4,6*2
⒀ 一个字节包含 8 个二进制位,在一个字节中能存放的最大(十进制)整数是 ,它的二进制数的形式是 ;最小(十进制)整数是 ,它的二进制数的形式是 。
⒁ 当计算机用两个字节存放一个整数时,其中能存放的最大(十进制)整数是 ,它的二进制数的形式是 ;最小(十进制)整数是 ,它的二进制数的形式是 。
2.3改错题
⑴ #include stdio.h;
main() /*main function*/
{
float r,s; /*r is radius, s is area of circular*/
r = 5.0;
s = 3.14159*r*r;
printf("%fn",s);
⑵ #include stdio.h
main() /*main function*/
{
float a,b,c,v; /*a,b,c are sides,v is volume of cube*/
a = 2.0;b = 3.0;c = 4.0
v = a*b*c;
printf("%fn",v);
}
第三章 习 题
3.1 什么是C语言的基本执行单位?C语言的语句是如何分类的?
3.2
C语言的流程控制语句有哪几种?
3.3 结构程序设计的基本结构有哪几种?
3.4
C语言的输入输出操作是由语句来实现的吗?
3.5 顺序结构程序的特点是什么?
3.6 输入下面的程序,观察运行结果。
#include
main()
{
float a1,a2;
double b1,b2;
a1=3141.59;a2=0.000001;
b1=3141.59;b2=0.000001;
printf("%f,%lfn",a1+a2,b1+b2);
}
答案:3141.590089,3141.590001
3.7 输入下面的程序,观察运行结果。
#include
main()
{
char ch;
int k;
ch='a';k=66;
printf("%c,%d,%x,%o,%d,%c",ch,ch,ch,ch,k,k);
}
答案:a,97,61,141,66,B
3.8 输入下面的程序,观察运行结果。
#include
main()
{
float x;
double y;
x=123.45678;
y=123.45678;
printf("%-4.2f,%
-6.2en",x,y);
}
答案:123.46,1.2e+02
3.9输入下面的程序,观察运行结果,并说明程序的功能(注意:运行时输入大写字母)。
#include
main()
{
char c1,c2;
c1=getchar( );
printf("%c,%dn",c1,c1);
c2=c1+32;
printf("%c,%dn",c2,c2);
}
答案:A,65
a,97
该程序是将键盘输入的大写字母转换为对应的小写字母。
3.10 编写程序:求三个正整数(小于32767)的算术平均值。
main()
{int a,b,c;
float d;
printf("n input a,b,c=");
scanf("%d,%d,%d",&a,&b,&c);
d=(a+b+c)/3.0;
printf("nd=%f",d);
}
3.11 编写程序:已知圆的半径,求圆的周长和面积(要求半径值由键盘接受)。
main()
{int r;
float l,s;
printf("n input r=");
scanf("%d",&r);
l=2*3.14159*r;
s=3.14159*r*r;
printf("nL=%fnS=%f",l,s);
}
3.12 编写程序:计算a+b2-6的值,其中:
a=4,b=3;
a=5,b=2;
a=2,b=8。
main()
{
float a,b,h;
printf("n input a,b=");
scanf("%f,%f",&a,&b);
h=a+b*b-6;
printf("na=%f,b=%fnh=%f",a,b,h);
}
第四章 习 题
4.1 判断下列陈述的真假:
⑴在三种形式的if语句中,在if关键字之后均为表达式。 该表达式只能是逻辑表达式或关系表达式。Fal
⑵在if语句中,关键字之后的表达式必须用括号括起来,并随后跟分号(;)。Fal
⑶在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{} 括起来组成一个复合语句。True
⑷条件运算符的结合方向是自右至左。True
⑸switch语句中的ca后面必须是整常量表达式,如整数常数、字符常量。True
⑹当switch的整类型表达式的结果值与某一个ca块的整常量表达式的值相等时,将转至该ca块,并且执行该ca与下一个ca之间的所有语句。Fal
⑺可以使用go out语句跳出switch语句。Fal
⑻ el总是与它前面最近的if配对。True
4.2 阅读下面的程序,说明程序的运行结果。
#include
main()
{
int x=10,y=20,t;
if(x!=y)
{
t=x;
x=y;
y=t;
}
printf("%d,%dn",x,y);
}
答案:20,10
4.3 输入下面的程序,观察运行结果并说明程序的功能。
#include
main()
{
int x = 20;
if (x >= 0)
if (x < 50)
printf("x is okn");
el
printf("x is not okn");
}
答案: x is ok
4.6 编写程序:从键盘输入三个正整数,按由大到小的顺序输出。
/*4.6题。从键盘输入3个数按由小到大排序*/
main()
{ int a,b,c,t;
printf("input a,b,c=:");
scanf("%d%d%d",&a,&b,&c);
if(a>b) {t=a;a=b;b=t;}
if(a>c) {t=a;a=c;c=t;}
if(b>c) {t=b;b=c;c=t;}
printf("%5d%5d%5d",a,b,c);
}
4.7 编写程序:从键盘输入一个正整数,判断它是否既能被3整除,又能被7整除。
main()
{ int k;
scanf("%d",&k);
if(k%3==0 && k%7=0)
printf("nyes");
el
printf("n no");
}
#include
main()
{
int x;
scanf("%d",&x);
if(x%3==0)
{if(x%7==0)
printf("333333-777777");
el
printf("333333- no 7");
}
el
{if(x%7==0)
printf("no 3-7777777");
el
printf("no 3 no 7");
}
}
4.8 编写程序:
求函数:
X+5 (X>=0)
y=
X-5 (X<0)
的值。
main()
{ int x,y;
scanf("%d",&x);
if(x>=0)
y=x+5;
el
y=x-5;
printf("y=%d",y);
}
习 题
5.1 试比较三种循环语句的异同。
5.2 选择题:
⑴ 下面关于for循环的正确描述是( D )。
A) for循环只能循环次数已经确定的情况
B) for循环是先执行循环体语句,后判断终止条件
C) 在for循环中,不能用break语句跳出循环体
D) 在for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
⑵ 对for(表达式1;;表达式3)可以理解为( B )。
A) for(表达式1;0;表达式3)
B) for(表达式1;1;表达式3)
C) for(表达式1;表达式1;表达式3)
D) for(表达式1;表达式3;表达式3)
⑶ 若有“int m;”,则以下循环执行次数是( B )。
for(m=2;m==0; )
A) 无限次 B) 0次 C) 1次 D) 2次
⑷ 下面不是死循环的是( A )。
A) for(y=0,x=1;x>++y;x=i++) i=x;
B) for( ; ; x=++1);
C) while(1) {x++;}
D) for(i=10; ;i--) sum+=i;
⑸ 下面程序段的运行结果是( B )。
for(i=0;i<5;i++)
{
if(i= =2) continue;
printf("%d",i);
}
A) 01 B) 0134 C) 01234 D) 不打印
⑹ 下面程序段的运行结果是( C )。
int k=10;
while(k=0) k=k-1;
A) while循环执行10次 B) 循环是无限循环
C) 循环体语句一次也不执行 D) 循环体语句执行一次
⑺ 执行语句“for(n=1;n++<4; ) ;”后变量n的值是( C )。
A) 3 B) 4 C) 5 D) 不定
⑻ 以下正确的描述是( B )。
A) continue语句的作用是结束整个循环的执行
B) 只能在循环体内和switch语句体内使用break语句
C) 在循环体内使用break语句和continue语句的作用相同
D) 从多层循环嵌套中退出时,只能使用goto语句
5.3 写出下列程序的运行结果
⑴
main()
{
int i=0,a=0;
while(i<20)
{
for( ; ; )
if(i%10= =0) break;
el i--;
i+=11;a+=i;
}
printf("%dn",a);
}
答案:32
⑵
main()
{
int i,j,b=0;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
if(j>=i ) b++;
printf("%dn",b);
}
答案:3
5.4 下面程序的功能是从键盘输入10个无序的整数,去掉最大数和最小数,然后求其平均值。请填空。
main()
{
int j,x,max,min,sum;
fioat ave;
printf("Enter 10 number:n");
scanf("%d",&x);
sum=max=min=x;
for( j=2 ; j<=10;j++)
{
scanf(“%d”,&x) ;
sum+=x;
if(x>max ) max=x;
el if(x } sum=sum-max-min ; ave=sum/8.0; print("The average is %.2fn",ave); } 5.5 编程计算1~100之间是7的倍数的数值之和。 #include main() {int i,s=0; for(i=0;i<=100;i++) if(i%7==0) s+=i; printf("ns=%d",s); } 5.6 编写程序,利用下面公式求π的近似值: 22222-12π/6=1/1+1/2+1/3+1/4+„,直到某项绝对值不大于10为止。 #include #include main() {long n=1; float x,sum=0; x=1.0/(n*n); while(x>=1e-12) {sum=sum+x; n++; x=1.0/(n*n); } sum=sqrt(sum*6); printf("n PI=%f,n=%ld",sum,n-1); } /*5-6题。得用下面公式求π值。π2/6=1/12+1/22+……直到某项绝对值不大于 10-12为止*/ #include #include main() { float pi=0,t=1,n=1; while(fabs(t)>1e-12) { pi+=t; n=n+1; t=1/(n*n); } pi=sqrt(pi*6); printf("pi=%10.2f",pi); } 5.7 计算键盘输入的字符数。(提示:用getchar( )) #include #include main() {char c; int n=0; c=getchar(); while(c!='n') { n++; c=getchar(); } printf("n=%d",n); } #include main() {char c; int chgs=0; printf("Enter one line char : n"); while( c=getchar()!='n') { chgs++; } printf("chgs=%dn",chgs); } 5.8 用1元人民币兑换1分、2分、5分的硬币,编程计算共有多少种不同的兑换方法。 #include main() {int x,y,z; for(x=0;x<=20;x++) { for(y=0;y<=50;y++) {z=100-x*5-2*y; if(z>0) printf("nx=%dty=%dtz=%d",x,y,z); } } } #include #include main() { int g,k,s,fa=0; for(g=1;g<=93;g++) for(k=1;k<=47;k++) {s=(100-g-2*k)/5; if(g+2*k+5*s==100) fa=fa+1; } printf("nfa=%dn",fa); } 5.9 编程求出1000以内的所有完全数。若一个数恰好等于它的因子之和(除自身外),则称该数为完全数,例如:6=1+2+3,故6是完全数。 #include main() { int i,j,s=0; for(i=1;i<=1000;i++) { s=0; for(j=1;j if(i%j==0) s+=j; if(s==i) printf("n%4d",i); } } #include main() {int m,s,i; for (m=2;m<=1000;m++) {s=0; for (i=1;i if((m%i)==0) s=s+i; if (s==m) {printf("%d yes , factors are ",m); for(i=1;i if(m%i==0) printf("%d,",i); printf("n"); } } } main() {int k[1000]; int i,a,n,s; for (a=2;a<=1000;a++) {n=0; s=a; for (i=1;i if((a%i)==0) {n++; s=s-i; k[n]=i; } if (s==0) { printf("%d yes , factors are ",a); for(i=1;i printf("%d,",k[i]); printf("n"); } } } #include #define M 1000 main() {int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10; int i,a,n,s; for (a=2;a<=M;a++) {n=0; s=a; for (i=1;i if( a%i ==0) { n++; s=s-i; switch(n) { ca 1: k1=i;break; ca 2: k2=i;break; ca 3: k3=i;break; ca 4: k4=i;break; ca 5: k5=i;break; ca 6: k6=i;break; ca 7: k7=i;break; ca 8: k8=i;break; ca 9: k9=i;break; ca 10: k10=i; } } if(s==0) { printf("%d Its factors are ",a); if(n>1) printf("%d,%d",k1,k2); if(n>2) printf(",%d",k3); if(n>3) printf(",%d",k4); if(n>4) printf(",%d",k5); if(n>5) printf(",%d",k6); if(n>6) printf(",%d",k7); if(n>7) printf(",%d",k8); if(n>8) printf(",%d",k9); if(n>9) printf(",%d",k10); printf("n"); } } } 5.10 编程统计从键盘输入的字符中数字字符的个数,用换行符结束输入 循环。 #include #include main() { char c; int n=0; c=getchar(); while(c!='n') {if(c>='0' && c<='9') n++; c=getchar(); } printf("n=%d",n); } #include main() {char c; int digit=0; printf("Enter one line char : n"); while( (c=getchar()) != 'n') { if (c>='0'&&c<='9') digit++; } printf("szgs=%dn",digit); } 5.11 编程求n!(即求1!+2!+3!+„+20!) n120#include main() { float t=1,s=0; int i; for(i=1;i<=20;i++) {t*=i; s+=t; } printf("1!+2!+...20!=%10.2f",s); } #include main() { long sum=0,jc=1; int n; for(n=1;n<=20;n++) { jc=n*jc; sum=sum+jc; } printf("sum=%ldn",sum); } #include main() { float sum,jc; int m,i; sum=0; for(m=1;m<=20;m=m+1) { jc=1; for (i=1;i<=m;i++) jc=jc*i; printf("jc=%fn",jc); sum=sum+jc; } printf("sum=%en",sum); } 5.12 编写程序,求出整数1~1000之间的所有同构数。所谓同构数是指此数的平方数的最后几位数与该数相等。例如,25的平方为625,376的平方为141376,所以25和376都是同构数。 main() { long i; for(i=1;i<=1000;i++) if(i*i%10==i || i*i%100==i || i*i%1000==i) printf("n%5d",i); } /*或 main() {long i,m,k,r,q; for(i=1;i<=1000;i++) {m=i;k=m*m; while(m!=0) {r=m%10;q=k%10; if(r==q){m=m/10;k=k/10;} el break; } if(m==0) printf("%5d",i); } } #include main() { long i,pf; printf("n"); for(i=2;i<=1000;i++) { pf=i*i; if(i==pf%10 && i<10) {printf("ni=%ld,pf=%ld",i,pf); continue;} if(i==pf%100 && i<100) {printf("ni=%ld,pf=%ld",i,pf); continue;} if(i==pf%1000 && i<1000) printf("ni=%ld,pf=%ld",i,pf); } } 5.13 编写程序,输入一个正整数,输出其素数因子的乘积。例如,输入60,输出:1 2 3 4 5 6 10 30 #include #include main() {int k,i,j; scanf("%d",&k); printf("%d:",k); i=2; while(k!=0 && i<=k) { if(k%i==0) {printf("%3d",i); k=k/i; i=2; } el i++; } } #include main() { int i,x,k; scanf("%d",&x); k=x; printf("n%d=",x); while(x!=0) { for(i=2;i<=k;i++) if(x%i==0) break; x=x/i; if (i el printf("b n"); } } 6.1 选择题: ⑴ 下列程序输出结果是(B)。 main() { int a[10]={1,2,3,4,5,6,7,8,9,10},i,k; for(i=0;i<10;i++) a[i]=i; for(i=0,k=0;i<4;i++) k+=a[i]+i; printf("n%d",k)); } A) 20 B) 12 C) 16 ⑵ 下列程序输出结果是( A )。 main() { int n[2]={0},i,j,k=2; for(i=0;i for(j=0;j n[j]=n[j]+1; printf("%dn",n[k]); } A) 不确定值 B) 3 C) 2 习 题 D) 18 D) 1 ⑶ 下列程序的输出结果是( A )。 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("n%d",s); } A) 18 B) 19 C) 20 D) 21 ⑷ 下列程序输出结果是( C )。 main() { int a[3][3]={1,2,3,4,5,6,7,8,9},i; for(i=0;i<3;i++) printf("%d,",a[i][2-i]); } A) 1,5,9, B) 1,4,7, C) 3,5,7, D) 3,6,9, ⑸ 当执行下面的程序时,如果输入ABC,则输出结果是(A )。 #include #include main() { char ss[10]= "12345"; gets(ss); strcat(ss, "6789"); printf("%s",ss); } A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789 ⑹ 下列程序输出结果是( C )。 main() { char b[]="Hello,you"; b[5]=0; } printf("%s",b); A) Hello,you B) Hello, C) Hello D) Hello you 6.2 输入10个浮点型数,求它们的和、平均值、最大值、最小值。 main() { float a[10],sum=0,aver,max,min; int i; i=0; while(i<10) { scanf("%f",&a[i]); sum+=a[i]; i++; } aver=sum/10; max=min=a[0]; i=0; while(i<10) { if(a[i]>max) max=a[i]; el if(a[i] i++; } printf("nsum=%fnaver=%fnmax=%fnmin=%f",sum,aver,max,min); } main() {int i,maxi,mini; float x[10],sum=0,ave,max,min; for(i=0;i<10;i++) {scanf("%f",&x[i]); sum+=x[i]; } ave=sum/10; max=min=x[0]; maxi=mini=0; for(i=1;i<10;i++) {if(x[i]>max){max=x[i];maxi=i;} if(x[i] } printf("sum=%fnave=%fnmax=%f,maxi=%dnmin=%f,mini=%dn",sum,ave,max,maxi,min,mini); } 6.3 求一个3*3的整型矩阵主对角线元素之和。 main() {int i,j,a[3][3],sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); for(i=0;i<3;i++) {printf("n"); for(j=0;j<3;j++) printf("%-4d",a[i][j]); } for(i=0;i<3;i++) sum+=a[i][i]; printf("nsum=%d",sum); } 6.4 将一维实型数组元素进行排序。 main() { float t,a[10]={12.4,3.44,4.88,5.9,6.88,77.90,65.88,4.8,0.7,6.7}; int i,j,p; for(i=0;i<10;i++) printf("%10.2f",a[i]); printf("n"); for(i=0;i<9;i++) {p=i; for(j=i+1;j<10;j++) if(a[p]>a[j]) p=j; if(p!=i) {t=a[p];a[p]=a[i];a[i]=t;} } for(i=0;i<10;i++) printf("%7.2f",a[i]); } 6.5 从键盘上输入一个字符和一个字符串,查找输入的字符是否在输入的字符串中,若不在则输出没有找到的信息,否则输出第一个与输入字符匹配的所在位置。 #include #include main() { char a[10],c; int flag=1,i,cor; printf("ninput a:n"); gets(a); printf("ninput c:n"); c=getchar(); i=0; while(a[i]) {if(c==a[i]) {flag=0;cor=i;break;} i++; } if(flag==0) printf("nfind,No:%d",cor); el printf("n can not find"); } 6.6 求两个矩阵的乘积,输出结果。 main() { int a[2][3]={1,2,3,4,5,6},b[3][2]={1,2,1,2,1,2},c[2][2]; int i,j,k; for(i=0;i<3;i++) for(j=0;j<2;j++) { c[i][j]=0; for(k=0;k<3;k++) c[i][j]+=a[i][k]*b[k][j]; } for(i=0;i<2;i++) { printf("n"); for(j=0;j<2;j++) printf("%4d",c[i][j]); } } 6.7 已知整型数组array有10个元素,分别为2、4、6、8、10、1、3、5、7、9,编写程序将前5个元素与后5个元素交换,交换后的元素分别为1、3、5、7、9、2、4、6、8、10。 main() { int a[10]={2,4,6,8,10,1,3,5,7,9},i,t; for(i=0;i<5;i++) {t=a[i];a[i]=a[5+i];a[5+i]=t; } printf("n"); for(i=0;i<10;i++) printf("%-6d",a[i]); } 6.8 输入一个十进制数,转换成二进制数并输出。 #include #include main() { long a[100],k,s=0; int i,n; scanf("%ld",&k); n=0; while(k!=0) {a[n]=k%2; k=k/2; n++; } for(i=n-1;i>=0;i--) s+=a[i]*pow(10,i); printf("n%ld",s);} main() {int i,s[100],x,k=0; scanf("%d",&x); while(x>0) { s[k]=x%2; x=x/2; k++; } for(i=k-1;i>=0;i--) printf("%d",s[i]); } 6.9 将字符串中的大写字母转换成小写字母,小写字母转换成大写字母,其它字符不转换。 #include #include main() { char a[80]; int i; gets(a); i=0; while(a[i]!='0') { if(a[i]>='A' && a[i]<='Z') a[i]+=32; el if(a[i]>='a' && a[i]<='z') a[i]-=32; i++; } printf("n"); puts(a); } main() {char x[]="dhgfhf33485SDHDbcjd980"; int i=0; printf("n%s",x); while(x[i]!='0') { if(x[i]>='A'&&x[i]<='Z') x[i]=x[i]+32; el if(x[i]>='a'&&x[i]<='z') x[i]=x[i]-32; i++; } printf("n%s",x); } 6.10 在不使用系统函数strcat的情况下,实现两个字符串连接。 #include #include main() {char a[80],b[80]; int n,i,j,m; printf("n input a:"); gets(a); printf("n input b:"); gets(b); n=strlen(a);m=strlen(b); i=0; while(b[i]!='0') { a[i+n]=b[i]; i++; } a[n+m]='0'; printf("n"); puts(a); } 6.11 从字符串中删除所有指定字符。 #include #include main() {char a[80],c; int i,j,n; printf("input a:"); gets(a); printf("input c:"); c=getchar(); i=0; n=strlen(a); for(i=0,j=0;i if(a[i]!=c) a[j++]=a[i]; a[j]='0'; printf("%s",a); } 6.12 将字符串s1中的ASCII码为偶数且下标也为偶数的字符复制到字符数组s2中。 #include #include main() {char s1[80],s2[80]; int i,j; printf("input s1:"); gets(s1); i=0;j=0; while(s1[i]) { if(s1[i]%2==0 && i%2==0) s2[j++]=s1[i]; i++; s2[j]='0'; } printf("n%s",s2); } #include #include 6.13 有一行电文,已按下面规律译成密码: A→Z a→z B→Y b→y C→X c→x 即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。要求编程序将密码译回原文,并打印出密码和原文。 main() { char a[100],b[100]; int i,n,t; gets(a); n=strlen(a); i=0; while(a[i]!='0') {if(a[i]>='a'&& a[i]<='z') b[i]=219-a[i]; el if(a[i]>='A' && a[i]<='Z') b[i]=155-a[i]; el b[i]=a[i]; i++; } b[i]='0'; printf("na:%snb:%s",a,b); } main() {char x[]="dhgfhf33485SDHDbcjd980"; int i=0; printf("n%s",x); while(x[i]!='0') { if(x[i]>='A'&&x[i]<='Z') x[i]=155-x[i]; el if(x[i]>='a'&&x[i]<='z') x[i]=219-x[i]; i++; } printf("n%s",x); } 第七章 习 题 7.1 选择题: ⑴ 若有以下定义: int a[]={1,2,3,4,5,6,7,8,9,10},*p=a,i; 其中0≤i≤9,则对a数组元素的引用不正确的是( D )。 A) a[i] B) * (&a[i]) C) p[i] D) ⑵ 以下程序的输出结果是(A )。 main() { int a[]={2,4,6,8},*p=a,i; for(i=0;i<4;i++) a[i]= *p++; printf("n%d",a[2]); } A) 6 B) 8 C) 4 D) 2 ⑶ 以下程序的输出结果是( A )。 main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf("n%d",* (p+2)); } A) 3 B) 4 C) 1 D) 2 ⑷ 以下程序的输出结果是( B )。 main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[1]; printf("n%d",*p+5); } A) 6 B) 7 C) 8 D) 2 ⑸ 以下程序的输出结果是( C )。 * (* (a+i)) main() { int a[]={2,4,6,8,10},y=1,x, *p; } p=&a[1]; for(x=0;x<3;x++) y+=* (p+x); printf("%dn",y); A) 17 B) 18 C) 19 D) 20 ⑹ 以下程序的输出结果是( C )。 main() { char *p[]={"BOOL","OPK","H","SP"}; int i; for(i=3;i>=0;i--,i--) printf("%c", *p[i]); } A) SP B) SH C) SO D) SB ⑺ 以下程序的输出结果是( A )。 main() { int a[3][3]={{2},{4},{6}},i, *p; p=*a; for(i=0;i<2;i++) { if(i==0) a[i][i+1]= *p+1; el ++p; printf("%d",*p); } } A) 23 B) 26 C) 33 D) 36 ⑻ 以下程序的输出结果是( B )。 main() { int a[3][3], *p,i; p=&a[0][0]; for(i=0;i<9;i++) p[i]=i+1; printf("%d",a[1][2]); } A) 3 B) 6 C) 9 D) 5 ⑼ 以下程序的输出结果是( A )。 main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]=a,i,j,k=0; for(i=0;i<3;i++) for(j=0;j<2;j++) k+=* (* (p+i)+j); printf("n%d",k); } A) 60 B) 68 C) 99 D) 108 ⑽ 以下程序的输出结果是( C )。 main() { int a[]={2,4,6,8,10},*p, **k; p=a; k=&p; printf("n%d ",* (p++)); printf("%d",**k); } A) 4 4 B) 2 2 C) 2 4 D) 4 6 以下习题要求用指针方法来完成。 7.2 输入3个整数,由小到大输出。 main() { int a[3],i,t,*p; p=a; for(p=a;p scanf("%d",p); p=a; if(*p>*(p+1)) {t=*p;*p=*(p+1);*(p+1)=t;} if(*p>*(p+2)) {t=*p;*p=*(p+2);*(p+2)=t;} if(*(p+1)>*(p+2)) {t=*(p+1);*(p+1)=*(p+2);*(p+2)=t;} for(i=0;i<3;i++) printf("n%d",a[i]); } /*输入3个数,由小到大排序*/ main() { int a[3],i,t,*p; p=a; for(p=a;p scanf("%d",p); p=a; if(p[0]>p[1]) {t=p[0];p[0]=p[1];p[1]=t;} if(p[0]>p[2]) {t=p[0];p[0]=p[2];p[2]=t;} if(p[1]>p[2]) {t=p[1];p[1]=p[2];p[2]=t;} for(i=0;i<3;i++) printf("n%7d",a[i]); } main() {int a,b,c; int *p1,*p2,*p3,*t; p1=&a;p2=&b;p3=&c; scanf("%d,%d,%d",p1,p2,p3); if(*p1>*p2) {t=p1;p1=p2;p2=t;} if(*p1>*p3) {t=p1;p1=p3;p3=t;} if(*p2>*p3) {t=p2;p2=p3;p3=t;} printf("n%d,%d,%d",a,b,c) ; printf("n%d,%d,%d",*p1,*p2,*p3); } 7.3 将一个3×3的整型数矩阵转置。 main() { int a[3][3]={1,2,3,4,5,6,7,8,9},i,j,t; for(i=0;i<3;i++) { printf("n"); for(j=0;j<3;j++) printf("%4d",a[i][j]); } for(i=0;i<3;i++) for(j=0;j { t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } for(i=0;i<3;i++) { printf("n"); for(j=0;j<3;j++) printf("%4d",a[i][j]); }} /*7.3将一个3*3的整型数矩阵转换*/ main() { int a[3][3]={1,2,3,4,5,6,7,8,9},i,j,t; int (*p)[3],(*q)[3]; p=a[0];q=a[0]; for(i=0;i<3;i++) { printf("n"); for(j=0;j<3;j++) printf("%4d",a[i][j]); } for(i=0;i<3;i++) for(j=0;j { t=p[i][j]; p[i][j]=q[j][i]; q[j][i]=t; } for(i=0;i<3;i++) { printf("n"); for(j=0;j<3;j++) printf("%4d",a[i][j]); }} 7.4 用冒泡法对10个数组元素排序。 main() { int a[10]={45,9,8,456,2,0,7,-4,95,99}; int i,j,*p,t; printf("n"); for(p=a;p printf("%5d",*p); p=a; for(i=0;i<9;i++) for(j=0;j<10-i-1;j++) if(*(p+j)>*(p+j+1)) {t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;} printf("n"); for(p=a;p printf("%5d",*p); } /*用冒泡法排序*/ main() { int a[10]={45,9,8,456,2,0,7,-4,95,99}; int i,j,*p,t; printf("n");
本文发布于:2024-04-01 22:54:51,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/89/1241413.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |