《c语言上机试题》word版.doc
《《c语言上机试题》word版.doc》由会员分享,可在线阅读,更多相关《《c语言上机试题》word版.doc(118页珍藏版)》请在装配图网上搜索。
一、填空题请补充fun函数,该函数的功能是:判断一个年份是否为闰年。例如,2007年不是闰年,2008是闰年。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。# include # include int fun(int n) int flag=0; if(n%4=0) if(_1_) flag=1; if(_2_) flag=1; return _3_;二、改错题下列给定程序中,fun函数的功能是:根据形参n,计算如下公式的值。 例如,若输入5,则应输出2.28333。请修改程序中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include double fun(int n) double s=1.0; int i; /*error*/ for(i=2;i=n;i+) s+=1.0/k; /*error*/ _填 空_三、编程题请编写函数fun,它的功能是:求出1到500之内能被7或11整除,但不能同时被7和11整除的所有整数,并将它们放在b所指的数组中,通过m返回这些数的个数。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。# include # include void fun(int *b,int *m) 一、填空题【答案及难度指数】(1)n%100!=0(2)n%400=0(3)flag【一起来审题】(1)该题中函数功能是判断一个年份是否为闰年。其中,闰年的条件是年数可以被4整除,即为闰年;被100整除而不能被400整除的为平年;被100整除也可被400整除的为闰年。(2)从已给部分源程序的main主函数开始入手,主函数中的if(fun(year)判断语句,调用函数fun对年数进行判断。(3)进入fun函数,利用if对年数进行判断。 【解题思路】第一空:根据闰年的条件和已有的语句if(n%4=0),知道这里的条件应该是能被4整除但要排除被100整除的整数,所以第一空填n%100!=0。第二空:被100整除也可被400整除的为闰年,所以第二空填n%400=0。第三空:主函数中if(fun(year)语句是对函数返回值的判断,所以fun函数应该将对n的判断的flag值返回,第三空填flag。【主要考点】if条件语句。二、改错题【答案及难度指数】(1)s+=1.0/i;(2)return s;【一起来审题】该题中函数功能是求题干累加公式的值。从已给定源程序的main主函数开始入手,通过printf(nnthe result is%lfn,fun(n);语句调用fun函数,求得公式值。【解题思路】(1)第一个标识下,在以i为循环参数的for循环中进行公式累加,每一项为1.0/i,所以s+=1.0/k;改为s+=1.0/i;。(2)第二个标识下,首先根据题干,将填空删除,函数定义为double fun(int n),它有double型的返回值,所以这里返回累加公式的计算结果,即return s;。【主要考点】函数功能;函数返回。三、编程题【答案及难度指数】int j,k=0; for(j=2;j500;j+) /循环条件if(j%7=0|j%11=0)&j%77!=0) /判断是否符合题干要求 bk+=j; /将结果放入数组b *m=k; /将累加器值赋值给m【一起来审题】(1)该程序的解题思路,可以分解为以下几步:判断是否被7整除判断或者是否被11整除并且不被77整除按要求返回计算结果。(2)从已给部分源程序的main主函数开始入手,核心函数fun(a,&m);,其中m返回这些数的个数,a传给函数中的参数,存放计算结果的数组b。【解题思路】进入fun函数,根据前面的分析:首先,定义变量k,设置为累计器,计算符合条件的数的个数。然后,通过循环,判断小于500的每一个整数是否符合题干中的要求。其中的判断条件能否被7或者被11整除为j%7=0|j%11=0,不能被11和7同时整除为j%77!=0,它们之间的并关系就用&连接,最后结果即为(j%7=0|j%11=0) & j%77!=0。最后,将符合条件的整数存入数组b中,同时对k进行自加,将k值赋给m,返回结果。【主要考点】数组操作;函数传值;if条件语句;for循环语句。一、填空题请补充函数fun(char *t),该函数的功能是把字符串中的内容逆置。例如,字符串中原有的字符串为ABCDE,则调用该函数后,串中的内容为EDCBA。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。# include # include # include # define M 60void fun(char *t) int j,m=strlen(t)-1; char s; for(j=0;jm;j+,_1_) s=tj; _2_; _3_; 一、填空题【答案及难度指数】(1)m-(2)tj=tm(3)tm=s【一起来审题】(1)该程序功能实现字符串的逆置。把字符串中字符逆置就是把字符串中的第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,直到所有的元素交换完成为止。(2)从已给部分源程序的main主函数开始入手,主函数调用fun(b);,通过键盘输入字符串b,作为参数传给函数void fun(char *t)中的t。(3)进入fun函数,要想实现逆置,首先要求得字符串的长度。通过m=strlen(t)-1;求得m的值即为字符串的长度。然后通过for循环对字符串进行置换。【解题思路】第一空:for(j=0;jm;j+,_1_)根据前面的分析,对字符串的置换是从第一个元素和最后一个元素(jm,m是字符串的长度)开始进行循环交换,从第一个元素j=0开始向后增加为j+,所以从最后一个向前减少即为m-,第一空填m-。第二空:char s;用来定义存放临时的字符,s=tj;的目的是首先用s存放字符串t的第j个字符,这样将第m个字符存放在j的位置,就首先实现了将后面的第m个字符置换到前面的第j的位置,所以第二空填tj=tm。第三空:前面实现了后面的第m个字符置换到前面的第j个字符,同时将第j个字符的内容存放在临时的字符s,现在就将这个临时字符s中的内容存放在第m个字符位置,这样就完成了j位置的字符与m位置字符的置换,所以第三空填tm=s。【主要考点】字符数组。二、改错题下列给定程序中,函数fun的功能是:判断字符ch是否与s所指串中的某个字符相同,若相同,则什么也不做;若不同,则将其插在串的最后。请修改程序中的错误,使它能得出正确的操作。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include # include /*error*/void fun(char s,char c) while(*s & *s!=c) s+; /*error*/ if(*s=c) s0=c; /*error*/ s1=0; main() char str81,ch; printf(n Please enter a string:n); gets(str); printf(n Please enter the character to search:); ch=getchar(); fun(str,ch); printf(nThe result is %sn,str);二、改错题【答案及难度指数】(1)void fun(char *s,char c)(2)if(*s=0)(3)s1=0;【一起来审题】该题中函数功能首先是查找子串再判断,最后是实现将符合条件的字符串进行连接。从已给定源程序的main主函数开始入手,通过fun(str,ch);语句调用fun函数,实现题干的要求。【解题思路】(1)第一个标识下,void fun(char s,char c)根据主函数中的定义,知道s为数组名,传的应该是数组地址,所以应改为void fun(char *s,char c)。(2)while循环中对c与s进行匹配检查,第二个标识下,是当不同时执行连接操作,那么判断s是否为结尾的表达式应该是if(*s=0)。(3)第三个标识下,连接后的新串要添加结尾符,所以正确的表达是将s1=0;改为s1=0;。【主要考点】函数定义语法;数组操作。三、编程题请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如,若二维数组中的值为:357999949998则函数值为72。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。# include # include # define M 3# define N 4int fun(int bMN) 三、编程题【答案及难度指数】int i,j,s=0;for(j=0;jN;j+) /统计行元素 s+=b0j; s+=bM-1j; for(i=1;i=M-2;i+) /统计列元素 s+=bi0; s+=biN-1; return s;【一起来审题】该程序功能是求出二维数组周边元素之和。其中周边元素是指数组的最上和最下的两行,最左和最右的两列。数组第一行元素的行下标为0,最后一行元素的行下标为M-1,第一列的列下标为0,最后一列的列下标为N-1。【解题思路】进入fun函数,根据前面的分析:求周边元素的和,可以采用两个循环分别把行元素和列元素相加。但要避免把周边元素重复相加。【主要考点】二维数组;for循环语句。三、编程题编写函数int fun(int mm,int bMAX),该函数的功能是求出小于或等于mm的所有素数,并放在b数组中,该函数返回所求出的素数的个数。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。# include # include # define MAX 100int fun(int mm,int bMAX) main() int m,i,sum; int bMAX ; FILE *out; printf(input a data:n); scanf( %d,&m); sum=fun(m,b); for(i=0 ;isum;i+) if(i%10=0 & i!=0) printf(n); printf(%5d,bi); sum=fun(28,b); out=fopen(outfile.dat,w); for(i=0 ;i1;i-) for(j=2;j=i) /若是素数,将其存入b bk=i; k+; /累加素数个数 return k+;【一起来审题】该程序功能是求一定范围内的素数。素数是只能被1和自身除尽的数。判断i是不是素数最简单的方法就是用2(i-1)去除i,只要能除尽就不是素数。【解题思路】进入fun函数,根据前面的分析:(1)首先,判断i是否是素数,即是否能被2(i-1)整除。(2)若是素数,就将i存入数组b,并对计数器k加1。(3)最后返回素数的个数k。其中,对于素数的判断并不只局限于上面提到的方法,也可以采用其他的方法进行判断。【主要考点】数组操作;if条件语句;for循环语句。三、编程题请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串:-999,则函数把它转换为整数值:-999。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。# include # include long fun(char *str) main() char s10; long n; FILE *out; char *t=123,789,7102,-4356; printf(Enter a string:n); gets(s); n=fun(s); printf(%ldn,n); out=fopen(outfile.dat,w); for(n=0;n4;n+) fprintf(out,%ldn,fun(tn); fclose(out);三、编程题【答案及难度指数】long s=0,t;int i=0,j,n=strlen(str),k,s1;/求得字符串长度nif(str0=-) i+;for(j=i;j=n-1;j+) t=strj-0;/把字符变成数值 s1=10; for(k=j;kn-1;k+) t*=s1; /把t中原来的数值增加10倍,即向左移动一位 s+=t; /把转换后的数值t加在个位 if(str0=-) /判断数字字符是否为负数 return-s; /负数返回-s else return s; /正数返回s【一起来审题】该程序功能是将一个数字字符串转换为一个整数。其中,解题思路是将每位数字字符串的ASCII码减去48(字符0的ASCII码值),变成数值09。然后再不断进行高位乘以10加低位的运算,或者反过来从低位向高位求,即不断进行低位加高位乘以10的运算。【解题思路】进入fun函数,根据前面的分析:从左到右移动指针str,利用上一步不断把t中的数据左移一位,把str当前所指字符转换成数字再加上低位,从而把数字字符串转换成一个整数。【主要考点】数组操作;for循环语句。一、填空题给定程序的功能是分别统计字符串中大写字母和小写字母的个数。例如,给字符串str输入:sfd34ddfoFFDEsd23sdf,则输出结果应为:cap=4,min=13请勿改动函数中的其他内容,仅在横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。# include void fun(char *str,int *x,int *y) while(*str) if(*str=A & *str=a & *str=A & *str=Z)是判断当前字符是否为大写字母,而且x是一个整型指针,要使x指向的数据实现递增,则要把指针改为实际数据,因此第一空应填(*x)+。同理,第二空填(*y)+。第三空:根据题意要输出统计的字符串中大、小写字母的个数,参照前面参数的对应关系,第三空填cap,min。【主要考点】输入输出函数及指针的使用。三、编程题请编写一个函数fun,它的功能是:比较两个字符串的长度(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入beijing和shanghai两个字符串,函数将返回shanghai。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。# include char *fun(char *str,char *t) main() char a20,b10,*p,*q; int i; FILE *out; printf(Input one string:); gets(a); printf(Input another string:); gets(b); printf(%sn,fun(a,b); out=fopen(outfile.dat,w); fprintf(out,%s,fun(hunan,changsha); fclose(out);三、编程题【答案及难度指数】char *p,*t1=t,*s1=str;int n=0,m=0;while(*s1) /计算串str的长度n,其中s1为临时指针 n+; s1+; while(*t1) /计算串t的长度m,其中t1为临时指针 m+; t1+; if(n=m) /比较m和n的值,设置p指向较大的指针 p=str; else p=t;return p;【一起来审题】该程序功能是比较两个字符串的长度。解题过程是首先分别求得两个字符串的长度,然后对这两个值进行判断,实现两个字符串长度的比较。【解题思路】进入fun函数,根据前面的分析:(1)首先求得字符串的长度,设变量n和m分别用来求字符串的长度,初值设为0,把字符串中的字符逐个访问,每访问一个字符,n和m分别加1,直到字符串结束。(2)使用两个临时指针变量s1、t1分别作为访问字符串的变量。(3)根据m和n的值返回串,设置指针p,指向返回串的开始地址。【主要考点】指针操作;函数传值;while条件。一、填空题给定程序的功能是求1/4的圆周长,函数通过形参得到圆的直径,函数返回1/4的圆周长(圆周长公式为:L=d,在程序中定义的变量名要与公式的变量相同)。例如,输入圆的直径值:19.527,输出为:15.336457。请勿改动主函数main与其他函数中的任何内容,仅在横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。# include double fun(double d) return 3.14159*_1_/4.0;main() double z; printf(Input the d of the round : ); scanf(%lf,&_2_); printf( L=%lfn ,fun(_3_);一、填空题【答案及难度指数】(1)d(2)z(3)z【一起来审题】(1)该程序功能是计算1/4的圆周长。从已给部分源程序的main主函数开始入手,主函数通过键盘输入获得圆的直径,通过调用printf输出语句中fun函数计算1/4的圆周长。(2)进入fun函数,根据前面的定义,计算四分之一的圆周长并返回。 【解题思路】第一空:return 3.14159*_1_/4.0;这里根据return 知道该语句是返回四分之一的圆周长,根据圆周长公式,很容易知道这里缺少圆的直径参数,结合函数fun的定义double fun(double d)中的参数d,第一空应填d。第二空:scanf(%lf,&_2_);是获得由键盘输入的参数值,&是C语言中的求地址运算符。主函数初始定义了参数z,因此填z。其中,&z为输入项。第三空:printf( L=%lfn ,fun(_3_);输出函数fun的计算结果,将直径参数传给函数定义中的d,根据前面的定义和输入,这里应该填z。【主要考点】函数调用;参数传值。二、改错题下列给定程序中函数fun的功能是:计算正整数m的各位上的数字之积。例如,若输入202,则输出应该是0。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include long fun(long n) /*error*/ long r; do r*=n%10; /*error*/ n=10; while(n); return (r);main() long m; printf(nplease enter a number:); scanf(%ld,&m); printf(n%ldn,fun(m);二、改错题【答案及难度指数】(1)long r=1;(2)n/=10;【一起来审题】(1)本题中函数的功能是计算正整数各个位上的数字之积。首先要对正整数进行截取,取得该正整数的各个位上的数字,然后对求得的数进行累积。(2)从已给定源程序的main主函数开始入手,通过键盘输入一个正整数m,语句printf(n%ldn,fun(m);调用fun函数求得m各个位上的数字之积。【解题思路】(1)第一个错误标识下的r是函数的返回值,子函数fun中在执行r*=n%10;之前,只进行了定义,却没有赋初值,编译的时候会指出在无定义前使用了变量r。r代表了各个位上的数字之积,其初值应为1。因此,第一个标识下的long r;改为long r=1;。(2)第二个标识下的符号是非法字符,根据题意,这里应该是进行除法运算,所以n=10;应该改为n/=10;。【主要考点】变量初始化;算术表达式语法。三、编程题请编写一个函数fun,它的功能是:求出1到m之内(含m)能被7或11整除的所有整数放在数组b中,通过n返回这些数的个数。例如,若传送给m的值为20,则程序输出7 11 14。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。# include # include # define N 100void fun(int m,int *b,int *n) main() int aN,n,i; FILE *out; fun(20,a,&n); for(i=0;in;i+) if(i+1)%20=0) printf(%4dn,ai); else printf(%4d,ai); printf(n); out=fopen(outfile.dat,w); fun(100,a,&n); for(i=0;in;i+) if(i+1)%10=0) fprintf(out,%4dn,ai); else fprintf(out,%4d,ai); fclose(out);三、编程题【答案及难度指数】int i,j=0;*n=0;for(i=1;i=m;i+) if(i%7=0|i%11=0) bj=i; j+; *n=j;【一起来审题】该题是求某范围内能被7或11整除的数。该程序的解题思路可以分解为以下几步:判断是否被7整除判断或者是否被11整除按要求返回计算结果。【解题思路】进入fun函数,根据前面的分析:(1)数i能否被7或11整除,它的逻辑表达式为(i%7=0|i%11=0)。(2)其中满足被7或11整除的数的个数,可以用累加器j来计数。【主要考点】指针操作;for循环语句;数组操作。一、填空题请补充main函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找出最大的整数。当输入的整数为-1时结束。例如,输入96 121 23 343 232 54 89 365 89 -1时,最大的数为365。仅在横线上填写所需的若干表达式或语句,请勿改动函数中的其他任何内容。注意:部分源程序给出如下。# include # include # define NUM 100main() int nNUM; int i=-1; int MAX=-1; printf(nInsert integer with the -1 as end: n); do i+; printf(n%d=,i); scanf(%d,_1_); MAX=_2_ni : MAX; while(_3_); printf(The MAX=%dn,MAX);一、填空题【答案及难度指数】(1)&ni (2)MAXni? (3)ni!=-1【一起来审题】(1)该程序功能是使用条件表达式找出最大的整数。从已给部分源程序的main主函数开始入手,主函数执行int i=-1;int MAX=-1;初始化参数定义。(2)进入do-while循环语句从键盘输入整数,并且通过条件表达式找出最大值。【解题思路】第一空:scanf(%d,_1_);是从键盘输入,取值。根据上一句printf(n%d=,i);输出语句,可知该空应填&ni。第二空:MAX=_2_ ni : MAX;是使用条件表达式判断当前输入的ni和MAX值的大小,根据printf(The MAX=%dn,MAX);循环外的输出语句,可知MAX用来存储最大值,因此根据条件表达式语法,第二空应填MAXni?。第三空:while(_3_);是循环执行的条件,根据题意当输入-1时结束,因此,循环执行的条件是,当前输入不是-1,第三空应填ni!=-1。【主要考点】while循环;选择语句。二、改错题下列给定程序中,函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其数值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字。例如,若输入11111,则输出将是4681。请修改程序中的错误,使它能得出正确结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include # include int fun(char *s) int n; /*error*/ n=*s-o; s+; /*error*/ while(*s!=0) n=n*7+*p-o s+; return n;main() char str6; int i; int n; printf(Enter a string (octal digits): ); gets(str); if(strlen(str)5) printf(Error:string too longer!nn); exit(0); for(i=0;stri;i+) if(stri7) printf(Error: %c not is octal digits!nn,stri); exit(0); printf(The original string: ); puts(str); n=fun(str); printf(n%s is convered to intege number: %dnn,str,n);二、改错题【答案及难度指数】(1)n=*s-0;(2)n=n*8+*s-0;【一起来审题】(1)该题中函数功能是实现八进制到十进制的转换。其中,八进制与十进制之间的转换关系是:八进制就是逢8进1。八进制数采用 07这8个数来表达一个数。八进制数第1位的权值为8的0次方,第2位权值为8的1次方,第3位权值为8的2次方,等等。(2)从已给定源程序的main主函数开始入手,首先通过if语句判断串是否过长,是否符合题干要求;然后循环判断串中的每一位是否都在07之间,是否符合八进制要求,最后调用fun(str)实现八进制到十进制的转换。【解题思路】(1)第一个标识下面:语句n=*s-o;中的o不是数字零,而是字母o,根据前面的分析因此改为:n=*s-0;。(2)第二个标识下面:语句n=n*7+*p-o,首先进行同(1)相同的修改,然后根据题干要求,要进行八进制到十进制的转换,它的权值为8,而不是7,因此是n*8而不是n*7,所以此句改为:n=n*8+*s-0;。【主要考点】字符;数制。三、编程题下列程序定义了NN的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的r。例如,若c数组中的值为: 则返回主程序后r的值应为4.625000。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。# include # include # include # define N 3double fun(int bN) main() int cNN=1,9,7,4,5,2,3,8,3; int i,j; FILE *out; double r; printf(*n); for(i=0;iN;i+) for(j=0;jN;j+) printf(%4d,cij); printf(n); r=fun(c); printf(THE RESULTn); printf(The r is %lfn,r); out=fopen(outfile.dat,w); fprintf(out,%lf,r); fclose(out);三、编程题【答案及难度指数】int i,j,k=0;double r=0.0;for(j=0;jN;j+) /统计第一行进行统计 r+=b0j; k+; for(j=0;jN;j+) /对第n-1行进行统计 r+=bN-1j; k+; for(i=1;i=N-2;i+) /对第一列进行统计 r+=bi0; k+; for(i=1;i=N-2;i+) /对第n-1列进行统计 r+=biN-1; k+; return r/=k; /求平均数【一起来审题】该程序功能是求出数组周边元素的平均值。其中周边元素是指第一行的元素的行下标为0,或者第n行的元素行下标为n-1,或者第一列元素的元素列下标为0,或者第n列的元素的列下标为n-1。【解题思路】进入fun函数,根据前面的分析,采用循环分别对符合周边元素条件的元素进行统计求平均值。【主要考点】二维数组;for循环语句。一、填空题请补充fun函数,该函数的功能是将字符串str中的小写字母都改为对应的大写字母,其他字符不变。例如,若输入Welcome!,则输出WELCOME!。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。# include # include # include char *fun(char str) int j; for(j=0;strj;j+) if(strj=a)&(_1_) strj-=_2_; return (_3_);main() char str100; printf(nPlease enter a string: ); gets(str); printf(nThe result string is: n%s,fun(str);一、填空题【答案及难度指数】(1)strj=a),所以第一空填strj=z。第二空:根据转换方法的分析,这里是对小写字母的ASCII码减32的操作,所以第二空填32。第三空:函数fun定义时,返回值为char*,这里是对操作后的字符串的返回,所以这里填str。【主要考点】指针;数组;函数返回值。二、改错题下列给定程序中,函数fun的功能是:计算并输出n以内最大的10个能被11或19整除的自然数之和。n的值由主函数传入,若n的值为300,则函数值为2646。请修改程序中的错误或在横线处填上适当的内容并把横线删除,使程序能得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include # include int fun(int n) int m=0,mix=0; while(n=2) & (mix10) /*error*/ if(n%11=0) | (n%19=0) m=m+n; mix+; n-; return m;/*error*/_填 空_main() printf(%dn,fun(300);二、改错题【答案及难度指数】(1)if(n%11=0) | (n%19=0) (2)【一起来审题】该题中函数功能是求能被11或19整除的自然数之和。从已给定源程序的main主函数开始入手,printf(%dn,fun(300);语句中的fun函数将300传给n,计算小于300的能被11或19整除的自然数之和。【解题思路】(1)第一个标识下的if(n%11=0) | (n%19=0)语句应该是判断n是否能被11或19整除,所以应该用逻辑符号=而不是赋值符号=,即if(n%11=0) | (n%19=0)。(2)第二个标识下,_填空_明显没有函数结束括号,所以这里应该填。【主要考点】逻辑语法;函数返回值。三、编程题请编写函数fun,其功能是:将str所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在s所指的数组中。例如,若str所指字符串中的内容为ABCDEFG123456,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他以此类推。最后s所指的数组中的内容应是246。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。# include # include # include void fun(char *str,char s) main() char str100,s100; FILE *out; printf(nPlease enter string :); scanf(%s,str); fun(str,s); printf(nThe result is : %sn,s); out=fopen(outfile.dat,w); strcpy(str,Please enter string :); fun(str,s); fprintf(out,%s,s); fclose(out);三、编程题【答案及难度指数】int i,j=0,n;n=strlen(str); /取字符串str长度for(i=0;in;i+) if(i%2=0&stri%2=0) /判断字符i是否符合条件 sj=stri;/将偶数下标及偶数ASCII码的字符放入新串 j+; /新串长度加1 sj=0; /新串添加尾符【一起来审题】该程序功能是将字符串中除了下标为偶数、ASCII值也为偶数的字符外,其余的全都删除。解题过程利用if条件判断表达式选择符合条件的字符,然后将符合条件的字符放入指定的字符串。【解题思路】(1)判断一个字符串中的某一字符下标i是否为偶数,可用i%2=0来判断,而判断字符中的ASCII码值是否为偶数,则可用stri%2=0来判定。 (2)对串str中各个字符串逐个进行考查,满足条件的字符就顺序放在新串s中,否则就不存放。(3)所有字符处理完后,记得在新串s的末尾加上结束符0。【主要考点】数组操作;函数传值;if条件语句;for循环语句。一、填空题请补充fun函数,该函数的功能是:依次取出字符串中所有大写字母,形成新的字符串,并取代原字符串。例如,输入sdfASDsd,则输出ASD。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。# include # include void fun(char *s) int j=0; char *p=s; while(_1_) if(*p=A & *p=Z) sj=*p; _2_; p+; sj=_3_;main() char str100; printf(nPlease Input a string :); gets(str); printf(nnThe original string is : %sn,str); fun(str); printf(nnThe string of changing is : %sn,str);一、填空题【答案及难度指数】(1)*p(2)j+(3)0【一起来审题】(1)该程序功能是取出字符串中所有大写字母。(2)从已给部分源程序的main主函数开始入手,主函数语句fun(str);调用函数fun实现题目要求。(3)进入fun函数,利用while循环对字符串中的每一个字符进行判断。 【解题思路】第一空:根据fun函数的定义和while中if判断语句中的表达式,知道这里字符为指针型,即这里填*p。第二空:如果字符*p符合条件语句中的表达式,即*p为大写字母,将*p的值赋于sj,并且计算器j加1,所以第二空填j+。第三空:对所有字符处理完后,要注意的就是在新字符串s的末尾加上串结束符0,所以第三空填0。【主要考点】while语句;字符串操作。二、改错题下列给定程序中,函数fun的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之和。请修改函数fun中的错误或在横线处填上适当的内容并把横线删除,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。# include void fun() int aa33,sum; int i,j; /*error*/ _填 空_; for(i=0;i3;i+) for(j=0;j3;j+) /*e- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言上机试题 语言 上机 试题 word
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文