C语言编程基础习题答案.docx

上传人:b****4 文档编号:3999085 上传时间:2022-11-27 格式:DOCX 页数:33 大小:28.96KB
下载 相关 举报
C语言编程基础习题答案.docx_第1页
第1页 / 共33页
C语言编程基础习题答案.docx_第2页
第2页 / 共33页
C语言编程基础习题答案.docx_第3页
第3页 / 共33页
C语言编程基础习题答案.docx_第4页
第4页 / 共33页
C语言编程基础习题答案.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

C语言编程基础习题答案.docx

《C语言编程基础习题答案.docx》由会员分享,可在线阅读,更多相关《C语言编程基础习题答案.docx(33页珍藏版)》请在冰豆网上搜索。

C语言编程基础习题答案.docx

C语言编程基础习题答案

《C语言编程基础(第2版)》习题答案

前言

《C语言编程基础(第2版)》每章后面都安排了一定数量的习题,这有利于读者理解、消化和掌握各单元的学习内容。

习题中,除了有填空题、选择题、回答问题等适合掌握基本概念的题型外,大部分是分析程序运行结果和要求编写实用程序,这有利于读者训练编程技巧和增强编程能力。

应广大读者要求,特别是一线教学老师的要求,我们给出全部习题答案,供读者参考。

编程答案只是实现题目算法要求的一种,并不一定是最好的。

希望读者自己多做思考,利用多种方法进行编程,用以提高自己的程序设计水平和锻炼自己的创新能力。

由于作者水平所限,错误和不当之处在所难免,恳请批评指正。

习题一

1、填空题。

⑴C语言程序由__函数__组成,其中必须有且只能有一个名为_main__的函数。

C程序的执行从___名为main的主__函数开始。

⑵每个C语句必须以__分__号结束。

⑶标识符只能由_英文字母_、__数字_和_下划线__三类符号构成,而且标识符的第一个字符必须是__英文字母__或__下划线__。

⑷关键字是指___C语言编译系统所固有的、具有专门意义的标识符___。

⑸C程序中,注释的内容应放在__/*_和_*/__符号之间。

2、选择题。

⑴下面合法的C语言标识符是___C___。

⑵C语言中主函数的个数是___A______。

⑶以下有关注释的描述中,错误的是___C___。

⑷C程序中,main函数的位置____D___。

3、指出并改正下面程序中的错误。

⑴main应为main()

⑵应在本程序最后加上大括号}。

⑶语句结束应有分号。

如:

inta,b;

a=1;b=2;

printf("%d",a+b);

4、分析下列程序,写出运行结果。

⑴该程序是计算两个整数a和b的乘积并赋值给c,运行结果为:

c=30

⑵该程序输出一个字符串和一排星号,运行结果为:

Hello!

*****************

5、编程题。

⑴按题目要求,编写输出固定信息的程序如下:

main()

