计算机C语言二级考试(60道程序设计)
第1道
请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换成大写(若该位置上不是字母,则不转换)。
例如,若输入"abc4EFG",则应输出“aBc4EFG”。
void fun ( char *ss)
{
int i, n=0;
char *p;
p=ss;
while(*p++ !='\0' ) /*判断是否到了字符串的末尾*/
n++;
for(i=1 ;i<n;i+=2)
if(ss[i]>='a'&& ss[i]<='z') /*判断该字符是否为〃写字母*/
ss[i]=ss[i]-'a'+'A' ; /*若上述条件成立,则将其转换为大写字母*/
}
解析:本题的考核点是指针、ASCII码、数组和循环语句。
解题思路:通过循环语句依次判断数组下标为奇数的元素是否为小写字母,如果是则通过字符运算将其转换为大写字母。
第2道
请编写函数fun,函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p, p小于等于n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。
void fun(int *w, int p, int n)
{int x,j,ch;
for(x=0;x<=p;x++)
{ch=w[0];
for(j=1;j<n;j++)
/*通过for循环语句,将p+1到n-1 (含n-1)之间的数组元素依次向前移动p+1个存储单元*/
{
w[j-1]=w[j];
}
w[n-1]=ch; /*将0到p个数组元素逐一赋给数组w[n-1]*/
}
}
解析:本题的考核点是一维数组的应用。真题2-2
解题思路:本题要求把下标从0到p(含p, p小于等于n-1)的数组元素平移到数组的最后,可以根据输入的p值,通过for循环语句,将p+1到n-1(含n-1)之间的数组元素依次向前移动P+1个存储单元,即w[j-1]-w[j],同时 将0到p个数组元素逐一赋值给数组w[n-1],也就是通过语句w[n-1 ]=ch;来实现此操作的。
第3道
请编写一个函数fun,它的功能是:计算并输出给定整数n的所有因子(不包括1与n自身)之和。规定n的值不大于1000。
例如,在主函数中从键盘给n输入的值为856,则输出为:sum=763。
int fun(int n)
{
int i,s=0;
if(n<1000)
{for (i=2;i<n;i++)
if (n%i==0) s=s+i;}
return (s);
}
解析:本题考查点是求一个数的因子之和。判断因子的方法是:能被n整除的数。因子是指一个数能够被整除的所有正整数。例如数值10的因子包括1,2,5,10.数值4的因子包括1,2,4。
真题3-2
第4道
请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。
例如:实型数为1234.567,则函数返回1234.570000;
实型数为1234.564,则函数返回1234.560000。
float fun (float h )
{
return(int)(h*100+0.5)/100.0; /*将该数乘以10的n次方,然后将该数加上0.5,对其取整,然后再除以10的n次方*/
}
本题主要考查浮点型到定点数的转换。
解题思路:要将一个浮点数进行四舍五入到小数点后面的n位,可以先将该数乘以10的n次方,然后将该数加上0.5对其取整,然后再除以10的n次方。
第5道
请编写函数fun,其功能是:计算并输出下列多项式的值:
例如,在主函数中从键盘给n输入15,则输出为:s=2.718282。
注意:要求n的值大于1但不大于100ₒ
double fun(int n)
{
double m=1.0,p=1.0;/*定义m、p为双字节型变量,并赋值1.0*/
int i;
for(i=1;i<=n;i++)
{ p=p*i;/*p为中间变量,求出累乘值*/
m=m+1.0/p;/*求出多项式之和*/
}
return (m);/*返回结果*/
}
本题主要考查的是求多项式的值。
第6道
请编写函数fun,其功能是统计出x所指数组中能被e整除的元素个数,通过函数值返回主函数;同时,计算不能被e整除的元素之和,放到形参sum所指的存储单元中。
例如:当数组x内容为1, 7,8,6, 10, 15, 11, 13, 29,31,整数e内容为3时,
输出结果应该是:n=2, sum = 110
int fun(int xQ, int e, int *sum)
{int i,n=0;
*sum=0;
for(i=0;i<N;i++)
if(x[i]%e==0) n++;
else *sum+=x[i];
return n;
}
解析:通过循环获取数组中的每一个元素,并通过if语句对该元素进行判断, 并按照题中要求,对其进行计数或者统计加和。
第7道
请编写函数fun:在形参指针所指的4个整数中找出最大值和最小值, 最大的放在a中,最小的放在d中。
void fun(int *a, int *b, int *c, int *d)
{
int max, min;
max=*a;
min=*d;
if (*b>max) {max=*b;}
if (*c>max) {max=*c;}
if (*d>max) {max=*d;}
if (*a<min) {min=*a;}
if (*b<min) {min=*b;}
if (*c<min) {min=*c;}
*a=max;
*d=min;
}
本题的考核点是C语言中的指针和函数之间地址值的传递。
解题思路:首先定义两个变量,分别用来放最大值和最小值,先把指针a指向的值赋给max把指针d指向的值端min。此时分别将其他的数与max比较,直到将最大的值赋给max,同理,将最小的值赋给min。数值比较 过后,将指针a指向max,指针b指向min,最后再main函数中输出。
第8道
请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把。至9 岁年龄段的人数放在d⑼中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含 100)以上年龄的人数都放在d[10]中。结果在主函数中输出。
void fun( int *a, int *b)
{int i;
for(i=0;i<M;i++)
b[i]=0;/*初始化数组b中的每一个元素*/
for(i=0;i<N;i++)
b[*(a+i)/10>10?10:*(a+i)/10]++;
/*判断年龄整除10后的值是否大于10,若大于10,则该逗号表达式的值等于10,否则等于*(a+i)/10的值*/
}
本题的考核点是统计各年龄段人数的算法。
解题思路:本题提供的参考程序,先对数组初始化,再通过for循环和逗号表达式
*(a+i)/10>10? 10 : *(a+i)/10将年龄整除10后存放到数组d中,具体执行过程是:判断年龄整除10后的值是否大于10,若大于10,则该逗号表达式的值等于10,即实现了将100岁(含100)以上年龄的人数存放在d[10]中;若不大于10,则逗号表达式的值等于
*(a+i)/10的值,即实现了各个年龄段的人数的统计。
第9道
请编写函数fun,其功能是:判断t所指字符串中的字母是否由连续递增字母序列组成
(字符串长度大于等于2)。
例如:字符串:uvwxyz满足要求;
而字符串:uvxwyz不满足要求。
int fun( char *t )
{
int k=0,i=0;
while(t[i+1]){
if(t[i+1]==t[i]+1)
{
k++;
i++;
}else{
k=0;
break;
}
}
return k;
}
本题的考核点是C语言中的数组与指针。
解题思路:对于一个任意输入的字符串,fun函数中的形参指针t指向它的第一个元素的地址,首先对数组中的第一个元素与第二个元素进行比较,如果第二个字符的ASCII码比第一个字符的ASCII码大1,则这两个字符连 续递增;
同理对二个元素和第三个元素进行比较,直到将倒数第二个元素和最后一元素进行比较。如果一直符合条件,则返回非零的int型整数,如果中间有一不符告则结束循环,返回值为0。
第10道
请编一个函数fun,函数的功能是:将s所指字符串中ASCll码值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为"ABCDEFG12345",其中字符串A的ASCll码值为奇数,字符1的ASCll码值也为奇数,都应该删除,其他以此类推。最后t所指的数组中的内容应是"BDF24"。
void fun(char *s, char t[])
{
int i,slenth,n=0;
slenth=strlen(s); /*统计字符串S中字符的个数*/
for(i=0;i<slenth;i++)
/*判断字符串s[i]其值的ASCll码值是否为基数,如果是则继续下一个字符串的判断,否则将字符s[i]复制到t数组中*/
if(s[i]%2==0)
t[n++]=s[i];
t[n]='\0';
}
本题主要考考核点是数组和循环语句
解题思路:使用循环语句将数组元素与2做趋于操作,如果余数为0则将其值存入另一个数组中。