程序设计基础习题_第1页
程序设计基础习题_第2页
程序设计基础习题_第3页
程序设计基础习题_第4页
程序设计基础习题_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——程序设计基础习题

7.8习题

1.编制一个C程序,从键盘输入一个正整数,假使该数为素数,则输出该素数,否则输出该数的所有因子(除去1与自身)。

2.编制一个C程序,从键盘输入一个正整数N,然后计算并输出S=1?21?22???2|N|最终计算并输出T=1?111????(?1)K?123K其中K?S的整数部分。

3.编制一个C程序,计算并输出多项式的值

Sn?1?05.x?05.(05.?1)205.(05.?1)(05.?2)305.(05.?1)?(05.?n?1)nx?x???x2!3!n!的值,直到|Sn-Sn-1|

(2)编写一个主函数,调用(1)中的函数,对以下单词序列进行排序:zhang,gou,xu,zheng,mao,zhao,li,bai,qing

其中该单词序列中各单词以赋初值的方式用一维字符串指针数组的各元素指向。

(3)在主函数中,要求先输出原序列,换行后再输出排序后的序列。输出时各单词之间用两个空格分隔。方法说明:

使用字符串比较函数strcmp(),需要包含头文件string.h。

11.7习题

1.编写一个C程序,要求定义一个有关日期的结构体类型变量(包括年、月、日),从键盘为该变量中的各成员输入数据,然后再将输入的日期显示输出。2.建立一个学生状况登记表的表格空间(学生人数最多为20),包括学号、姓名、五门课程的成绩与总分。在主函数中调用以下函数实现指定的功能:(1)输入n个学生的数据(不包括总分)。其中n(≤20)在主函数中从键盘输入。(2)计算每个学生的总分。(3)按总分进行排序。

(4)显示输出给定学号学生的所有信息。其中学号在主函数中从键盘输入。3.编写一个C程序,根据键盘输入的非负整数值,显示输出颜色的英文名称。4.编制一个C程序,定义一个长度为10的联合体类型数组。首先从键盘输入一个标志,标志值为0时表示输入五分制成绩(整型),标志值为1时表示输入百分制成绩(单精度实型)。然后从键盘输入10个成绩存放到数组中。最终输出这些成绩。5.编写一个C函数,功能是计算给定链表的长度。6.编写一个C函数,功能是逆转给定链表。

7.设有两个有序线性单链表,头指针分别为ah与bh。编写一个C函数,将这两个有序链表合并为一个头指针为ch的有序链表。

8.设有一个链表,其结点值均为正整数,且按值从大到小链接。编写一个C函数,将该链表分解为两个链表,其中一个链表中的结点值均为奇数,而另一个链表中的结点值均为偶数,且这两个链表均按值从小到大链接。

9.设有一个链表,其结点值均为整数,且按绝对值从小到大链接。编写一个C函数,将此链表中的结点按值从小到大链接。

10.设有一个链表,其结点值均为正整数。编写一个C函数,反复找出链表中结点值最小的结点。并输出该值,然后将该结点从链表中删除,直到链表空为止。

11.给定学生成绩登记表如表11.4所示。编写一个C程序,用冒泡排序对该学生成绩表按成绩(grade)从低到高进行排序。

表11.4学生成绩登记表

学号(num)020304姓名(name)LinZhangZhao成绩(grade)92877205091112131617202122MaZhenWangLiXuMaoHaoLuSongWu918510086837895827688

具体要求:

(1)定义一个结构体数组表示学生成绩登记表,其中的每个元素依次存放表11.4中各学生的状况。结构体类型为structstudent{intnum;

charname[10];intgrade;};

(2)在程序中另外定义一个结构体指针数组,在排序前,其中每一个数组元素依次指向学生成绩登记表(为结构体类型数组)中的各学生状况。(3)在程序中,首先输出排序前的学生状况,然后输出排序后的结果。输出形式如表11.4所示,但不要表中的框线。