{

pt();

printf("Welcome!

");

pt();

}

pt()

{

printf("*****************");

}

⑵按题目要求,编写输入数据输出其表达式的程序如下:

main()

{

inta,b,c;

scanf("%d",&a);

scanf("%d",&b);

c=a*b+10;

printf("c=%d",c);

}

习题二

1、单项选择题。

⑴C语言中的变量名只能由字母、数字和下划线组成,且第一个字符_C_。

⑵合法的常量是__D___。

⑶C语言中的基本数据类型所占存储空间长度的顺序是__D___。

⑷下列符号串中与123.0相同的合法常量是__C___。

2、填空。

⑴C语言中的基本数据类型包括____整型(int)_、____浮点型(flot)__和_字符型(char)_三种。

⑵整型常数有_十进制整数_、_八进制整数_和_十六进制整数_三种表示形式;整型变量可分为四类:

_一般整型(int)_、_短整型(short)_、_长整型(long)_、_无符号型_。

其中_无符号型_又可分为_无符号整型(unsignedint)、_无符号短整型(unsignedshort)和_无符号长整型(unsignedlong)_3种。

⑶有10个用指数形式表示的符点常数:

请指出合法的有___③④⑥⑧⑩___。

⑷在C中,没有专为存贮字符串的变量,但可以用__字符型数组__或__字符型指针变量_存贮字符串。

其定义格式为_charstr[6];_和_char*a;_。

⑸数据类型混合运算时,要进行同型转换,转换方式分为__自动转换(隐式转换)__和__强制转换(显式转换)__两种。

3、写出下列程序运行结果。

⑴215/9=23…8

⑵97b

⑶4.000000

4、编写程序。

⑴按题目要求编写求三个已知数的乘积,程序如下:

main()

{

inta,b,c;

a=19;

b=22;

c=650;

printf("a*b*c=%d\n",a*b*c);

}

⑵按题目要求,编写将值整数化后赋值的程序如下:

main()

{

inta1,a2;

floatb,c;

b=35.425;

c=52.954;

a1=(int)(b*c);

a2=(int)c%(int)b;

printf("a1=%d;a2=%d\n",a1,a2);

}

⑶按题目要求,编写计算圆周长、面积和圆柱体积的程序如下:

main()

{

intr,h,c,s,v;

r=15;

h=3;

c=2*3.14*15;s=3.14*r*r;v=s*h;

printf("c=%d,s=%d,v=%d\n",c,s,v);

}

习题三

1、填空题。

⑴设有intx=11;则表达式(x++*1/3)的值是_____3____。

⑵已知数学表达式y=x²-2x+5,写出对应的C语言表达式_y=x*x-2*x+5_。

⑶已知a=10,则表达式x=(a=a+b,a-b)的值为__x=10__。

2、选择题。

⑴在C语言中,下列运算符的操作数必须是int类型的运算符是(D)。

⑵假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为(A)。

⑶已定义intm=6,n=5;,则执行m%=n-1;之后,m的值是(B)。

⑷已有inta=1,b=1;则执行b=(a=2*3,a*5),a+7之后,a,b的值是(B)。

⑸已有intx=2,y=1;则执行x++==y--;的结果是(D)。

3、求下面算术表达式的值。

⑴2.500000

⑵3.500000

4、分析下列程序,写出运行结果。

⑴注意,在C语言中,因为函数调用中参数按从右到左的顺序求值,因此该程序执行打印输出的结果为:

311

⑵该程序在计算条件表达式的值赋给a时,其x值已为6,y值已为7,因此运行结果为:

a=7,b=0,c=6

⑶该程序利用运算符与结合性的优先级不同,而取得a与b的值。

(因为该题使用了逻辑运算符,可在学了第5章以后再详细分析)运行结果如下:

a=2,b=1

⑷该程序应用复合的赋值运算符和从右至左结合性的运算规则,求取n的值,运行结果如下:

n=28

⑸该程序在执行语句“y=x++-1;”时,y为0而x在执行后变为2;在执行语句“z=--y+1;”时,z为0而y便成了-1。

运行结果如下:

x=2,y=-1,z=0

5、编程题。

⑴用符号常量编写简单计算程序如下(复杂应用应在第9章学习后再做):

#defineN12

#defineM25

main()

{

floatc;

printf("N+M=%d\n",N+M);

printf("N-M=%d\n",N-M);

printf("N*M=%d\n",N*M);

c=(float)N/M;

printf("N/M=%f\n",c);

}

⑵查看i++与++j运算结果差异的程序,编写如下:

main()

{

inti=20,j=20;

printf("i++:

%d\n++j:

%d\n",i++,++j);

}

⑶查看m--与--n运算结果差异的程序,编写如下:

main()

{

intm=20,n=20;

printf("m--:

%d\n--n:

%d\n",m--,--n);

}

习题四

1、单项选择题。

⑴下列叙述不正确的是__B__。

⑵当输入数据为12345678时,下面程序运行的结果是__C___。

⑶putchar函数可以向终端输出一个__D___。

⑷按格式输出的格式符__C__。

2、回答问题。

⑴在键盘上输入数据格式如下:

12,24,Aa□2.58□-2.58□1□68.5↙

(□代表空格,其中数据1是为了对付%*f占位,↙代表回车)

⑵该题是求输入任意两个整数a与b的和。

若读入a=b=5,其运行结果为:

typeanumberplease!

a=?

5↙

typeanotherplease!

b=?

5↙

asumbis10

3、写出下列程序的执行结果。

⑴执行结果:

32767,-32768

2147483647,-2147483648

65535,0

⑵执行结果:

yes,Iamcomputer.

⑶执行结果:

a\b’□□□□□tw

123

⑷执行结果:

58.887299,555.677979

58.887299□□□,555.677979

□□58.887,□555.678,58.887,555.678,58.887299,555.677979

5.88873e+01,□□□5.6e+02

B,66,102,42

7567890,34675022,7a12

11232,25740,2be0,11232

COMPUTER,□□ABC

4、编写程序。

⑴对输入的大写字母改用小写输出的程序,编写如下:

#include

main()

{

charc;

printf("输入一个大写字母:

\n");

c=getchar();

putchar(c+32);

}

⑵计算三门课总成绩等数据的程序,编写如下:

#include

main()

{

floata,b,c,sum,ave,mod;

printf("输入三门课程的成绩:

\n");

scanf("%f%f%f",&a,&b,&c);

sum=a+b+c;

ave=(a+b+c)/3;

mod=fmod(sum,3);

printf("总成绩=%5.1f,平均成绩=%5.1f,总成绩除3的余值=%3.1f\n",sum,ave,mod);

}

⑶已知数据,按输出结果的要求编写输出程序如下:

main()

{

inta=1,b=2,c=3,g=12345;

floatd=7.2,e=-5.5,f=1.56;

longh=123456;

chari='o',j='p';

printf("a=%db=%dc=%d\n",a,b,c);

printf("d=%f,e=%f,f=%f\n",d,e,f);

printf("d+e=%4.2fe+f=%4.2fd+f=%5.3f\n",d+e,e+f,d+f);

printf("g=%7dh=%ld\n",g,h);

printf("i=%cor%d\nj=%cor%d\n",i,i,j,j);

}

习题五

1、单项选择题。

⑴C语言用__C__表示逻辑量为“假”

⑵要求当A的值为奇数时,表达式的值为“真”;A的值为偶数时,表达式的值为“假”。

以下不满足要求的表达式是__D__。

⑶在if语句的嵌套中,else总是与__C__配对。

⑷下面对for循环概念描述正确的是__D__。

2、填空题。

⑴switch后面的“表达式”,通常为_整_型或_字符_型表达式;每个case的常量表达式的值__不能相同__。

⑵如果不算goto语句构成的循环结构,那么C语言可以构建循环的语句一共有_3_种,分别是__for循环、while循环、do-while循环__。

⑶continue语句与break语句在使用时,有两点主要的不同:

①它不适用于_switch_语句;②它跳转时是__跳过循环体中下面的语句从下一次循环开始__。

⑷把下面的两条if分支语句合并成一条if分支语句应该写成:

if(x>=y)printf(”m=%d\n”,m=2);

elseprintf(”n=%d\n”,n=1);

3、指出以下程序的打印结果。

该程序运行结果如下:

x=11y=10

x=55y=10

x=8y=10z=10

x=2y=2

x=3y=3

x=4y=4

x=5y=5

x=6y=6

x=7y=7

x=8y=8

x=9y=9

x=2y=2

x=1y=1000

x=2y=100

x=3y=10

4、编写程序。

⑴按要求,用两种循环方式编写相关程序如下:

⑴-①的for循环

#include

main()

{

intr;

floatv;

for(r=1;r<=100;r+=2)

{

v=4/3*3.14*pow(r,3);

printf("r=%d,v=%f\n",r,v);

}

}

⑴-①的while循环

#include

main()

{

intr;

floatv;

r=1;

while(r<=100)

{

v=4/3*3.14*pow(r,3);

printf("r=%d,v=%f\n",r,v);

r+=2;

}

}

⑴-②的for循环

main()

{

ints,i;

s=0;

for(i=13;i<=103;i+=10)s=s+i;

printf("s=%d\n",s);

}

⑴-②的while循环

main()

{

ints,i;

s=0;

i=13;

while(i<=103)

{

s+=i;

i+=10;

}

printf("s=%d\n",s);

}

⑵找出学生成绩中的最高分和最低分的程序,编写如下:

main()

{

intmax,min,n;

printf("请输入成绩,-1结束:

");

scanf("%d",&n);

max=min=n;

while(n!

=-1)

{

if(n>max)max=n;

if(n

scanf("%d",&n);

}

printf("最高分:

%d,最低分:

%d\n",max,min);

}

⑶输出“水仙花数”的程序,编写如下:

#include

main()

{

intn,a,b,c;

for(n=100;n<=999;n++)

{

a=n/100;

b=n%10;

c=(n%100-b)/10;

if(pow(a,3)+pow(b,3)+pow(c,3)==n)printf("%d\n",n);

}

}

习题六

1、填空题。

⑴数组是一组具有相同___类型__的数据的集合。

⑵如果一个数组的长度为10,则该数组中数组元素下标的最小值为_0_,最大值为_9_。

⑶若有inta[]={10,20,30,40};则数组a的长度为__4__。

⑷在C语言中,没有字符串变量,字符串的存储是通过__字符数组__来实现的。

⑸strlen函数的功能是__测试字符串的长度__,strcmp函数的功能是__比较两个字符串的大小__。

2、选择题。

⑴定义一个有100个元素的int型数组,下面正确的语句是__D__。

⑵下面正确的对数组b进行初始化的语句是__C__。

⑶在C程序中,引用一个数组元素时,其下标的数据类型允许是__D__。

⑷下面语句中正确的是___A__。

⑸若有定义:

charstr[]="Hello";则数组str所占的空间为___B__。

3、分析下列程序,写出运行结果。

⑴该程序通过for循环为数组元素自动赋值,然后输出。

运行结果如下:

a[0]=1

a[1]=2

a[2]=3

a[3]=4

a[4]=5

a[5]=6

a[6]=7

a[7]=8

a[8]=9

a[9]=10

⑵该程序定义并初始化了a、b、c三个数组,然后分别输出各数组的各个元素,用来验证初始化的结果。

运行结果如下:

数组a:

1020304050

数组b:

12300

数组c:

0123

⑶该程序通过gets()函数为字符数组接收字符,然后输出各元素。

运行结果如下:

abc↙(输入的字符)

str[0]=a

str[1]=b

str[2]=c

4、编写程序。

⑴对输入一组数进行相关统计的程序,编写如下:

main()

{

inti,num[10];

intmax,min,sum=0;

floataverage;

clrscr();

printf("输入10个数:

\n");

for(i=0,i<10;i++)

{

scanf("%d",&num[i]);/*输入数值*/

sum+=num[i];/*累加求和*/

}

average=(float)sum/10;/*求平均值*/

max=min=num[0];

for(i=1;i<10;i++)

if(num[i]>max)max=num[i];/*求最大值*/

elseif(num[i]

printf("最大值=%d\n",max);

printf("最小值=%d\n",min);

printf("10个数的和为:

%d\n",sum);

printf("平均值为:

%6.2f",average);

}

⑵求素数的程序编写如下:

main()

{

inti,j,k,m=0;

clrscr();

for(i=2;i<=100;i++)

{k=0;

for(j=2;j<=i-1;j++)

if(i%j==0)

{k=1;break;}

if(k==0)

{printf("%4d",i);

m=m+1;

if(m%8==0)

printf("\n");

}

}

}

⑶判断一个浮点数是否在一个浮点型数组中的程序,编写如下:

main()

{

inti,exist;

floata[4],n;

printf("输入浮点型数组:

\n");

for(i=0;i<4;i++)

{

printf("a[%d]=",i);

scanf("%f",&a[i]);

printf("\n");

}

printf("输入一个浮点数:

");

exist=0;

scanf("%f",&n);

for(i=0;i<4;i++)

{

printf("a[%d]=%f;\n",i,a[i]);

if(a[i]==n)exist=1;

}

if(exist==1)printf("%f在数组中。

\n",n);

elseprintf("%f不在数组中!

\n”,n);

}

此题前面的浮点型数组的值,也可通过初始化直接赋值的办法得到。

⑷输出二维数组中最大值及位置的程序,编写如下:

main()

{

inti,j,row=0,col=0,max;

inta[4][6];

for(i=0;i<4;i++)

for(j=0;j<6;j++)

scanf(“%d”,&a[i][j]);

max=a[0][0];

for(i=0;i<4;i++)

for(j=0;j<6;j++)

if(a[i][j]>max)

{max=a[i][j];row=i;col=j;}

printf(“max=%d,row=%d,col=%d\n”,max,row,col);

}

⑸在字符串中的指定位置插入字符串的程序,编写如下:

main()

{

charch1[10],ch2[3],ch3[13];

inti=0,n;

printf("输入字符串1(长度为10):

\n");

scanf("%s",ch1);

printf("输入字符串2(长度为3):

\n");

scanf("%s",ch2);

printf("插入位置n(n<10):

\n");

scanf("%d",&n);

n--;

for(i=0;i

for(i=n;i

for(i=n;i<10;i++)ch3[i+3]=ch1[i];

printf("%s",ch3);

}

习题七

1、填空题。

⑴C语言函数分成__系统提供的库函数__和__用户自定义函数_两大类。

⑵一个C程序由主函数和若干__个自定义函数__组成,各个函数在程序中的定义是__相互独立__的。

⑶函数的递归调用是指__函数直接或间接地调用自己__。

⑷当__用数组名__作函数参数时,实参与形参的传递为“地址传递”。

⑸根据变量的作用范围的不同,可将变量分为_局部_变量和_全局_变量。

根据变量生存期的不同,可以将变量分为__动态存储__变量和__静态存储__变量。

⑹static变量的特点是__其值始终存在__。

2、选择题。

⑴如果一个函数有返回值,那么这个函数只有__A__个返回值。

⑵下面关于空函数的定义,正确的是___B___。

⑶以下错误的描述是__C___。

⑷调用一个不含return语句的函数,以下正确的说法是___D___。

⑸下面函数调用语句中含有实参的个数为___C___。

⑹数组名作函数参数时,实参传递给形参的是__B___。

3、指出并改正下面程序在函数定义或调用中的错误。

⑴被调函数f(x)定义时对形式参数x未做参数说明。

应改为:

f(intx)

或:

f(x)

intx;

⑵函数调用时,实际参数的类型应与被调函数形式参数的类型相一致。

本题在主函数中的整型变量a应改为浮点型:

inta;改为floata;

⑶被调函数f()定义时不需要加分号,f();应改为:

f()

⑷在C程序中,不能在一个函数的函数体内定义另一个函数。

该题在主函数中定义f()为空值类型且作为一个语句是错误的。

应去掉voidf();

4、分析下列程序,写出运行结果。

⑴主函数以a=2为实参调用f(x)函数,f(x)通过return语句向主函数返回y的值赋给b,结果应为:

b=4

⑵在该程序中实参变量a、b和形参变量x、y分别占用不同的存储单元,虽然在swap函数中x、y的值发生了交换,但主函数中a、b的值却没有改变。

运行结果应为:

a=1↙

b=2↙

x=2,y=1

a=1,b=2

⑶全局变量x初始化为1,调用被调函数f()执行一次x++,然后再执行x++后输出x值应为:

x=3

⑷x为定义在整个函数体和复合语句内的同名自动变量,其作用域不同。

intx=20;定义在复合语句中,只在复合语句中有效。

运行结果如下:

x=20x=11

⑸执行被调函数,将原数组元素初值分别加1,因此输出结果为:

num[0]=2

num[1]=3

num[2]=4

num[3]=5

num[4]=6

5、编写程序。

⑴该题目要求使用判断奇偶数函数,编写程序如下:

main()

{

intn;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1