计算机二级c语言上机百题题库Word文件下载.docx
《计算机二级c语言上机百题题库Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机二级c语言上机百题题库Word文件下载.docx(65页珍藏版)》请在冰豆网上搜索。
![计算机二级c语言上机百题题库Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-2/4/9e3cdffe-61b6-473f-a48f-b49a10eb014a/9e3cdffe-61b6-473f-a48f-b49a10eb014a1.gif)
pi+=one;
n++;
up=up*n;
down=down*(2*n+1);
one=(double)up/(double)down;
}
returnpi*2;
3请编写一个函数fun,它的功能是:
比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。
若两个字符串长度相同,则返回第一个字符串。
例如,输入beijing<
CR>
shanghai<
(<
为回车键)
函数将返回shanghai。
char*fun(char*s,char*t)
{
intfirst=0,second=0;
char*p,*q;
p=s;
q=t;
while(*p++!
)/*判断是否到了字符串s的结尾*/
first++;
while(*q++!
)/*判断是否到了字符串t的结尾*/
second++;
if(first==second)/*判断两个字符串的长度是否相等*/
returns;
/*若上述条件成立,则返回第一个字符串*/
elseif(first>
second)/*返回较长的字符串*/
else
returnt;
4规定输入的字符串中只包含字母和*号。
使字符串最前面连续的*号不得多于n个;
若多于n个,则删除多余的*号;
若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。
*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:
****A*BC*DEF*G****;
若n的值为8,则字符串中的内容仍为:
*******A*BC*DEF*G****。
n的值在主函数中输入。
voidfun(char*a,intn)
{charb[81];
inti=0,j=0,s=0,k;
while(a[i]=='
){s++;
if(s>
n)
{for(k=0;
k<
n;
k++)
{b[j]='
while(a[i])
{b[j]=a[i];
i=0;
5请编写一个函数fun,它的功能是:
计算n门课程的平均分,计算结果作为函数值返回。
例如:
若有5门课程的成绩是:
90.5,72,80,61.5,55,则函数的值为:
71.80。
floatfun(float*a,intn)
inti;
floataverage;
doublesum=0;
for(i=0;
i<
i++)
sum+=a[i];
/*对数组中的各个元素求和*/
average=(float)sum/n;
/*计算平均值*/
returnaverage;
/*返回平均值*/
6某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。
求出该学生的平均分放在记录的ave成员中。
请自己定义正确的形参。
例如,学生的成绩是:
85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:
78.875。
voidfun(STREC*p)
{inti;
doubleaver=0;
/*将平均分赋初值0*/
for(i=0;
N;
i++)
{aver=aver+(*p).s[i];
}/*求和*/
(*p).ave=aver/N;
7学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把高于等于平均分的学生数据放在h所指的数组中,高于等于平均分的学生人数通过形参传回,平均分通过函数值返回。
doublefun(STREC*a,STREC*b,int*n)
{inti,j;
*n=0;
aver=aver+a[i].s;
/*求和*/
aver=aver/N;
/*计算平均分*/
if(a[i].s>
=aver)
{b[*n].s=a[i].s;
/*将高于等于平均分的学生数据放在另一数组b中*/
for(j=0;
j<
10;
j++)
b[*n].num[j]=a[i].num[j];
*n=*n+1;
/*统计高于等于平均分的学生人数*/
return(aver);
/*返回平均分*/
8学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
按分数的高低排列学生的记录,高分在前。
voidfun(STRECa[])
{inti,j,p,t,k;
charh;
{p=i;
for(j=i+1;
j++)/*按分数从高到低进行排序*/
if(a[p].s<
a[j].s)p=j;
if(p!
=i)
{t=a[p].s;
a[p].s=a[i].s;
a[i].s=t;
for(k=0;
{h=a[p].num[k];
a[p].num[k]=a[i].num[k];
a[i].num[k]=h;
9函数fun的功能是:
将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。
例如,当a=45,b=12。
调用该函数后,c=2415。
voidfun(inta,intb,long*c)
inta_up,a_low,b_up,b_low;
a_up=a/10;
/*求正整数a的十位数*/
a_low=a%10;
/*求正整数a的个位数*/
b_up=b/10;
/*求正整数b的十位数*/
b_low=b%10;
/*求正整数b的个位数*/
*c=b_low*1000+a_up*100+b_up*10+a_low;
/*将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上*/
10学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
函数返回指定学号的学生数据,指定的学号在主函数中输入。
若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。
(用于字符串比较的函数是strcmp)。
STRECfun(STREC*a,char*b)
{inti,f=0;
STRECp;
/*定义结构体变量*/
p=a[0];
if(strcmp(a[i].num,b)==0){p=a[i];
f=1;
}/*通过字符串比较函数将指定的学号与每一个学生的学号进行比较,若相同,则返回指定的学生数据*/
if(f==0)/*判断是否找到指定学号*/
{p.num[0]='
/*若没找到指定学号,在结构体变量中给学号置空串*/
p.s=-1;
/*若没找到指定学号,在结构体变量中给成绩置-1*/
returnp;
/*返回学号和成绩*/
11学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把指定分数范围内的学生数据放在h所指的数组中,分数范围内的学生人数由函数值返回。
例如,输入的分数是6069,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。
主函数中将把60放在low中,把69放在heigh中。
intfun(STREC*a,STREC*b,intl,inth)
{inti,j=0,k,f=0;
if((a[i].s>
=l)&
&
(a[i].s<
=h))/*判断该学生的分数是否在范围之内*/
{for(k=0;
b[j].num[k]=a[i].num[k];
b[j].s=a[i].s;
/*满足条件的学生的分数放在另一数组b中*/
j++;
f++;
/*计算满足条件的学生人数*/
return(f);
/*返回学生人数*/
12N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
求出平均分,由函数值返回。
例如,若学生的成绩是:
85,76,69,85,91,72,64,87;
则平均分应当是:
78.625。
doublefun(STREC*h)
{STREC*p;
p=h->
next;
while(p!
=0)
{aver=aver+p->
s;
/*从链表首结点开始,累计成绩之和*/
p=p->
/*p后移一个结点*/
/*求成绩的平均值aver*/
returnaver;
/*返回结果*/
13请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,函数求出w的低n-1位的数作为函数值返回。
w值为5923,则函数返回923;
w值为923,则函数返回23。
unsignedfun(unsignedw)
{if(w>
=10000)returnw%10000;
if(w>
=1000)returnw%1000;
=100)returnw%100;
returnw%10;
14请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标,用k返回。
例如,输入如下整数:
876675896101301401980431451777
则输出结果为:
6,980
intfun(int*s,intt,int*k)
intmax_integer=0;
/*定义变量max_integer,用以存放数组s[]中的最大元素*/
inti=0;
max_integer=s[0];
/*假定第一个数组元素为最大*/
i<
t;
i=i+1){/*建立循环,查找出数组s[]中的最大元素*/
/*将查找到的最大元素的下标赋给k,并传回主函数*/
if(max_integer<
s[i]){
max_integer=s[i];
*k=i;
return*k;
15请编写一个函数fun,它的功能是:
将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
例如,若输入字符串"
-1234"
,则函数把它转换为整数值-1234。
longfun(char*p)
longn=0;
intflag=0;
/*通过循环语句移动指针,取出指针所在位置上的字符*/
while(*p!
){
if(*p=='
-'
)/*判断其是否为负号*/
flag=1;
elseif(*p=='
+'
)/*判断其是否为正号*/
flag=0;
else/*判断其是否为数字字符*/
n=n*10+(*p-'
0'
);
/*将数字字符转化为相应的数值*/
if(flag==1)n=-n;
returnn;
16请编写一个函数fun,它的功能是:
求出1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
例如,若传送给m的值为50,则程序输出:
711142122283335424449
#include<
conio.h>
stdio.h>
#defineM100
voidfun(intm,int*a,int*n)
inti,count=0;
/*count用于计数*/
for(i=1;
=m;
i++){/*使用循环语句使循环变量依次从1递增到m*/
if(i%7==0||i%11==0){/*判断变量i是否能被7或者11整除*/
a[count++]=i;
/*将符合条件的值存放入数组a中*/
}
*n=count;
/*返回能被7或者11整除的数的个数*/
17请编写一个函数fun,它的功能是:
找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。
数组元素中的值已在主函数中赋予。
主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
voidfun(inta[],intn,int*max,int*d)
inti,base,subscript;
base=a[0];
/*假定第一个元素的值最大*/
subscript=0;
/*subscript用于存放数组下标*/
i++){
if(a[i]>
base){/*将数组中的其他元素与变量base作比较,如果大于它则交换两者的值*/
subscript=i;
base=a[i];
*max=base;
/*将最大值元素的值赋给*max*/
*d=subscript;
/*将最大值元素的下标赋给*d*/
18函数fun的功能是:
将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。
例如,当s所指字符串中的内容为:
"
ABCDEFGHIJK"
,
在t所指数组中的内容应是:
BDFHJ"
。
voidfun(char*s,chart[])
inti,slenth,n=0;
slenth=strlen(s);
/*通过strlen函数求字符串s的长度*/
slenth;
i+=2)/*循环语句将数组下标为奇数的元素的值存入数组t中*/
t[n++]=s[i];
t[n]='
19请编写函数fun,其功能是:
计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。
例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:
s=35.951014。
doublefun(doublex[9])
{inti;
doubleavg=0.0,sum=0.0;
/*将变量avg、sum定义为双精度型,并给其赋初值为0.0*/
for(i=0;
8;
{avg=(x[i]+x[i+1])/2;
/*通过for循环分别求出相邻两个元素的平均值放入变量avg中*/
sum+=sqrt(avg);
/*使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量sum*/
returnsum;
/*返回计算结果*/
20请编写函数fun,其功能是:
计算并输出下列多项式的值:
例如,在主函数中从键盘给n输入8后,输出为:
s=0.662872。
注意:
要求n的值大于1但不大于100。
doublefun(intn)
doublesum=0.0;
/*定义sum为双精度型变量,并给其赋初值为0.0*/
if(n>
1&
n<
=100)
{for(i=1;
=n;
sum+=1.0/(2*i-1)-1.0/(2*i);
/*计算出1.0/(2*i-1)-1.0/(2*i)相应的每一个多项式的值,同时累加到变量sum中*/
21请编写函数fun,它的功能是:
计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。
例如,在主函数中从键盘给n输入20后,输出为:
s=0.583333。
要求n的值不大于100。
{inti;
/*将sum定义为双精度型变量,并给其赋初值为0.0*/
if(n>
0&
{for(i=1;
if(i%5==0||i%9==0)/*判断i是否能被5或者9整除*/
sum+=1.0/i;
/*累加自然数的倒数之和,放入变量sum中*/
22请编写函数fun,其功能是:
计算并输出当x<
0.97时下列多项式的值,直到|S(n)-S(n-1)|<
0.000001为止。
例如,在主函数中从键盘给x输入0.21后,输出为:
s=1.100000。
math.h>
可以通过while循环求出各项表达式的值,然后进行累加。
doublefun(doublex)
intn=1;
/*循环计数*/
doublesn=1;
/*累计数*/
doublexn=1,xn1=0;
/*x的n值,以及x的n-1值;
*/
while(fabs(xn-xn1)>
=0.000001)/*绝对值是否合格*/
{
xn=xn*x*(0.5-n+1)/n;
/*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/
n+=1;
sn+=xn;
/*sn累加上xn*/
return(sn);
23请编写函数fun,其功能是:
计算并输出给定10个数的方差:
┌110┐0.5
S=│─∑(Xk-X'
)^2│
└10k=1┘
110
其中X'
=─∑Xk
10k=1
例如,给定的10个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,输出为s=11.730729。
doublefun(doublex[10])
/*定义变量*/
doubleavg=0.0;
doubleabs=0.0;
doublefc;
i++)/*循环开始*/
sum+=x[i];
/*计算已结定的10个数之和,并将其值赋给变量sum中*/
avg=sum/10;
/*计算已结定的10个数的平均值,并将其值赋给变量avg*/
abs+=(x[i]-avg)*(x[i]-avg);
/*计算(Xk-X'
)的平方和,并将其值赋给变量abc*/
fc=sqrt(abs/10);
/*sqrt(abs/10)函数是计算abs/10的平方根*/
returnfc;
24请编写函数fun,其功能是:
计算并输出3到n之间所有素数的平方根之和。
例如,在主函数中从键盘给n输入100后,
输出为:
sum=148.874270。
要求n的值大于2但不大于100。
inti,j=0;
/*定义两个整型变量*/
doubles=0;
/*定义变量s为双精度型*/
for(i=3;
{for(j=2;
i;
if(i%j==0)break;
/*如果i能被j整除就说明i不是素数,继而退出循环体*/
if(j==i)s=s+sqrt(i);
/*sqrt(i)函数是计算i的平方根*/
25请编写函数fun,其功能是:
计算并输出S=1+(1+2^0.5)+(1+2^0.5+3^0.5)+……+(1+2^0.5+3^0.5+……+n^0.5)
s=534.188884。
/*定义一个整形变量*/
doublefac=1.0;
/*定义变量fac、sum为双精度型*/
doublesum=1.0;
for(i=2;
{fac+=sqrt(i);