(4)将冒泡排序的功能独立编写成一个函数。方法说明:

在实际排序的过程中,并不需要交换学生成绩登记表中的各学生状况,而只需要交换另一指针数组中的各指针。因此,排序的最终结果,学生成绩登记表中各学生状况之间的存储顺序并没有改变,而只是按指针数组中各指针元素顺序指向的各学生状况是按成绩有序的。12.链表基本操作。具体要求:

(1)定义一个结构体数组表示学生成绩登记表,其中的每个元素依次存放表11.4中各学生的状况。结构体类型为structstudent{intnum;

charname[10];intgrade;};

(2)对于表11.4所示的学生成绩登记表,依次将每个学生的状况作为一个结点插入到链表的链头(即当前插入的结点将成为链表中的第一个结点)。初始时链表为空,即该链表的头指针为空。

每个学生状况结点结构的结构体类型为structstunode

{intnum;

charname[10];intgrade;

structstunode*next;};

(3)当所有学生状况都插入到链表后,从链头开始,依次输出链表中的各结点值(即每个学生的状况)。输出格式宛如表11.4所示,但不要表中的框线。方法说明:

为了给每个学生状况的结点p动态分派存储空间,可以用如下语句:p=(structstunode*)malloc(sizeof(structstunode));其中p为结构体类型structstunode的指针。

另外,为了使用函数malloc(),应当包含头文件stdlib.h。

13.将表11.4所示的学生成绩登记表划分成三个子表,其中子表1登记的是成绩在90~100之间的学生状况,子表2登记的是成绩在80~89之间的学生状况,子表3登记的是成绩在70~79之间的学生状况。具体要求:

(1)定义一个结构体数组表示学生成绩登记表,其中的每个元素依次存放表11.4中各学生的状况。结构体类型为structstudent{intnum;

charname[10];intgrade;};

(2)划分成的三个子表均采用链表结构,链表中各结点的数据域存放学生状况在原登记表中的序号(即结构体数组元素的下标),而不是直接存放学生的成绩状况。即各链表结点的结构体类型为structstunode

{structstudent*data;structstunode*next;};

(3)最终输出原学生成绩登记表以及划分成的三个子表。输出格式如表11.4所示,但不要表中的框线。方法说明:

划分子表的方法如下:

对于表11.4中的各学生成绩grade,计算k=10-int(grade/10)

其中int()表示取整。根据k值将学生状况插入到相应的子表中:若k=0或1,则插入到子表1中;若k=2,则插入到子表2中;若k=3,则插入到子表3中。

初始时各子表均为空。当需要将一个学生状况插入到某子表时,首先动态申请一个结点(structstunode类型),将该学生状况在原表中的序号(元素下标)存放到结点的数据域中;然后将该结点链接到相应链表的链头。

12.4习题

1.编写一个C程序,首先从键盘输入20个双精度实数,并写入文本文件fd.dat中。然后将写入文件fdata.dat中的10个双精度实数显示输出。

