11.以下程序执行结果为【11】。
main()
{
int i,j,k;
for(i=0,j=5;i<=j;i++,j--);
printf(″k=%d″,k=i+j);
}
【参考答案】:
【11】 k=5
12.以下程序的输出结果是【12】。
main()
{
char s[ ]=″abcdef″;
s[3]=′\0′;
14.下面的程序用来统计文件中字符的个数,请填空。
#include
main()
{考试通
FILE *fp;
long num=0;
if((fp=fopen(″fname.dat″,″r″))==NULL)
{ printf(″Cant’t open file! \n″);exit(0);}
while(【15】){fgetc(fp);num++;}
printf(″num=%1d\n″,num);
fclose(fp);
}
【参考答案】:
【15】 !feof(fp)
printf(″%s\n″,s);
}
【参考答案】:
【12】 abc
13.以下程序的功能是从键盘上输入若干个字符(以回车符作为结束)组成一个字符串存入一个字符数组,然后输出该字符数组中的字符串。请填空。
#include
#include
main()
{
char str[81],*sptr;
int i;
for(i=0;i<80;i++)
{ str[i]=getchar();if(str[i]==′\n′)break;}
str[i]=【13】;sptr=str;
while(*sptr)putchar(* sptr【14】);
}
【参考答案】:
【13】 ′\0′ 【14】 ++
15.在C语言中(以16位PC机为例),一个float型数据在内存中所占的字节数为4;一个double型数据在内存中所占的字节数为【16】。
【参考答案】:
【16】 8
16.以下函数的功能是求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。
请按题意,完成填空。
试题程序:
#include
#include
void fun(int x,int pp[ ],int *n)
{ int i,j=0;
【17】
if(x%i==0)pp[j++]=i;
【18】;
}(www.Examw.com)
main()
{ int x,aa[1000],n,i;
clrscr();
printf(″\nPlease enter an integer number :\n″);scanf(″%d″,&x);
fun(x,aa,&n);
for(i=0;i printf(″%d″,aa[i]); printf(″\n″); } 【参考答案】: 【17】 for(i=1;i 17.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。 struct node { int info; 【19】link; }; 【参考答案】: 【19】 struct node * 18.设有以下结构体类型: struct st { char name[8]; int num; float s[4]; } student[50]; 并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整: fwrite(student,【20】,1,fp); 【参考答案】: 【20】 sizeof(struct st)*50 一、填空题 给定程序中,函数fun的功能是:找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! #include #define N 4 void fun(int(*a)[N],int *b) { int i,j; for(i=0; i { b[i]= 1 ; for(j=1;j if(b[i] 2 a[j][i]) b[i]= a[j][i]; } } main() { int x[N][N]={{12,5,8,7},{6,1,9,3}, {1,2,3,4},{2,8,4,3}},y[N],i,j; printf("\nThe matrix :\n"); for(i=0;i { for(j=0; j printf("%4d",x[i][j]); printf("\n"); } fun( 3 ); printf("\nThe result is:"); for(i=0; i printf("\n"); } 【答案及解析】 二、改错题 给定程序中,函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。 例如,当字符串中的内容为“abcdabfabcdx”、t中的内容为“ab”时,输出结果应是abcdx。当字符串中的内容为“abcdabfabcdx”、t中的内容为“abd”时,则程序输出未找到信息not be found!。 请改正程序中的错误,使其能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include #include char *fun(char *s,char *t) { char *p,*r,*a; a=Null; while(*s) { p=s;r=t; while(*r) if(r==p) {r++;p++;} else break; if(*r=='\0') a=s; s++; } return a ; } main() { char s[100],t[100],*p; printf("\nPlease enter string S :"); scanf("%s",s); printf("\nPlease enter substring t :"); scanf("%s",t); p=fun(s,t); if(p) printf("\nThe result is :%s\n",p); else printf("\nNot found !\n"); } 【答案及解析】 三、编程题 请编写函数fun,其功能是:比较两个字符串的长度,函数返回较长的字符串。若两个字符串长度相等,则返回第1个字符串(不得使用C语言提供的求字符串长度的函数)。 例如,输入beijing 注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 #include char *fun(char *s,char *t) { } main() { char a[20],b[10],*p,*q; int i; printf("Input 1th string: "); gets(a);中 华 考 试 网 printf("Input 2th string: "); gets(b); printf("%s",fun(a,b)); } 【答案及解析】 (1)本题主要考查for循环语句的概念。根据题意知,需要使用两个循环来实现,即第1个for循环的作用是求字符串s中字符的个数;第2个for循环的作用是求字符串t中字符的个数。然后进行比较即可。由于任何for循环都要控制一条语句,因此在每个for循环条件后面必须要加一个分号。 (2)按上述解析写出的函数是: char *fun(char *s,char *t) { int i,j; for(i=0;s[i]!='\0';i++); /*求字符串s的长度*/ for(j=0;t[j]!='\0';j++); /*求字符串t的长度*/ if(i>=j) return s; else return t; }
上机部分
(1)b是一维数组,存放N×N矩阵中每列元素中的最大值,循环开始,第i列的b[i]应该首先赋值为每列的第一个元素a[0][i],再循环与本列其他元素比较,最后找出每列元素中的最大值。因此空1中应该填入:a[0][i]。(2)for(j=1;j
(1)二级C是区分大小写的,在仔细阅读程序后,发现Null是一个错误的标识符。给a指针赋空值,空值的宏定义符号是NULL,因此应该改为:a = NULL;(2)按照语义是判断r和p指针是否相等,显然是错误的。因为本题是判断子串t是否在串s中出现,应该判定r和p所指内存中字符是否相同,因此应该改为if(*r==*p)。