p=p->next;
q=p->next;
p->next=q->next;
printf("%d",q->number);
if(q==head)
head=q->next;
free(q);
p=p->next;
}
printf("%d\n",head->number);
(2)画出下列代码的流程图
r1=head1;
p1=head1->next;
r2=p2=head2->next;
while(p1&&p2)
{
if(p1->index==p2->index)
{
p1->modulus=(p1->modulus)+(p2->modulus);
p2=p2->next;
free(r2);
r2=p2;
r1=p1;
p1=p1->next;
}
elseif(p1->index>p2->index)
{
r2->next=p1;
r1->next=r2;
p2=p2->next;
r2=p2;
}
elseif(p1->indexindex)
{
r1=p1;
p1=p1->next;
}
}
(二)实验要求
能写出程序流程图对应的代码,并能画出代码对应的程序流程图。
实验二输入输出格式控制训练
(一)实验内容
本次实验对输入输出语句的使用,主要是格式控制参数的使用进行训练。
实验题目分如下两大类,学生可分别从每类中选择2道来完成:
1.输入语句
(1)读入一组以空格分隔的数,把它们存入数组,用逗号分隔的方式输出,并统计数的个数。
例:
【输入】2037.543587.0【回车】
【输出】20,37.5,43,5,87.0
5
(2)按照“学号【空格】姓名【空格】性别【空格】年龄【回车】”的格式输入若干学生信息,将他们存储在结构体数组中(即每一个学生的信息存储在一个结构体中),输入以“##”结束。
统计学生信息数量,并按行输出每条学生信息(逗号分隔)。
例:
【输入】20142101zhangMale19【回车】
20142102wangFemale18【回车】
##【回车】
【输出】2
20142101,zhang,Male,19【回车】
20142102,wang,Female,18【回车】
(3)读入一组以制表符(Tab)分隔的数,把它们存入数组,并用逗号分隔输出。
例:
【输入】5【Tab】35【Tab】15【Tab】100【回车】
【输出】5,35,15,100【回车】
2.输出语句
(1)打印如下图形,层数由用户输入,最后一行左侧顶格。
*
***
*****
*******
(2)打印如下图形,层数由用户输入,中间一行左侧顶格。
*
***
*****
***
*
(3)打印倒的杨辉三角形,层数由用户输入,第一行左侧顶格。
例:
1331
121
11
1
3.综合类
(1)输入一组以逗号分隔的整数,以回车结尾,以每行5个,空格分隔,左对齐的方式输出它们。
例:
【输入】100,21,3950,7,8,3289,943,495,34134,343,209,47,2,7293,29,2732,843,392,24【回车】
【输出】10021395078
328994349534134343
209472729329
273284339224
(2)输入一组以逗号分隔的整数,以回车结尾,以每行5个,空格分隔,右对齐的方式输出它们。
例:
【输入】100,21,3950,7,8,3289,943,495,34134,343,209,47,2,7293,29,2732,843,392,24【回车】
【输出】10021395078
328994349534134343
209472729329
273284339224
(3)输入一组以空格分隔的英文单词,以回车结尾,以每行5个,空格分隔,左对齐的方式输出它们。
例:
【输入】
MachinelearningisthetermthatreferstolearningpatternsinthedataInotherwords【回车】
【输出】Machinelearningistheterm
thatreferstolearningpatterns
inthedataInother
words
(4)输入一组以空格分隔的英文单词,以回车结尾,以每行5个,空格分隔,右对齐的方式输出它们。
例:
【输入】
MachinelearningisthetermthatreferstolearningpatternsinthedataInotherwords【回车】
【输出】Machinelearningistheterm
thatreferstolearningpatterns
inthedataInother
words
(5)输入一组以逗号分隔的小数,以回车结尾,以每行5个,空格分隔,小数点对齐的方式输出它们。
例:
【输入】10.0,2.1,39.50,7.8,328.9,9.43,49.5,341.34,34.3,2.09,0.47,2.0,7.293,29.00【回车】
【输出】10.02.139.507.8328.9
9.4349.5341.3434.32.09
0.472.07.29329.00
(6)输入一组以空格分隔的英文单词,以回车结尾,以每行5个,空格分隔,中间对齐的方式输出它们。
例:
【输入】
MachinelearningisthetermthatreferstolearningpatternsinthedataInotherwords【回车】
【输出】Machinelearningistheterm
thatreferstolearningpatterns
inthedataInother
words
(二)实验要求
能利用输入输出语句完成相应任务。
实验三指针及字符串训练
(一)实验内容
本次实验对指针的使用和字符串的操作进行训练。
实验题目如下,学生可从中选择2道来完成:
1.用指针操作实现一个二维数组的转置运算。
输入:
输入包含m+1行。
第一行是整数m和n,两项之间用一个空格隔开(1<=m,n<=10)。
其中,m,n分别为数组的行数和列数。
第二行到第m+1行每行均有n个整数,相邻两项之间用一个空格隔开。
输出:
包含n行,是转置后的二维数组。
每行均有m个整数,相邻两项之间用一个空格隔开。
例:
【输入】32【回车】
12【回车】
45【回车】
78【回车】
【输出】147【回车】
258
2.输入一段英文,从中找出最长的英文单词。
英文单词由空格分隔。
(用字符指针实现,且不能调用库函数。
)注:
英文单词只包含大写字母和小写字母;若最长的英文单词有多个,则输出第一个。
3.输入一串符号,将其中连续的阿拉伯数字视为整数,计算并输出它们的和。
(用字符指针实现,且不能调用库函数。
)
例:
【输入】whde12fkvf834ddei5sdlm3790wo【回车】
【输出】4641(因为12+824+5+3790=4641)
(二)实验要求
能利用指针完成相应任务,并能对字符串进行操作。
实验四参数传递训练
(一)实验内容
本次实验对函数调用过程中的参数传递进行训练。
实验题目如下,学生可从中选择2道来完成:
1.二维矩阵A和B作为输入参数,传入函数ADD,函数ADD完成A+B的运算,结果放在二维矩阵C中。
SELECTMIN函数负责找出C中值最小的元素。
编程实现上述函数,最终要求输出C和C中最小元素的值。
不能用全局变量。
2.字符串str1和str2作为输入参数,分别传入cut函数。
cut函数负责从传入的字符串中截取指定范围(例如:
从第2个字符开始,到第5个字符结束的部分)的内容(截取范围也作为cut函数的输入参数传入。
)。
截取结果分别放在字符串str3和str4中。
再将str3和str4作为输入参数传入connect函数。
connect函数负责将传入的两个字符串顺序拼接在一起。
编程实现上述函数,要求最终输出拼接结果。
不能用全局变量。
3.每个学生信息存储在一个结构体中,结构体包括学号、数学成绩、英语成绩、计算机成绩、平均成绩五部分。
Ave函数负责计算一个学生的平均成绩。
Find函数负责找到平均成绩最高的学生,Print函数负责按表格的形式输出一个学生的全部信息,内容全部左对齐,表头为“No.Math.Eng.Comp.Ave.”。
编程实现上述函数,要求输出一个班中(不少于8人)平均成绩最高的学生的信息。
(二)实验要求
掌握根据需求选择正确的参数传递方式完成相应任务的技能。
实验五递归调用训练
(一)实验内容
本次实验对函数的递归调用进行训练。
实验题目分如下两类,学生可分别从每类中选择1道来完成:
1.基本题
(1)用递归函数完成斐波那契级数的计算,并输出斐波那契级数序列的前n项。
n由用户输入。
(2)用递归函数完成下列函数的计算,并输出序列的前n项。
n由用户输入。
2.提高题
(1)用递归函数实现将给定正整数转换为二进制数的功能,并输出转换结果。
正整数由用户输入。
例:
【输入】256
【输出】100000000
(2)用递归函数实现将给定的纯小数换为二进制数的功能,并输出转换结果。
纯小数由用户输入。
例:
【输入】0.625
【输出】0.101
(二)实验要求
能设计实现递归函数完成相应任务。
实验六文件操作训练
(一)实验内容
本次实验对文件的打开、关闭和读写等操作进行训练。
实验题目分如下三类,学生可分别从每类中选择1道来完成:
1.文件读操作
(1)直接通过对文件的读操作(即不允许将文件内容全部读入到缓冲区中),统计已知的文本文件(txt格式)中总共有多少个英文字符(区分大小写,且不算标点符号)。
例如:
Machinelearningistheterm.中的英文字符为24个。
(2)直接通过对文件的读操作(即不允许将文件内容全部读入到缓冲区中),统计已知的文本文件(txt格式)中的英文单词个数(以空格或标点符号分隔的字符串视为一个英文单词)。
例如:
Machinelearningisn’taword.中的英文单词为6个。
2.文件写操作
(1)通过对文件的直接读写操作(即不允许将文件内容全部读入到缓冲区中,也不允许将缓冲区中的内容写到文件中),将已知的文本文件(txt格式)中的指定字符c1修改为特定字符c2。
c1和c2由用户指定,并作为程序的输入。
(2)通过对文件的直接读写操作(即不允许将文件内容全部读入到缓冲区中),将已知的文本文件(txt格式)中的指定单词w1修改为特定单词w2。
w1和w2由用户指定,并作为程序的输入。
3.文件创建操作
(1)通过对文件的直接读写操作(即不允许将文件内容全部读入到缓冲区中),复制已知文本文件file1中的内容到一个新的文本文件file2中。
注意在file2中保持源文件中的格式。
(2)通过对文件的直接读写操作(即不允许将文件内容全部读入到缓冲区中),将已知文本文件file1中指定位置的指定长度的字符串复制到一个新的文本文件file2中。
指定位置由行号和起始字符位置给出。
例如:
文件file1中第1行的内容为:
Machinelearningistheterm.则复制第1行第5个字符开始的6个字符到file2中后,file2的内容为:
inele
(二)实验要求
能通过对文件的操作完成相应任务。
实验七控制结构训练训练
(一)实验内容
本次实验对控制结构以及控制结构的嵌套进行训练。
实验题目如下,学生可从中选择2道来完成:
1.随机输入n个正整数,编程分别求出其中在奇数位序上的(即第1、3、5、7、….个)奇数的和,以及偶数位序上的((即第2、4、6、8、….个))偶数的和。
2.编写程序,不断读取用户的键盘输入(回车分割)。
如果是英文字母则一律转换为小写字母,依次存入一个足够长的字符数组中;如果是阿拉伯数字(不超过4位)则依次放到一个足够长的整数数组中;如果是其他符号,则将其ASCII存入另一个数组中。
最后输出3个数组中的内容。
3.在一段英文文章中,找到给定字符串str的所有出现,输出其出现的位置。
编程实现之。
(二)实验要求
能利用顺序、分支、循环,以及它们的各种嵌套完成相应的任务。
实验八调试测试训练
(一)实验内容
本次实验对程序的调试和测试进行训练。
实验题目如下,学生可从中选择1道来完成:
1.约瑟夫问题:
假设有n个人围圈而坐,现在从第k人开始数数,数到m的人出列,紧接着的后续人又从1开始数数,到m出列,如此重复下去,直到全体人员出列。
输出出列序列。
#include
#include
#include
typedefstruct_foruse
{
struct_foruse*next;
intnumber;
}foruse,*link;
linkcreate(intn);
voidjoseph(linkhead,intk,intm);
linkcreate(intn)
{
linkhead=(link)malloc(sizeof(foruse));
foruse*tail;
inti;
head->next=head;
head->number=1;
tail=head;
for(i=2;i<=n;i++)
{
foruse*p=(foruse*)malloc(sizeof(foruse));
p->number=i;
p->next=tail->next;
tail->next=p;
tail=p;
}
returnhead;
}
voidjoseph(linkhead,intk,intm)
{
intj;
foruse*p;
foruse*q;
if(m==1&&k==1)
{
p=head;
while(p->next!
=head)
{
printf("%d",p->number);
q=p->next;
free(p);
p=q;
}
printf("%d\n",p->number);
}
elseif(m==1&&k!
=1)
{
p=head;
for(j=1;jp=p->next;
while(head->next!
=head)
{
q=p->next;
p->next=q->next;
printf("%d",q->number);
if(q==head)
head=q->next;
free(q);
}
printf("%d\n",head->number);
}
else
{
p=head;
for(j=1;jp=p->next;
while(head->next!
=head)
{
for(j=1;jp=p->next;
q=p->next;
p->next=q->next;
printf("%d",q->number);
if(q==head)
head=q->next;
free(q);
p=p->next;
}
printf("%d\n",head->number);
}
}
voidmain()
{
linkhead;
intm,n,k;
printf("pleaseinputn,m,k:
");
scanf("%d,%d,%d",&n,&m,&k);
head=create(n);
joseph(head,k,m);
}
2.约瑟夫问题:
假设有n个人围圈而坐,现在从第k人开始数数,数到m的人出列,紧接着的后续人又从1开始数数,到m出列,如此重复下去,直到全体人员出列。
输出出列序列。
#include
#include
typedefstructnode
{
intdata;
structnode*next;
}
LNode,*LinkList;
LinkListlook(LNode*p,inte)
{
LNode*p3;
p3=(LNode*)malloc(sizeof(LNode));
if(!
p3)exit
(1);
p3=p;
while(p3->next!
=p&&p3->data!
=e)p3=p3->next;
if(p3->next==p&&p3->data!
=e)
{
printf("noexist,enteragain\n");
scanf("%d",&e);
look(p,e);
}
return(p3);
}
intmain()
{
intx,s,y,i;
printf("pleaseenterthenumberofpeople:
\n");
scanf("%d",&x);
/*
while(x<=2||x>=50)
{
printf("outofrange,enteragain\n");
scanf("%d",&x);
}
*/
printf("entereachpeople'snumber\n");
LinkListhead=(LNode*)malloc(sizeof(LNode));
LNode*p1,*p2;
p1=head;
for(i=1;i<=x;i++)
{
p1->next=(LNode*)malloc(sizeof(LNode));
scanf("%d",&s);
p1=p1->next;
p1->data=s;
p1->next=head->next;
}
p1=head->next;
for(i=1;i<=x;i++)
{
printf("%d",p1->data);
p1=p1->next;
if(i%10==0)printf("\n");
}
printf("pleaseentertheintervalnumber\n");
scanf("%d",&y);
while(y<1)
{
printf("insignificance,erteragain\n");
scanf("%d",&y);
}
printf("enterthefirstnumber\n");
scanf("%d",&s);
p1=look(head->next,s);
while(p1->next!
=p1)
{
intj=1;
while(j{
p1=p1->next;
j++;
}
p2=p1->next;
p1->next=p2->next;
printf("%d",p2->data);
free(p2);
p1=p1->next;
}
printf("OK!
\n");
return0;
}
(二)实验要求
能根据提示调试语法错误,能通过测试修正程序。
实验九综合训练
(一)实验内容
本次实验对学生使用前述实验中的各项技能完成所需任务的能力进行训练。
实验题目如下,学生可从中选择1道来完成:
1.手机通讯录中每条记录包括:
姓名、手机号、类别(如:
同学、亲属、同事、好友等)三部分内容。
请编写程序完成从文件导入手机通讯录,能对手机通讯录进行增、删、查、改,并能将手机通讯录导出到文件的功能。
2.编写程序,可以统计任给的一个英文文件(.txt格式)中每个英文字母(区分大小写)出现的频率,以及每个英文单词出现的次数。
并将统计结果分别输出到两个文件中。
结果按频率和次数的升序