【参考答案】
一.选择题
C B B A C B B C D C C C D C B B D B C C 二.填空题 (1) p (2) *p (3) 1 2 3 4 (4) 10,0
(5)strcmp(str2,str1);
(6) 定义指针数组p,它由4个指向整型数据的指针元素组成 (7) p为指向含4个元素的一维数组的指针变量 (8) p是返回一个指针的函数,该指针指向整型数据 (9) p为指向函数的指针,该函数返回一个整型值 (10) abCdabCdabCd 三.编程题
(1)定义3个整数及整数指针,仅用指针方法按由小到大的顺序输出。 #include
int *p1,*p2,*p3,i,j,k,temp; printf(\scanf(\p1=&i; p2=&j; p3=&k; if(*p1>*p2) {
}
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 #include
int m,i,j,a[10],*p1,*p2; p1=p2=a; }
if(*p1>*p3) { }
if(*p2>*p3) { }
printf(\
temp=*p3; *p3=*p2; *p2=temp; temp=*p1; *p1=*p3; *p3=temp; temp=*p1; *p1=*p2; *p2=temp;
for(i=0;i<10;i++)
scanf(\输入
31
p2--;
for(m=1,i=0;m<10;m++)
if(a[m]
i=m; //找出最小值
j=a[i]; a[i]=*p1;
*p1=j; //交换最小值与第一个数
for(m=1,i=0;m<10;m++) if(a[m]>a[i])
i=m; //找出最大值
j=a[i]; a[i]=*p2;
*p2=j; //交换最大值与第一个数
for(m=0;m<10;m++)
printf(\ printf(\ return 0;
}
编写程序实现将一个整数字符串转换为一个整数。 #include \#include \int Fun(char *str) {
int num,i,digital,len; num = 0; len=strlen(str); while(*str!='\\0') {
digital=*str-'0'; for(i=0; i return num; } int main() { char n[80 ]; int number; gets(n); number=Fun(n); printf(\ return 0; } 编写程序实现在主函数中输入字符串,并在lenth 函数中输出其长度。 #include while (str[++i]); // while循环在 str[++i] 为 '\\0' 时结束 return i; } int main() { char str[1000]; printf(\ gets(str); printf(\ return 0; } 编写transposition函数(参数用指针)将一个4×4矩阵转置。 #include \ void transposition(int *str) { int i,j,t; for(i=0;i<4;i++) for(j=i;j<4;j++) { t=*(str+4*i+j); *(str+4*i+j)=*(str+4*j+i); *(str+4*j+i)=t; } } int main() { int a[4][4],*p,i; printf(\ for(i=0;i<4;i++) 32 scanf(\[3]); printf(\ for(i=0;i<4;i++) printf(\[i][3]); p=&a[0][0]; transposition(p); printf(\ for(i=0;i<4;i++) printf(\[i][3]); return 0; } 不用字符串处理函数strcmp,编写自定义函数实现两个字符串的比较。 #include int scmp(char *p1,char *p2) { int i=0; while(*(p1+i)==*(p2+i)) if(*(p1+i++)=='\\0') return 0; return(*(p1+i)-*(p2+i)); } void main() { char str1[80],str2[80],*p1,*p2; int t; printf(\ gets(str1); printf(\ gets(str2); p1=str1; p2=str2; t=scmp(p1,p2); printf(\ } 编程实现统计子串substr在母串str中出现的次数。 #include int count(char *str,char *substr) { int i,j,k,num=0; for(i=0;str[i];i++) for(j=i,k=0;substr[k]==str[j];k++,j++) if(substr[k+1]=='\\0') { num++; break; } return(num); } void main() { char str[80], substr[80]; int n; printf(\ gets(str); printf(\ gets(substr); printf(\ } 不用字符串处理函数strcat,编程实现两个字符串s1和s2连接。 #include \#include \ char *stringcat(char s1[],char s2[]) { int i,j; for(i=0;s1[i]!=0;i++); for(j=0;s2[j]!=0;i++,j++) s1[i]=s2[j]; s1[i]=0; return s1; } int main() { char str1[1000],str2[80],*s; printf(\ gets(str1); printf(\ gets(str2); s=stringcat(str1,str2); printf(\33 return 0; 习 一、选择题 1.以下程序的运行结果是( )。 #include { int year,month,day; }today; union { long a; int b; char c; }m; printf(\ } A.6 4 B.8 5 C.10 6 D.12 7 2.若有以下定义和语句,不正确的引用是( )。 struct student { int age; int num; }; struct student stu[3]={{1001,20},{1002,19},{1003,21}}; main() { struct student *p; p=stu; ... } } 题10 A.(p++)->num B.p++ C . (*p).num D.p=&stu.age 3.以下程序的输出结果为( )。 #include s.a[2]=0x39; s.a[1]=0x38; printf(\} A.390039 39 B.380039 9 C . 3938 38 D.3839 8 二、填空题 1、在以下嵌套结构中填空,给出李冬的姓名、年龄(20岁)、性别(男)、生日(1993年5月16日)、语种(c)及系别(计算机系)的信息,并输出这些信息。 #include { int month; int day; int year; }; struct student { _________ name[20]; _________ age; 34 _________sex; _________date_birthday; _________Language; _________department[30]; }; main() { struct student s1=_________; printf ___________; } 2.结构体数组中存有3个人的姓名和年龄,以下程序输出3个人中最年长者的姓名和年龄,在横线上填上正确的内容。 static struct man { char name[20]; int age; }person[]={{\ng\main() { struct man *p,*q; int old=0; for(_______;______;p++) if (old ________; } printf(\ } 三、编程题 1.定义一个结构体变量(包括年、月、日),计算该天在本年中为第几天?(需考虑闰年问题)要求写一个days函数来实现。由主函数将年月日传递给days函数,计算后将天数传回主函数输出。 2.有若干个学生,每个学生的记录包括学号、姓名和三门课的成绩,从键盘输入学生数据(学号为0000时,输入结束),要求输出每个学生的三门课总平均成绩。 3.编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。 4.设计候选人得票统计的程序,要求随机设定候选人,每次输入一个得票候选人的名字,最后输出各人得票情况。 5.有一个链表,每个结点包括:学号、姓名、性别和年龄。编写函数,实现如下功能:每输入一个学生信息,比较新输入学生学号与框表中已有结点的学号信息是否重复,如果重复则提示“学号重复!”,并重新输入下一个学生信息;如果不重复,则把该学生信息放到链表的最后,输出该链表中的学生信息。 【参考答案】 一.选择题 1 D 2 D 3 B 二.填空题 1.char 、int、char、struct data、char、char、(“李冬,20,1,1993-5-16 , c, ” 计 算 机 系 “ 、 int days(date d) { int num = 0; int m, da, i; if ((d.year %4 == 0 && d.year 0!=0)||(d.year % 400 == 0)) { for (m = 1; m <= d.month ; m++) { if (m == 2) da = 29; else if (m==4||m==6||m==8||m==11) da = 30; else da = 31; for (i = 1; i <= da;i++) { (“%s,%d,%d,%s,%s\\n”,s1.name,s1.age,s1.data_birthday,s1.Language,s1.departmet) 2. p=person、p<3、old=p->age、q->nam,q->old 三.编程题 1、 #include int year; int month; int day; }date; 35