国家二级C语言机试(操作题)模拟试卷911
程序填空题
1.给定程序中,函数fun的功能是:根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,输出字母的大小写与形参c一致,数量由形参d指定。若输出字母中有字母Z或z,则应从A或a开始接续,直到输出指定数量的字母。例如:c为’Y’,d为4,则程序输出ZABC;c为’z’,d为2,则程序输出ab。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在文件BLANK1.C中,不得增行或删行,也不得更改程序的结构!
#include<stdio.h>
#pragma warning(disable:4996)
void fun(char c,int d) {
int i;
char A[26],a[26],*ptr;
/*********found*********/
for(i=0;i<(【1】; i++) {
A[i] =’A’+i;
a[i] = ’a’ +i;
}
/*********found*********/
if((c>=’a’)&&(c(【2】’z’))
ptr=a:
else ptr=A;
/*********found*********/
for(i=1;i<=d;i++)
printf(\\
(1)26
(2)<=
(3)26
解析:函数fun()中首先将大写字母按照字母表的顺序存放到数组A中,将小写字母按照字母表的顺序存放到数组a中;然后判断输入的字符c,若字符c是小写字母,则将指针ptr指向数组a,若是大写字母,将指针ptr指向数组A;然后使用变量i遍历1到d,输出ptr所指数组中,偏移量为c-ptr[0]+i的元素,若偏移量c-ptr[0]+i>=26,则对26求余,循环输出数组开始部分的元素。注意:题意要求输出当前字符的后继字符,所以c-ptr[0]+i是将当前字符c减去ptr所指元素,然后与i相加,得到后继第i个字符的下标。
程序修改题
2.给定程序MODI1.C中,函数fun的功能是:分别统计出形参str所指的字符串中的大写字母和小写字母的个数,并传递回主函数输出。例如,若str所指的内容为”BAY23Kill”,其中大写字母数为4,小写字母数为3,则应输出:c0=4,c1=3。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996)
void fun(char*str,int*c0,
int*c1) {
int k;
/*********found*********/
c0=c1=0;
/*********found*********/
for(k=1;k<strlen(str);k++)
{
/*********found*********/
if((str[k]>=’A’)&&
(str[k]<=’z’))*c0++;
if((str[k]>=’a’)&&
(str[k]<=’z’))(*c1)++;
}
}
main()
{char str[1 00];int c0,c1;
printf(\\
(1)*c0=*c1=0;
(2)for(k=0;k<strlen(str);k++)
(3)(*c0)++;
解析:函数fun()的参数分别是str,c0,c1,其中str指向待处理的字符串,c0所指变量用来统计字符串中大写字母的个数,c1所指变量用来统计字符串中小写字母的个数。首先对c0和c1所指变量赋初值为0,然后遍历字符串str,若当前字符str[i]的ASCII码在’A’到’z’之间,则对c0所指变量的值自增1,若当前字符str[i]的ASCII码在’a’到’z’之间,则对c1所指变量的值自增1,由于c0和c1都是指针变量,所以在使用地址中存储的数据时,需要对它们进行解引用。
程序设计题
3.请编写函数fun,其功能是:统计出x所指数组中能被e整除的元素个数,通过函数值返回主函数;同时,计算不能被e整除的元素之和,放到形参sum所指的存储单元中。
例如,当数组x内容为1,7,8,6,10,15,11,13,29,31,整数e内容为3时,输出结果应该是:n=2,sum=110
注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include<stdio.h>
#pragma warning(disable:4996)
#define N 10
int fun(int x[],int e,int*sum)
{
}
main()
{
void NONO();
int x[N]={1,7,8,6,10,
15,11,13,29,31),e=3,
n,sum;
n=fun(x,e,&sum);
printf(\\
int fun(int x[],int e,int*sum)
{
int i,count=0;
*sum=0;
for(i=0;i<N;i++)
{
if(x[i]% e==0)
{
count++;
}
else
{
*sum+=x[i];
}
}
return count;
}
解析:程序首先定义循环变量i,整型变量count,count赋初值为0,count用来统计可以被e整除的元素个数;由于sum是main函数传入的指针变量,用来存放不能被e整除的元素之和,所以程序需要对sum所指变量赋初值为0;接着通过for循环变量数组x,将x[i]对e求余,若余数为0,则当前x[i]可以被e整除,将count自增1,若余数不为0,则x[i]不能被e整除,将x[i]累加到sum所指变量中,最后将count作为函数返回值返回。
本文档预览:3600字符,共3390字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载