if((*p)%3==0)
printf("%3d",*p);
return0;
}
运行时假定键盘输入数据为:
13579111315 1721
则程序运行后的输出结果是
程序填空
以下程序的功能是:
将一个已经存在的文本文件内容复制到一个目标文件中,即进行文本文件拷贝。
#include<>
#include<>
intmain()
{
FILE*in,*out;
charch,infile[80],outfile[80];
printf("请输入源文件名:
");
gets(infile);
printf("请输入目标文件名:
");
gets(outfile);
in=fopen(infile,"r");
if(in==NULL)
{
printf("不能打开源文件!
\n");
exit(0);
}
out=fopen(outfile,
(1));
if(out==NULL)
{
printf("不能打开目标文件!
\n");
exit(0);
}
ch=fgetc(in);
while(
(2))//判断是否到源文件尾
{
(3)(ch,out);//将读取的源文件内容写入目标文件中
ch=fgetc(in);
}
printf("\n文件复制完毕!
\n\n");
fclose(in);
fclose(out);
return0;
}
}
编程题:
(说明:
加颜色的题目与考题相似度大一些)
1、课件第1讲例3:
对输入的两个整数按大小顺序输出。
现用函数处理,而且用指针类型的数据作函数参数。
2、课件第1讲例4:
对输入的两个整数按大小顺序输出
3、课件第1讲例5:
输入3个整数a,b,c,要求按由大到小的顺序将它们输出,用函数实现。
4、实验_15、(基础题)请参考教材P226-229图示,请说明下列函数中,哪些能实现主函数的实参数据交换功能,哪些不能实现或程序存在问题,为什么?
(最好上机验证)
(1)
voidswap1(int*p1,int*p2)
{
inttemp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
(2)
voidswap2(int*p1,int*p2)
{
int*temp;
*temp=*p1;
*p1=*p2;
*p2=*temp;
}
(3)
voidswap3(intx,inty)
{
inttemp;
temp=x;x=y;y=temp;
}
(4)
voidswap4(int*p1,int*p2)
{
int*p;
p=p1;
p1=p2;
p2=p;
}
5、课件第2讲例1:
验证不同数据类型,每一数据单元所占用的存储空间不同
6、课件第2讲例2:
用自增运算改写前一程序(部分)
7、课件第2讲例4:
将数组a中n个整数按相反顺序存放。
8、课件第2讲例5:
用指针方法对10个整数按由大到小顺序排序。
9、课件第2讲例6:
有一个3×4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值。
10、课件第2讲例7:
有一个3×4的二维数组,要求用指向一维数组元素的指针变量输出任一行任一列元素的值
11、课件第2讲例8:
有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。
12、实验_22、(基础题)使用指针编程实现:
输入3个正整数,按由小到大顺序输出。
程序运行结果如下所示:
13、实验_23、(基础题)分析、运行下列程序,理解二维数组“行指针”、“列指针”的类型,加减1所移动的字节数,熟悉二维数组元素的间接访问方法,并回答相关问题
14、课件第3讲 例1:
通过字符指针变量输出一个字符串。
15、课件第3讲 例3:
用函数调用实现字符串的复制
16、课件第3讲 例7:
将若干字符串按字母顺序(由小到大)输出。
17、课件第3讲例9:
有一个指针数组,其元素分别指向一个整型数组的元素,用指向指针数据的指针变量,输出整型数组各元素的值。
18、实验_31、(基础题)以下程序的功能是:
在主函数中定义一个int型4行5列的数组并初始化,然后调用print_array()、change_values()来输出、修改数组元素的值,请根据题意填写所缺代码,再运行程序,体会数组元素的不同访问方法。
程序运行结果如下所示:
#include<>
#include<>
#include<>
intmain()
{
inta[4][5]={0};
voidchange_values(int*p,intn);
voidprint_array(int(*p)[5],intm);
printf("修改前,二维数组各行各列元素:
\n");
(1)
(2)//调用change_values函数修改数组元素的值
printf("修改后,二维数组各行各列元素:
\n");
(3)
return0;
}
//函数change_values功能:
生成1-100之间的随机整数修改数组各元素的值
//形参:
p是数组的首地址,n是数组元素个数
voidchange_values(int*p,intn)
{
srand(time(0));
//代码段1
}
//函数print_array功能:
输出二维数组各行各列元素的值
//形参:
p是数组的首行地址,m是数组的行数(列数为5,以下不再重复)
voidprint_array(int(*p)[5],intm)
{
inti,j;
//代码段2
printf("\n");
}
19、实验_34、(基础题)指针数组的应用:
学院现有10系2部,建立一个char型指针数组指向这些单位名称,之后用冒泡排序法排序,并输出排序后的单位名称,如下图所示:
补充程序所缺代码:
#include<>
#include<>
intmain()
{
voidbubble_sort(char*name[],intn);//函数声明,下同
voidprint(char*name[],intn);
char*dept[]={"管理系","国际经贸系","财会系","计算机系","电子系","数码媒体系","外语系","软件工程系","网络技术系","游戏系","基础部","思政部"};
(1);//调用冒泡排序函数
(2);//调用输出多个字符串函数
printf("\n");
return0;
}
voidbubble_sort(char*name[],intn)//冒泡排序函数
{
//程序代码段1
}
voidprint(char*name[],intn)//输出多个字符串函数
{
//程序代码段2
}
20、课件第4讲例1:
建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩。
21、课件第4讲例2:
通过指向结构体变量的指针变量输出结构体变量中成员的信息。
22、课件第4讲例4:
有n个结构体变量,内含学生学号、姓名和3门课程的成绩。
要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)
23、课件第5讲例2:
输入一个整数,使它扩大16倍,不允许用乘法。
24、课件第5讲例4:
取一个整数a从右端开始的4~7位。
25、课件第5讲例5:
循环移位。
要求将a进行右循环移n位
26、课件第5讲例7:
输入半径,计算圆的周长、面积和球体的体积。
27、实验_51、(基础题)编写程序实现:
先输入两个整数x、y,然后计算出x&y、x|y、x^y、~x、x<<3、x>>2六种基本的位运算的结果,并输出。
28、课件第6讲例1:
从键盘输入一些字符,逐个把它们送到磁盘上去,直到用户输入一个“#”为止
29、课件第6讲例2:
编写一个程序,实现文本文件的复制功能。
30、课件第6讲例5:
编程序构成一个九九表,写入文件。
再从该文件把九九表中的数据读入二维数组a[9][9],并显示输出。
31、课件第6讲例6:
从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件上去
32、课件第6讲例7:
将上题生成的f:
\文件内容读出,然后在屏幕上显示
33、实验_61、(基础题)以下程序的功能是从键盘输入一个文件名,然后再输入一些字符,依次存放到该文件中,用@作为输入结束标志。
请先填充程序所缺代码,之后按要求操作,最后回答问题:
#include<>
#include<____
(1)____>
intmain()
{
FILE*fp;
charch,fname[51];
printf("请输入文件名:
");
____
(2)____;
if((fp=____(3)____)==NULL)
{
printf("文件不能打开!
\n");
exit(0);
}
while(____(4)____)
{
fputc(____(5)____);
}
printf("文件保存完毕!
\n\n");
____(6)____;//关闭文件
return0;
}
操作要求:
(1)文件指定为F:
盘根目录下,请输入以下内容:
90
abcdefghij
C语言@
(2)请查看文件的长度,用“记事本”打开该文件,再用UltraEdit查看该文件各字节的内容;
问题:
(1)文件操作的顺序是什么?
怎样打开、关闭文件?
(2)文件类型指针有什么作用?
(3)当打开文件不成功时,该如何处理?
(4)怎样向文件写入字符?
34、实验_62、(基础题)以下文件的功能是进行文本文件的复制。
源文件名、目标文件名由键盘输入。
请将程序所缺代码补充完整,之后按要求操作,最后回答问题:
:
#include<>
#include<>
intmain()
{
FILE*in,*out;
charch,infile[60],outfile[60];
printf("输入源文件的名字:
");
scanf("%s",infile);
printf("输入目标文件的名字:
");
scanf("%s",outfile);
if((in=fopen(____
(1)____))==NULL)//打开输入文件
{
printf("无法打开源文件\n");
exit(0);
}
if((out=fopen(____
(2)____))==NULL)//打开输出文件
{
printf("无法打开目标文件\n");
exit(0);
}
ch=fgetc(____(3)____);
while(____(4)____)
{
fputc(____(5)____);
ch=fgetc(in);
}
printf("\n文件复制完毕\n\n");
____(6)____;//关闭输入文件
____(7)____;//关闭输出文件
return0;
}
操作要求:
(1)请将实验6目录下的文件、拷贝到F:
\目录中;
(2)运行程序,输入源文件名:
F:
\\,目标文件名:
F:
\\。
查看与是否完全相同?
(可通过比较文件大小、用UltraEdit比较两文件的内容来判定);
(3)再次运行程序,输入源文件名:
F:
\\,目标文件名:
F:
\\。
这两个文件完全相同吗?
请分析其中的原因,并加以改进。
问题:
(1)打开源文件、目标文件时,打开方式各是什么?
(2)文本文件、二进制文件的打开方式有什么不同?
(3)对于文本文件、二进制文件,如何判断遇到了文件尾?
35、实验_63、(基础题)分析、运行下列程序,指出其功能,熟悉文件读写函数的使用:
(1)
#include<>
#include<>
#include<>
intmain()
{
FILE*fp;
charstr[101];
inti,n=5;
if((fp=fopen("F:
\\","w"))==NULL)
{
printf("不能打开此文件!
\n");
exit(0);
}
printf("请输入几个字符串:
\n");
while(strlen(gets(str))>0)
{
fputs(str,fp);
fputs("\n",fp);
}
printf("\n字符串内容已保存!
\n");
fclose(fp);
if((fp=fopen("F:
\\","r"))==NULL)
{
printf("不能打开此文件!
\n");
exit(0);
}
printf("\n文件中保存的字符串有:
\n");
while(fgets(str,101,fp)!
=NULL)
printf("%s",str);
fclose(fp);
printf("\n");
return0;
}
(2)
#include<>
#include<>
intmain()
{
FILE*fp;
inti,k;
intnum[]={100,101,102,103,104,105,106,107,108,109};
if((fp=fopen("F:
\\","w"))==NULL)
{
printf("不能将数据保存到文件中!
\n");
exit(0);
}
for(i=0;i<=9;i++)
{
fprintf(fp,"%5d",num[i]);
fprintf(fp,"\n");
}
fclose(fp);
if((fp=fopen("F:
\\","r"))==NULL)
{
printf("不能打开文件!
\n");
exit(0);
}
for(i=0;i<=9;i++)
{
fscanf(fp,"%d",&k);
printf("%-5d",k);
}
printf("\n\n");
fclose(fp);
return0;
}
(3)
#include<>
#include<>
intmain()
{
FILE*fp;
inti,k;
intnum[]={100,101,102,103,104,105,106,107,108,109},b[10];
if((fp=fopen("F:
\\","wb"))==NULL)
{
printf("不能将数据保存到文件中!
\n");
exit(0);
}
fwrite(num,sizeof(int),10,fp);
fclose(fp);
if((fp=fopen("F:
\\","rb"))==NULL)
{
printf("不能打开文件!
\n");
exit(0);
}
fread(b,sizeof(int),10,fp);
fclose(fp);
for(i=0;i<=9;i++)
printf("%-5d",b[i]);
printf("\n\n");
return0;
}
36、实验_64、(基础题)编程实现:
有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生学号,姓名,三门课成绩),计算出平均成绩,将原有数据和计算得到的平均分数存放在磁盘文件D:
\中。
程序运行结果如下图所示:
37、课件第7讲例1:
对一个文本文件先显示输出其内容,再复制到另一个文件中去。
38、课件第7讲例2:
在磁盘文件上已存有10个学生的数据。
要求将第1,3,5,7,9个学生数据输入计算机,并在屏幕上显示出来。
39、课件第7讲综合案例
(1)——通讯录信息管理系统
40、实验_62、(基础题)建立一个C项目,请将文件夹“通讯录管理系统(源代码)”下的文件复制、添加到项目中,之后分析、运行程序,并回答下列问题:
(1)该系统操作、管理的数据(信息)是什么?
怎样表示?
(2)怎样才能长期保存这些数据(信息)?
(3)本系统包含哪些功能?
(4)程序代码通过什么方式来组织?
并举例说明。
(5)如何让用户方便操作?
怎样设计、实现系统的主菜单?