printf(\printf(\}
运行结果:
指针可以进行:指针变量加减一个整数、指针变量赋值、指针变量相减、指针变量比较。
下面的程序能获得上述结果么? 答:可以! #include
char *s=\ char c;
printf(\ printf(\ c=getchar(); if(c='c') puts(s); else {
s=\ puts(s); } }
(4) 设计一个C语言程序,用以测试下列各表达式的运算顺序。 设计程序如下: #include
int y,*px,*py,*ppx,a,b,c; px=&a; py=&b; ppx=&c; y=*px++;
printf(\ y=*++py; printf(\ y=(*py)++; printf(\
36
y=--*ppx++; printf(\}
运行结果如下:
实验
15
1.实验目的与要求
(1)掌握结构体类型的概念和定义方法以及结构体变量的定义和引用。
(2)掌握指向结构体变量的指针变量的概念和应用,特别是链表的概念和应用。(3)掌握运算符“,”“->”的应用。 (4)掌握共用体的概念和应用。 2.实验准备
做好下面的实验准备工作。 3.实验内容和步骤 (1)程序功能
输入具体的年月日,输出该日期是这一年的第几天。请将空白处填好。 完整程序如下: #include
static int day_tab[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
0,31,29,31,30,31,30,31,31,30,31,30,31}; struct date {
int day; int month; int year; int yearday;
char month_name[5]; };
day_of_year(struct date * pd) {
int day,i,leap;
leap=((*pd).year@0==0)||((*pd).year%4==0&&(*pd).year0!=0); day=(*pd).day;
for(i=1;i<(*pd).month;i++) day+=day_tab[leap][i]; (*pd).yearday =day; }struct date w;
37
main() {
printf(\
scanf(\ day_of_year(&w);
printf(\ }
(2)调试下列程序,分析数据之间的储存关系。 #include
char *s;
struct sf * psf; }
main() {
static struct sf x[]={{\ struct sf *p[]; int i;
for(i=0;i<3;i++) p[i]=x[i].psf ;
printf(\ swap(*p,x);
swap(p[0],p[0]->psf );
printf(\ printf(\}
swap(struct sf *p1,*p2) {
char * temp; temp=p1->s; p1->s =p2->s; p2->s=temp; }
(3)下面的程序旨在建立一条单向链表储存线性表(a1-a2……-an),然后将此线性表;逆置成(an-an-1…a2-a1)。 完整程序如下: #include
int num;
struct node * next; }* head;
int a[10]={1,2,3,4,5,6,7,8,9,10};
38
main() {
int i ;
struct node *p; if(head!=NULL) {
p=head;
p->num =a[0]; } else {
printf(\ exit(1); }
for(i=2;i<=10;i++) {
p->next =(struct node *)malloc(sizeof(struct node)); if(p->next !=NULL) {
p=p->next;
p->num =a[i-1]; p->next =NULL; }
else break; }
reverse(head); }
reverse(struct node *p) {
struct node *prt1,*prt2; ptr1=p->next ;
while(ptr1->next!=NULL) {
ptr2=ptr1->next; ptr1->next=p; p=ptr1;
ptr1=ptr2; }
ptr1->next=p;
head->next =NULL; head=ptr1;
}
39
实验16
1、实验目的与要求
(1) 掌握文件和文件指针的概念以及文件的定义方法。 (2) 了解文件打开和关闭的概念及方法。 (3) 掌握有关文件的函数。
2、实验准备
做好下面实验的准备工作。
3、实验内容和步骤
(1)下面的程序要实现两个文件之间的比较,具体功能如下。 1)使用命令行参数输入两个文件的文件名。
2)要求给出两 个文件首次出现不同的行和字符时的位置。
调试程序如下: #include
main(int argc,char*argv[ ]) {
FILE*f1,*f2,*fopen(); int line=0,count=0; char c1,c2; if(argc>2){ f1=fopen(argv[1],\ f2=fopen(argv[2],\ if(f1!=NULL && f2!=NULL) while((c1=getc(f1))!=EOF){ c2=getc(f2); if(c1=='\\t'||c1=='\\n') count++; else c2=getc(f1); if( !count ) line++; } else{ printf(\ exit(1); if(c1==EOF) printf(\ else printf(\ fclose(f1);
40