知ing

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

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

゛Zirro、Y 上传

查看本书

62套: 

给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。 

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

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

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

给定源程序: 

#include <stdio.h> 

void fun(char *s) 

{ int i, n, k; char c; 

n=0; 

 

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

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

if(n%2==0) k=n-___1___ ; 

else k=n-2; 

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

c=___2___ ; 

for(i=k-2; i>=1; i=i-2) s[i+2]=s[i]; 

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

s[1]=___3___ ; 

main() 

{ char s[80]="abcdefgh"; 

printf("\nThe original string is : %s\n",s); 

fun(s); 

printf("\nThe result is : %s\n",s); 

解题思路: 

第一处:首先判断字符串的长度是奇数还是偶数,如果是奇数,则k=n-1,所以应填:1。 

第二处:取字符串最后一个奇数位的字符,并由变量c保存,所以应填:s[k]。 

第三处:第1位奇数位用最一个奇数位字符替换,所以应填:c。 

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

给定程序MODI1.C中 fun 函数的功能是:求 

s = aa… aa - ... - aaa - aa - a 

(此处 aa… aa 表示 个 a, a 和 的值在 至 之间

例如 a = 3, n = 6, 则以上表达式为: 

s = 333333 - 33333 - 3333 - 333 - 33 - 3 

其值是:296298 

和 是 fun 函数的形参,表达式的值作为函数值传回 main函数。 

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

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

给定源程序: 

#include <stdio.h> 

long fun (int a, int n) 

{ int j ; 

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

long s = 0, t = 1 ; 

for ( j = 0 ; j < n ; j++) 

t = t * 10 + a ; 

s = t ; 

for ( j = 1 ; j < n ; j++) { 

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

t = t % 10 ; 

s = s - t ; 

return(s) ; 

main( ) 

{ int a, n ; 

printf( "\nPlease enter a and n:") ; 

scanf( "%d%d", &a, &n ) ; 

printf( "The value of function is: %ld\n", fun ( a, n ) ); 

解题思路: 

第一处:根据for循环计算t的值可知,变量t的初值不正确,应为0。 

第二处:每次循环都是取t除以10的值,而不是取余数,所以应改t=t/10;。 

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

请编写一个函数 void fun(char *tt, int pp[]),统计在tt所指字符串中 'a' 到 'z' 26个小写字母各自出现的次数,并依次放在pp所指数组中。 

例如,当输入字符串:abcdefgabcdeabc 后,程序的输出结果应该是: 

3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

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

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

给定源程序: 

#include <stdio.h> 

#include <string.h> 

void fun(char *tt, int pp[]) 

main( ) 

{ char aa[1000] ; 

int bb[26], k, n ; 

printf( "\nPlease enter a char string:" ) ; scanf("%s", aa) ; 

fun(aa, bb ) ; 

for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ; 

printf( "\n" ) ; 

NONO ( ) ; 

解题思路: 

本题是考察考生在给定的字符串中统计出26个小写字母的次数并存入到指定的数组中且由形参返回。其中数组下标的位置可以通过某一个字符的ASCII值减去97或直接减'a'也可以,就可以得出该字符出现次数存放的位置。例如:字符为b,那么位置为'b'-'a'=1,就是实际存放的位置。 

参考答案: 

void fun(char *tt, int pp[]) 

char *p = tt ; 

int i ; 

for(i = 0 ; i < 26 ; i++) pp[i] = 0 ; 

while(*p) { 

if(*p >= 'a' && *p <= 'z') pp[*p - 'a'] += 1 ; 

p++ ; 

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


查看更多