第一篇:C语言程序设计教程第五章练习题题目
单选题
1、关于数组的定义与初始化,下列哪一项是错误的()A.int arr[5] = {1,2,3,4,5};B.int arr[] = {1,2,3,4,5};C.int arr[5] = {1,2,3};D.int arr[5] = {1,2,3,4,5,6};
2、在定义数组intarr[10]后,下列选项中对arr的引用正确的是()A.arr[10] B.arr[6.3] C.arr(6)D.arr[0]
3、在C语言中,引用数组元素时,其数组下标的数据类型允许是()A.整型常量 B.整型表达式
C.整型常量或整型表达式 D.任何类型的表达式
4、若intarr[5] = {1,2,3};则arr[2]的值为()A.1 B.2 C.3 D.null
5、在执行intarr[][3] = {1,2,3,4,5,6}:语句后,arr[1][0]的值为()A.4 B.1 C.2 D.5
6、关于二维数组,下列选项能正确定义并赋初值的是()A.int n = 5,b[n][n];B.int a[1][2] = {{1},{3}};C.int c[2][] = {{1,2},{3,4}};D.int a[3][2] = {{1,2},{3,4}};
7、阅读下列程序段: char s[18] = “a book!”;printf(“%.4sn”, s);其输出结果为()A.a book!B.a book C.abo D.a
8、阅读下列程序:
int a[4][4] = { { 1, 3, 5, }, { 2, 4, 6 }, { 3, 5, 7 } };
printf(“%d%d%d%dn”, a[0][0], a[1][1], a[2][2], a[3][3]);正确的输出结果为()A.0650 B.1470 C.5430 D.输出值不定
9、阅读下面程序: int i;
int x[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };for(i = 0;i<4;i++)
printf(“%3d”, x[i][3-i]);下列选项中哪一项是正确的输出结果()A.1 5 9 13 B.1 6 11 16 C.4 7 10 13 D.4 8 12 16
10、下列描述中不正确的是()。A.字符型数组中可以存放字符串
B.可以对字符型数组进行整体输入、输出 C.可以对整型数组进行整体输入、输出
D.不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值
11、以下定义语句中,错误的是()。A.int a[]={1,2};B.char *a[3];C.chars[10]=“test”;D.int n=5,a[n];
12、下列选项中,合法的数组定义是()。A.int a[]=“string”;B.int a[5]={0,1,2,3,4,5};C.char s=“string”;D.chara[]={0,1,2,3,4,5};
13、int类型变量在内存中占用四个字节,其有定义:int x[10]={0,2,4};那么数组x在内存中所占字节数是()。A.3 B.10 C.12 D.40
14、C语言中数组下标的下限是()。A.1 B.0 C.视具体情况 D.无固定下限
15、以下程序的输出结果是()。void main(){
} int i, a[10];for(i=9;i>=0;i--)a[i]=10-i;printf(“%d%d%d”,a[2],a[5],a[8]);A.258 B.741 C.852 D.369
16、若有以下说明:
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a',d,g;那么数值为4的表达式是()。A.a[g-c] B.a[4] C.a['d'-'c'] D.a['d'-c]
17、C语言中数组名作为参数传递给函数,作为实在参数的数组名被处理为()。A.该数组的长度 B.该数组的元素个数 C.该数组中各元素的值 D.该数组的首地址
18、当调用函数时,实参是一个数组名,则向函数传送的是()。A.数组的长度 B.数组的首地址
C.数组每一个元素的地址 D.数组每个元素中的值
19、以下程序的输出结果是()。void main(){ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};printf(“%d%d%d%dn”,a[0][3],a[1][2],a[2][1],a[3][0];} A.0650 B.1470 C.5430 D.输出值不定
多选题
1、关于数组类型的定义,下列描述中正确的是()A.数组的大小一旦定义就是固定的 B.一个数组中的各元素类型可以不一样 C.数组的下标类型为整型 D.数组元素的下标从1开始
2、下面对数组描述正确的是()A.数组的长度是不可变的
B.数组不能先声明长度再不赋值 C.数组只能存储相同数据类型的元素 D.数组没有初始值
判断题
1、在C语言中,只有一维数组和二维数组()。
2、数组的索引是从1开始的()。
3、数组属于构造类型的数据()。
4、数组名的命名较为特别,它不符合标识符的命名规范()。
5、数组在初始化时不可以只赋值一部分,必须全部赋值初始化()。
6、对于一维数组,例如intarr[3];则arr[2]表示数组的第2个元素()。
7、数组的下标范围是0-[数组长度-1]()。
8、二维数组进行定义与初始化时,行下标与列下标均不能省略()。
9、在程序设计中,一组具有相同数据类型的变量集合称为数组()。
10、数组元素的下标用于表示元素在数组中的位置序号,该下标是从1开始的()。
11、数组元素下标的个数也称为维数,根据维数的不同,可将数组分为一维数组、二维数组、三维数组、四维数组等()。
12、一维数组指的是只有一个下标的数组,用来表示一组具有相同类型的数据()。
13、数组初始化的常见方式有三种:直接对数组中的所有元素赋值、只对数组中的一部分元素赋值、对数组全部元素赋值但不指定长度()。
14、数组中的元素可以通过数组名和下标来引用()。
15、数组的下标都有一个范围,即“0 ~ 数组长度”()。
16、初始化二维数组时,如果对全部数组元素置初值,则二维数组的第一个下标可省略,但第二个下标不能省略()。
填空题
1、C语言中数组名代表数组的()地址。
2、数组是一组具有()类型的数据的集合。
3、对于二维数组intarr[3][4],其中3为()下标,4为()下标。
4、若定义二维数组intarr[5][6];则数组的列下标的取值范围为()。
5、二维数组是通过数组名和()来引用其元素的。
6、C语言中数组必须先()再使用。
7、二维数组的定义格式为()。
8、一维数组指的是只有一个()的数组,用来表示一组具有相同类型的数据。
9、数组的下标是用()括起来的,而不是圆括号。
10、假设定义一个3行4列的二维数组,那么共包含()个元素。
11、二维数组同一维数组一样,也是通过()和下标的方式来引用数组元素。
12、假设定义数组int a[3][4],数组a可用的行下标范围是(),列下标范围是()。简答题
1、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。void main(){ int i;chararr[5] = { 'h', 'e', 'l', 'l', 'o' };for(i = 0;i < 5;i++)
printf(“%c”, arr[i]);}
2、请阅读下面的程序,在空白处填写正确的代码,只打印出数组偶数位上的元素。int main(){ int i;intarr[8] = { 1, 0, 1, 0, 1, 0, 1, 0 };for(i = 0;i < 8;i++){
;
printf(“%dn”, arr[i]);} return 0;}
3、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。void main(){ floatarr[6] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 };inti,t;t = arr[0];for(i = 0;i < 5;i++)
arr[i] = arr[i + 1];
arr[5] = t;for(i = 0;i < 6;i++)
printf(“%-6.2f”, arr[i]);}
4、请阅读下面的程序,在空白处填写正确的代码,输出数组中最大元素的下标。int main(){ int i, p;intarr[] = { 1,-3, 0,-9, 8, 5, 20, 3 };for(i = 0, p = 0;i < 8;i++){
if()
;} printf(“p = %dn”, p);return 0;}
5、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:删除字符串s中的所有数字字符。void dele(char *s){ int n=0,i;for(i=0;s[i];i++)
if(_______)
s[n++]=s[i];s[n]=_______ }
6、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:在一个初始化数组中查找与x相同的元素,如果找到就将该元素置为-x。void main(){ int a[]={8,4,2,7,3,9},i,x;scanf(“%d”,&x);for(i=0;_______;i++)
if(a[i]==x)
_______ for(i=0;i<6;i++)
printf(“%d ”,a[i]);}
7、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:计算str所指字符串的长度,并作为函数值返回。intmystrlen(char *str){ int i;for(i=0;_______!=' ';i++);
return _______;}
8、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:在5个数中,找出最大的元素及位置。#define size 5 void main(){ int a[size]={4,6,3,9,23};intmax,p,i;_______
} p=0;for(i=1;i
max=a[i];
_______ }
9、请阅读下面的程序,在空白处填写正确的代码,该程序的功能是:对N个数用直接插入排序法进行由小到大排序。
#define N 10 //待排序元素的个数
void insertsort(int R[N+1])//直接插入排序 { inti,j;for(i=2;i<=N;i++){
R[0]=R[i];//设置监视哨
j=i-1;
while(_______)
{
R[j+1]=R[j];
_______
}
R[j+1]=R[0];} }
10、定义一个大小为10的char类型数组,从键盘输入其元素,然后将其倒序输出。
11、定义一个大小为10的int类型数组,从键盘输入其元素,然后将其从小到大排序后输出。
12、定义一个大小为10的int类型数组,从键盘输入其元素,然后输出其中最大值。
13、定义一个二维数组intarr[3][4] = {12,2,45,36,2,10,86,0,54,666,58,400};将数组中的元素按每一行每一列输出;
14、有一个二维整型数组,每一行都有一个最大值,编程求出每一行的最大值;
15、请简要说明如何定义一个一维数组并为之赋值。16请简要说明一维数组与二维数组的区别。17简要描述数组有哪些特点。18请简述什么是数组。
19请简述什么是多维数组的维数。
第二篇:C语言程序设计教程第一章练习题题目
单选题
1、下列语言中不属于计算机语言的三大类的是(C)。A.机器语言 B.汇编语言 C.脚本语言 D.高级语言
2、下列说法中不正确的是(C)
A.计算机语言大致可分为三大类,即机器语言、汇编语言和高级语言
B.C语言是一种通用的、过程式的编程语言,具有高效、灵活、可移植等优点 C.C语言属于汇编语言
D.高级语言比汇编语言更贴近于人类使用的语言,易于理解、记忆和使用
3、以下开发工具中不属于主流的开发工具的是(B)A.Visual Studio B.Xcode C.Code::Block D.Eclipse
4、下列选项是对主流开发工具的介绍,其中错误的是(B)
A.Visual Studio支持C/C++、C#、F#、VB等多种程序语言的开发和测试 B.Code::Block是一个免费的跨平台IDE,支持C、C++和Fortan程序的开发 C.Eclipse是一种被广泛使用的免费跨平台IDE,最初由IBM公司开发 D.Vim是一款功能非常强大的IDE(和其他IDE不同的是,Vim本身并不是一个用于开发计算机程序的IDE,而是一款功能非常强大的文本编辑器,它是UNIX系统上Vi编辑器的升级版。)
5、下列选项中,不属于开发一个C语言应用程序的具体实现步骤的是(A)A.启动开发工具 B.添加源文件 C.编写代码 D.运行程序
6、下列选项中,关于main()函数叙述不正确的是(C)
A.一个完整的C语言程序中,有且只能有一个main()函数
B.main()函数是程序的主入口,程序总是从main()函数开始执行 C.如果没有声明main()函数,程序将从第1行开始执行 D.main()函数可以有返回值,也可以没有返回值
7、下面程序中,合法的选项是(D)
A.#includeint main(){ printf(“hello worldn”);return 0;} B.#includeint man(){ printf(“hello worldn”);return 0;} C.#includeint main(){ printf(“hello worldn”)return 0;} D.#includeint main(){ print(“hello worldn”);return 0;}
8、下面程序中,运行结果为“1,2”的是(A)
A.#includeint main(){ int a = 1;int b = 2;printf(“%d %dn”,a,b);return 0;} B.#includeint main(){ int a = 1;int b = 2;printf(“%d,”a);printf(“%dn”,b);return 0;} C.#includeint main(){ int a = 1, b = 2;printf(“%d,%dn”,a,b);return 0;} D.#includeint main(){ int a = 1,a= b = 2;printf(“%d,%dn”,a,b);return 0;}
9、下列关于注释的描述中,错误的是(B)
A.C语言中的注释有两种类型:单行注释和多行注释 B.所有的注释都可以嵌套使用
C.单行注释用“//”符号表示,“//”后面为被注释的内容 D.多行注释以符号“/*”开头,以符号“*/”结尾
解析:在C语言中,有的注释可以嵌套使用,有的则不可以,例如:
多行注释“/*„*/”中可以嵌套单行注释“//”; 多行注释“/*„*/”中不能嵌套多行注释“/*„*/”。
10、下列关于注释的描述中,正确的是(C)
A.注释只在C语言源文件中有效,在编译时会被编译器忽略 B.注释只能对程序中的某一行代码进行解释 C.注释不可以嵌套使用
D.单行注释以符号“/*”开头,以符号“*/”结尾
11、C语言可执行程序的开始执行点是
(D)A.程序中第一条可执行语句 B.程序中第一个函数 C.程序中的main函数 D.包含文件的第一个函数
12、一个完整的C语言程序是
(B)A.要由一个主函数或一个以上的非主函数构成
B.由一个且仅由一个主函数和零个以上(含零)的非主函数构成 C.要由一个主函数和一个以上的非主函数构成 D.由一个且只有一个主函数或多个非主函数构成
13、以下说法正确的是(A)
A.c语言程序总是从第一个函数开始执行
B.在c语言程序中,要调用的函数必须在main()函数中定义 C.c语言程序总是从main()函数开始执行
D.c语言程序中的main()函数必须放在程序的开始部分
14、在c语言程序中,注释部分从哪开始,到哪结束?(D)A.从“(”开始到“)”结束 B.从REM开始无结束标志 C.无起始标志
D.从“/*”开始,“*/”结束
15、关于#include
D.stdio.h是标准输入输出头文件
16、关于printf(“hello worldn”);,下列描述中错误的是(C)A.printf()是格式化输出函数,用于输出信息 B.printf()括号中的内容为函数的参数
C.printf()括号中的内容会全部输出到控制台 D.n表示换行
17、关于注释,下列描述中错误的是(C)
A.注释只是对代码的解释说明,只在源文件中有效 B.注释可分为单选注释与多行注释 C.单选注释的符号为// D.多行注释间可以嵌套使用
18、下列是多行注释的符号是(D)A.// B./ C./* D./**/ 判断题
1、计算机不需要翻译就能直接识别的语言被称为汇编语言。()
2、C语言只适用于系统软件的开发。()
3、根据功能和实现方式的不同,C语言属于高级语言。()
4、Visual Studio仅支持C/C++语言的开发和测试。()
5、Visual Studio系列的IDE是跨平台的。()
6、在C语言程序中,以分号“;”作为结束标记的代码都可称为语句。()
7、注释在编译时也会被编译到程序中。()
8、/printf(“hello worldn”);*/ 是合法的注释。()
9、机器语言是由二进制数0和1组成的一串指令。()
10、汇编语言的可移植性较好。()
11、计算机语言可分为四大类:机器语言、汇编语言、脚本语言和高级语言。()
12、C语言属于机器语言。()
13、C语言的主流开发工具包括:Visual Studio、Code::Block、Eclipse、Vim。()
14、编写C语言程序的流程是:新建项目、添加源文件、编写代码、运行程序。()
15、C语言中的注释有两种类型:单行注释和多行注释。()
16、Visual Studio只支持C/C++程序语言的开发和测试。()
17、在C语言程序中,一个语句的结束用”;“来标记。()
18、注释会影响程序的运行。()
19、多行注释之间不能嵌套调用。()
填空题
1、根据功能和实现方式编程语言可分为三大类,分别是:(),(),()。
2、计算机语言主要由一些指令组成,这些指令包括()、符号和语法等内容。
3、计算机语言可分为三大类,即机器语言、汇编语言和()。
4、C语言中的注释有两种类型,分别单行注释和()。
5、单行注释用()符号表示。
6、注释在编绎时会被编绎器忽略,它只在C语言()文件中有效。简答题
1、简单介绍C语言的特点。
2、为了使下面的程序能够正常运行,请在空格处填写相应的代码。
3、请编写一个helloworld程序,要求如下:
4、请编写一个程序,实现两个变量a和b的求和操作,要求如下:
5、请阅读下面的程序,在空白处填写正确的代码,实现换行。
6、请阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果,否则请说明编译失败的原因。
7、请编写一个程序,在控制台输出一句话:中国欢迎你!
8、请编写一个程序,实现从键盘输入两个数据,然后将两个数据相加,结果输出到控制台上。
9、请简述C语言的特点。
10、请简述机器语言、汇编语言和高级语言。
第三篇:语言程序设计练习题 2
汇编语言程序设计练习题
一、单项选择题:在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.CPU要访问的某一存储单元的实际地址称()C
A.段地址
B.偏移地址
C.物理地址
D.逻辑地址
2.某存储单元的物理地址是12345H,可以作为它的段地址有()D
A.2345H
B.12345H
C.12340H
D.1234H 3.执行后使BX=0的同时也使CF=0,OF=0的指令是()A
A.XOR BX,BX
B.OR BX,BX
C.AND BX,BX
D.CMP BX,BX 4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是()B
A.CX≠0且ZF=1
B.CX≠0且ZF=0
C.CX≠0或ZF=1
D.CX≠0或ZF=0 5.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是()C
A.DAA校正指令的功能已自动加在AH中
B.进位值在AF中,校正后根据AF内容再加在AH中
C.进位值在CF中,校正后根据CF内容再加在AH中
D.进位值在AL最高位上,校正后根据AL最高位内容再加在AH中
6.AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是()C
A.指令XOR AX,AX执行后,AX内容不变,但设置了标志位
B.指令OR DX,1000H执行后,将DX最高位置1,其余各位置0
C.指令AND AL,OFH执行后,分离出AL低四位
D.NOT AX,执行后,将AX清0 7.在执行下列指令时,需要使用段寄存器DS的指令是()D
A.STOSW
B.ADD AL,CL
C.NEG BX
D.INC DA[BX] 8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是()B
A.ADD BH,01H
B.OR BH,01H
C.XOR BH,01H
D.TEST BH,01H 9.完成对CL寄存器的内容乘以4的正确操作是()C
A.ROL CL,1
B.MUL 4
ROL CL,1
C.SHL CL,1
D.MOV CL,2
SHL CL,1
SHL CL,CL 10.下面各传送指令中,正确的是()C
A.MOV [DI],[SI]
B.MOV[DX+DI],AL
C.MOV WORD PTR [BX],0100H
D.MOV AL,BX 11.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法()BD
A.名字的第一个字符可以是大写英文字母及小写英文字母
B.名字的第一个字符可以是字母、数字及、@、_
C.名字的有效长度≤31个字符
D.在名字中不允许出现$ 12.要实现使BETA的值为56,应采用语句为()C
A.BETA DB 56
B.BETA DB 56H
C.BETA EQU 56
D.BETA EQU 56H 13.REPZ CMPSW指令,重复执行的终止条件是()A
A.CX=0或ZF=0
B.CX=0且ZF=0
C.CX=0或ZF=1
D.CX=0且ZF=1 14.下面程序段执行后,AL中的内容是()B
MOV AX,8833H
ADD AL,AH
DAA
A.21
B.21H
C.0C1H
D.0DDH 15.比较两个带符号的数A、B,当A=B时程序转移,测试的条件为()A
A.ZF=1
B.ZF=0
C.SF=1
D.SF=0 16.检查二个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP AL,BL”指令后应跟的分支指令是()A
A.JNC LOP1
B.JA LOP1
C.JC LOP1
D.JGE LOP1 17.在下列串操作指令中,同时使用源串和目的串地址指针的指令是()D
A.STOSW
B.LODSW
C.SCASW
D.CMPSW 18.设AL=0AH,下列指令执行后能使AL=05H的是()C
A.NOT AL
B.AND AL,0FH
C.XOR AL,0FH
D.OR AL,0FH 19.DA1 DW‘AB’,‘CD’,‘EF’,‘GH’()D ┇
MOV AX,DA1+3 指令执行后AX中的内容是
A.‘EF’
B.‘CD’
C.‘BC’
D.‘FC’
20.使用DOS系统功能调用时,使用的软中断指令是()
A.INT 21
B.INT 10H
C.INT 16H
D.INT 21H
二、填空题请在每小题的空格中填上正确答案。错填、不填均无分。
1.十六进制数0FFF8H表示的十进制正数为________,表示的十进制负数为________。
2.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,[SI+COUNT]中,源操作数的有效地址EA为________,其物理地址为________。
3.CPU的标志寄存器中标志位,可以分为两大类,其中一类称为________标志位,另一类称为________标志位。
4.当标志位________=1时表示无符号数运算产生溢出,而当标志位________=1是表示带符号数运算产生溢出。
5.如JMP指令采用段间间接寻址,那么由4个相邻字节单元中存放有转移地址,其中前两个字节存放的是________,而后两个字节存放的是________。
6.在串操作程序中,通常在重复前缀指令REPZ或REPNZ后,选用的串操作指令是________或________才有实际意义。
三、简答题
1.已知:BX=1357H,DI=2000H,DS=2000H,CS=4000H,分别指出下面各指令中存储器操作数的物理地址。(1)MOV AL,[BX](2)MOV CS:[BX+DI],AH
2.0P1 DB 1,2 0P2 DW 3412H,5678H ┇
MOV AX,OP1+1;字单元(OP1+1)AX MOV BL,OP2+1;字节单元(OP2+1)BL 上述二条传送语句有语法错误,请根据注释字段的说明,将其改正。
3.下列语句在存储器中分别为变量分配多少字节?
(1)AD2 DW 10 DUP(?),10(2)AD3 DD 100 DUP(?)
4.简述下面两条指令分别是什么语法错误? MOV [BX],[SI] MOV AX,DL
四、程序分析题 1. MOV DL,AL NOT DL TEST DL,04H JE NEXT ┇ NEXT:„
若上述程序段执行时产生分支,说明AL中的数第几位一定为1?程序段执行后CF是多少?
2.DA1 DB‘ABCDEFGHI’ DA2 DB 9 DUP(0)
┇
LEA SI,DA1 LEA DI,DA2 MOV CX,9 CLD LOP: LODSB SUB AL,10H STOSB LOOP LOP...试问:①写出程序执行后DA2各字节中的数据。
②保持程序功能情况下,程序中 可否改写为
3.已知:BX=4567H NEG BX INC BX NEG BX DEC BX 程序段执行后,BX=________,CF=________。
4. MOV BL,64H MOV CL,03H XOR AX,AX AGAIN:ADD AL,BL ADC AH,0 DEC CL JNZ AGAIN 问:(1)该程序段完成的功能是:
(2)AX=________。
5.已知数据段中定义
DAT1 DB 12H,34H,56H,78H MOV CX,0 MOV AX,WORD PTR DAT1 MOV CL,DAT1+3 当程序段执行完后AX=________,CX=________。
6.DA1 DB 83H,72H,61H,94H,5AH ┇
MOV CX,WORD PTR DA1 AND CX,0FH MOV AL,DA1+3 SHL AL,CL 上述指令序列执行后,AL=_______,CL=_______。
五、程序填空题(本大题共2小题,每小题6分,共12分)
1.在NUMW单元存放有一个0-65535范围内的整数,将该数除以500,商和余数分别存入QU1和REM单元,请在空行处各填上一条指令完善该程序。
┇
MOV AX,NUMW _____________ XOR DX,DX DIV BX MOV QUI,AX _____________ 2.某程序欲用单个字符显示的2号功能调用去显示STRING中的字符串‘COMPUTER’(不显示字符‘$’!).试在空白处填上适当的一条指令。STRING DB‘COMPUTER’,‘$’
┇
MOV BX,0FFSET STRING LOP:MOV DL,[BX] MOV AH,02H INT 21H ____________________ ____________________ JNE LOP
六、编程序题
1.试编制一程序段,用串操作指令实现以DA_BY为首址的20H个字节单元中存放相同字符‘Y’(设DA_BY存储区已有ES指向)。
2.试编制一源程序,统计DA1字单元中含0的个数,如统计的个数为奇数,则将进位位置1,否则进位位清0。DATA SEGMENT DA1 DW XXXX DATA ENDS
汇编语言程序设计练习题答案
一、1、C;
2、D;
3、A;
4、B;
5、C;
6、C;
7、D;
8、B;
9、C;
10、C;
11、B;
12、C;
13、A;
14、B;
15、A
16、C;
17、D;
18、C;
19、D;20、B
二、1、+65528;-32760 2、20A8H;11488H
3、状态;控制
4、CF;OF
5、IP;CS
6、STOS;CMP
三、1、(1)21357H;(2)43357H
2、MOV AX,WORD PTR(OP1+1)MOV BL,BYTE PTR(OP2+1)
3、(1)22;(2)400
4、MOV指令不能在两个存储器操作数之间进行;
操作数类型不匹配
四、1、第2位;CF=0 2、123456789;不能更改
3、BX=4565H;CF=1
4、AX=012CH,将AX内容乘3送BX中
5、AX=3412H,CX=0078H
6、AL=0A0H,CL=03H
五、1、MOV BX,500 MOV REM,DX
2、INC BX CMP byte ptr [BX],24H
六、1、LEA DI,DA_BY MOV CX,32 MOV AL,‘Y’ CLD REP STOSB
2、CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,DA1 MOV CX,16 XOR BL,BL AGAIN: MOV AL,[SI] HL AL,1 JC NEXT INC BL NEXT:INC SI LOOP AGAIN TEST BL,01H JNE L1 CLC JMP DONE L1: STC DONE: MOV AH,4CH INT 21H CODE ENDS END START
第四篇:C语言程序设计教程课程设计
《C语言程序设计教程课程设计》计划 类别:课程设计
适用于三年制专科计算机应用专业 学分:1 周数:1
一、设计目的与要求
《高级语言程序设计课程设计》是《高级语言程序设计》课程的实践环节,其教学目的是通过一些中小规模程序的编程,使学生对c语言程序设计的基本规则与方法有比较全面的理解和认识,熟练掌握高级语言程序设计技术,为以后学习更高层次的程序设计和软件开发奠定坚实基础。
通过本课程设计,应达到下列基本要求: 能够结合c语言来理解程序设计的基本概念;
掌握用c语言解决问题的基本方法和步骤,能够熟练地使用c语言编写中小型应用程序; 熟练掌握c语言编程规则,掌握函数的应用方法和编写; 熟练掌握面向过程程序设计方法; 掌握结构化程序设计思想和方法; 培养和提高学生的程序调试能力;
培养学生查阅手册、图表和文献资料的能力; 培养学生撰写报告文档的能力。
二、课程设计题目
每个题目的限选人数根据班级总人数平均后确定,但要求同一题目的学生独立完成设计题目,以下10个题目任选其一。1。职工信息管理系统设计 1.1问题描述
试设计一职工信息管理系统,职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)1.2基本要求
1.系统以菜单方式工作(2.职工信息录入功能(3.职工信息浏览功能(4.查询和排序功能:(至少一种查询方式)--算法(((1)按工资查询((2)按学历查询等
5.职工信息删除、修改功能(任选项)(2.图书信息管理系统设计 1.1问题描述
试设计一图书信息管理系统,图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。1.2基本要求
1.系统以菜单方式工作(2..图书信息录入功能(3..图书信息浏览功能(4..查询和排序功能:(至少一种查询方式)--算法(((1)按书名查询((2)按作者名查询
5..图书信息的删除与修改(3。学生信息管理系统设计 3.1问题描述
试设计一学生信息管理系统,学生信息包括:学号、姓名、年龄、性别、出生年月、地址、电话、E-mail等。3.2基本要求
1..系统以菜单方式工作 2..学生信息录入功能 3..学生信息浏览功能 4..查询、排序功能(1)按学号查询(2)按姓名查询
5..学生信息的删除与修改 4。学生选修课程系统设计 4.1问题描述
试设计一选修课程系统,假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。4.2基本要求
1.系统以菜单方式工作(2.课程信息录入功能(3.课程信息浏览功能(4.查询功能:(至少一种查询方式)--算法((1)按学分查询((2)按课程性质查询(5.学生选修课程(可选项)(5。销售管理系统 5.1问题描述
某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:(1)销售员的代号,(2)产品的代号。(3)这种产品的当天的销售额。每位销售员每天可能上缴0-5张便条。假设,收集到了上个月的所有便条,5.2基本要求
编写一个处理系统,读取上个月的销售情况(自己设定),进行如下处理。1.计算上个月每个人每种产品的销售额。
2.按销售额对销售员进行排序,输出排序结果(销售员代号)
3.统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)4.输出统计报表
销售统计报表能反映出:销售员代号 产品代号 销售之和 每种产品之和 总和 6.学生成绩管理 6.1问题描述 对学生成绩进行管理,学生信息如下: 现有学生成绩信息,内容如下 姓名学号语文数学英语
张明明
01
李成友
02
张辉灿
03
王露
04
陈东明
05
„.......… 6.2基本要求
实现学生信息管理,软件的入口界面应包括如下几个方面: 1.系统以菜单方式工作
2.学生信息数据能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
3.查询时可实现按姓名查询、按学号查询
4.成绩统计:输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。
5.能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)6.学生可自动增加新功能模块(视情况可另外加分)7.学生成绩管理 7.1问题描述
学生成绩进行管理,学生信息包括:学号、姓名、班级、课程
1、课程
2、课程
3、课程
4、学期。
7.2基本要求
1.系统以菜单方式工作
2.能按学期、按班级完成对学生成绩的录入、修改
3.能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序 4.能查询学生成绩,不及格科目及学生名单
5.统计每门课100~85分、84~70、69~60分以上不及格的人数
6.从键盘上输入一个姓名或学号,能够查找是否是该班成员,若是,要求输出该生的全部信息
7.可以对任一学生的成绩、学号进行修改
8.可增添和删除任一学号学生的信息,增添和删除后仍能按学号排序 9.能按班级输出学生的成绩单 8.通讯录管理 8.1问题描述
设一个通信录由以下几项数据信息构成:
数据项类型
姓名字符串 地址字符串 邮政编码字符串 电话号码字符串 8.2基本要求 1.主要功能:
(1)能建立、查询、修改和增删学生通讯录(2)能够按多种方式进行查询 2.要求:界面友好,易于操作 9.图书管理系统 9.1问题描述
图书信息管理系统设计,图书信息包括:登录号、书名、作者名、存在状态、分类号、出版单位、出版时间、价格、借书人姓名、性别、学号等。信息描述: 9.2基本要求
1.系统以菜单方式工作 2.新进图书基本信息 3.图书信息浏览功能
4.图书基本信息的查询和排序功能:(至少一种查询方式)--算法 按书名查、按作者名查询
5.对撤消图书信息的删除删除与修改(可选项)(6. 为借书人办理注册
7.办理借书手续(非注册会员不能借书)8.办理还书手续
10.设计一个简单计算器 10.1问题描述
模拟windows操作系统中的计算器,能进行加减乘除等计算。10.2基本要求
1.显示计算器界面
2.当用户输入一个算式后,计算器显示计算结果,同时屏幕项部显示:continue? 如果用户此时按Y键,则继续输入下一个算式,否则,程序终止 3.可以多次响应用户的计算请求 11..图书借还管理系统 11.1问题描述
对借还图书进行管理,图书被借阅,应记录借阅信息,同时图书的存库数量相应减少。还书时,应将图书数量相应增加,同时删除图书借阅信息。图书基本信息应包括:图书名称、图书编号、单价、作者、存库数量。借书人信息应包括姓名、性别、学号等。11.2基本要求
1.新进图书基本信息的输入 2.图书基本信息的查询 3.对撤消图书信息的删除 4.为借书人办理注册
5.办理借书手续(非注册会员不能借书)6.办理还书手续
12.用户登录程序设计 12.1问题描述
做一个密码验证程序,密码验证只有三次机会。12.2基本要求 1.有登录界面,用户输入密码时以*代替输出,用户登录成功后可以修改密码。2.可以有多个用户登录。
3.初次登录的密码有管理员设置。13.车票管理程序设计 13.1问题描述
一车站每天有n个发车班次,每个班次都有一班次号(1、2、3„n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如 班次发车时间起点站终点站行车时间额定载量已定票人数
8:00
郫县广汉
2
6:30
郫县成都
0.5
„
13.2基本要求
1.录入班次信息,可不定时地增加班次数据。
2.浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
3.查询路线:可按班次号查询 ,可按终点站查询。4.售票和退票功能。
A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数。
B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。5.至少采用文本菜单界面(如果能采用图形菜单界面更好)。
三、进度安排
第1天:分析所选题目,查阅相关资料,写出需求分析,确定系统功能,划分模块;设计算法、数据结构;
第2-3天:编制代码并调试; 第4天:检查学生程序;
第5天:提交源程序清单和课程设计报告,进行答辩。
四、设计方式
1.对于每个题目,应完成算法设计和简单的应用程序设计。
a)算法设计包括解题思路,模块划分和模块代码实现方法。附传统的流程图或N-S图。b)应用程序设计包括:编辑录入源程序;反复调试、排错、运行;借用软件工程的一些方法和技巧对程序进行测试。
2.编程量以满足基本要求即可,但必须调试通过,运行结果准确。3.设计完成后,需要写成一份课程设计报告(A4纸打印出来),体现课程设计所做工作。4.结果形式:提交调试无误的源程序代码,课程设计报告一份。
五、成绩评定标准
学生成绩以优、良、中、及格和不及格5个等级评定。1.学生编写的实际软件和运行结果,占总成绩40% 2.设计报告,占总成绩40% 3.教师提问,占总成绩10% 4.出勤,占总成绩10%
六、课程设计报告要求
按照软件工程及应用程序系统设计步骤详细叙述课程设计题目的完成过程。课程设计报告的格式要求: 封面
洛阳理工学院C语言课程设计报告 题目 院系 班级 姓名 指导老师 年月日
2.课程设计内容:
(1)问题描述:描述要求编程解决的问题。(本课题具有哪些功能,做了哪些工作、用了哪些方法技巧,实现结果如何)
(2)基本要求:给出程序要达到的具体的要求
(3)所设计的应用程序运行所需要的软件、硬件支持环境。(4)算法分析(设计思路),描述解决相应问题算法的设计思想。
(5)功能模块划分,每个模块对应的函数、每个函数功能及参数设计情况说明。(6)系统流程图
(7)实现步骤(要求有详细的文字表述):
如安装 VC;熟悉课题;查找资料;需求分析;设计框图;录入程序;
语法排错;逻辑排错;程序测试;程序运行;数据记录;写课题设计报告等。(8)源程序完整代码以及原始数据、测试数据、输入数据及其运行结果记录。(9)简要总结及自我评价。
(10)源程序:给出所有源程序清单,要求程序有充分的注释语句,至少要注释每个函数参数的含义和函数返回值的含义。(11)参考文献 参考文献书写模板:
[1] ***.C程序设计(第三版).北京:清华大学出版社,2005 [2] ***.C程序设计题解与上机指导(第三版).北京:清华大学出版社,2005 [3] ***主编.C语言程序设计实验与实训指导及题解.北京: 高等教育出版社,2005 [4] ***.C语言程序设计.北京:清华大学出版社,2008 [5] 王静, 武春岭编著.C语言程序设计基础习题集.北京:中国水利水电出版社,2008 [6] 黄维通,马力妮等编著.C语言程序设计习题解析与应用案例分析.北京: 清华大学出版社,2004
七、实习时间、地点及班级人数
时间:从2010年6月21日至6月25日,共五天时间。地点:洛阳理工学院西区实验楼B计算机房 人数:Z090551一个班40人
第五篇:《C语言程序设计教程》习题参考答案
《C语言程序设计教程》习题参考答案
默认分类 2007-09-10 12:38:44 阅读6618 评论13 字号:大中小 订阅
【习题1】
一、简答题(在课本中寻找答案,略)1.1 C程序的基本结构包括哪些内容? 1.2 如何定义标识符?
1.3 输入格式、输出格式的组成包括哪些内容? 1.4 C语言函数分为哪两类?
1.5 计算表达式的值应该考虑哪些方面? 1.6 上机调试程序的步骤如何?
二、判断并改错
1.7 C程序执行的入口是main()函数,所以main函数必须放在程序的开头。错误:main函数可以放在程序的任何位置。并不限定在程序的开头。1.8 定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。错误:不可以交叉出现,数据说明部分在执行语句部分的前面。1.9 编辑与编译不是一回事。
错误:不是一回事。编辑完成源程序的输入和修改;编译是对源程序进行语法检查,如果无语法错误,则生成目标程序。
1.10 scanf(“%d,%d”,&x,&y);的正确输入格式:3,4<回车>。正确
1.11 注释内容太多会影响程序的执行效率。
错误:不会影响程序的执行效率。因为在编译时,编译系统将注释内容删除或用空格代替,所以注释内容不会编译到目标程序中。
1.12 所有的数学公式可以直接出现在源程序中。
错误:数学公式需要转换成C语言能够接受的公式才能出现在源程序中。
三、编程题
1.13 在屏幕上输出自己名字的拼音。
提示:中文名字叫“张三”,对应的拼音为“Zhang San”,输出用printf()函数。1.14 输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上。提示:定义圆的半径r,圆的周长:2*3.14*r,输出结果保留2位小数可以用%.2f 1.15 输入两个整数,输出其中最大者。提示:模仿例1.3 1.16 输入三个整数,输出其中最小者。提示: min(min(a,b),c);【习题2】
一、简答题(在课本中寻找答案,略)2.1 常量与变量的区别?
2.2 C语言中的标识符的定义规则? 2.3 变量为什么要“先定义,后使用”? 2.4 字符常量'a'与字符串常量“a”有何区别? 2.5 大小写字母转换的规则是什么? 2.6 变量的具有哪三种属性?
二、单项选择题
2.7 C语言中,int型数据在内存中的存储形式是(D)。A)ASCII码 B)原码 C)反码 D)补码
2.8 下面四个选项中,均是不合法的用户标识符的选项是(C)。A)BA、x_0、do B)float、1a0、_Y C)x-y、goto、123 D)_123、tmp、CHAR 2.9 下列选项中不正确的常数的选项是(D)。A)0x12F B)-1.23E-2 C)12.0 D)0388 2.10 下面正确的字符常量是(B)。A)“a” B)'' C)“n” D)“376” 2.11 下面正确的字符串常量是(C)。A)'a' B)'376' C)“" D)376 2.12 表达式'A'+4*25.0-'b'的正确结果是(B)。A)67 B)67.0 C)不确定 D)67L 2.13 执行printf(”%x“,100);后的输出结果是(C)。A)100 B)0x100 C)0X64 D)64 2.14 int型的-1在内存中的存储形式是(A)。A)1111 1111 1111 1111 B)0000 0000 0000 0001 C)1111 1111 1111 1110 D)1000 0000 0000 0001 2.15 存储字符串”'abc376“需要的字节数是(D)。A)11 B)13 C)6 D)7 【习题3】
一、计算题
3.1 2.8+7%3*11%2/4(答案:2.8)3.2 5/2+5.0/2+7%6(答案:5.5)3.3 a=12,a*=2+3(答案:a=60)3.4 a=3,b=4,c=5,a+b>c&&b= =c(答案:0)3.5 3>5?3:5<8?25:40(答案:25)3.6 设a=1,b=2,c=3,d=4,m=n=1,有表达式(m=a>b)&&(n=c>d),计算表达式后m,n的值?(答案:m=0,n=1)3.7 设int b=7;float a=2.5,c=4.7;求下面表达式的值。a+(int)(b/2*(int)(a+c)/2)%4(答案:4.5)
二、单项选择题
3.8 若有代数式,则不正确的C语言表达式是(C)。A)x/b/c*y*8 B)8*x*y/b/c C)8*x*y/b*c D)x*y/c/b*8 3.9 有如下类型说明: int k,a,b;unsigned long w=8;double x=2.9 则以下不符合C语言语法的表达式是(A)。A)x%(-3)B)w*=-2 C)k=(a=6,b=4,a-b)D)a*=a+=a-=(b=4)*(a=3)3.10 有如下类型说明: float n;int m;则以下能实现将n中的数值保留小数点后两位,第三位四舍五入的表达式是(B)。A)n=(n*100+0.5)/100.0 B)m=n*100+0.5,n=m/100.0 C)n=n*100+0.5/100.0 D)n=(n/100+0.5)*100.0 3.11 设k=7,x=12;则下列表达式值为3的是(D)。A)x%=(k%=5)B)x%=(k-k%5)C)x%=k-k%5 D)(x%=k)-(k%=5)3.12 已知m=48,ch='a',n=0;则表达式(m>=n&&ch<'b'&&!n)的值是(B)。A)0 B)1 C)真 D)非0 3.13 下面哪个式子在b为奇数时结果为假(C)。
A)a%2==1 B)!(a%2==0)C)!(a%2)D)a%2 3.13 执行printf(”%f“,(x=3,y=5,x>y?1:1.5));后的输出结果是(D)。A)语法错误 B)1 C)1.5 D)1.500000 3.14 能表示条件0≤x≤100的表达式是(D)。A)0<=x<=100 B)x>=0,x<=100 C)0≤x≤100 D)x>=0&&x<=100 3.15 判断char型变量ch为数字的正确表达式是(B)。A)ch>=”0“&&ch<=”9“ B)ch>='0'&&ch<='9' C)'0'≤ch≤'9' D)ch>='0'||ch<='9'
三、编程题(应用条件运算)
3.16 输入一个整型成绩x,3.17 如果大于等于60分,3.18 输出“pass”,3.19 否则输出“fail”。提示:printf(”%s“,x>60?”pass“:”fail“);3.17 输入一个年份y,如果是闰年,输出“y is a leap year”,否则输出“y is not a leap year.” 提示:printf(”%d is %s“,y%4==0&&y%100!=0||y%400==0?”a leap year.“:”not a leap year.“);3.18 输入三条边a,b,c,如果它们能构成一个三角形,输出“Yes”,否则输出“No”。提示:printf(”%s“,a+b>c&&a+c>b&&b+c>a?”Yes“:”No“);3.19 输入三个数x,y,z,按从小到大的输出结果。
提示:分别用max0,min0代表最大、最小值,mid0表示中间值。max0=(x>y?x:y)>z?(x>y?x:y):z;max0=(x 提示:分别用x,y代表平面上一个点。printf(”%s“,x*x+y*y<=0?”Yes“:”No“);【习题4】 以下的编程题目要求首先画出程序的传统流程图或N-S流程图,再编写程序代码。上机实验时再输入到计算机中进行调试,并将调试过程中出现的问题和测试情况记录下来。(流程图请读者自己参考课本自己画,略)4.1 编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。提示:x代表输入的整数,if(x%2==0)printf(”neven“);else printf(”nodd“);4.2 编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息。提示:x,y代表平面坐标,if(x*x+y*y==1)printf(”nYes“);else printf(”nNo“);4.3 编程实现,输入一个成绩等级(A-E),显示相应的百分制成绩段。 A: 90-100 B: 80-89 C: 70-79 D: 60-69 E: <60 提示:char grade;if(grade=='A')printf(”n90-100“);else if(grade=='B')printf(”n80-89“);....4.4 写出下面程序的运行结果: #include if((t>0)&&(t<=10))if((t>=3)&&(t<=6))x=2;else if((t>1)||(t>8))x=3;else x=1;else x=0;提示:int t;if(t<=0||t>10)c=0;else c=t;switch(t){ case 0: x=0;break;case 1: case 2: x=3;case 3:case 4:case 5: case 6: x=2;case 7:case 8: case 9: x=3;case 10: x=2;} 4.7 编程实现一个具有简单四则运算功能的计算器。 提示:参照例4.18,随机产生3个数,其中一个数用来判断是哪种运算。 4.8 编程实现,输入一行字符,将其中的数字字符对应的整数值加起来并输出结果。如: a45b8&*3 则是4+5+8+3,结果为20。提示:char c;int sum=0;while((c=getchar())!='n')if(c>='0'&&c<='9')sum=sum+c-'0';4.9 编程实现,求 的值。 提示:先计算n!,再在计算阶乘的外面套上一层循环。注意:20!是一个很大的值,float s=1;int i;例如:计算6!: for(i=1;i<=6;i++)s=s*i;4.10 编程实现,找出1000之内的所有完数,并按下面格式输出其因子:its factors are 1,2,3,所谓“完数”是指一个数如果恰好等于它的因子之和,因子是指能够整除该数的数。提示:先判断数是否为完数,如果是再考虑输出因子。以6为例输出因子: for(i=1;i<6;i++)if(6%i==0)printf(”%d,“,i);4.11 编程实现,计算序列的前20项之和,,,,...提示:这是一个累加式,每项是一个分式,用a、b分别表示分子、分母。注意:如果a、b都是整数,则是整除。float sum=0,a=2,b=1;int i;for(i-1;i<=20;i++){sum=sum+a/b;a=a+b;b=a-b;} 4.12 编程实现,求Sn=a+aa+aaa+...+ aa...a之值,其中a是一个数字。如:2+22+222+2222+22222(此时n=5),n,a由键盘输入。 提示:这是一个累加式,后1项可以由前一项表示,譬如:第2项可以由第1项表示: 第1项 t=a;第2项:t=t*10+a;4.13 编程实现,把从键盘输入的金额数(以圆为单位)按人民币面额划分,然后显示支付该金额的各种面额人民币的数量。 提示:譬如:123.58元可以表示100元:1张;20元:1张;2元:1张;1元:1张;5角:1张;5分:1枚;2分:1枚;1分:1枚。 为了简单可以只完成整数部分转换,即输入的金额数为整数。4.14 编程实现,使用循环结构打印以下图案。 * * * * * * * * * * * * * * * * * * * * * * * * * 提示:输出时,本图案要按向上三角形和向下三角形进行输出。每行输出中包括空格输出,„*‟号输出。输出空格和„*‟号个数要与行循环控制变量关联起来。 4.15 编程实现,以菜单方式实现猜数游戏系统。(功能自己设定)提示:模仿例4.14和例4.18完成。功能可以包括猜数范围,人数等设置。4.16 编程实现,以菜单方式实现四则运算辅助教学系统。 提示:随机产生两个操作数和运算符+、-、*、/,由使用者输入一个数,判断计算结果与输入的数是否相等,如果相等,表示正确,否则是错误的。【习题5】 填空题 5.1 若有定义int a[3][5];则排列在数组中的第9个元素是(a[1][3])。5.2 strlen(”How are youn“)的值是(12)。5.3 C语言中字符串结束的标志是(' ')。 5.4 写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是(float s[6]={0};)。 5.5 strcmp(”how“,”How“)的值是(32 或>0)。选择题 5.6 若有int s[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是(D) A.1 B.2 C.3 D.4 5.7 对数组的描述正确的是(B)。 A.数组一旦定义其大小是固定的,但数组元素的类型可以不同。 B.数组一旦定义其大小是固定的,但数组元素的类型必须相同。 C.数组一旦定义其大小是可变的,但数组元素的类型可以不同。 D.数组一旦定义其大小是可变的,但数组元素的类型必须相同。5.8 对字符串”Boy“进行完整赋值的操作是(B)。 A.char s[3] = {'B','o','y'};B.char s[] = ”Boy“;C.char s[3] = {”Boy“};D.char s[3];s=”Boy“;5.9在c语言中引用数组元素时,其数组下标的数据类型允许是(C)。 A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 5.10对以下说明语句的正确理解是(B)。 int a[10]={6,7,8,9,10};A.将5个初值依次赋给a[1]至a[5] B.将5个初值依次赋给a[0]至a[4] C.将5个初值依次赋给a[6]至a[10] D.因为数组长度与初值的个数不相同,所以此语句不正确 三、看程序写结果 5.11 main(){int a[3][3] = {{1,0,2}, {2,2},{0,2}}, c[3][3],i,j;for(i=0;i<3;i++){ for(j=0;j<3;j++){ c[i][j] = a[a[i][j]][a[j][i]];printf(”%5d“,c[i][j]);} } printf(”n“);} 运行结果为: 2 2 0 0 0 2 2 0 1 5.12当运行以下程序时,从键盘输入:Ah2MA A3ha,请写出输出结果。main(){ char s[80], c='a';int i=0;scanf(”%s“,s);while(s[i++]!=' ')if(s[i] == c)s[i]=s[i]-32;else if(s[i]==c-32)s[i]=s[i]+32;puts(s);} 运行结果为:AH2Ma 四、编程题 5.13 用数组方法定义一个矩阵,求其转置矩阵。 提示:已知a[3][2],转置后的结果存放在b[2][3];则b[j][i]=a[i][j];5.15 从键盘输入9个不同的整数,组成三行三列的二元数组,找出每一列中的最大元素,并输出其行、列下标。 提示:已知a[3][3],max,row,col分别用来存放一列的最大值,行下标和列下标。5.15利用一个二维数组,打印出以下杨辉三角形,要求打印出10行。1 11 1 1 510 10 ∶ ∶ 提示:定义一个10行10列的二维数组,并且通过两重循环对第1列所有元素赋值1,主对角线也赋值。根据a[i][j]=a[i-1][j]+a[i-1][j-1]求出其它元素的值。 5.16 从键盘上输入一串字符(长度小于50个字符),找出其中最前面的一个X和最后面的一个X之间的子串,并输出子串的长度。 提示:定义一个长度为81的字符数组,从左边查找第一字符'X'的下标,从右边查找第一个字符'X'的下标。5.17 矩阵A是一个3×3的矩阵,B是一个3×2的矩阵,编程求C=A´B。 提示:定义一个3X2的数组c[3][2],该数组的元素值由A数组的一行元素分别与B的一列元素相乘得到。譬如:c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]。 5.18 把30个学生的学号和两门课程的成绩输入到一个二维数组中,求出的每个学生的两门课程的总成绩也放于此数组中,请按学生总分的高低打印出成绩单(包括学号、两门课程成绩和总分)。 提示:定义一个30行4列的数组。为了先快速测试算法是否正确?可以定义一个3行4列的数组,并且通过赋初始值,减少调试程序时反复输入数据的麻烦,算法调试成功后在加上输入数据部分。实现从高到低打印出成绩可以通过排序(降序);也可以通过另外定义1个一维数组作为索引,再通过索引打印成绩。5.19 不用现有的函数求计算字符串长度的程序。 提示:通过循环从前到后计算字符个数,遇到字符串结束标志' '结束。5.20 从键盘上输入一串字符,将其逆向显示。 提示:首先计算字符串的长度,在从右边逐一显示字符,直到下标等于0为止。 5.21 找出一个二位数组中的鞍点的位置,即该位置上的元素在该行上最大,在该列上最小。如果有,输出其所在的行、列号,如果没有,则输出提示信息。 提示:先找出行的最大元素,根据列下标找出列的最大元素。 5.22 从键盘上输入一串字符,将字符串中的所有A去掉后组成新的字符串,并将两字符串输出。提示:简单的方法是通过定义两个一维数组,逐个读出原字符串的字符,如果不为'A',则存入目的数组。当然也可以只用一个一维数组实现,通过两个下标指示来实现。 【习题6】 填空题 6.1 C语言程序执行的开始处是 main函数。 6.2 C程序中的一个函数由两部分组成,即 声明部分 和 执行部分。6.3为了保证被调用函数不返回任何值,其函数定义的类型应为 void。 6.4若一个局部变量的存储类型是static,则该变量的值在 程序执行完成 时被释放。6.5预处理命令#include的作用是 文件包含。 6.6定义一个宏,功能是判断两个数是否相等,相等为1,不等为0。 #define EQU(a,b)(a)==(b)?1:0 6.7 变量的存储类别有 自动型、静态型、寄存器型、和 外部类型 共4种,它们分别用 auto、static、register、extern 标识。选择题 6.8下述函数定义形式正确的是(C)。A.int f(int x;int y)B.int f(int x,y)C.int f(int x, int y)D.int f(x,y: int)6.9 关于函数参数,说法正确的是(A)。A.实参与其对应的形参各自占用独立的内存单元 B.实参与其对应的形参共同占用一个内存单元 C.只有当实参和形参同名时才占用同一个内存单元 D.形参是虚拟的,不占用内存单元 6.10 用数组名作为函数的实参时,传递给形参的是(A)。A.数组的首地址 B.数组的第1个元素 C.数组中的全部元素 D.数组的元素个数 6.11复合语句中定义的变量的作用范围是(D)。A.整个源文件 B.整个函数 C.整个程序 D.所定义的复合语句 6.12一个函数的返回值由(D)确定。 A.return语句中的表达式 B.调用函数的类型 C.系统默认的类型 D.被调用函数的类型 6.13在一个C源文件中,若要定义一个只允许本源文件所有函数使用的全局变量,其他文件中不允许使用,则该变量需要使用的存储类别是(D)。A.auto B.register C.extern D.static 判断题 6.14若定义的函数没有参数,则函数名后的圆括号可以省略。(´)6.15函数的函数体可以是空语句(Ö)。6.16只有main函数才能调用其他函数。(Ö) 6.17return语句中表达式的类型必须与函数定义的类型一致。(´)6.18函数的实参和形参可以是相同的名字。(Ö) 6.19函数调用中,形参与实参的类型和个数必须保持一致。(Ö)6.20外部类型的变量只能定义一次,但可在不同地方声明多次。(Ö)6.21外部类型的变量作用范围大,编程中应多用外部变量。(´)6.22预处理命令行必须以#开头,且最后要用分号结尾。(´)6.23宏命令的处理占用编译时间,而不占用运行时间。(Ö)看程序写结果 6.24 int fun(int n){int f=1;f = f*n*2;return(f);} main(){ int i,j;for(i=1;i<=5;i++)printf(”%dt“, fun(i));} 程序运行结果:2 4 6 8 10 6.25 int x1=30, x2=40;main(){int x3=10,x4=20;sub(x3,x4);sub(x2,x1);printf(”x1=%d,x2=%d,x3=%d,x4=%d“, x1,x2,x3,x4);} sub(int x,int y){int x1=x;x=y;y=x1;} 程序运行结果:x1=30,x2=40,x3=10,x4=20 6.26 #define A 4 #define B(x)A*x/2 main(){float c, a = 4.5;c=B(a);printf(”c=%5.1f“, c);} 程序运行结果:c= 9.0 编程题 6.25写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 提示:最大公约数可以采用“辗转相除法”,最小公倍数将两数乘积除于最大公约数。“辗转相除法”:设两个数分别用m,n表示且m>n,临时变量t,t=m%n;m=n;n=t;直到n等于0。6.26有3´3的矩阵A和3´2的矩阵B,编制一个函数,求C=AX´B。提示:参照习题5.17,A,B,C三个数组作为函数参数。 6.27编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。 提示:一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完成反序存放。 6.28编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个数,在主函数中输入字符串并显示统计结果。提示:参照例题6.10。 6.29 定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。提示:带参数宏,swap(a,b,t)....6.30编写以下函数:①输入职工的姓名和职工号;②按职工号由小到大排序,姓名顺序也随之调整;③输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。提示:定义一个二维数组来存放职工信息;用数组名作函数的参数传递;通过“起泡算法”或“选择算法”;折半查找法先决条件是数据已经有序。【习题7】 1.1 语句int a,*p=&a;的含义是什么? 答:定义整型变量a,和整型指针变量p,并且p指向变量a。1.2 写出下列数组元素的指针法表示。 (1)num[3](2)data[4][2] 答:(1)*(num+3)(2)*(*(data+4)+2)1.3 写出下列数组元素的下标法表示。 (1)*(*(a+1)+2)(2)(*(a+3))[4](3)*(a[2]+5) 答:(1)a[1][2](2)a[3][4](3)a[2][5] 1.4 分析程序,写出程序输出结果。(1)main(){ int a[5]={1,2,3,4,5};int *p=&a[1];printf(”%d“,p[2]);} 输出结果:4(2)main(){ char a[]=”I love China!“;char *p=a;p=p+2;printf(”%s“,p);} 输出结果:love China!(3)main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};int(*pa)[4]=a;pa++;printf(”%d“,*(*(pa+1)+2));} 输出结果:11(4)main(){ char *str[]={”zhao“,”qian“,”sun“,”li“};int i;for(i=0;i<4;i++)printf(”%c“,str[i][0]);} 输出结果:zqsl(5)void sub(int x,int y,int *z){ *z=y-x;} main(){ int a,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(”%4d,%4d,%4dn“,a,b,c); } 输出结果:-5,-12,-7(6)#include 答:int *f();表示函数返回一个整型指针;int(*f)();表示f是函数指针,指向整型函数。1.6 在二维数组中存放有4个学生,5门课程的成绩,用指针编程实现:(1)求出每门课程的平均成绩。(2)求每个学生的总成绩和平均成绩。 (3)在屏幕上列出各课成绩在85分以上的学生名单。(4)在屏幕上列出补考通知单。 提示:(1)(2)(3)略,(4)根据成绩小于60分,由于有5门课程的成绩,所以需要使用else if结构。1.7 输入一个字符串,内有数字和非数字字符,例如: a345dsaf412 x?371+89tah74 编程将其中连续的数字作为一个证书,一次存放到一个数组d中,例如:345放在d[0],412放在d[1],......。统计共有多少个证书,并输出这些整数。 提示:从字符串中提取”345“:t=ch-'0';t=t*10+(ch-'0');t=t*10+(ch-'0');t='3'-'0'=3;t=3*10+('4'-'0')=34;t=34*10+('5'-'0')=345 1.8 编写把十六进制数字字符串变换成整数的函数: int htoi(char *s)。提示:同1.7 1.9 编写把十进制整数变换成二进制数字字符串的函数: char *itob(int n)。提示:同1.7 1.10 用字符指针实现字符串拷贝功能,不能使用库函数。提示:定义两个字符数组a,b,复制操作b[i]=a[i];1.11 用字符指针实现字符串连接功能,不能使用库函数。 提示:定义两个字符数组a,b,先将下标定位到a的末尾' ',在将b的元素赋值给a的对应元素,注意:别忘了添加字符串结束标志' '。 1.12 用指向指针的指针的方法对5个字符串排序并输出。提示:一个指针数组和一个指向指针的指针变量。【习题8】 8.1 定义复数结构体,并写出复数的加、减、乘、除、的计算函数。提示:复数包括两个部分:实部和虚部。 8.2 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天。注意闰年问题。提示:计算该日是本年中的第几天,是从本年1月1日起。 8.3 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求在屏幕上显示出3门课程的平均成绩,以及最高分数的学生的数据(包括学号、姓名、3门课程成绩、平均分)。提示:定义结构体数组。最高分数是指每个学生3门课程的平均分最高。8.4 编写求链表长度的函数。 提示:从链表指针头往表尾移动计算结点的个数。 8.5 已有两个链表a、b,每个链表的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。提示:可以定义一个新的链表,先从链表a,再从链表b中取出结点,依次按学号升序插入到新的链表中。8.6 利用8.8节中的struct card结构编写一个程序实现5个人员数据输入和在屏幕上显示的功能:如果job项为't',则在position项为教师的职称(助教、讲师、副教授、教授);如果job项为's',则class项为学生的班级号,如501。 提示:在结构体中嵌入共用体position,根据job成员确定position的具体值。 8.7 口袋中有红、黄、兰3中颜色的球若干个。每次从口袋中取出1个球,根据颜色的不同,输入相应的颜色英文字符串。要求用枚举变量实现。提示:参照例8.8。【习题9】 一、简答题 9.1文件分为哪些类型?各有何特点? 答:文件分为二进制文件和文本(ASCII码)文件。二进制文件在内存和外存的形式是一样的,无需进行数据转换,用记事本打开该文件,看到得可能是乱码;文本(ASCII码)文件在内存是按二进制形式存在,在外存是以文本(ASCII码)形式存在,存在数据的转换,用记事本打开该文件,可以读懂其中的内容。9.2什么是文件类型指针?什么是文件位置指针?各有何用途? 答:文件类型指针就是用FILE结构体定义的指针变量。文件位置指针是文件存取操作的位置。前者指向被打开的文件;后者在文件存取操作后移动到下一个存取位置。9.3什么是设备文件?常用的设备文件有哪些? 答:在操作系统中,设备也被看作一个文件进行管理,即设备文件。常用的设备文件有:stdin,stdout,PRN等。 二、选择题 9.4 若想对文本文件只进行读操作,打开此文件的方式为(A)。A.”r“ B.”W“ C.”a“ D.”r+“ 9.5如果要打开C盘file文件夹下的abc.dat文件,fopen函数中第一个参数应为(D)。A.c:fileabc.dat B.c:fileabc.dat C.”c:fileabc.dat“ D.”c:fileabc.dat" 9.6用(A)函数打开文件,操作完毕后用(C)函数关闭它。 A.fopen B.open C.fclose D.close 三、编程题 9.7 有两个磁盘文件a.dat和b.dat,要求产生一个新的文件c.dat,将b.dat中的数据追加到a.dat后面,并存入到c.dat中。 提示:设两个磁盘文件为文本文件。以读的方式打开a.dat和b.dat,以写的方式创建c.dat。先将b.dat的数据复制到c.dat,再将a.bat的数据复制到c.dat。 9.8 从键盘输入一些字符,逐个把它们存入磁盘文件test中去,直到输入一个#为止。提示:利用fputc函数将字符写入到磁盘文件中。9.9 读入一个文件,输出其中最长的一行的行号和内容。提示:以硬回车键'n'作为行的结束标志。 9.10.编写程序将全班同学的姓名、地址和电话号码写到一个文件class.dat中。提示:学生的信息可以存放到结构体数组,以fwrite函数写数据到文件中。 9.11将9.10题产生的class.dat文件中的数据按姓名从低到高排列输出到显示器上,并把排了序的数据重新写入到文件class1.dat中。 提示:以fread函数从文件中读入学生的信息,并存放到结构体数组,在数组中进行排序。排序完毕再写入文件中。 9.12 利用9.11题产生的class1.dat文件,编程实现从中直接读取第三个同学的数据。提示:参照例9.5 9.13 在9.11题产生的class1.dat文件中插入一个新生的数据,要求插入后的文件数据仍然按姓名顺序排列。 提示:先将数据读入到数组中,插入新的数据后,再写入到文件中。【习题10】 一、编程题: 10.1 绘制y=x2的曲线。其中变量x的变化范围在-2~2之间,变化步长为0.01。 提示:屏幕的左上角是图形系统的绝对坐标原点(0,0),向右表示x坐标,向下表示y坐标。为了正确显示图形,需要另外定义相对坐标原点(0,0),譬如以绝对坐标(300,200)表示相对坐标的原点。10.2 改进例10.2,在模拟实时时钟合适的位置加上3、6、9、12的时钟数字。提示:参照例10.2,在第15行处恰当添加数字输出的程序。10.3 编程实现图形菜单。菜单的功能自定。 提示:菜单用图形方式显示,菜单选择时确定当前位置,在根据键盘按键重画菜单。10.4 BIOS功能调用INT 10H的09H号功能用于显示彩色字符,要求使用的寄存器如下: 调用前: AH=09H BH=当前显示页(图形方式下为0)AL=要显示字符的ASCII码 BL=字符及其背景颜色 CX=字符显示次数 利用系统调用函数编制彩色字符显示函数:void write_char(int asc,int atr)。其中参数asc为要显示字符的ASCII代码,art为字符颜色。该函数每次显示一个字符。提示:参照例10.5 10.5 有如下C语言程序: main(){ int x, y, z, max;int get_max(intx,int y,int z);printf(“please input x,y,z=”); scanf(“%d%d%d”,&x,&y,&z); max=get_max(x,y,z);printf(“max=%d”,max); getch();} 程序中get_max函数的作用是求三个整数中最大值。请用汇编语言实现函数get_max,并将C语言程序和汇编子程序连接,生成一个可执行文件。提示:参照例10.13