习题解析与答案
第1章C语言概述
一.简答题
1.概述C语言的主要特点。
【解答】
(1)语言简洁、紧凑,使用方便、灵活。
(2)数据类型丰富,表达能力强。
(3)运算符多样。C语言中的运算符包含的范围非常广泛。
(4)具有结构化的控制语句。如if…else语句、while语句、dowhile语句、switch语句、for语句。
(5)允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进行访问
操作。
(6)所生成的目标代码质量高,可移植性好。
2.构成C语言程序的基本单位是什么?它由哪几部分组成?
【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。
3.C语言程序的运行一般要经过哪几个步骤?
【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。
二.运行程序写结果
1.输入下面程序并运行。
main()
{
inta1,a2,x;
a1=100;
a2=50;
x=a1-a2;
printf(″x=%d\n″,x);
}
【解答】运行结果为:x=50
2.输入下面程序并运行。
main()
{
inta1,a2,x;
a1=10;
a2=20;
x=a1*a2;
printf(″a1=%d,a2=%d\n″,a1,a2);
printf(″x=%d\n″,x);
}
【解答】运行结果为:a1=10,a2=20
x=200
3.输入下面程序并运行。
#include<stdio.h>
main()
{
printf("******\n");
printf("*****\n");
printf("****\n");
printf("***\n");
printf("**\n");
printf("*\n");
}
【解答】运行结果为:******
*****
****
***
**
*
思考:可以修改程序,使之输出平行四边形,等腰三角形等图形。
三.编程题
1.参照本章例题,编写一个C程序,用于显示如下信息:
*************************
IloveCprograms!
*************************
【分析与提示】
①要有文件包含语句#include<stdio.h>。C语言中没有数据的输入、输出等功能,数据的输入、输出都是通过调用系统提供的库函数scanf和printf等来实现的。这些函数的说明都包括在stdio.h文件中。
②main是主函数的名称。用{}括起来的内容是函数体,函数体由若干条语句组成,这是计算机要执行的部分,每条语句以分号“;”结束。
③注意显示的信息有三行,所以要用到换行符“\n”。
参考代码:
#include<stdio.h>
main()
{
printf("************************\n");
printf("IloveCprograms!\n");
printf("************************\n");
}
第2章 数据类型及其运算
一.简答题
1.C语言中的数据类型主要有哪几类?
【解答】短整型(shortint)
整型整型(int)
长整型(longint)
基本类型字符型(char)单精度(float)
实型(浮点型)
双精度(double)
枚举类型(enum)
数组类型
构造类型结构体类型(struct)
共用体类型(union)
指针类型
空类型(void)
2. 字符常量与字符串常量有什么区别?
【解答】字符常量用单括号括起,字符串常量用双括号括起;字符常量存储时占1个字节,字符串常量存储时除了n个字符外,还有系统加上的字符串终止符\0,所以字符串常量存储时占n+1个字节。
3. C语言中的常量包括哪几类?各自是如何构成的?
【解答】C语言中的常量是一些其值预先定的量,并且在程序执行过程中其值不再发生变化。常量的分类遵循基本数据类型分类原则,C语言编译系统自动将其存放在于类型相应的内存单元中。其类别包含整形常量、浮点常量、字符常量、字符串常量和枚举常量。整形常量又分为十进制整形常量、八进制整形常量、十六进制整形常量。浮点常量分成十进制形式和指数形式。C语言中的,字符常量是用单括号括起来的一个字符或是字符序列,而字符串常量是用一对双括号括起来的零个或者多个字符组成的序列。
4. 简述指针、变量的指针、变量的值、指针变量与指针变量的值的含义是什么?
【解答】C语言中将地址又称为“指针”。一个变量所分配的内存空间首字节地址,称为该变
量的指针(地址),变量的值就被放入所分配的地址单元中。地址一旦被分配,就不会再改变,所以,指针是一个常量。既然是常量就可以把它赋给一个变量。用来存放指针的变量,被称为指针变量。一个指针变量的值是变量的地址,一个指针变量可以被赋予不同的指针值。
5. 下面哪些是不合法的常量?说明不合法的理由。
123,3.1415926,0892,’M’,’\n’,0xabc,0.618E-6,”Morning”,3.8e-3.14
【解答】非法常量有:
0892——含有非八进制数字8和9
3.8e-3.14——非法指数形式浮点常量:规定e后面的指数必须为整数。
6.下面对变量定义的语句哪些不正确?为什么?请改正。
(1)charc1,inta2;(2)INTa,b;FLOATx,y;(3)a,b:char;
(4)charif;指针变量的定义格式(5)inta,b(6)Inta:b:c;
(7)inta,x;floatx,y;
【解答】
(1)charc1,inta2;
错误。定义不同类型的变量时,应用分号彼此分开。
改正为:charc1;inta2;
(2)INTa,b;FLOATx,y;
错误。C语言中表示类型名的关键字必须小写。
改正为:inta,b;floatx,y;
(3)a,b:char;
错误。C语言中变量定义格式为:类型名变量名;
改正为:chara,b;
(4)charif;
错误。变量名不能与C语言的关键字重名。
改正为:charf1;
(5)inta,b
错误。变量定义以语句形式出现,应以分号结尾。
改正为:inta,b;
(6)Inta:b:c;
错误。类型名不能有大写字母,相同类型名之间用逗号分隔。
改正为:inta,b,c;
(7)inta,x;floatx,y;
错误。在同一程序位置上,同一变量名不能重复定义充当两个不同的变量。
改正为:inta,x;floatx1,y;
7. 下述字符串常量的长度是多少?在内存中存储时各自占用的单元数又是多少?
(1)“Hello!”(2)“ABC\n\\TH\064\?”(3)“\xAB*\765+123=?”
【解答】
(1)“Hello!”字符串长度为6,占用内存字节数为7。
(2)“ABC\n\\TH\064\?”字符串长度为9,占用内存字节数为10。因为其中\n\\\064\?各自只占一个字符的位置。
(3)“\xAB*\765+123=?”该字符串不是合法的,因为\765表示的值太大,超出合法的ASCII字符集的范围。
二.运行程序写结果
1.以下程序的执行结果是____。
main()
{
inti,j;
i=15;
printf(“%d,%d”,i++,i--);
}
【解答】14,15
2.以下程序的执行结果是。
main()
{
inta=20,b=10,c,*p1,*p2;
p1=&a;
p2=&b;
c=(-*p1)/(*p2)+6;
printf("a=%d,b=%d\n",a,b);
printf("*p1=%d,*p2=%d\n",*p1,*p2);
printf("c=%d\n",c);
}
【分析与提示】
p1 a
P2b`
【解答】a=20,b=10
*p1=20,*p2=10
c=4
3.以下程序的执行结果是。
#include<stdio.h>
main()
{
chara=’G’,b=’o’,c=’o’,d=’d’;
a=a+32;
b=b-6;
c=c+3;
d=d+8;
printf("%c%c%c%c\n",a,b,c,d);
}
【分析与提示】从ASCII代码表可以看出,字符“G”、“o”、“o”、“d”的ASCII代码值为71、111、101,因此,’G’+32、’o’-6、’o’+3、’d’+8的值分别是103、105、114、108,它们所对应的字符分别是“g”、“i”、“r”、“l”。
常用结论:
(1)在C语言中,字符数据可以按其ASCII代码值参加整数运算。由于英文字母在ASCII代码表中是按顺序排列的,所以在计算’o’+3代表的字母时,可从字符’o’其顺序向后取3个字母,该字母是“r”。
(2)从ASCII代码表可以看出“小写字母”-“对应大写字母”的结果是32,因此可推算出如下
等式:大写字母的ASCII值+32=对应小写字母的ASCII值;小写字母的ASCII值-32=对应大写字母的ASCII值。
【解答】girl
4.以下程序的执行结果是。
#include<stdio.h>
main()
{
intx;
x=-3+4*5-6;
printf("x1=%d\n",x);
x=3+4%5-6;
printf("x2=%d\n",x);
x=-3*4%-6;
printf("x3=%d\n",x);
}
【分析与提示】x1=11(4*5是20,-3+20是17,17-6等于11)
x2=1(4%5等于4,3+4等于7,7-6等于1)
x3=0(-3*4等于-12,-12%-6等于0)
【解答】x1=11
x2=1
x3=0
5.以下程序的执行结果是。
#include<stdio.h>
main()
{
printf("%d\n",NULL);
printf("%d,%c\n",49,49);
printf("%d,%c,%o\n",48+10,48+10,48+10);
}
【分析与提示】
0(NULL的ASCII码值是0)
49,1(数字1的ASCII码值是49)
58,:,72(48+10等于58,正好是“:”的ASCII码值,八进制表示是72)
【解答】0
49,1
58,:,72
三、改错题
1. 请修改下列程序,使其能够通过编译。
#include<stdio.h>
VoidMain()
{
inta=6;b=8;
intc;
c=a*b;
printf(‘%d’,c);
}
【答案】错误的地方有3处:(1)第2行关键字应该小写;(2)定义b时前面应该用逗号;(3)打印语句的格式应该用双引号括起来。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论