C语言习题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言习题及答案
习题一
【习题1-1】C语言源程序最多可能由________________部分组成,
A) 预处理部分 B)变量说明部分
C) 函数原型声明部分 D)函数定义部分
【习题1-2】一个完整的C语言源程序最少必须有_______。
A)若干个主函数 B)若干个函数
C)且只能有一个主函数 D)一个函数
【习题1-3】C语言以函数为源程序的基本单位最主要有利于_______。
A)程序设计结构化 B)程序设计模块化
C)程序设计简单化 D提高程序设计有效性
【习题1-4】要使得C语言编写的程序能够在计算机上运行并得出正确结果,必
须要先经过_______________________________________。
A)编辑和链接 B)编译和链接
C)修改和运行 D运行并输入数据
【习题1-5】选择一个C语言集成开发环境并启动它,然后分别输入【例1-1】、【例1-2】、【例1-3】的源程序,依次编译、链接、运行,看看能否达到预想的结果,从中了解程序的开发过程。
习题二
一、单项选择题
【习题2-1】已知’A’的ASCII代码是65,以下程序的输出结果是( ) #include "stdio.h"
main( )
{ int c1=65,c2=66;
printf("%c, %c",c1,c2);
}
,66 A. 因输出格式不合法,输出错误信息 B. 65
C. A,B
D. 65,66
【习题2-2】若变量已正确定义,要将a和b中的数进行交换,下面不正确的
语句组是( )
A. a=a+b,b=a-b,a=a-b;
B. t=a,a=b,b=t;
C. a=t,t=b,b=a;
D. t=b;b=a;a=t;
【习题2-3】若k是整型变量,则以下程序段的输出是( )
k=-8567;
printf (“|%d|\n”,k);
A. 输出格式不正确
B. 输出为|008567|
C. 输出为|8567|
D. 输出为|-8567| 【习题2-4】下列可作变量的标识符是( )
A. 3rt
B. je_c
C.$89
D. a+6 【习题2-5】C语言中的标识符只能由字母、
数字和下划线三种字符组成,
且第一个字符( )
A.必须为字母或下划线
B.必须为下划线
C.必须为字母
D.可以是字母、数字和下划线中的任一种字符
【习题2-6】 C语言并不是非常严谨的算法语言,在以下关于C语言的不
严谨的叙述中,错误的说法是( )
A. 大写字母和小写字符的意义相同
B. 有些不同类型的变量可以在一个表达式中运算
C. 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型
D. 同一个运算符号在不同的场合可以有不同的含义
二、简答题
【习题2-7】 C语言数据类型有哪几类,基本数据类型包括哪几类, 【习题2-8】 C语言中十进制、八进制和十六进制整常量是如何表示的, 【习题2-9】 C语言为什么规定对所用到的变量“先定义,后使用”,这样做
有什么好处,
【习题2-10】C语言中的语句有几类,控制语句有哪些, 【习题2-11】怎样区分表达式和表达式语句,为什么有人称C为表达式语
言,
【习题2-12】字符常量与字符串常量有什么区别,
【习题2-13】下面各数用八进制和十六进制数表示:
(1)10 (2)32 (3)75 (4)-617
(5)-111 (6)2483 (7)-28654 (8)21003
三、阅读程序写结果或填空
【习题2-14】写出以下程序的运行结果:
#include<stdio.h>
main()
{
char c1='a',c2='b',c3='c',c4='\101',c5='\116';
printf("a%c b%c\tc%c\tabc\n",c1,c2,c3);
printf("\t\b%c %c\n",c4,c5); }
【习题2-15】写出以下程序的运行结果:
#include<stdio.h>
main()
{
int n=177;
printf("%o\n",n);
}
【习题2-16】写出以下程序的运行结果:
#include<stdio.h>
main()
{
int a,n=0;
n+=(a=10);
printf("%d\n",a);
}
【习题2-17】写出以下程序的运行结果:
#include <stdio.h>
main()
{
int a=5,b=7;
float x=67.8564,y=-789.124; char c='A';
long n=1234567;
unsigned u=65535;
printf("%d%d\n",a,b);
printf("%3d%3d\n",a,b); printf("%f,%f\n",x,y);
printf("%-10f,%-10f\n",x,y);
printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);
printf("%e,%10.2e\n",x,y); printf("%c,%d,%o,%x\n",c,c,c,c); printf("%ld,%lo,%x\n",n,n,n); printf("%u,%o,%x,%d\n",u,u,u,u); printf("%s,%5.3s\n","COMPUTER","COMPUTER");
}
【习题2-18】写出以下程序的运行结果:
#include<stdio.h>
main()
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d",i,j,m,n); }
【习题2-19】下面运算表达式的值是:
x+a%3*(int)(x+y)%2/4
设x=2.5,a=7,y=4.7
【习题2-20】下面运算表达式的值是:
(float)(a+b)/2+(int)x%(int)y
设a=2,b=3,x=3.5,y=2.5
【习题2-21】写出下面赋值表达式运算后a的值,设原来a=12;
(1)a+=a (2) a-=2
(3)a*=2+3 (4) a/=a+a
(5)a%=(n%=2),n 的值等于5 (6)a+=a-=a*=a
【习题2-22】数学表达式:-5<x<5用C语句如何表达,x>5或x<-5又是如何表达,请写出相应的C语句。
四、编写程序题
【习题2-23】设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积2(4πR)、圆球体积(V=4πR?/3)、圆柱体积。
用scanf()输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。
请编写程序。
5【习题2-24】输入一个华氏温度,要求输出摄氏温度。
公式为c=(F-32),9输出要有文字说明,取2位小数。
【习题2-25】编程序,用getchar()函数读入两个字符给cl、c2,然后分别用putchar()函数和printf()函数输出这两个字符。
并思考以下问题:
(1)变量c1、c2应定义为字符型或整型?抑或二者皆可,
(2)要求输出c1和c2值的ASCII码,应如何处理,用putchar函数还是printf 函数,
(3)整型变量与字符变量是否在任何情况下都可以互相代替,如“char
c1,c2;”
与“int cl,c2;”是否无条件地等价?
【习题2-26】编写程序,从终端键盘输入圆的半径r,圆柱的高h,分别计算出圆周c1、圆面积cs和圆柱的体积cvz。
输出计算结果要求有文字说明,并取小数点后两位数字。
【习题2-27】编写程序,读入一个字母,输出与之对应的ASCII码,输入输出都要有相应的文字提示。
习题三
一、单项选择题
【习题3-1】“基本结构”不具有以下特点( )
A. 只有一个入口,只有一个出口
B. 没有死循环
C. 没有永远执行不到的语句
D. 不允许退出循环
【习题3-2】在流程图中,菱形框表示的操作是( ) A. 数据的输入输出 B. 程序的开始
C. 条件判断
D. 赋值
【习题3-3】以下程序的运行结果是( )
#include<stdio.h>
main()
{int m=5,n=10;
printf("%d,%d\n",m++,--n);
}
A. 5,9
B.6,9
C. 5,10
D.6,10
【习题3-4】逻辑运算符两侧的数据类型( )
A. 只能是0和1
B. 只能是0或非0正数
C. 只能是整型或字符型数据
D. 可以是任何类型的数据【习题3-5】下列关系表达式结果为假的是( )
A. 0!=1
B. 2<=8
C. (a=2*2)= =2
D. y=(2+2)= =4
【习题3-6】下列运算符中优先级最低的是( )
A. ?:
B. +=
C. >=
D. = =
【习题3-7】写出下面各逻辑表达式的值。
设a=3,b=4,c=5。
a+b>c&&b==c
a||b+c&&b-c
!(a>b)&&!c||1
!(x=a)&&(y=b)&&0
!(a+b)+c-1&&b+c/2
二、简单题
【习题3-8】什么是算法,算法有哪些特性,从日常生活中举出几个算法的例子。
【习题3-9】算法有哪些描述方法,各有什么优缺点,
【习题3-10】结构化的算法有哪几种结构,试分别描述。
【习题3-11】选择语句和循环语句对条件的判断的标准是什么,(即何值为真、何值为假,)
三、用传统流程图表示求解以下问题的算法。
【习题3-12】有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换(即A 瓶原来盛醋,现改盛酱油,B瓶则相反);
【习题3-13】依次将10个数输入,要求将其中最大的数打印出来;
【习题3-14】有三个数a、b、c,要求按大小顺序把它们打印出来;
【习题3-15】求1+2+3+ (100)
【习题3-16】判断一个数n能否同时被3和5整除;
【习题3-17】将100,200之间的素数打印出来;
【习题3-18】求两个数m和n的最大公约数;
【习题3-19】求方程式ax2+bx+c=0的根(a、b、c从键盘输入)。
四、编写程序题
【习题3-20】有一函数
x (x,1), , y,2x-1 (1,x,10) , ,3x-11 (x,100) ,
写一程序,输入x,输出y值。
【习题3-21】给一个不多于5位的正整数,要求:?求出它是几位数;?分别打印出每一位数字;?按逆序打印出各位数字,例如原数为321,应输出123。
【习题3-22】企业发放的奖金根据利润提成。
利润I低于或等于10万元的,奖金可提10%;利润高于10万元,低于20万元(100000<I?200000)时,低于10万元的部分按10%提成,高于100000元的部分,可提成7.5%;200000<I?400000时,低于20万元的部分仍按上述办法提成(下同)。
高于20万元的部分按5%提
成;400000<I?600000时,高于40万元的部分按3%提成;600000<I?1000000时,高于60万元的部分按1.5%提成。
从键盘输入当月利润I,求应发奖金总数。
要求:(1)用if语句编程序;(2)用switch语句编程序。
【习题3-23】输入4个整数,要求按从小到大的顺序输出。
【习题3-24】输入两个正整数m和n,求其最大公约数和最小公倍数。
【习题3-25】输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
22【习题3-26】编写程序实现功能:输入整数a和b,若a+b>100,则输出2222a+b之和的百位以上的数字,否则直接输出a+b的和。
【习题3-27】编写程序判断输入的正整数是否既是5又是7的整数倍。
若是则输出“yes”,否则输出“no”。
-28】编写程序实现功能:根据表3-1的函数关系,对输入的每个x【习题3 的值,计算出相应的y值。
表3-1 习题3-28的函数关系
x y
x<0 0
0<x?10 x
10<x?20 10
20<x<40 -0.5x+20
【习题3-29】编写程序实现,输入一个整数,判断它能否被3、5、7整除,并输出以下信息之一:
(1)同时被3、5、7整除;
(2)能被其中两个数整除(要指出是哪两个数);
(3)能被其中一个数整除(要指出是哪个数);
(4)不能被3、5、7中任意一个整数整除。
-1 (x<0), ,【习题3-30】用switch编程实现以下函数关系: y 0 (x=0) ,,, 1 (x>0) ,
【习题3-31】编写程序,用switch实现:对于给定的百分制成绩,改成相应的A、B、C、D、E表示,90分以上为A,80,89为B,70,79为C,60,69为D,60以下为E。
【习题3-32】编写程序实现功能:输入一个复数,输出其共轭复数,如,输入2+3i<回车>,输出2-3i。
【习题3-33】求S=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字。
n 例如:2+22+222+2222+22222(此时n=5),n由键盘输入。
20
【习题3-34】求(即求1~+2~+3~+4~+…+20~)。
n!,n,1
501001012【习题3-35】求++ 。
kk,,,kk,1k,1k,1
【习题3-36】打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,
333其各位数字立方和等于该数本身。
例如,153是一水仙花数,因为
153=1+5+3。
【习题3-37】每个苹果0.8元,的一天买了2个苹果;从第二天开始,每天买前一天的两倍,直到每天购买的苹果个数达到不超过100的最大值,编写程序求每天平均花多少钱。
【习题3-38】试编写程序,找出1,99之间的全部同构数。
同构数是这样一组数,它出现在平方数的右边。
例如,5是25的右边数,25是625的右边数,所以5和25都是同构数。
y【习题3-39】假设x、y是整数,编写程序求x的最后3位数,要求x、y从键盘输入。
【习题3-40】一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例、2、3,而6=1+2+3,因此6是“完数”。
编程序找出1000之内如,6的因子为1
的所有完数,并按下面格式输出其因子:
6 its factors are 1,2,3
【习题3-41】有一分数序列
23581321,,,,,, (1235813)
求出这个数列的前20项之和。
【习题3-42】一球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。
求它在第10次落地时,共经过多少米,第10次反弹多高, 【习题3-43】猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,就只剩一个桃子了。
求第一天共摘多少桃子。
【习题3-44】编程打印出以下图案。
*
***
***** ******* ***** ****
a【习题3-45】用迭代法求x=。
求平方根的迭代公式为
1 x=(x+a/x) n+1nn2
-5要求前后两次求出的x的差的绝对值小于10 。
【习题3-46】用牛顿迭代法求下面方程在1.5附近的根。
32 2x-4x+3x-6=0
【习题3-47】两个乒乓球队进行比赛,各出3人。
甲队为A、B、C 3人,乙队为X、Y、Z 3人。
已抽签决定比赛名单。
有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比,请编程序找出3对赛手的名单。
习题四
一、单项选择题
【习题4-1】一个C程序的执行是从。
A) 本程序的main函数开始,到main函数结束
B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C) 本程序文件的第一个函数开始,到本程序main函数结束
D) 本程序的main函数开始,到本程序文件的最后一个函数结束【习题4-2】以下叙述正确的是。
A) 在对一个C程序进行编译的过程中,可发现注释中的拼写错误
B) 在C程序中,main函数必须位于程序的最前面
C) C语言本身没有输入输出语句
D) C程序的每行中只能写一条语句
-3】以下叙述正确的是___________。
【习题4
A)main函数不可以有返回值 ,) main函数不可以有参数
C)函数可以有多个返回值 D)函数的形参可以是静态变量【习题4-4】以下叙述正确的是___________。
A)void类型的函数体中不可以有return语句
B) void类型的函数体中可以有return语句
C) 函数体中不可以有多个return语句 D) 函数体中定义的变量名称与形式参数的名称可以相同【习题4-5】以下叙述正确的是___________。
A)一个程序文件中定义的内部函数,其他文件可以调用它 B)一个程序文件中定义的内部函数,其他文件不可以调用它 C)不同文件中定义的内部函数不可以有相同的名称 D)函数的定义不能放在调用它的函数之后
【习题4-6】在由多个文件构成的C程序中,以下叙述正确的是________。
A)外部变量与局部变量不能同名 B)不同程序文件中可以定义相同名称的内部变量
C)只能把外部变量指定为静态存储方式 D)只能把局部变量指定为静态存储方式
【习题4-7】以下叙述正确的是___________。
A) 一个C程序必须由多个函数组成 B)一个C源程序必须包括宏命令
C)C源程序的宏命令以分号标明命令行的结束 D) C注释可以位于源程序的任意位置
二、判断题(正确用×错误用?标记)
【习题4-8】宏替换时先求出实参表达式的值,然后代入形参求值。
( ) 【习题4-9】.在C语言中,函数不可以嵌套定义,但宏可以嵌套定义。
( ) 【习题4-10】所有的递归问题都可以用非递归算法来实现。
( ) 【习题4-11】在C语言
中,不同函数体内定义的变量可以同名。
( ) 【习题4-12】多个文件组成的C语言程序,其中各个文件中可以定义同名函数。
( )
【习题4-13】在C语言中,一个函数只能被它所在文件的其它函数调用,称之为内部函数。
( )
三、阅读程序写结果或填空
【习题4-14】下列程序执行后的输出结果是_________。
int fun(int k)
{static int s=0;
while(k>0) s=s+k--;
return s;
}
main( )
{ int s,t;
s=fun(4);t=fun(5);
printf("s=%d,t=%d\n",s,t);
}
【习题4-15】下列程序执行后的输出结果是_________。
#include "stdio.h"
int a=0;
main( )
{int i;
for(i=1;i<=3;i=i+1)
{ static int b=0;
int c=1;
a++;b++;c++;
printf("%d: result is %d\n",i,a+b+c);
}
}
【习题4-16】下列程序执行后的输出结果是_________。
#include "stdio.h"
int func(int n)
{int s;
if(n<=1) s=1;else s=2+func(n-1);
return s;
}
main( )
{ int k=1, s=0;
while(k<=4) {s=s+func(k);k++;}
printf("s=%d\n",s); }
【习题4-17】下列程序执行后的输出结果是_________。
#define M(a,b) (a)>(b)? (a):(b)
main( )
{int i=10,j=15;
printf(“%d\n”,10*M(i,j));
}
【习题4-18】下列程序的输出结果是:
#include “stdio.h”
#define SQR(x) x*x main()
{int a,k=3;
a=SQR(k+1);
printf(“%d”,a);
}
【习题4-19】以下程序运行的结果是
long f(int n)
{long s;
if(n= =1||n= =2) s=2;
else s=n+f(n-1);
return(s);
}
main( )
{ long x;
x=f(4);
printf("x=%d\n",x);
}
【习题4-20】下列程序的输出结果是________? #define Tap(x) 2*x+1 main( )
{int a=6,k=2,m=1;
a+=Tap(k+m);
printf(“%d”,a);
}
【习题4-21】在以下程序的下划线处填写适当的语句使程序执行的结果4,16,256。
test( )
{ int x=2;
x=x*x;printf("%d,",x);
}
main( )
{test( );test( );test( );}
【习题4-22】下列程序的输出结果是
#include <stdio.h>
int f(int c)
{static int a=10;
int b=++a;
return(a+b+c);}
main( )
{printf(“%d”,f(f(5)));}
【习题4-23】以下函数调用语句中实参的个数是________? Sub1((x1,x2),(x3,x4,x5),x6)
四、程序设计题
23n【习题4-24】编写一个递归函数计算 1+X+2X+3X+,,,+nX 1 n=0
F(n,x)=
n F(n-1,x)+n Xn>0
【习题4-25】编写递归程序的输出如右所示的结果
*
***
*****
【习题4-26】编写递归程序的输出杨辉三角形 N,1(1) ,6【习题4-27】编写程序计算: S= 直到N!>10为止。
,N,1N!
【习题4-28】编写程序计算1~100之间的素数,并按照由大到小的次序输出。
习题五
一、单项选择题
【习题5-1】在C语言中,数组名代表了__________。
A) 数组的全部元素值 B)数组中第一个元素的值
C) 数组中元素的个数 D)数组中第一个元素的地址
【习题5-2】不能把字符串"china"赋予数组a的语句是_______ 。
A)char a[8]={'c','h','i','n','a'} B)char a[]="china"
C)char a[8];a="china"; D)char a[8];strcpy(a,"china");
【习题5-3】设有如下定义语句:
int a[10]={1,2,3,4,5,6,7,8,9,10};
则下面是正确的数组元素的是。
A)a[a[2]+1] B)a(4) C)a[10] D)a[a[4]+5]
【习题5-4】设a,b是两个已定义的字符数组,则下面语句中正确的是。
A)gets(a,b); B)scanf("%s%s",a,b);
C)scanf("%s%s",&a,&b); D)gets("a");gets("b");
【习题5-5】设有定义:
int j=2,a[]={1,2,3,4,5};
则数组a[j]的值为。
A)2 B)3 C)4 D)5
【习题5-6】C语言中,一维数组下标的最小值是。
A)随便 B)根据说明 C)1 D)0
【习题5-7】下面描述中不正确的是。
A)字符数组中可以存放字符串
B)可以对字符数组进行整体输入、输出
C)可以对任何数组进行整体输入、输出
D)不能通过赋值运算符"="对字符数组进行整体赋值
【习题5-8】若有说明:
char a[]="ABCDEF";
char b[]={'A','B','C','D','E','F'};
则下面描述中正确的是。
A) a数组长度比b数组长 B) a和b不相同,a是指针数组
C) a数组和b数组长度相同 D) a和b完全相同
二、阅读程序写结果或填空题
【习题5-9】设有定义语句:
char c[][5]={"ABCD"};
则数组c是 ? 维数组,数组中共有 ? 个元素,数组元素c[0][1]= ? 。
【习题5-10】设有定义语句:
char s[15]={"123ab\0abc"};
则表达式strlen(s)的值为。
【习题5-11】下面程序是求二维数组a主对角线上的元素和,请在划线处填上恰当的内容,以完成程序的功能。
#include <stdio.h>
main()
{
int a[3][3]={1,2,3,2,3,4,3,4,5},s=0,k;
for(k=0;k<3;k++)
s=s+ ;
printf("s=%d\n",s);
}
【习题5-12】下面程序的功能是将一维整型数组a循环左移一位,第一个数据存放到最后。
例如假设数组为3,7,2,6,5,9,则循环左移后数组变成
7,2,6,5,9,3。
请在划线处填上恰当的内容,以完成程序的功能。
#include <stdio.h>
main()
{
int a[10],k,t;
for(k=0;k<10;k++) scanf("%d",&a[k]);
t= ? ;
for(k=1;k<10;k++) a[k-1]= ? ;
a[9]= ? ;
for(k=0;k<10;k++) printf("%3d",a[k]);
}
【习题5-13】下面程序功能是将数组a,b合并,且合并后的数组也是从小到大排序。
请在划线处填上恰当的内容,以完成程序的功能。
#include <stdio.h>
main()
{
int a[7]={2,5,8,12,14,19,21},b[5]={13,15,21,25,30},c[12];
int i=0,j=0,k=0,m;
while(i<7&&j<5)
{
if(a[i]<b[j]) {c[k]=a[i];i++;}
else {c[k]= ? ;j++;}
k++;
}
if(i<7)
for(m=i;m<7;m++)
{ c[k]= ? ;k++;}
else
for(m=j;m<5;m++)
{ c[k]=b[m];k++;}
for(k=0; ? ;k++) printf("%3d",c[k]);
}
【习题5-14】阅读下面程序,写出运行结果。
#include <stdio.h>
main()
{
int m,n;
for(m=1;m<6;m++)
{
for(n=5;n>=m;n--)
printf(" ");
for(n=1;n<=2*m-1;n++)
printf("*");
printf("\n");
}
}
【习题5-15】阅读下面程序,写出运行结果。
#include <stdio.h>
main()
{
int n[3],i,j,k;
for(i=0;i<3;i++)
n[i]=0;
k=2;
for(i=0;i<=k;i++)
for(j=0;j<=i;j++)
n[j]=n[i]+1;
for(i=0;i<=k;i++)
printf("%3d",n[i]);
printf("\n");
}
【习题5-16】阅读下面程序,写出运行结果。
#include <stdio.h>
main()
{
int j,ch,a[8];
for(j=0;j<8;j++) a[j]=0;
while((ch=getchar())!='\n')
if(ch>='0'&&ch<='7') a[ch-'0']++;
for(j=0;j<8;j++)
printf("a[%d]=%d\n",j,a[j]);
}
程序运行时输入:12345678900987654321234806? 三、编写程序题
【习题5-17】已知整型数组a中有10个元素,整型数组b中有6个元素。
编
程将那些在数组a中而不在数组b的数据组成新数组c并输出。
【习题5-18】已知a是3×4的整型二维数组,编程求数组a中所有外围元素
之和。
【习题5-19】不用strcmp函数,编程判断两个长度不超过20的字符串的大小:若第一个字符串大于第二个字符串输出1;若两个字符串相等输出0;否则输出-1。
【习题5-20】输入长度不超过20的字符串,编程判断其中字母的个数。
【习题5-21】已知整型数组a中有10个元素,编程将其中某个数k删除,输
出删除后的数组。
习题六
一、选择题
【习题6-1】变量的指针,其含义是指该变量的________
A)值 B)地址
C)名 D)一个标志
【习题6-2】若有语句int *point,a; 则point=&a;中运算符&的含义是_____
A)位与运算 B)逻辑与运算
C)取指针内容 D)取地址
【习题6-3】若x是整型变量,pb是整型的指针变量,则正确的赋值表达式是
B) pb=x; C) *pb=&x; D) *pb=*x A) pb=&x
【习题6-4】下面程序段的运行结果是_________
char *s="abcde";
s+=2;
printf("%d",s);
A)cde B)字符’c’ C)字符’c’的地址 D)无确定的输出结果【习题6-5】设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是______
A)c=*p1+*p2; B)p2=c C)p1=p2 D)c=*p1*(*p2);
【习题6-6】若有定义语句
char a[]="It is mine";
char *p="It is mine";
则以下不正确的叙述是________.
A)a+1表示的是字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
【习题6-7】若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为___
A)*(a[i]+j) B)(a+i) C)*(a+j) D)a[i]+j
【习题6-8】设有如下定义:int (*ptr)( ); 则以下叙述中正确的是:
A)ptr是指向一维组数的指针变量
B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针,该函数返回一个int型数据
D)ptr是一个函数名,该函数的返回值是指向int型数据的指针【习题6-9】设有定义int (*ptr)[m];其中的标识符ptr是
A)m个指向整型变量的指针
B)指向m个整型变量的函数指针
C)一个指向具有m个整型元素的一维数组的指针
D)具有m个指针元素的一维指针数组,每个元素都只能指向整型量【习题6-10】若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:int *p;
p=__________ malloc( sizeof(int)); 则应填入
A) int B) int * C) (*int) D) (int *)
二、阅读下列程序,填空或给出程序运行结果。
【习题6-11】以下程序的功能是:通过指针操作,找出三个整数中的最小值并输
出。
#include "stdio.h"
main()
{
int *a,*b,*c,num,x,y,z;
a=&x; b=&y; c=&z;
printf("输入3个整数:");
scanf("%d%d%d",a,b,c);
printf("%d,%d,%d\n",*a,*b,*c);
num=*a;
if (*a>*b) _______;
if (num>*c) _______;
printf("输出最小整数:%d\n",num);
}
【习题6-12】下面程序的功能是将两个字符串s1和s2连接起来,将s2连接到
s1后面。
请填空。
#include “stdio.h”
#include “string.h”
main()
{ char s1[80],s2[80];
gets(s1); gets(s2);
conn(s1,s2);
puts(s1);
}
conn(char *p1,char *p2)
{ while(*p1) ______;
while(*p2)
{ *p1=______;
p1++; p2++; }
*p1=’\0’;
}
【习题6-13】以下程序将数组a中的数据按逆序存放,请填空。
#define M 8
#incl ude “stdio.h”
main()
{ int a[M],i,j,t;
for(i=0;i<M;i++) scanf("%d",a+i);
i=0;j=M-1;
while(i<j)
{
t=*(a+i); *(a+i)= _______;
*(______)=t;
i++; j--;
}
for(i=0;i<M;i++ printf("%3d",*(a+i)); }
【习题6-14】给出程序运行结果。
#include “stdio.h”
void f(int *x,int *y); main()
{
int a[8]={1,2,3,4,5,6,7,8},i,*p,*q; p=a;q=&a[7];
while(p<q)
{ f(p,q);
p++;q--;}
for(i=0;i<8;i++)
printf("%d,",a[i]); }
void f(int *x,int *y) { int t;
t=*x;*x=*y;*y=t;
}
【习题6-15】给出以下程序的输出结果: #include “stdio.h” void prt(int *m,int n); main()
{
int a[]={1,2,3,4,5},i; prt(a,5);
for(i=0;i<5;i++)
printf("%d,",a[i]); void prt(int *m,int n) { int i;
for(i=0;i<n;i++)
m[i]++;
}
【习题6-16】给出下面程序的运行结果
#include “stdio.h”
#include “string.h”
void fun(char *w,int n);
main()
{ char *p;
p="1234567";
fun(p,strlen(p));
puts(p);
}
void fun(char *w,int n)
{ char t,*s1,*s2;
s1=w;s2=w+n-1; while(s1<s2)
{t=*s1++;*s1=*s2--;*s2=t;}
}
【习题6-17】给出下面程序的运行结果
#include “stdio.h”
main()
{
char a[]="programming",b[]="language";
char *p1,*p2;
int i;
p1=a;p2=b;
for(i=0;i<7;i++)
if(*(p1+i)==*(p2+i))
printf(",c",*(p1+i));
}
三、程序设计题(本章所有习题要求使用指针方法处理)
【习题6-18】有n个整数,设计程序,将前面各个数按顺序向后移动k个位置,
将最后k个数按顺序移动到最前面。
【习题6-19】编写程序,求出矩阵中每个行的累加和,要求用动态数组存储行的
累加和。
【习题6-20】找出一个二维数组的鞍点,即该位置上的元素在该行中最大,在列
上最小,也可能没有鞍点。
【习题6-21】编写程序判断是否是回文字符串。
回文是一种“从前向后读”和“从
后向前读” 都相同的字符串。
如:“rotor”。
【习题6-22】编制一个字符替换函数,实现已知字符串str中,所有属于ch 中的
字符都用ch2中对应字符代替。
函数原型:
void replace(char *str, char ch, char ch2)
【习题6-23】编写一个函数,删除一个字符串的指定字符,函数原型:
int delStr(char *str, char ch)
先判断字符是否出现在字符串中,如果未出现,则返回0,如果字
符出现一次或多次,则返回字符的个数。
【习题6-24】编写函数把参数字符串中的字符反序排列, 函数原型:
void reversestr(char * str)
使用指针,不要使用数组下标,也不要声明局部数组来临时存储。
习题七
一、单选题
【习题7-1】设有以下说明语句:
struct ex
{
int x;float y;char z;
}example;
则下面的叙述中不正确的是________。
A) struct是结构体类型的关键字
B) example是结构体类型名
C) x,y,z都是结构体成员名
D) struct ex是结构体类型
【习题7-2】有如下定义
struct person
{char name[9]; int age;};
struct person class[10]={ "Johu",17,"Paul",19,"Mary",18,"Adam",16,};
根据上述定义,能输出字母M的语句是________。
A) prinft("%c\n",class[3].mane);
B) pfintf("%c\n",class[3].name[1]); C)
prinft("%c\n",class[2].name[1]); D) printf("%c\n",class[2].name[0]);
【习题7-3】若有下面的说明和定义:
struct test
{
int a;
char b;
float c;
union u
{char ul[5];int u2[2];} ua; } myaa;
则sizeof(struct test )的值是________。
A) 12
B) 19
C) 14
D) 4
【习题7-4】已知赋值语句Wang.year=2005;判断Wang是________类型的变量。
A)字符或文件 B)整型和枚举 C)联合或结构 D)实型或指针-5】运行程序: 【习题7
struct st
{
int x;
int *y;
}*p;
int d[4]={10,20,30,40};
struct sta[4]={20,&d[0],30,&d[1],40,&d[2],50,&d[3]};
main()
{
p=a;
printf("%d\n",++(p->x));
}
则输出结果是________。
A) 11 B) 21 C) 31 D) 41
【习题7-6】设有以下说明:
struct stud
{
char num[6];
int s[4];
double ave;
}a,*p;
则变量a在内存所占字节数是________。
A) 18 B) 22 C) 11 D) 5
【习题7-7】以下程序的输出结果是________。
struct HAR
{
int x, y;
struct HAR *p;
}h[2];
main()
{
h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1];h[1].p=h;
printf("%d %d \n",(h[0].p)->y,(h[1].p)->x); }
A) 2 3
B) 1 4
C) 4 1
D) 3 2
【习题7-8】以下对结构体类型变量的定义中,不正确的是________。
A) typedef struct aa B) #define AA struct aa
{ int n; AA {int n;
float m; float m;
}AA; }td1;
AA td1;
C) struct D) struct
{int n; { int n;
float m; float m;
}aa; }td1;
struct aa td1;
【习题7-9】设有结构体及其数组和指针变量的定义语句struct{int x;}y[2],p=y;
则下列表达式中不能正确表示结构体成员的是________。
A)(*p).x B)*(p+1).x C)*(p) D)*p.x
【习题7-10】下列程序的输出结果是________。
struct abc
{ int a,b,c; };
main()
{
struct abc s={1,2,3};
int t;
t=s.a,s.c;
printf("%d\n",t);
}
A) 1 B) 2 C) 3 D) 无结果
【习题7-11】有以下程序:
#include <stdio.h>
union pw
{
int i;
char ch[2];
}a;
main()
{
a.ch[0]=13;
a.ch[1]=0;
printf("%d",a.i); }
执行上述程序后的输出结果是________。
A)13 B)14 C)208 D)209 【习题7-12】变量a所占内存字节数是________。
union U
{
char st[4];
int i;
long l;
};
struct A
{
int c;
union U u;
}a;
A) 4 B) 5 C) 6 D) 8
【习题7-13】若定义union uex{int i;float f;char c;}ex;则sizeof(ex)的值是________。
A)4 B)5 C)6 D)7
【习题7-14】以下程序的输出结果是________。
union myun
{
struct
{int x, y, z; } u;
int k;
}a;
main()
{
a.u.x=4;a.u.y=5;a.u.z=6;
a.k=0;
printf("%d\n",a.u.z); }
A) 4
B) 5
C) 6
D) 0
【习题7-15】若定义union ex{int i;float f;char a[10];}x;则sizeof(x)的值是________。
A)4 B)6 C)10 D)16
【习题7-16】设有以下说明语句
typedef struct
{ int n;
char ch[8];
} PER;
则下面叙述中正确的是
A) PER 是结构体变量名
B) PER是结构体类型名
C) typedef struct 是结构体类型
D) struct 是结构体类型名
【习题7-17】下面说明中,正确的是________。
A) typedef v1 int; B) typedef v2=int;
C) typedef int v3; D) typedef v4: int;
【习题7-18】以下各选项企图说明一种新类型名,其中正确的是_______。
A)typedef a1 int; B)typedef a2=int
C)typedef int a3; D)typedef a4;int; 【习题7-19】以下枚举类型的定义中正确的是________。
A)enum a={one,two,three}; B)enum a{"one","two","three"};
C)enum a={"one","two","three"}; D)enum a{one=8,two=9,three};
-20】设有定义【习题7
enum team{my,your=3,his,her=his+5};
则枚举元素my,your,her的值分别是________。
A)032 B)134 C)039 D)035 【习题7-21】整型变量x和y的值相等且为非0值,则下面表达式中结果为零的是________。
A) x||y B) x|y C) x&y D) x^y
【习题7-22】设 int b=8;表达式(b>>2)/(b>>1)的值是________。
A) 0 B) 2 C) 4 D) 8
【习题7-23】运行下面程序:
main()
{
char x=034;
printf("%o\n",x<<1);
}
则输出结果是________。
A) 34 B) 70 C) 340 D) 034
【习题7-24】若定义unsigned int a=3,b=10;
printf("%d\n",a<<2,b==1);
则运行结果为________。
A)13 B)12 C)8 D)14
二、编程题
【习题7-25】编写程序。
从键盘输入10本书的名称和定价,并存在结构体数组
中,从中查找出定价最高和最低的书的名称和定价,并打印出来。
【习题7-26】编写程序。
设有以下结构体类型说明:
struct student
{
char num[10],name[10];
float s[4];
double ave;
};
要求:编写两个函数,函数fun1把10名学生放在一个结构体数组中。
从键
盘输入学生的学号、姓名和4门成绩,然后计算出平均分放在结构体对应的
域中;函数fun2输出10名学生的记录。
主函数调用函数fun1和函数fun2,
不使用全局变量,函数之间的数据全部用参数传递。
【习题7-27】定义结构体类型complex表示复数,实数部分名为rp,虚数部
分
名为ip,都用整型数表示。
编写一套函数,实现复数运算,并用主函数调用
这些函数。
函数包括:
(1)读一个复数;(2)输出一个复数;(3)计算两个复数的和与差。
【习题7-28】
已有两个链表x和y,每个链表的结点包括学号和成绩,要求把两
个链表合并,按学号升序排列。
【习题7-29】解决百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
百钱买百鸡,问鸡翁、母、雏各几只”。
要求:用结构体数组记录所
有的情况,并显示结果,请用指针方式操作。
习题八
一、单选题
【习题8-1】以读写方式打开一个已有的文件file1,下面有关fopen函数正
确的
调用方式为________。
A)FILE *fp;fp=fopen("file1";"f"); B)FILE *fp;fp=fopen("file1","r+");
C)FILE *fp;fp=fopen("file1","rb"); D)FILE *fp;fp=fopen("file1","rb+")
【习题8-2】在C程序中,可把整型数以二进制形式存放到文件中的函数是
__________。
A) fprintf函数 B) fread函数
C) fwrite函数 D) fputc函数。