知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

30套: 

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。例如:a所指变量中的学号、姓名、 

和三门课的成绩依次是:10001"ZhangSan"958088,则修改后输出b中的数据应为:10002"LiSi"958088。 

请在程序的下划线处填入正确的内容并把下划线删除使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

#include <string.h> 

struct student { 

long sno; 

char name[10]; 

float score[3]; 

}; 

void fun(struct student a) 

{ struct student b; int i; 

/ **********found**********/ 

b = __1__; 

b.sno = 10002; 

/ **********found**********/ 

strcpy(__2__, "LiSi"); 

printf("\nThe data after modified :\n"); 

printf("\nNo: %ld Name: %s\nScores: ",b.sno, b.name); 

/ **********found**********/ 

for (i=0; i<3; i++) printf("%6.2f ", b.__3__); 

printf("\n"); 

main() 

{ struct student s={10001,"ZhangSan", 95, 80, 88}; 

int i; 

printf("\n\nThe original data :\n"); 

printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name); 

for (i=0; i<3; i++) printf("%6.2f ", s.score[i]); 

printf("\n"); 

fun(s); 

解题思路: 

本题是对结构体变量中的值进行修改。 

第一处:要修改的结构体变量是由形参a来传递的,所以应填:a。 

第二处:对结构体中的成员name进行替换,所以应填:b.name。 

第三处:分别输出结构体中的成绩,所以应填:score[i]。 

*************************************************** 

给定程序MODI1.C中函数fun的功能是:从s所指字符串中删除所有小写字母c。 

请改正程序中的错误,使它能计算出正确的结果。 

注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

void fun( char *s ) 

{ int i,j; 

for(i=j=0; s[i]!='\0'; i++) 

if(s[i]!='c') 

 

/ ************found************/ 

\TAB s[j]=s[i]; 

/ ************found************/ 

s[i]='\0'; 

main() 

{ char s[80]; 

printf("Enter a string: "); gets(s); 

printf("The original string: "); puts(s); 

fun(s); 

printf("The string after deleted : "); puts(s);printf("\n\n"); 

解题思路: 

第一处新字符串的位置值是由变量j来控制的,但程序中字符赋值后没有对j进行增量的语句,所以应改为:s[j++]=s[i];。 

第二处对新字符串添加字符串结束符,由于程序中使用变量j对新字符串来控制的,所以应改为:s[j]=0;。 

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。函数fun中给出的语句仅供参考。 

例如,字符串中的内容为:*******A*BC*DEF*G****,移动后,字符串中的内容应当是:A*BC*DEF*G***********。在编写函数时不得使用C语言提供的字符串函数。 

注意部分源程序在文件PROG1.C文件中。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

void fun( char *a ) 

/ * 以下代码仅供参考 */ 

char *p,*q; 

int n=0; 

p=a; 

while(*p=='*') / * 统计串头'*'个数n */ 

{n++; p++;} 

q=a; 

/ * 向前复制字符串,请填写相应的语句完成其功能 */ 

for(;n>0;n--) / * 在串尾补n'*' */ 

*q++='*'; 

*q='\0'; 

main() 

{ char s[81],*p; int n=0; 

printf("Enter a string:\n");gets(s); 

fun( s ); 

printf("The string after moveing:\n");puts(s); 

NONO(); 

 

解题思路: 

本题是考察字符串的移动。具体操作请看参考源程序。 

参考答案: 

void fun( char *a ) 

/ * 以下代码仅供参考 */ 

char *p,*q; 

int n=0; 

p=a; 

while(*p=='*') / * 统计串头'*'个数n */ 

{n++; p++;} 

q=a; 

/ * 向前复制字符串,请填写相应的语句完成其功能 */ 

while(*p) { 

*q=*p; 

p++;q++; 

for(;n>0;n--) / * 在串尾补n'*' */ 

*q++='*'; 

*q='\0'; 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多