2.编写一个C程序,从键盘输入一个字符串(输入的字符串以“#〞作为终止),将其中的小写字母全部转换成大写字母,并写入到文件upper.txt中。然后再从该文件中的内容读出并显示输出。

3.编写一个C程序,主函数从命令行得到一个文件名,然后调用函数fgets()从文件中读入一字符串存放到字符数组str中(字符个数最多为80个)。在主函数中输出字符串与该字符串的长度。fgets函数的格式为:char*fgets(char*string,intn,FILE*stream);

4.编写一个C程序,将源文件拷贝到目的文件中。两个文件均为文本文件,文件名均由命令行给出,并且源文件名在前,目的文件名在后。

5.设二进制文件student.dat中存放着学生信息,这些信息由以下结构体描述:structstudent{longintnum;charname[10];intage;charsex;

charsreciality[20];charaddr[40];};

请编写一个C程序,显示输出学号在970101~970135之间的学生学号num、姓名name、年龄age与性别sex。

6.设有一学生状况登记表如表12.1所示。

表12.1学生状况登记表

学号(num)101102103104105106107108109110姓名(name)ZhangWangZhaoLiGaoLinMaZhenXuMao性别(sex)MFMMMMFMMF年龄(age)19181920191817211918成绩(grade)95.692.485.796.390.291.598.790.189.594.5

编写一个C程序,依次实现以下操作:(1)定义一个结构体类型

structstudent{charnum[7];charname[8];charsex[3];charage[5];chargrade[9];};

(2)为表12.1定义一个结构体类型(structstudent)数组,并进行初始化。(3)开启一个可读写的新文件stu.dat。

(4)用函数fwrite()将结构体数组内容写入文件stu.dat中。(5)关闭文件stu.dat。

(6)开启可读写文件stu.dat。

(7)从文件stu.dat中读出各学生状况并输出。输出格式如表12.1所示,但不要表格框线。

(8)关闭文件stu.dat。

7.将表12.1的内容按结构体类型写入文本文件st.dat中;然后对该文件按成绩从低到高进行冒泡排序,并输出排序结果;最终,在排序后的文件中用对分查找法查找并输出成绩在95.0到100分之间的学生状况。具体要求:

(1)在定义的结构体类型中,各成员均为字符数组。即结构体类型的定义如下:structstudent{charnum[8];charname[8];charsex[5];charage[5];chargrade[10];};

(2)编写一个对文本文件(其中每一个记录的结构如(1)中定义)按成绩(grade)进行冒泡排序的函数mudisk(fp,n)。其中:

fp为文件类型指针,指向待排序的文件;

n为长整型变量,存放待排序文件中的记录个数(即学生的个数)。

(3)编写一个对按成绩(grade)有序的文件(其中每一个记录的结构如(1)中定义)进行对分查找的函数nibsrch(fp,n,a,b,m)。其中:fp为文件类型指针,指向给定的有序文件;

n为长整型变量,存放按成绩有序文件中的记录个数(即学生的个数);

a与b均为字符串指针,分别指向成绩(grade作为字符串)值的下限与上限(即查找成绩在a到b之间的学生);m为整型变量指针,该指针指向的变量返回成绩在a到b内的第一个记录号(即数组元素下标)。

(4)在主函数外定义结构体类型,且主函数放在所有函数的前面。(5)在主函数中依次完成以下操作:

①为表12.1定义一个结构体类型(structstudent)数组,并进行初始化。②开启可读写的新文本文件st.dat。

③使用函数fwrite()将结构体数组内容写入文件st.dat中。

④关闭文件st.dat。

⑤开启可读写文件st.dat。

⑥调用(2)中的函数mudisk(fp,n),对文件st.dat按成绩(grade)从低到高进行冒泡排序。⑦调用(3)中的函数nibsrch(fp,n,a,b,m),查找成绩在95.0到100分之间的学生状况。⑧根据查找的返回结果,使用函数fread(),从文件中读出成绩在95.0到100分之间的学生状况并输出。输出格式如表12.1所示,但不要表格框线。⑨关闭文件st.dat。

13.4习题

1.写出以下表达式的值:

(1)0x13b=(ac=(aa=b|c;

printf(\}

运行上述程序后,输出结果是什么?4.阅读以下C程序:#includemain()

{chara=0x95,b,c;b=(ac=(aa=b|c;

printf(\}

(1)假使系统为“算术右移〞,则运行上述程序后,输出结果是什么?(2)假使系统为“规律右移〞,则运行上述程序后,输出结果是什么?

5.编写一个C程序,分别计算并输出C语言中为一个整型、长整型、无符号整型和字符型变量所分派存储空间的二进制位数。具体要求:

(1)编写四个函数,分别计算整型、长整型、无符

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论