二级C实习题Word格式.docx
- 文档编号:20169487
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:49
- 大小:64.87KB
二级C实习题Word格式.docx
《二级C实习题Word格式.docx》由会员分享,可在线阅读,更多相关《二级C实习题Word格式.docx(49页珍藏版)》请在冰豆网上搜索。
M;
i++)puts(ss[i]);
k=fun(ss,&
n);
\nThelengthofshorteststringis:
%d\n"
n);
\nTheshorteststringis:
%s\n"
ss[k]);
二﹑算法分析
本题考查:
for循环语句的循环条件;
if语句条件表达式;
return语句完成函数值的返回。
【解题思路】
(1)题目指出ss所指字符串数组中共有M个字符串,所以第一个空是i<
M。
(2)要求求长度最短的字符串,*n中存放的是已知字符串中长度最短的字符串的长度,这里将当前字符串长度与*n比较,若小于*n,则将该长度值赋给*n,因此第二个空为len<
*n。
(3)将最短字符串的行下标作为函数值返回,变量k储存行下标的值,所以第三个空是k。
第二题:
改错题
下列给定程序中函数fun的功能是:
将tt所指字符串中的小写字母全部改为对应的大写字母,其它字符不变。
例如,若输入"
Ab,cD"
,则输出"
AB,CD"
。
请改正程序中的错误,使它能得出正确的结果
char*fun(chartt[])
{
inti;
for(i=0;
tt[i];
i++)
/**********found***********/
if(('
a'
<
=tt[i])||(tt[i]<
='
z'
))
tt[i]+=32;
return(tt);
main()
chartt[81];
printf("
\nPleaseenterastring:
"
);
gets(tt);
\nTheresultstringis:
\n%s"
fun(tt));
一﹑错误分析
(1)分析本题可知,要判断字符是否为小写字母,即判断其是否在a~z之间,所以这里需要进行连续的比较,用&
&
(2)从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII值大32。
将字符串中的小写字母改为大写字母的方法是:
从字符串第一个字符开始,根据ASCII码值判断该字母是不是小写字母,若是,则ASCII码值减32即可。
第三题:
编程题
编写函数fun,其功能是:
将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k返回。
例如,若输入17,则应输出:
4 6 8 9 10 12 14 15 16。
voidfun(intm,int*k,intxx[])
intm,n,zz[100];
voidNONO();
\nPleaseenteranintegernumberbetween10and100:
scanf("
%d"
&
n);
fun(n,&
m,zz);
\n\nThereare%dnon-primenumberslessthan%d:
"
m,n);
for(n=0;
n<
m;
n++)
\n%4d"
zz[n]);
NONO();
voidNONO()
/*请在此函数内打开文件,输入测试数据,调用fun函数,
输出数据,关闭文件。
*/
FILE*rf,*wf;
rf=fopen("
in.dat"
r"
);
wf=fopen("
out.dat"
w"
fscanf(rf,"
fprintf(wf,"
%d\n%d\n"
%d\n"
fclose(rf);
fclose(wf);
二、算法分析
1、主要数据结构
intm;
数据的范围
int*k;
返回非素数的个数
intxx[];
存放大于1小于m的非素数
2,算法描述
(1)遍历1~m之间的每个数
(2)判断语句用来判断该数是否素数,若不是素数,则将其存入数组中
三、实现代码
inti,j,n=0;
for(i=4;
m;
i++)/*找出大于1小于整数m的非素数*/
{for(j=2;
j<
i;
j++)
if(i%j==0)break;
if(j<
i)xx[n++]=i;
*k=n;
/*返回非素数的个数*/
四、程序测试
程序测试结果正确,要熟记素数的判别方法,需要注意的是函数返回的表达式的类型应该与函数类型一致。
第二套
(第八套)
给定程序中,函数fun的功能是:
统计形参s所指的字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。
例如,若形参s所指的字符串为abcdef35adgh3kjsdf7,则输出结果为4。
voidfun(char*s,int*t)
{inti,n;
n=0;
___1___!
=0;
if(s[i]>
='
0'
s[i]<
=___2___)n++;
___3___;
{chars[80]="
abcdef35adgh3kjsdf7"
;
intt;
\nTheoriginalstringis:
s);
fun(s,&
t);
\nTheresultis:
t);
【考点分析】
for循环语句;
指针变量。
(1)通过for循环语句,来判断是否到字符串结尾,变量i用来存放字符串数组下标,则应填入s[i]。
(2)题目要求判断数字字符,所以此处应填入’9'
(3)将数字字符个数存入变量t中,这里需注意变量t是指针变量,所以应填入*t=n。
一、题目要求
实现两个变量值的交换,规定不允许增加语句和表达式。
例如,变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。
intfun(int*x,inty)
intt;
/**************found**************/
t=x;
x=y;
return(y);
inta=3,b=8;
%d%d\n"
a,b);
b=fun(&
a,b);
二、错误分析
(1)定义变量t作为中间变量,然后进行数据交换,注意参数x是指针变量,交换时应使用*x,所以应为t=*x;
*x=y。
(2)根据代码b=fun(8a,b)可以知道返回值将赋给变量b,而b中应存放交换前**中的值,所以函数应返回变量t。
一、题目要求
求出1到1000之间能被7或11整除,但不能同时被7和11整除的所有整数,并将其放在a所指的数组中,通过n返回这些数的个数。
voidfun(int*a,int*n)
{intaa[1000],n,k;
fun(aa,&
n);
for(k=0;
k<
n;
k++)
if((k+1)%10==0)printf("
elseprintf("
%5d"
aa[k]);
NONO();
voidNONO()
{/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。
*/
intaa[1000],n,k;
FILE*fp;
fp=fopen("
if((k+1)%10==0)fprintf(fp,"
elsefprintf(fp,"
fclose(fp);
二,算法分析
(1)int*a;
求出1到1000之间能被7或11整除,但不能同时被7和11整除的所有整数,并将其放在a所指的数组中。
(2)intn;
返回1到1000之间能被7或11整除,但不能同时被7和11整除这些数的个数。
(1)遍历1~1000之间的每个数
(2)判断1到1000之间能被7或11整除,但不能同时被7和11整除的所有整数,并将其放在a所指的数组中。
inti,j=0;
for(i=1;
=1000;
i++)/*求1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数,并放入数组a中*/
if((i%7==0||i%11==0)&
i%77!
=0)
a[j++]=i;
*n=j;
程序测试结果正确,充分理解"
逻辑与"
和"
逻辑或"
的区别;
for循环语句的循环变量用来控制取值范围。
第三套
(第十三套)
有N×
N矩阵,根据给定的m(m<
=N)值,将每行元素中的值均向右移动m个位置,左位置为0。
例如,N=3,m=2,有下列矩阵
1 2 3
4 5 6
7 8 9
程序执行结果为
0 0 1
0 0 4
0 0 7
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
#defineN4
voidfun(int(*t)[N],intm)
{inti,j;
N;
___1___)
{for(j=N-1-m;
j>
j--)
t[i][j+___2___]=t[i][j];
for(j=0;
j<
___3___;
j++)
t[i][j]=0;
{intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j,m;
\nTheoriginalarray:
{for(j=0;
%2d"
t[i][j]);
Inputm(m<
=%d):
N);
scanf("
&
m);
fun(t,m);
\nTheresultis:
for循环语句;
数组元素的引用。
(1)循环语句中,循环变量i增量为1,所以空应填i++。
(2)将每行元素中的值均右移m个位置,所以数组元素的下标是t[i][j+m]。
(3)此for循环语句实现左边元素置0操作,所以j的取值范围是0到m。
计算并输出high以内最大的10个素数的和。
high的值由主函数传给fun函数。
例如,若high的值为100,则函数的值为732。
请改正程序中的错误,使程序能输出正确的结果。
math.h>
intfun(inthigh)
{intsum=0,n=0,j,yes;
/************found************/
while((high>
=2)&
(n<
10)
{yes=1;
for(j=2;
=high/2;
j++)
if(high%j==0){
yes=0;
break
if(yes){sum+=high;
n++;
high--;
returnsum;
main()
fun(100));
}
(1)while循环条件丢掉一个括号,所以应该为)while((high>
=2)&
(n<
10))
(2)另一处是很简单的程序语法错误,没有加分号所以应该为yes=0;
break;
利用下面的简单迭代方法求方程cos(x)-x=0的一个实根。
迭代步骤如下:
(1)取x1初值为0.0;
(2)x0=x1,将x1的值赋给x0;
(3)x1=cos(x0),求出一个新的x1;
(4)若x0-x1的绝对值小于0.000001,执行步聚(5),否则执行步聚
(2);
(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。
doublefun()
Root=%f\n"
fun());
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。
FILE*wf;
%f\n"
fun());
doublex0,x1;
记录方程的跟
迭代法求方程的实根;
do…while循环语句
2、算法描述
do…while循环语句,其形式为:
do{
语句
}while(表达式);
do…while循环与while循环的不同在于,它先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;
如果为假,则终止循环。
因此,do…while循环至少要执行一次循环语句。
doublex0,x1;
x1=0.0;
do
x0=x1;
x1=cos(x0);
}while(fabs(x0-x1)>
=1e-6);
returnx1;
程序测试结果正确,用迭代方法求方程的一个实根,题目已经给出了算法,只要按照算法用合适的程序表达,就可以解题了,do…while循环至少要执行一次循环语句。
第四套
(第十八套)
把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:
字符串的长度大于等于2)。
例如,形参s所指字符串为abcdefgh,执行结果为ahcbedgf。
voidfun(char*s)
{inti,n,k;
charc;
s[i]!
\0'
i++)n++;
if(n%2==0)k=n-___1___;
elsek=n-2;
c=___2___;
for(i=k-2;
i>
=1;
i=i-2)s[i+2]=s[i];
s[1]=___3___;
abcdefgh"
fun(s);
指针型变量;
if…else语句;
赋值语句。
(1)函数fun中变量n统计字符的长度,假如长度为偶数,则k=n-1;
假如长度为奇数,则k=n-2,使得下标为奇数的最后一个元素有效(不是′\0′),空应该为1。
(2)了解变量k的作用后,则将最右边的奇数位置的数赋值给变量c,空应该为s[k]或*(s+k)。
(3)将最后一个下标为奇数的元素移到第一个奇数位置,空应该为c。
下列给定程序中fun函数的功能是:
求表达式
s=aa…aa-…-aaa-aa-a
(此处aa…aa表示n个a,a和n的值在1至9之间)
例如,a=3,n=6,则以上表达式为:
s=333333-33333-3333-333-33-3
其值是296298。
a和n是fun函数的形参,表达式的值作为函数值传回main函数。
请改正程序中的错误,使它能计算出正确的结果。
longfun(inta,intn)
{intj;
longs=0,t=1;
for(j=0;
j<
t=t*10+a;
s=t;
for(j=1;
j++){
t=t%10;
s=s-t;
return(s);
{inta,n;
\nPleaseenteraandn:
%d%d"
a,&
Thevalueoffunctionis:
%ld\n"
fun(a,n));
(1)t用来存放每次循环后的多位数,第一次循环时,t应当是个位数,所以t的初始值应为0。
(2)根据题意,这里不需要求余数,而是要去掉个位数,重新组合一个数,因此应用除法运算。
编写函数voidfun(char*tt,intpp[]),统计在tt所指的字符串中'
到'
26个小写字母各自出现的次数,并依次放在pp所指的数组中。
例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:
33322110000000000000000000
voidfun(char*tt,intpp[])
{charaa[1000];
intbb[26],k;
\nPleaseenteracharstring:
);
scanf("
%s"
aa);
fun(aa,bb);
26;
k++)printf("
%d"
bb[k]);
NONO();
charaa[1000];
intbb[26],k,i;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 实习
![提示](https://static.bdocx.com/images/bang_tan.gif)