为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

四川大学历年考研C语言试题及答案

2017-10-27 41页 doc 86KB 286阅读

用户头像

is_260251

暂无简介

举报
四川大学历年考研C语言试题及答案四川大学历年考研C语言试题及答案 C Language for 2006 0 引言 1历年川大考研真题讲评 1.1 四川大学2000年攻读硕士学位研究生入学考试试题 及 答案 C语言部分 一、选择题(每小题2分,共10分) (下在各小题,分别有一个或多个正确答案,请将所有正确答案的编号,填写在该小题题干后的括号内。错选或漏选均不得分)。 1、若定义:int a[2][3],0,2,4,6,8,10,;以下描述正确的有( A,C,D,E ) A、*(a+1)为元素6的地址 这里a+1=a[1]的地址;*(a+1...
四川大学历年考研C语言试题及答案
四川大学历年考研C语言试题及答案 C Language for 2006 0 引言 1历年川大考研真题讲评 1.1 四川大学2000年攻读硕士学位研究生入学考试试题 及 答案 C语言部分 一、选择题(每小题2分,共10分) (下在各小题,分别有一个或多个正确答案,请将所有正确答案的编号,填写在该小题题干后的括号内。错选或漏选均不得分)。 1、若定义:int a[2][3],0,2,4,6,8,10,;以下描述正确的有( A,C,D,E ) A、*(a+1)为元素6的地址 这里a+1=a[1]的地址;*(a+1)的值是6,故A正确。 B、*(a[1]+1)的值为2 为8,故B不正确 C、**(a+1)+2的值为8 这里a+1是一个指针,指向的是a[1]. *(a+1)为a[1],a[1]指向的是a[1][0]. **(a+1)为6,加2得8,故C正确; D、a[0]与a相同 因二者都是指针,指针的地址都是指向数组中的第一个元素的地址,故D正确。 E、a[1][2]的值为10 它是指第二行的第三个元素,为10,正确 2、对函数的正确使用方法描述( A,C,D )。 A、用数组做函数参数时,必须在主调函数和被调函数中分别定义数组 B、实参数组元素和形参数组元素类型可以不一致 C、形参数组长度可以不指定 D、形参数组长度可以大于实参数组第 1 页 共 37 页 1 C Language for 2006 长度 E、数组名做参数属于值传递 3、对静态变量的正确描述( A,B,D,E ) A、静态局部变量在静态存储区内分配单元( ) B、静态外部变量可以赋初值,也可以不赋初值 C、静态外部变量的作用与外部变量相同 D、静态局部变量在函数调用结束时,仍保存其值,不会随着消失。 E、静态局部变量只赋一次初值 4、下列描述正确的是( A ,C)。 A、由main 函数及其参数argc和* argv[]可以实现命令行方式 B、使用fclose关闭文件时,先释放文件指针,再写缓冲区数据到文件中 //先写缓冲区数据到文件中,再释放文件指针 C、字符数组并不要求它的最后一个字符是‘\0’ //是的,以字符指针指向的字符串才要求,因为只有这样,才能知道字符串的长度,而在字符数组中,不用\0,一样可以知道到哪里是字符数组的结尾。 D、‘A’和“A”都是字符串常量 E、若char*S=“\ta\017bc”;则指针变量S指向的字符串所占的字节数是7 5、在缓冲文件系统中用于读写的函数有( A,B,D ) A、putchar () B、fread() C、rewind () D、purw() E、fseek() 二、程序阅读,并给出运行结果(共10分,每题5分)。 (1)main() , unsigned a,b,x int n; a=0x763 输出结果: n=6; b=a,,(12-n); 第 2 页 共 37 页 2 C Language for 2006 x=(a,,n-2)^b; //+,-,的优先级比<<,>>高。 \nb=%x,\nx=%x”,b,x); printf(“ , 在用2个字节示整数的系统中 结果为 d8c0 d8b6 在用4个字节表示整数的系统中 结果为 1d8c0 1d8b6 故以上两种结果都正确。 (2) #include 〈stdin.h〉 struct m ,int x; int *y; , *p; int a [4]=,12,33,-40,100,; struct m b [4]=,10,&a[2],9,&a[3],8,&a[0],7,&a[1],' main() , p=b; 输出结果: printf(“%d\n”,++p-,x); //->的优先级高于++,因此等于是++(p->x), 为11 printf(“%d\n”,(++p)-,x); //p后移一个元素,其x值为9; printf(“%d\n”,++(*p-,y)); //->的优先级高于*, 此时p已指向b[1],故*(p->y)为a[3]为100.自加后 第 3 页 共 37 页 3 C Language for 2006 为101; , 故输出结果为: 11 9 101 三、程序设计(共10分) 设在文件a.txt和文件b.txt中分别存有两个字符串,设计一个程序将这两个字符串按依序交叉的方式合并为一个字符串(例如“aaaaa”与“bbb”的合并结果为“abababaa”,而“bbb”与“aaaaa”的合作结果为“ bababaa”,)并将结果存入文件a.txt中。 【答案】 写程序时,可以分别读取a.txt文件和b.txt文件,注意(1),无论a文件先读完还是b文件先读完,程序都能作出适应性的判断。注意(2)把a和b合并的结果,写到一个临时文件c中,最后把c的文件覆盖到a文件中,达到题意的要求。 #include main() { FILE *fp,*fq,*fr; char ch; if((fp=fopen("a.txt","r+"))==NULL) { printf("cannot open file a.txt"); exit(0); } if((fq=fopen("b.txt","r"))==NULL) { printf("cannot open file b.txt"); exit(0); 第 4 页 共 37 页 4 C Language for 2006 } fr=fopen("c.txt","w+"); while(!feof(fp)) { ch=fgetc(fp); fputc(ch,fr); if(!feof(fq)) { ch=fgetc(fq); fputc(ch,fr); } } while(!feof(fq)) { ch=fgetc(fq); fputc(ch,fr); } rewind(fp); rewind(fr); while(!feof(fr)) { ch=fgetc(fr); fputc(ch,fp); } fclose(fp); fclose(fq); fclose(fr); } 第 5 页 共 37 页 5 C Language for 2006 1.2 四川大学2001年攻读硕士学位研究生入学考试试题 及 答案 1.2.1第2001年――C语言程序设计 题目 一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码写在答题纸上。请注意注明题号。每小题1分,共计6分) 1、‘\t’表示什么, ?字符串常数 ?标识符 ?变量 ?字符常量 答案:? 2、对宏定义不正确的描述是哪一个, ?在进行宏定义时,可以引用已经定义的宏名,可以层层置换 //可以引用已经定义了的宏名,可以层层置换 ?宏名的有效范围包括本文件的任何位置 //宏名的有效范围定义命令之后到本源文件结束,可以用#define终止宏定义的作用域 ?宠定义不是语句,不必在行末加分号 //是预处理定义语句 ?对程序中双引号括起来的字符串,即使与宏名相同,也不进行置换 3、若定义static char s[20]=”computer”;则执行语句x = strlen(s);之后,x的值为多少, ?20 ?9 ?8 ?19 //strlen函数计算char*型字符串的长度的时候,并不包含末尾的\0; 4、以下哪一个表达式取值是正确的, ?6>5结果为6 ?6,,5结果为7 ?6||5结果为7 ?6<5结果为0 5、如定义 enum weekday ,one, two, thr, fou, fiv,; enum weekday working; 以下哪个是不正确的枚举变量的使用, 第 6 页 共 37 页 6 C Language for 2006 ?working = thr; ?working =2; working = (enum weekday)2; ? ?working = (enum weekday) (5-3); //不能对其赋值 6、下列说法中正确的是哪一个, ?sizeof (char) 是结果为整型的表达式 ?sizeof (char) 是一个不合法的表示形式 ?sizeof (char) 是一种函数调用 ?sizeof (char) 是结果为实型的表达式 二、阅读程序,并回答问题(共12分) 1、下列程序的输出是什么,(3分) # include void main () , char * aplha [6] = ,“ABC”,“DEF”,“GHI”,“JKL”,“MNO”, “PQR”,; char **p; int i; p = aplha; for (i = 0; i<4; i++) printf (“%s”, p[i]); printf (“\n”); , //输出结果 ABCDEFGHIJKL 刚好是字符串数组里面的前四个元素的内容连接起来 2、下列程序为什么无法将用户输入的三个整数按从小到大排序输出, 第 7 页 共 37 页 7 C Language for 2006 应该如何修改,(6分) # include void swap (int x, int y) , int t = x; x = y; y = t; , void main () , int a, b, c; scanf (“%d, %d, %d”, ,a, ,b, ,c); if (a>b) swap (a, b); if (a>c) swap (a, c); if (b>c) swap (b, c); printf (“%d, %d, %d”, a, b, c); , //函数swap采用值传递,虽然将形参x和y交换了,但是并不影响到实参。将值传递改成指针传递就可以了。 C函数参数采用值传递方式,虽然swap函数将形式参数x和y的值进行了调换,但是影响不到相应的实在参数。所以在主函数中,通过调用sawp函数调换a和b(或a或c,或b和c)的值是根本达不到目的的。 修改: (1)(2分) void swap (int *x, int*y) , int t = *x; *x = *y; *y = t; 第 8 页 共 37 页 8 C Language for 2006 , 2)(2分)主函数 ( if(a>b) swap(,a,,b); if(a>c) swap(,a,,c); if(b>c) swap(,b,,c); 3、假设系统为基本整型量分配2个字节,为字符型量分配1个字节。下列程序完成的功能是什么,(3分) # include union , int n; char ch [2]; ,u; void main () , int m; scanf (“%d”,,m); u.n = m; printf (“\n%u, %u”,u.ch[0], u.ch[1]); , //该程序的功能,取用户输入的整数值的高字节和低字节,并按照任意整数的低字节和高字节分别输出。 三、程序设计题(12分) 假设一个文本文件中保存着100个整数,请将这100个整数按从小到大的顺序写到另一个文本文件中去,并且在新文件中每10个整数占一行。源文件名和目标文件名通过命令行参数获取。 第 9 页 共 37 页 9 C Language for 2006 分数分配: 变量定义 2分 命令行参数处理 1分 文件打开 1分 文件读 2分 排序 3分 文件写 2分 文件关闭 1分 # include void main(int argc, char *argv[]) , FILE *fin, *fout; Int a [100], i, j, t; if(argc!=3) , printf (“ You forgot to enter a filename\n”); return; , fin = fopen (argv[1], “r”); fout = fopen (argv[2], “w”); for (i = 0; i<100; i++) fscanf (fin, “%d”, ,a[i]); for (i = 0; i<99; i++) for (i = 0; i<99,i; i++) if (a[j]>a[j+1]) ,t = a[j]; a[j] = a[j+1]; a[j+1]=t;, for (i = 0; i<100; i++) , 第 10 页 共 37 页 10 C Language for 2006 if (i%10 = 0) fprintf (fout, “%s”, “\n”); fprintf (fout, “%d”, a[i]); , fclose (fin); fclose (fout); , 1.3 四川大学2002年攻读硕士学位研究生入学考试试题 及 答案 1.3.1 第2002年――C语言题目 C语言程序设计(共30分) 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案。每小题1分,共6分) 1、如果I为整型变量,f为float型变量,c表达式'a'+I*f的类型为 。 A、字符型 B、整型 C、单精度型 D、双精度型 //即使是两个float型的数据相加,都化成double型 float型的数据在运算时一律转化成双精度型,提高其运算精度 2、关于c表达式5||(a=b+c)==3的值,正确的说法为 。 A、值为1 B、值为5 C、值为0 D、仅这一个表达式,不能确定值,必须知道a,b,c的值后才能计算。 //等号==的优先级高于||所以先计算(a=b+c)==3但是不论它为真或假,在与5进行或运算时,按照或运算的法则,只要一方为真,表达式的结果为真。 3、若整型变量a的值为50,则c表达式a,,2的值为 。 A、50 B、25 C、12.5 D、12 第 11 页 共 37 页 11 C Language for 2006 //每右移一位除以2,且由于a为整型,结果为整型 、若c,c1,c2均为字符型变量,下列语句执行后。 4 c='a'; c1=++c; c2=c++; c1,c2的值分别为 。 A、c1='b',c2='c' B、c1='a', c2='c' C、c1='b',c2='b' D、 c1='a',c2='b' //前加加,先加1后使用值,后加加是先使用其值在加加,所以c加加 后的值赋予c1,c1得值b,c2先使用值,再加加,c2得值b 5、以下c 语句执行后, int i, s=0; for (i=0;i,10;i++)s+=i; printf ('%d\n', i); 输出的内容为 。 A、0 B、9 C、10 D、11 //i值在循环外定义,所以其值循环结束仍有意义,得值10 、以下c语句执行后, 6 char s1[100] =″I like C 1anguage″,s2[100]; strcpy(s2, s1); strcat (s1, s2); puts (s2); 输出的内容为 。 A、I B、I like C language C、I like C language I like C language D、I like C language I like C language I like C language //连接后的串存在s1里,对s2没有影响 二、阅读程序,写出该程序的执行结果。(4分) # include 〈stdio.h〉 void main ( ) 第 12 页 共 37 页 12 C Language for 2006 , char a [3] [10]=,"Beijing ","Shanghai", "Chengdu",; char p1, (*p2)[10]; p1=a[0]; p2=a; printf("%c\n",*(a[1]+1)); // a[1]代表是第一行字符串Shanghai,加1后得值第一个字符h的地址,*取出其地址里的值h printf("%c\n",*(*(a+1)+2)); // *(a+i)=a[i] 代表是第一行字符串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值 printf("%c\n",*(p1+1)); //p1是一字符指针,加一指向第零行第1个字符e的位置,*取出其地址里的值 printf("%c\n",*(*(p2+1)+2)); //p2为一指向数组的指针,p2是与数组名等价的指针,它指向2维数组的首行,p2,1指针指向了第一行字串Shanghai,加2后得值第2个字符a的地址,*取出其地址里的值 printf("%s\n",*(p1+1)); //打印的从第一个字符开始的第零行余下的字符串eijing printf("%s\n",*(p2[2]); //p2[2]指的是第二行,打印第二行字符串Chengdu printf("%s\n",*(p2,1)); //p2+1指向的是第一行字符串shanghai 三、按要求编写函数。(8分) 在一程序中定义了如下结构类型用于处理单向链表: struct linkage , int value; struct linkage *pNext; ,; 第 13 页 共 37 页 13 C Language for 2006 现已经编写出按节点的成员a值从小到大建立初始链表的函数 create ( ),如下所示: struct linkage * create (void ) , struct linkage * pHead; int a[4]=,2,1,3,5,; pHead=NULL; for (i=0;i,4;i++) pHead=addItem(pHead,a[i]); return pHead; , 在该函数的for循环前,pHead为NULL;在执行整个for循环后,创建的链表如下所示: p H 即在被调函数addItem( )中,需要动态分配内存,生成新节点,将传入的第二参数的值赋给该节点的成员value:并通过第一个参数链表首节点确定适当位置放置该新节点。 请完成函数: struct linkage * addItem (struct linkage *pHead, int value ); 返回值指向单向链表头节点。 你可能用到下面的动态内存分配函数。 void* malloc (unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间。返回值为指向分配域起始地址的指针。 1、在空链表中加第一个节点2分; 第 14 页 共 37 页 14 C Language for 2006 2、加到当前链表头节点前2分; 、加到当前链表头节之后适当位置,可分为两步。2分; 3 4、其它部分2分,包括整体结构,变量定义,返回值。 struct linkage *addItem (struct linkgae *pHead ,int value) struct linkage *p ,*q,*r,*s; , p=pHead; if (!p) , r=(struct linkage *) malloc (sizeof (struct linkage)); r-,a=value; r-,pNext =NULL; pHead=r; , =p-,a) else if (value , , r=(struct linkage *) malloc (sizeof (struct linkage)); r-,a=value; r-,pNext =p; pHead=r; else , q=p,pNext; while (q) if (value,=q-,a) break; else , p=q; q=p-,pNext; , r=(struct linkage *)malloc (sizeof (struct linkage)); r-,a=value; r-,pNext=q; 第 15 页 共 37 页 15 C Language for 2006 p-,pNext=r; , return pHead; , 四、程序设计。(12分) 单位HTML文件由标签,标题和正文主体等部分组成。如下所示: 〈HTML〉 〈HEAD〉 〈TITLE〉HTML标题部分 〈/HEAD〉 这里是HTML文件的主体部分。
换新行。 〈/HTML〉 符号"<与">"及其之间的内容是标签,如〈HTML〉,等。其 它部分是标题和主体。请按以下说明和要求完成程序,将简单的HTML文件 转换为TXT文件: 1( 序将简单HTML文件的有标签和换行符(\n)(去掉。 标题部分结束(遇到标签)后加上一个换行符(\n)。每一 个
标签换成一个换行符(\n)。其余部分原样保留。如上面的 简单HTML文件处理为(?表示换行): HTML标题部分? 这里是HTML文件的主体部分。? 换新行。 2(简单HTML文件的标签内没有嵌套情况,即在"<和">"这间不会再出现"<或">"。 3(标签内的内容大小写无关。如
,
,
等价。 4(示签的"<和">"与标签内容间无空格。即不会出现
或< 第 16 页 共 37 页 16 C Language for 2006 BR>等情况。 (标题和正文中不会出现"<和">"字符,它们通过转义字符实现,5 这时尤需考虑。 6(程序需要处理命令行参数。第一个参数指要处理的HTML文件名,第二个参数指定处理后要存放的文件名。这两个文件都是文本文件。 7(程序必须进行必要的出错处理,如无法打开文件等。 8(程序不需要包含头文件。 1、main()函数形参处理:2分。 2、变量定义1分。 3、打开关闭文件2分; 4、读源文件1分; 、能从标签中找出内容〈BR〉〈/TITLE〉换为'\n'部分2分; 5 6、区分开标签和其它部分,并按要求写入目标文件2分; 7、整体结构正确2分; void main (int argc, char *argv[]) , char C,tag[7]; int status ,len ; FILE*fin,*fout; if (argc!=3) , printf("参数个数不对~") exit (1) , if ((fin=fopen (argv [1],"r")))==NULL) , printf(“打不开源文件”); exit(1); } if ((fout=fopen (argv [2],"w")))==NULL) 第 17 页 共 37 页 17 C Language for 2006 , printf("无法写入文件~"); fclose (fin); exit (1); } status =0; while ((c=fgetc (fin)))!=EOF) switch (C) , case ',': status=1; len=0; break; case „>?: status=0; if(len<=6) tag[len]=0; if(!strcmp(tag,”/title”)||!strcmp(tag,”br”)) fputc(„\n?,fout); break; case '\n':break; default: if (! status) fputc (c,fout); else , len++; if (len,=6); tag[len-1]=c; 第 18 页 共 37 页 18 C Language for 2006 , , fclose (fin); fclose (fout); , 1.4 四川大学2003年攻读硕士学位研究生入学考试试题及 答案 1.4.1 第2003年――C语言题目 C语言程序设计(40分) 一、分析下面的 程序,写出程序执行结果。(每小题4分,共2分) 1、 #include 〈stdio.h〉 void swap (int **p1,int **p2) , int *t; t=*p1; p1=p2; *p2=t; , void main( ) { int a=1、b=3、*p=&a、*q=&b; swap(&p、&q); printf('%d、5d、%d、%d\n"、a、b、*p、*q; } //因为在swap函数里交换的是两个参数的地址,所以参数使用的是两级指针,表示交换的是指针的地址,最终使p指向了b,q指向了a。 1,3,3,1 第 19 页 共 37 页 19 C Language for 2006 2. # include void merge (char *d、char sl、char、S2) { while (*sl!='\0' && *S2!='\0') if (*sl<*s2) d++=*sl++; else d++=*s2++; while (*sl!='\0) *d++=sl++; while (*s2!='\0') *d++=s2++; *d='\0', } void main( ) { char sl="acdgh",s2="bcfhi",s3[20]; merge(s3,s1,s2); puts(s3) } //将两个字符串合为一个按照字母顺序排列的串 abccdfghhi 二、按要求完成C函数。(每小题10分,共20分) 1(int maxsameChar(char *s); 该函数计算字符串 s中最大连续相同的字符个数。例如,若s 为 "aaabbbb",则返回值为4;若s为"abcde",则返回值为1。 int maxSameChar (char *s) , int temp=1, max=0; char c='\0'; 第 20 页 共 37 页 20 C Language for 2006 while (*s) if (c==*s) , tmpe++; else , c=*s; temp=1; , if (max,temp) max=temp; s++; , return max; , 2( struct mode *reverse(struct mode *pHead); 其中,struct node 定义如下: struct node { int key ; struct node *pNext; }; 此函数传入的pHead指向要处理的单向链表头,该链表以NULL指针结束。函数实现链表链接方向(包括pHead 指向的原头节点)的反转,如图1所示。并将新链表头指针作为函数值返回。在完成此函数时,你只能利用原有链表节点,不能申请新节点空间。 第 21 页 共 37 页 21 C Language for 2006 struct node* reverse (struct node* pHead) , struct nodt *p,*q,*t; if (pHead==NULL) return NULL; p=pHead; pNext; q=p-, while (q! -NULL) , t =q-,pNext; q-,pNext=p; p=q; q=t; , pHead-,pNext=NULL; pHead=p; return pHead; , 三、按要求完成简单的客车车次查询程序。(12分) 某车站需要一个简单的客车车次查询程序。说明如下: 1( 客车车次数据文件checi.txt放在c:\data目录下,格式为: T8 成都 北京西 09:30 1364 成都 北京西 14:20 K118 攀枝花 北京西 22:00 „ „ „ 其中每行为一次车的信息,分为4个数据项:车次,始发站,终点站和 离开本站时间。前三个数据项留的宽度为8字符,最后一项结束后即换行。 数据项间一定有空格隔开,每一数据项内无空格。 第 22 页 共 37 页 22 C Language for 2006 2(你的程序对用户通过命令行参数指一的车次,在客车车次数据文件 中查找相应车次信息并输出该次车的始发站,终点站和离开本站时间,如果 未找到,则输出“找不到该次车信息~”。 3(你的程序可以使用的C库函数,可以不引用文件。程序中应给 出必要的注释。 int main (int argc, char *argv [ ]) , char info [4] [20]; FILE * fp; int I,found=0; if (argc!=2) , printf("参数个数不正确~\n"); return 1; , fp=fopen ("c:\\checi. txt ","r"); if (fp==NULL) , printf ("无法打开数据文件~\n"); return 1; , while (! feof (fp)) , for (I=0;i,4; i++) fscanf (fp,"%s",info[i]); if (!stricmp (info[0],argv[1])) , found=1; printf("始发站:%s\n",info [1]); printf("始发站:%s\n",info [2]); printf("离本站时间:%s\n",info [3]); break; , 第 23 页 共 37 页 23 C Language for 2006 , if (! found ) printf("找不到该次车信息~\n"); return 0; , 1.5 四川大学2004年攻读硕士学位研究生入学考试试题及 答案 1.5.1 第2004年――C语言题目 C语言程序设计(40分) 一、写出下列表达运算后a的值,设a,b 均为 int ,每个表达式运算到a=2,b=3。(5分) (1) a+=b*5 //a=a+b*5,为17 (2) a=b++ //a=3 (3) a%=(a%=b) //结果为0 (4) a=a,b&&b,a||a //,的优先级高于&&和||原式理解为(a,b)&&(b,a)||a &&运算符高于||,原式理解为((a,b)&&(b,a))||a,因为a值为2,结果为1真。或运算是有一为1 (5) a=!b,a&&!a,b //!的运算符最高,,其次,&&最小原式理解为((!b),a)&&((!a),b))结果为1 二、下面的程序构造一个有向图,请画出其示意图。(10分) 第 24 页 共 37 页 24 C Language for 2006 include 〈stdio.h〉 struct node /*有向图的节点类型*/ , int key; struct node *left,*right,*up,*down; ,; int main (int argc ,char * argv []) , int i; struct node nodes[5]; for( i=0;i,5;i++) , nodes [i].key=i; nodes [i].left=NULL; nodes [i].right=NULL; nodes [i].up=NULL; nodes [i].down=NULL; , nodes [0].left=nodes+1; nodes [1].left=nodes; nodes [1].up=nodes+2; nodes [2].down=nodes+3; nodes [3].right=nodes+4; nodes [4].up=nodes; nodes [4].down=nodes+1; return 0; , 0 2 2 3 4 第 25 页 共 37 页 25 C Language for 2006 三、按要求完成函数。(10分) int sameChar sAT SamePos (char *s1,char *s2); 两个字符串的字符进行同位置比较,返回相同的字符数(串结束符‘\0’不比较)。 。 例如,若s1="abc",s2="Abc",则返回值为2 int sameCharAtSame Pos (char *s1,char *s2) , int counter =0; while (*sl && *s2) , if (*s1 == *s2) counter ++; s1++; s2++; , return counter; , 四、按要求编写程序对一种特殊字符串解码。(15分) 要处理的特殊字符串由A,C,G,U四个字符组成,如下所示: ACUGCCCAUGAAAAACUUUUGACAC 其有效信息子串从第一次出现“AUG”后开始,遇到“UGA”结束(不包括“AUG”和“UGA”。)如上面的编码串需解码的有效子串为: AAAAACUUU 有效子串中每3个字符(如“AAA”,“CGA”)作为一个密码子(可以保证,有效子串的长度一定为3的整数倍。)可能的密码子(62种)及相应码值以如下形式放在编码文件code.txt中(按密码子字典序排列); AAA K 第 26 页 共 37 页 26 C Language for 2006 AAC N „„„„ UUU F 请编写C程序对存放在文件中的特殊字符串解码,在屏幕输出解码串。 如:KNF KNE 要求: 1、编码文件code.txt放在c盘根目录下; 2、要解码的特殊字符串以文件形式存放,其串长不超过1024字符; 3、你编写的程序应能处理命令参数,指定要解码的字符串文件; 4、程序中可以使用C语言的标准库函数,不需要写出头文件; 5、程序中应有必有的注释。 #include 〈stdio.h〉 #include 〈string.h〉 struct , char name[4]; char code; , table [62]; int main (int argc,char *argv [ ]) , FILE *code file=NULL, *string file =NULL; char string [1024+2],buffer[4],*p,*end ; int I; /* 检查命令行参数*/ if (argc,=1) , 第 27 页 共 37 页 27 C Language for 2006 /*打开编码文件以及待解码文件*/ code file=fopen ("c:\\code. txt","r"); string file =fopen (argv[1],"r"); if (code_file= = NULL | | string_file = =NULL) return 1; /* 读编码文件,将结果记入表中 */ for (i=0; i<62; i++) { fscanf(code_file, "%s %c\n", tabie[i], name, &table[i].code); } /*读待解码文件内容到string中 */ fgets (string, sizeof (string), string_file); /* 扫描有效子串头 */ p= strstr(string, "AUG"); end = strstr (p + 3 , "UGA"); /*读有效子串,查表输出解码字符,直到子串尾 */ for (p+=3; p int main( ) { int a=4,b=3,c=1,x; x=a>b; printf(“%d\n”,x); //结果为1 第 29 页 共 37 页 29 C Language for 2006 x=--a+b++; printf(”%d\n”,x); //结果为6 x=a>b; printf(”%d\n”,x); //结果为假,0 x=c,,b==c; printf(”%d\n”,x); //==的运算级高于&&, c,,(b==c)结果为假0 return0; } 2. #include int main( ) { inti,j; for(I=0;I=8;I+=2) { for(j=0;j<(8-I)/2;j++ printf(”+”); for(j=0;j<=I;j++) printf(”*”); printf(\n”); } return0; } ++++* +++*** ++***** 第 30 页 共 37 页 30 C Language for 2006 +******* 二(按要求完成函数。(28分) 1( 一种最简单的字符串加密方法是将字符串的每一字符加 上一个偏移量offset(不考虑溢出)。请编写木相应的编解码函 数,其原型分别为: char*encode(char*s,int offset); char *decode(char *s,offset); char *encode(char *s,int offset) { char *p=s; while (*p) { *p +=offset; } renturn s; } char *decode(char *sm int iffset) { char *p= s; while(*p) { *p-=offset; } return s; 第 31 页 共 37 页 31 C Language for 2006 } 2编写函数将两个节点值递增的单向链表归并为一个。要求利用 原节点空间。链表节点定义为: struct node { int value; struct node *pNext; }; 函数原型为: struct node *merge(struct node *a, struct node *b); 其中a,b为要归并的两个单向链表头节点指针,函数返回值为归并后 的单向链表头节点指针。 struct node { int value struct node *pNext; } struct node *merge(struct node *a, struct node *b) { struct node *p; struct node *q struct node *t; if (a->value <=b->vaLue) { p=a; q=b 第 32 页 共 37 页 32 C Language for 2006 } else { p=b q=a; } t=p; while (q) { if (p->pNext ==NULL) { P->Pnext=q break; } if (q->valuepNext->value) { struct node.*k=q->pNext; q->pNxt=p->pNext; p->pNext=q; q=k; continue; } p=p->pNext; } 第 33 页 共 37 页 33 C Language for 2006 return t; } 三(编写程序模拟数字LED显示。(14分) 编写程序完成如下功能:用户键盘输入最多四位的整数,在屏幕上以类 似LED方式显示。如用户输入为: 8234 则输出 其中每个数字字模均为7行×4列。0-9+个数字的字模顺序地以文本形 式存放在方件C:\font.txt中。 要求: 1、 输出的各数字间有1个空格; 2、 你的程序可以使用C语言标准库函数,不需要写出头文件; 3、 程序中应有必有的注释。 char font[10][7][5]; 94 int n; 95 int digit[4]; 96 int length=0; 97 98/ * 装载字体文件 */ 99 void load fontsO 100 { 101 int I, j, k; 102 FILE *file; 103 104 file = fopen(”c:\\font”,”r”); 第 34 页 共 37 页 34 C Language for 2006 105 if (file==NULL) 106 { 107 printf(” 打开字体文件 font. Txt 错误|n”); 108 exit(1); 109 } 110 111 for (k = 0; k<10;k++) 112 { 113 for (I=0; I<7; I++) 114 { 115 char line[10]; 116 fgets(line, 5, file); 117 for (j=0; j<4;j++) 118 { 119 font[k][I][j]=line[j]; 120 } 121 font[k][I][4]=0; 122 } 123 } 124 125 fclose(file); 126 } 127 128/* 将输入的整数解码为单个的数字*/ 129 void decode() 130 { 131 int I; 132 int m=n; 133 for (I=0; I <4;I++) 第 35 页 共 37 页 35 C Language for 2006 134 { 135 digit[I]=m % 10; 136 m =m/10; 137 138 if (m==0) 139 break; 140 } 141 142 length = I + 1; 143 if (length >=4) 144 length=4; 145 } 146 147 /* 显示LED */ 148 void disnlav() 149 { 150 int I,j; 151 for (I=0; I<7;I++) 152 { 153 for (j = length-I; j>=0;j__) 154 { 155 printf(”%s”, font[j][I]); 156 printf(” ”); 157 } 158 printf(” \n”); 159 } 160 } 161 162 int main() 第 36 页 共 37 页 36 C Language for 2006 163 { 164 165 load fonts(); 166 167 scanf(”%d”, &n); 168 decode(); 169 display(); 170 } 第 37 页 共 37 页 37
/
本文档为【四川大学历年考研C语言试题及答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索