c语言编程题答案Word格式文档下载.docx
- 文档编号:22027059
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:38
- 大小:26.77KB
c语言编程题答案Word格式文档下载.docx
《c语言编程题答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c语言编程题答案Word格式文档下载.docx(38页珍藏版)》请在冰豆网上搜索。
);
%u"
%d=八进制数%o=十六进制数%x\n"
x,x,x);
4.编程,找出1000以内的所有完数,并输出其因子。
{inti,j,s=1;
=1000;
i++,s=1){
for(j=2;
j<
=i/2;
j++)if(i%j==0)s+=j;
//求i的因子和
if(s==i){
%d=1"
i);
//如果i是完数则输出其各因子
j++)
if(i%j==0)printf("
+%d"
j);
\n"
5.输入一个正整数,输出它的所有质数因子。
{intm,i=2;
请输入一个整数:
%d"
m);
while(m!
=1)if(m%i==0){printf("
%d"
m/=i;
}elsei++;
6.输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。
#defineN20
{inta[N],i,j;
for(i=0;
N;
i++)scanf("
a[i]);
i++)for(j=0;
j++)
if(a[i]%a[j]==0&
&
i!
=j){printf("
%d\n"
a[i]);
break;
7.输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。
#defineNA6
#defineNB8
{floata[NA],b[NB];
inti,j;
NA;
NB;
b[i]);
if(a[i]==b[j]){printf("
%f\n"
8.输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。
i++)scanf("
for(j=0;
j++)if(a[i]==b[j])break;
if(j==NB)printf("
%f"
j++)if(b[i]==a[j])break;
if(j==NA)printf("
b[i]);
9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。
{chars1[20],s2[]="
Goodmorning!
;
inti=0;
while((s1[i++]=s2[i])!
='
\0'
%s\n"
s1);
10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。
#include<
stdio.h>
#definef(year)year%4==0&
year%100!
=0||year%400==0
{inty;
请输入年份:
y);
if(f(y))printf("
%d年为闰年\n"
y);
elseprintf("
%d年不是闰年\n"
11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、…、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。
#defineMAX80
#defineSWITCH1
{charstr[MAX];
请输入文本行:
%s"
str);
#if(SWITCH)
while(str[i]!
)
if(str[i]>
a'
str[i]<
z'
)
if(str[i]=='
)str[i]='
elsestr[i]++;
i++;
#endif
12.编写函数,处理n行n列维数组:
将每一行的元素同除以该行上绝对值最大的元素。
math.h"
voiddiv(float**a,intn)
{inti,j;
floatx;
n;
x=*(*(a+i));
for(j=1;
if(fabs(*(*(a+i)+j))>
fabs(x))x=*(*(a+i)+j);
j++)*(*(a+i)+j)/=x;
return;
voidmain()//函数引用示例
{floatb[3][3]={{1,2,3},{4,5,6},{7,8,9}};
float*c[3];
3;
i++)c[i]=b[i];
div(c,3);
j++)printf("
b[i][j]);
13.编写函数,求任意阶多项式a0+a1X+a2X2+...+anXn的值并返回多项式的值。
floatf1(float*a,floatx,intn)
{inti;
floatt=1,y=0;
i++){y+=*(a+i)*t;
t*=x;
returny;
{floatb[4]={1,2,3,4};
f1(b,2,4));
14.设计一个函数,使给出一个数的原码,能得到该数的补码。
//假定sizeof(int)为2;
unsignedintgetbit(unsignedintvalue)//第1位为0表示数的原码,
{if(value>
>
15)return(value^0x7fff)+1;
//其补码即其原码;
若value
elsereturnvalue;
//右移15位后为1,表示value是负数的原码,负数
}//的补码为原码按位取反(第1位不变)后加1。
{unsignedinty=0x800c,k;
k=getbit(y);
%x\n"
k);
15.编写函数,求m行、n列的二维数组全体元素中负数的个数。
intsum(float**a,intm,intn)
inty=0;
m;
j++)if(*(*(a+i)+j)<
0)y++;
{floatb[2][3]={{-1,2,-3},{4,-5,-6}};
inti;
float*c[2];
2;
sum(c,2,3));
16.编写函数,返回在一个整数组中出现次数最多的数及其出现次数。
voidfun(float*a,intn,int*k,float*x)
{inti,j,y;
*k=0;
i++){y=0;
j++)if(*(a+i)==*(a+j))y++;
if(y>
*k){*k=y;
*x=*(a+i);
{floatc[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t;
intm;
fun(c,10,&
m,&
t);
//若说明float*t;
int*m;
元素%f出现次数为%d\n"
t,m);
//引用为fun(c,10,m,t)将
}//产生悬挂指针的错误,即t、m不只指向确定的存储单元。
17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。
{char*month_name[12]={"
January"
"
February"
March"
April"
"
May"
"
June"
July"
August"
September"
October"
Novenber"
December"
};
intn;
请输入月份号:
n);
if(n<
1||n>
12)printf("
月份号输入错误!
%d月的英文表示是%s\n"
n,month_name[n-1]);
18.编写递归函数,将输入的以“?
”结束的字符串按与输入相反的顺序输出。
voidpline()
{charch;
if((ch=getchar())!
?
'
){pline();
putchar(ch);
{pline();
19.编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。
intnum(float*x,intn)
{inti,k=0;
n-1;
i++)if(*(x+i)>
*(x+i-1)&
*(x+i)>
*(x+i+1))k++;
returnk;
{floata[10]={1,3,4,2,6,7,12,5,9,8};
num(a,10));
20.编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。
voidnum(float*b,intn,float*max,float*min)
{*max=*b;
*min=*b;
for(inti=1;
if(*(b+i)>
*max)*max=*(b+i);
if(*(b+i)<
*min)*min=*(b+i);
{floata[10]={1,3,4,2,6,7,12,5,9,8},x,y;
num(a,10,&
x,&
最大值为%f,最小值为%f。
x,y);
21.编写一个函数,统计m行n列二维数组中有多少个正数、多少个负数,多少个零,并
返回统计结果。
voidsub(float**a,intm,intn,int*fs,int*lin,int*zs)
*fs=*lin=*zs=0;
if(*(*(a+i)+j)<
0)(*fs)++;
elseif(*(*(a+i)+j)==0)(*lin)++;
else(*zs)++;
{floatb[5][3]={{-1,5,2},{3,0,-2},{0,-3,5},
{4,7,-8},{3,4,5}},*c[5];
inti,k1,k2,k3;
5;
sub(c,5,3,&
k1,&
k2,&
k3);
负数%d个,零%d个,正数%d个。
k1,k2,k3);
22.编写函数,在给定的一行以'
.'
结束的字符中,找出最长的单词并输出。
voidfind(char*str)
{char*p1,*p2,*p3;
intk1=0,k2=0;
//k1为最长串的长度,初值为0。
p1=p2=p3=str;
//p3指向最长串首字符,p1指向当前处理串首字符,
while(*p2!
)//p2为移动指针,*p2为空格表示查找到单词尾部。
if(*p2!
'
){k2++;
p2++;
elseif(k2>
k1){p3=p1;
p1=++p2;
k1=k2;
k2=0;
else{k2=0;
}
for(k2=0;
k2<
=k1;
k2++)printf("
%c"
*(p3+k2));
{chara[40];
while((a[i++]=getchar())!
find(a);
23.编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。
structstudent{
charnum[7],name[9];
intscore[3];
};
//尾部分号不得遗漏
voidprint(structstudent*s,intn)
//运算符'
*'
、'
的优先级均低于运算符'
i++)
%s%s%4d%4d%4d\n"
(*(s+i)).num,(*(s+i)).name,
(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]);
{structstudentt[4];
4;
i++)
%s%s%d%d%d"
t[i].num,&
t[i].name,&
t[i].score[0],
&
t[i].score[1],&
t[i].score[2]);
print(t,4);
24.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。
{FILE*fpd1,*fpd2;
charch;
fpd1=fopen("
d1.dat"
r"
fpd2=fopen("
d2.dat"
w"
while(fscanf(fpd1,"
ch)!
=EOF)
if(ch>
A'
ch<
Z'
||ch>
fprintf(fpd2,"
ch);
fclose(fpd1);
fclose(fpd2);
25.编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。
=EOF)
if(ch!
)fprintf(fpd2,"
26.编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。
=EOF){
)ch=ch+32;
27.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。
if(!
(ch>
0'
9'
))
28.求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。
math.h>
{FILE*fp;
inti,j,k=2;
fp=fopen("
su.dat"
fprintf(fp,"
%4d%4d"
2,3);
for(i=5;
100;
i=i+2){
for(j=3;
=sqrt(i);
j=j+2)if(i%j==0)break;
if(j>
sqrt(i)){fprintf(fp,"
%4d"
k++;
if(k%10==0)fprintf(fp,"
fclose(fp);
29.磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3
文件中,合并后仍保持字母顺序。
{FILE*fp1,*fp2,*fp3;
inti,j,k;
charc1,c2;
fp1=fopen("
a1"
fp2=fopen("
a2"
//首先从文件a1、a2中各读入一个字符分别送入变量c1、c2,下面将作
//循环比较,直到读到文件尾标志为止。
fp3=fopen("
a3"
c1=fgetc(fp1);
c2=fgetc(fp2);
do{
if(c1<
c2){fputc(c1,fp3);
c1=fgetc(fp1);
else{fputc(c2,fp3);
}while(!
feof(fp1)&
!
feof(fp2));
//若a1先读到文件尾,则将c2写入a3,再将a2中其它字符读入后写入a3;
...
if(feof(fp1))do{
fputc(c2,fp3);
feof(fp2));
elsedo{fputc(c1,fp3);
feof(fp1));
fclose(fp1);
fclose(fp2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)