printf(―which style you want to \\n‖); printf(―capital (c) or uncapital(u);‖); c=getchar(); if(c=’c’) put(s); else {
s=‖computer‖; puts(s); } }
分析出错原因。
4.设计一个C程序,用以测试下列各表达式的运算。 (1) y=*px++ (2) y=*++py (3) y=(*py)++ (4) y=--*ppx++
4、想使指针变量pt1指向a 和b 中的大者,pt2指向小者,以下程序能否实现此目的?
swap(int *p1,int *p2) {
int *p;
p=p1;p1=p2;p2=p; }
main() {
int a,b;
scanf(―%d,%d‖,&a,&b); pt1=&a;pt2=&b; if(a
printf(―%d,%d\\n‖,*pt1,*pt2); }
上机调试此程序。如果不能实现题目要求,指出原因,并修改之。 5、 下面的程序。注意其中的复杂声明语句;
int (*function[4])();和各标记符的含义,并记录执行结果。 main() {
int fun1(); int fun2(); int fun3(); int fun4();
int (*function[4])(); int a=10,b=5,i; function[0]=fun1; function[1]=fun2;
function[2]=fun3; function[3]=fun4; for(i=0;i<4;i++)
printf(―fun no.%d->%d\\n‖,i+1,execute(a,b,function[i])); }
execute(int x,int y,int *fun()) {
return(*fun)(x,y); }
fun1(int x, int y) {
return(x+y); }
fun2(int x,int y) {
return(x-y); }
fun3(int x,int y) {
return(x*y); }
fun4(int x,int y) {
return(x/y); }
6、程序
main(int argc,char *argv[]) {
while(argc-->1)
printf(―%s\\n‖,*++argv);
的文件名为echo.h,编译后可执行程序名为echo.exe(用DOS时),运行时输入下面命令行:echo BASIC FORTRAN COBOL PASCL 分析输出结果。
7、从1984年起,在每年举行的USENIX大会上,都有一项AWARD FOR BEST ONE –LINER奖获奖的情况程序都是极精巧的C语言程序,但有些精巧得过分,使人难以懂。如果你有兴致,请先读一下下面的C 程序,它是1987年获奖者ONLINE COMP0UTER SYSTEM公司的SEINCER HINES 写的,被公认为是历史上风格最差的C 语言程序,程序清单如下: #include
main(otgo.toog) int togo; char *toog[]; {
char *ogto;
tgoop[80];FILE*ogot;int oogt=0;ootg,otog=79, ottg=1;if(tog0==ottg)goto gogo;goto goog;ggot; if(fgets(tgoo,otog,ogot)) goto gtgo;goto gott;
gtot:exit();ogtg;++oogt;goto ogoo;togg:if(oogt>0) goto oggt;goto ggot;if(!ogot)goto gogo; goto ggto;gtto:printf(―%dgoto\\s\\n‖,oogt);
goto gtot;oggt:if(!memcmp(ogto,‖goto‖,4))goto otgg; goto gooo;gogo:exit(ogtt);gtto:ootg=strlen(tgoo); goto gtog;oogo:--oogt;goto togg;
goot—ogto;goto oogo;gott:fclose(ogot); got gtto;otgg:ogto=ogto+3;
goto ogtg;tgog:ootg-=4;goto togg;gtgo:ogto=tgoo; got o tggo;ogoo:ootg-=3;goto gooo;goog:ogot =fopen(toog[ottg],‖r‖);goto ogog;ggto;ggto:ogto=tgoo;goto ggto:}
如果你上机还有时间,请运行一下上面的程序,看你能否运行出结果,并分析出程序的功能。
三、分析讨论
1、指针的使用方法和特点。 2、数组与指针的联系。
实验六 链表
一、目的和要求
1、掌握结构体类型方法以及结构体变量的定义和引用。
2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。 3、掌握运算符‖.‖和‖->‖的应用。 4、共用体的概念和应用。 5、链表的操作 二、实验内容和步骤
1、有4名学生,每个学生的数据包括学号、姓名、成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。
2、建立一个链表每个结点包括的成员为:职工号、工资。用malloc打印出来。用一个creat 来建立链表,用list来输出数据。5个职工号为101,103,105,107,109。
3、在上题基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。写一函数insert来插入新结点。
4、在上面的基础上,写一函数delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表.
5、你有无办法测试构造链表时,内存空间的动态分配情形? 三、分析讨论
1、结构体的方式。 2、链表的操作。
实验七 文件
一、目的和要求
1、掌握文件指针的概念。
2、掌握文件打开、关闭、读、写等文件操作函数。 3、用缓冲文件系统对文件进行简单的操作定义和引用。 二、实验内容和步骤
1、有5名学生,每个学生的数据包括学号、姓名、成绩(三门课成绩),从键盘输入学生的成绩,要求计算平均成绩、将原有的数据和平均成绩存放在磁盘file中。
2、将上题“file‖文件中的学生数据,按平均分进行排序,要求将排序的学生术数据存放在文件“file1”中。
3、在上题基础上,插入一个学生的3门成绩,要求程序先计算新插入学生的平均成绩,然后将它按成绩的高低顺序插入,插入后建立一个新文件“file2”。
4、在上面的基础上,写一函数delete,用来删除一个学生的数据,再存回原文件。 三、分析讨论
1、文件种类。
2、文件的读写方式。