c语言参考答案
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0
A B a f j
1
b g
2
c h
3
d \0
4
e
5
\0 f i
6
g
7
h
8
i=strlen(A); j=0; while(i<sizeof(A)&&j<strlen(B)) { A[i++] = B[j++]; }
5-3.cpp
6-1
有15个数存放在一个数组中(已按从小到大排 序),输入一个数,要求用折半查找法找出 该数是数组中第几个元素的值,并输出查 找次数。如果该数不在数组中,则输出 “无此数”。这15个数用赋初值的方法在 程序中给出。要找的数用scanf函数输入。
if(leap)
printf("%d is a leap year!\n",year); else
printf("%d is not a leap year!\n",year);
}
3-2.cpp
• 求N个Fibonacci数,并以每行五个数字的方 式输出(N由用户输入,小于20,不能使用数 组) a1=1 a2=1 a3=a1+a2 … an=an-1+an-2
9-3.cpp
f1
f1 f2
f2 f3 f3
1
1
2
3
f1=1;f2=1; for(i=3;i<=N;i++) { f3=f1+f2; f1=f2; f2=f3; }
#include<stdio.h> void main() { int N,i; long f1,f2,f3; scanf("%d",&N); f1=1;f2=1; printf("%12d%12d",f1,f2); for(i=3;i<=N;i++) { f3 = f1 + f2; printf("%12d",f3); if(i%5==0) printf("\n"); f1 = f2; f2=f3; } 4-2.cpp }
int sub_copy(char oldstring[],char newstring[],int m,int s) { char *p,*q; int i=0; if(m<0||m>strlen(oldstring)||s<=0) return 0; p=oldstring+m-1; //p=&oldstring[m-1]; q=&newstring[0]; //q=newstring; while(i<s&&*p!='\0') { *(q++)=*(p++); i++; } return i; }
8-1.cpp
9-3
• 编写函数sub_copy(oldstring,newstring,m,s) ,将oldstring从第m个位置开始的s个字符复 制到newstring ,要求用指针实现
char *p,*q; poldstring的第m个位置 q newstring 的第1个位置 *(q++)=*(p++)
if(x==a[k]) break; if(x<a[k]) j = k - 1; else i = k + 1; } if(i<=j) printf("%d is the %dst,costs %d times\n",x,k+1,steps); else printf("%d cannot be founded",x);
二:a记为分子,b记为分母,s为a/b,sum 规律:每一项的分子为前一项分子+2,每一项 的分母为前一项分母*2
a b s sum 3 1 3 3 5 2 2.5 5.5 41 524288
…
0.000078 9.999914
a=3;b=1; while(1) { s=a/b; sum += s; if(s<0.0001) a=a+2; b=b*2; }
4-3
有一数列: 3,2.5,7/4,9/8,11/16,13/32,15/64,17/128,...求 此数列各项和,直到an<0.0001(结合 continue,break) 一:通式 3/1 5/2 7/4 9/8 an=(2*k+1)/2^(k-1) k=1,2,3,4,… 提示: 2^k = pow(2,k)
}
6-1句,统计出其中长度不超过3 的单词的个数
“ABC D FGH”
A ilen
count
B 2
0
C 3
0
D 0
1
F 0
2
G 2
2
h 3
2
1
0
1
1
1
2
ilen单词长度 依次读入每一个字符C(假定没有不合法字符) 若: C为空格, 前一个单词结束,若前一个单词的ilen<=3,count++; ilen清0,准备为下一个单词长度计数 C为字母 ilen++;
break; 4-3.cpp
5-1对10个整数排序(起泡法)
详见教材
5-2逆序输出一个数组
5-3将两个字符串连接起来,不用strcat函数(在
连接前与连接后,说明一下这两个字符串长度的 变化情况)
例如:A:”abcde” B:”fgh” A+BA A:”abcdefgh”,A字符串的长度由5 增加到8,B的长度不变
输入年份,求是否闰年
如果不能被4整除,不是闰年 如2001 否则(能被4整除) 若不能被100整除,是 如2004 否则(能被100整除), 能被400整除,是 如2400 否则(不能被400整除),不是 如2100
if(year%4!=0) leap=0; else if(year%100!=0) leap = 1; else if(year%400==0) leap = 1; else leap=0;
0 1
i=0
1 2
2 3
3 4
4 5
5 6
6 7
j=6
7 8
8 9
9 10
j=9
k=(i+j)/2=4 i=5 k=5
K=7 i=j=k=5
X=5
X=7 0 1 i=0 X=11 1 2 2 3 3 4 4 10 k=4 j 5 16 6 17 j 7 18 k 8 19 9 20 j=9
i k
#include<stdio.h> void main() { int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int x,steps=0; //x待查找的数,steps查找次数 int i,j,k; //i左游标,j右游标,k中游标 scanf("%d",&x); i=0;j=sizeof(a)/sizeof(int)-1; while(i<=j) { steps++; //查找次数+1 k = (i+j)/2;
能被4整除且不能被100整除或能被400整 除
if(year%4==0&&year%100!=0||year%400==0) leap = 1;
int year,leap;//leap=0代表不是闰年,=1代表是 while((scanf("%d",&year),year)>0) { if(year%4!=0) leap=0; else if(year%100!=0) leap = 1; else if(year%400==0) leap = 1; else leap=0;
所有字符遍历完成后,若ilen<=3,count++
int count_3(char s[]) { char c; int i,ilen=0,count=0; for(i=0;i<strlen(s);i++) { c = s[i]; if(c==' ') { if(ilen<=3) count++; ilen = 0; } else ilen++; } if(ilen<=3) count++; return count; }