2024年4月1日发(作者:郦松校)
C语言习题课(附答案)
C语言习题课
一、单项选择题:
1.以下A是C语言中有效的变量名称。
A._abc B.2abc C.char D.a#3
变量名只能以下划线和字母开头
2.下面四个说法中错误的是B。
A.for循环不仅可以和for循环嵌套,而且可以和While循环嵌套。
B.当在循环体内执行continue语句的时候,将结束整个循环。
C.while循环最少循环0次,do-while循环最少循环1次。
D.goto语句也可以实现循环的功能。
3.在while ( x )中的x与下面条件表达式等价的是D
A.x = = 0 B.x= = 1 C.x! = 1 D.x ! = 0
4.为表示关系x≥y≥z,应使用C语言表达式A
A.(x>=y)&&(y>=z)
B.(x>=y)AND(y>=z)
C.(x>=y>=z)
D.(x>=y)&(y>=z)
5.设有如下定义:int x=9,y=2,z;则语句printf(“%d”,z= x/y);的输出结果是C
A.1 B.4.5 C.4 D.3
整形中的“/”是整除
6.若有以下语句:static char x[ ]=”12345”;static char
y[ ]={‘1’,’2’,’3’,’4’,’5’};则正
确的说法是 B 。
A.x数组和y数组的长度相同
B.x数组的长度大于y数组的长度
C.x数组的长度小于y数组的长度
D.x数组与y数组等价
字符串后有一个“0”
7.已知有定义:char ch;则下面正确的赋值语句为A。
A.ch='X' B.ch='55' C.ch="M" D.ch="55"
8.以下说法中正确的是C
A.C语言程序总是从第一个的函数开始执行
B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行
D.C语言程序中的main()函数必须放在程序的开始部分
9.C语言中,形参的缺省存储类型说明是: A
er
10.C语言中的简单数据类型有: B
A.整型实型逻辑型
B.整型实型字符型
C.整型字符型逻辑型
D.整型实型逻辑型字符型
11.以下程序段的输出结果是: C
A.1 int x=3;
B.3 0 do{
C.1 -2 printf("%3d",x-=2);
D.死循环 }while(!(--x));
12.以下非法的赋值语句是: A
A.n=(i=2,++i);
B.j++;
C.++(i+1);
D.x=y>0;
13.设a和b均为double型变量,且a=5.5,b=2.5,则表达式(int)a+b/b的值是: D
A.6.500000 B.6 C.5.500000 D.6.000000
14.已知x=3,y=2,则表达式x*=y+8的值为: C
A.3 B.2 C.30 D.10
y+8是一个整体
15.设x,y,z均为int型变量,则执行以下语句后,t的值为: C
x=y=z=1; t=++x||++y&&++z;
A.不定值 B.2 C.1 D.0
16.为了测试字符串的实际长度,C语言规定了一个“字符串结束标志”,这个结束标志字符是: B
A.‘’ B.‘0’C.‘x’ D.‘9’
17.C程序的三种基本结构是: A
A.顺序结构、选择结构、循环结构
B.逻辑结构、层次结构、网状结构
C.顺序结构、逻辑结构、选择结构
D.层次结构、顺序结构、循环结构
18.若int i=10;执行完下面程序判断后,变量i的正确结果是D。
A.10 switch ( i )
B.11 {
C.12 ca 7: i+=1;
D.13 ca 10: i+=1;
ca 17: i+=1;
default: i+=1;
}
ca后有break,结束跳出结果,没有break,继续执行具体见书本105页
19.下列关于C语言注释的描述中,错误的是: D 。
A.C语言中用/*……*/表示注释部分
B.注释只是给人看的,对编译和运行不起作用
C.注释可以加在程序中的任何位置
D.C语言中用{*……*}表示注释部分
20.下列关于C程序的描述中,错误的是: D 。
A.C程序是由函数构成的
B.一个C程序总是从main函数开始执行
C.C程序书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上
D.C语言中是利用输入/输出运算符构成输入/输出语句完成输入/输出操作的
21.C源程序的后缀名默认为: B 。
A.cpp B.c C.obj D.exe
C语言的默认后缀名是.c,在C++中才是cpp
22.以下不属于C语言的基本数据类型的是: B 。
A.整型B.布尔型C.字符型D.实型
23.下列标识符中,符合C语言语法规范的是:C。
A. B.$123 C._name D.3D64
24.下列选项中,不是C语言中的关键字的是:C。
A.auto B.if C.VOID D.break
25.下列常量中,合法的长整型常量是:A。
A.0L B.4962710000 C.0.05472 D.2e+2
长整型的范围是 -2147483648~2147483647
26.设int型变量m,n,a,b,c,d均为0,执行表达式(m=a==b)||(n=c==d)后,m和n的值是:C。
A.0,0 B.0,1 C.1,0 D.1,1
当在“或”的前面为1,后面不再执行。在“与”前面为0,后面也不在执行,出现“短路”现象。27.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是:C。
A.-3 B.9 C.-12 D.6
28.假设double型变量x,y已经正确定义,则表达式
x=1,y=x+3/2的值是:D。
A.1 B.2.0 C.2 D.2.5
29.已知’A’的ASCII码为65,则下列程序的运行结果为:A。
main()
{
char ch1=’A’;
char ch2=ch1+3;
printf(“%d,%c”,ch1,ch1);
printf(“%d,%c”,ch2,ch2);
}
A.65,A 68,D B.A,65
D,68
C.A,D
65,68
D.D,68
A,65
30.以下关于while语句的叙述正确的是B
A.while语句构成的循环必须用break语句才能退出
B.while循环语句中,当while子句中的表达式值为零时,结束循环
C.不能使用while语句来构成循环结构
D.while语句的循环体至少被执行一次
二、填空题:
1.程序段float x=165.323; printf(“x=%-10.2f”,x);执行时输出的结果为:165.32□□□□ p76
2.设x,y,z,k都是int型变量,则执行表达式x=(y=4,z=16,k=32)后,x的值为:32
3.要将两个字符串连接成一个字符串,可以使用的标准库函数名为:strcat P147
4.多分支选择结构中,若在执行某一个ca语句后,使流程跳出
switch结构,应该使用语句break p105。
5.若有定义int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},则a[1][2]=7 p137
6.C语言中,结束本轮循环,将循环是否继续交给循环判断条件确定的语句是:continue。
7.设x=2.5,a=7,y=4.7,则算术表达式x+a%3*(int)(x+y)%2/4的值为: 2.5
8.C语言中,函数是程序的基本构成单元,其中main函数是必须的,且唯一。
9.在C语言程序中,用关键字float定义单精度实型变量。
10.设有语句“int i=1,s=1;for(;s+i<6;i++) s+=i;”,其中for语句的循环次数为2。
11.已知有声明“int x=1,y=2”,则执行表达式“(x>y)&&(--x>0)”后x的值为1。
12.多分支选择结构中,若在执行某一个ca语句后,使流程跳出switch结构,应该使用语句break p105
13.C语言中的if语句属于三种基本结构中的选择结构的语句。
14.若变量ch为char类型,判断ch为数字字符的表达式是ch>’0’&& ch<’9’。
15.设x=2.5,a=7,y=4.7,则算术表达式x+a%3*(int)(x+y)%2/4的值为: 2.5
ue语句只能用在三种基本结构中的循环结构的语句中。
17.如果在用户的程序中要使用C库函数中的数学函数时应在该源文件中使用的include命令是:math.h
18.若有定义:int x[5]; 则访问x数组中的元素时,下标的上限为:
4 。
19.C语言中,函数是程序的基本构成单元,其中main函数是必须的,且唯一。
20.C语言本身没有输入输出语句,格式化的标准输出是借助库函数实现。
三、程序阅读题:
1.阅读下列程序,并给出程序运行的结果。
void main()
{
int n,d,k;
n=263;
d=1;
k=1;
do {
k*=n%10;
n/=10;
printf("%d,", d);
d++;
}while(n);
printf("");
printf("%d",k);
printf("%d",n);
}
运行结果:1,2,3
36
2.阅读下列程序,并给出程序运行的结果。
void main()
{
int x=2345,t;
int sum,muti;
sum=0;
muti=1;
printf("数字为:%d",x);
while (x!=0)
{
t=x%10;
sum+=t;
muti*=t;
x=x/10;
}
printf("构成数字的和:%d",sum);
printf("构成数字的乘积:%d",muti);
}
运行结果:数字为:2345
构成数字的和:14
构成数字的乘积:120
3.阅读下列程序,并给出程序运行的结果。
void main( )
{ int x=20,y=30,z=60;
while(x
y=y+4;
z=z/2;
printf(“%d”,x);
printf(“%d”,y);
printf(“%d”, z);
}
运行结果:32
34
30
4.阅读下列程序,并给出程序运行的结果。
void main()
{
int i,j,l,m,a[10]={9,8,7,6,5,4,3,2,1,5};
for(i=0;i<=8;i++)
{
l=i;
for(j=i+1;j<=9;j++)
l=j;
if(l!=i)
{
m=a[i];
a[i]=a[l];
a[l]=m;
}
}
for(i=0;i<=9;i++)
{
printf("%d ",a[i]);
if(i%3==0&&i!=0)
printf(“”);
}
}
运行结果:1 2 3 4
5 5 6
7 8 9
四、编程题:(8分每题,共16分)
1.写一个函数,输入一个四位数字,要求输出这4个数字字符,但每两个数字间空一个空格。例如输入1990,应该输出“1 9 9 0”。
算法一:
# include
void main( )
{
int a,b,c,d,e; //定义四个数,a是一个四位数,b是它的千位,c是百位,d是十位,e是个位 printf(“请输入一个四位数:”);
scanf(“%d”,&a);
b=a/1000; //获取它的千位
c=(a-b*1000)/100; //获取它的百位
d=(a-b*1000-c*100)/10; //获取它的十位
e=a-b*1000-c*100-d*10; //获取它的个位
printf(“%d %d %d %d”,b,c,d,e); //将它的每一位重新排序输出
}
算法二:
# include //这方法与第3题类似
void main()
{
char c;
printf(“请输入数字:”); //提示
while((c=getchar())!='') //逐个获取数字(当然字母也可以,n个数都可以)printf(“%c ”,c); //逐个数字输出(数字与数字之间有空格)
printf(“”);
}
算法三:
# include
void main()
{
int a[10],n,i=0;
printf(“请输入一个数:”);
scanf(“%d ”,&n);
while(n!=0)
{
a[i++]=n%10;
n/=10;
}
for (i--;i>=0;i--)
printf(“%d ”,a[i]);
printf(“ ”);
}
2.编写程序,用公式π4 ≈1-13 +15 -17 +19 -111
+…求π的近似值,直到最后一项小于10-5为止。 解法一:
#include
#include
void main()
{
double x=1,i=1; //定义x=1/i (i 是分数的分母)
int j=1; //定义该数列有j 项
double p=0; //定义p 是该数列的和,初始为0
while(x>1e-5) //在该条件下循环 {
x=1/i; //x 是每一项的值
i+=2; //数列的分母+2
if(j%2!=0) //奇数项相加,偶数项相减获得p 的值 p 为π/4
p+=x;
if(j%2==0)
p-=x;
j++;
} p=p*4; //获得π的值
printf("π=%lf",p); //输出值 }
解法二:
# include
# include
void main()
{
int s;
float n,t,pi;
t=1;pi=0;n=1.0;s=1;
do
{
pi+=t;
n+=2;
s=-s;
t=s/n;
}while(fabs(t)>1e-5);
pi*=4;
printf(“π=%.5f”,pi);
}
3.输入一行字符(不超过100),将其中的大写字符变成小写,小写字符变成大写,其余字符不变。
解法一:
# include
void main()
{
char c;
while((c=getchar())!='') //获得字符
{
if (c>='a'&&c<='z') //小写字母变大写字母
{ c=c-32;
printf("%c",c);
}
el if (c>='A'&&c<='Z') //大写字母变小写字母
{ c=c+32;
printf("%c",c);
}
el //其他字符不变
printf("%c",c);
}
printf("");
}
解法二:
# include
void main()
{
int i=0;
char a[100],c;
printf("请输入字符串的内容:");
do
{
scanf("%c",&a[i]);
c=a[i];
i++;
}while(c!='');
a[i]='0';
i=0;
printf("输入字符串的内容为:");
while(a[i]!='0')
{
printf("%c",a[i]);
i++;
}
printf("转换后字符串的内容为:");
i=0;
while (a[i]!='0')
{
c=a[i];
if(c>='a'&&c<='z')
a[i]-=32;
el if(c>='A'&&c<='Z')
a[i]+=32;
printf("%c",a[i]);
i++;
}
}
4.以下程序把100~200之间不能被3整除的数输出
# include
void main()
{
int i;
for (i=100;i<=200;i++) //100到200之间循环
if (i%3!=0) //排除能被3整除的数(余数不为0) printf("%d",i);
}
5.输入3个数,按从小到大的顺序输出。
方法一:
# include
void main()
{
int x,y,z,t;
printf("请输入要比较的三个数:");
scanf("%d %d %d",&x,&y,&z);
if (x>y)
{
t=x;
x=y;
y=t;
}
if(y>z)
{
t=z;
z=y;
}
if (x
y=t;
el
{
y=x;
x=t;
}
printf("%d %d %d",x,y,z);
}
方法二:
# include //此题使用了冒泡排序的方法
void main( )
{
int a[3]; //定义3个数
int temp,i,j,k;
printf("请输入3个数:"); //提示输入
for(i=0;i<3;i++)
scanf("%d",&a[i]); //给输入的3个数进行编号
for (j=0;j<2;j++) //进行2次循环
for(k=0;k<2-j;k++) //每次循环中进行2次比较
if (a[k]>a[k+1]) //进行比较把大的数放到最后
{
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
for(i=0;i<3;i++) //将排好序的3个数重新编号
printf("%d ",a[i] ); //输出3个数
printf("");
}
方法三:
# include //这种方法比较麻烦,需要一一列出来 void main ()
{
int a,b,c,d,e,f;
printf(“请输入3个数:”);
scanf(“%d %d %d ”,&a,&b,&c); //获取3个数a,b,c
if(a>=b&&b>=c) //a>=b>=c 的情况
printf(“%d %d %d ”,c,b,a); //重新排序输出
el if(a>=c&&c>=b) // a>=c>=b 的情况
printf(“%d %d %d ”,b,c,a); //重新排序输出
el if(b>=a&&a>=c) // b>=a>=c 的情况
printf(“%d %d %d ”,c,a,b); //重新排序输出
el if(b>=c&&c>=a) // b>=c>=a 的情况
printf(“%d %d %d ”,a,c,b); //重新排序输出
el if(c>=b&&b>=a) //c>=b>=a 的情况
printf(“%d %d %d ”,a,b,c); //重新排序输出
el if(c>=a&&a>=b) //c>=a>=b
printf(“%d %d %d ”,b,a,c); //重新排序输出
}
6. 以下程序用while 语句计算式子 n=1
100
n
方法一:用while 计算
# include //此题要算从1加到100
void main()
{
int s=0,n=1;
while(n<=100) //n 从1到100之间循环
{
s+=n;
n++;
}
printf("%d",s);
}
方法二:用for 计算
# include
void main()
{
int s=0,n; //s 为累加的初始值
for (n=1;n<=100;n++) //n 从1到100之间循环
s=s+n;
printf("%d",s);
}
7.求100~200间的全部素数。
方法一:
# include
void main()
{
int i , n ;
for(n=101 ;n< 200;n+=2) {
for(i=2;i<=n-1;i++) if(n%i==0)
break;
if(i== n )
printf("%5d",n); }
}
方法二:
# include
# include
void main()
{
int m,i,k,n=0;
for(m=101 ;m<=200;m+=2) {
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if (i>=k+1)
{
printf("%d",m);
n+=1;
}
}
printf("");
}
8.函数pi()的功能是根据以下公式求π值,π
2
=1+
1
3
+
1
3
×
2
5
+
1
3
×
2
5
×
3
7
+
1
3
×
2
5
×
3
7
×
4
9
+…
直到最后一项小于10-5为止。
#include
double jiecheng1(int x) //定义一个函数阶乘1,可以得到一个从1乘到x的值
{
double s=1;
for(int i=1;i<=x;i++)
s=s*i;
return(s);
}
double jiecheng2(int x) //定义一个阶乘2函数可以得到一个从3*5*7*。。。。。。*2x-1的值
{
double s=1;
for(int i=1;i<=x;i++)
s=s*(2*i+1);
return (s);
}
void main()
{
double x=1;
int i=1;
double p=1; //p是π的初始值
while(x>1e-5) //1e-5 是 10-5
{
x=(jiecheng1(i))/(jiecheng2(i)); //这一步不用说了吧,自己看吧
i=i+1;
p=p+x;
} // π/2=p,所以π=2*p
printf("%lf",2*p);
}
9.判断输入的一个年份是否是闰年。
# include
void main()
{
int x;
printf("请输入年份:");
scanf("%d",&x);
if(x%400==0||(x%4==0&&x%100!=0)) //根据闰年的定义判断
printf("%d年是闰年",x);
el
printf("%d年不是闰年",x);
}
10.编写程序,在屏幕上打印输出下列图形。
1 # include < stdio.h >
222 void main()
33333 {
4444444 for (int i=1;i<=9;i++) //一共有9行循环
555555555 {
66666666666 for(int j=1;j<=9-i;j++)
7777777777777 printf(" "); //每一行输出9-i个空格
888888888888888 for ( int k=1;k<=2*i-1;k++)
99999999999999999 printf("%d",i); //每一行再输出2*i-1个数
printf(""); //而输出的这个数就是行所对应的数
}
}
11.输出所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于其本身。例如:153是“水仙花数”,因为153=13+53+33
# include
# include
void main()
{
int a,b,c,i;
double x;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i-a*100)/10;
c=i-a*100-b*10;
x=pow(a,3)+pow(b,3)+pow(c,3);
if(x==i)
printf("%d",i);
}
}
12.编写程序,输入三角形三条边的边长,求三角形的面积。
#include
# include
void main( )
{
float a,b,c;
double s,t;
printf("请输入三角形三边:");
scanf("%f %f %f",&a,&b,&c);
if(((a+b)<=c)||((a+c)<=b)||((b+c)<=a)) //判断能否构成三角形
printf("不能构成三角形");
el
{
t=(a+b+c)/2;
s=sqrt(t*(t-a)*(t-b)*(t-c));
printf("三角形的面积为=%f",s);
}
}
13.猴子吃桃P129
main() x1=(x2+1)*2;
{ x2=x1;
int day,x1,x2; day--;
day=9; }
x2=1; printf("桃子总数=%d",x1);
while(day>0) }
{
本文发布于:2024-04-01 22:51:24,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/82/1255318.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |