}
28.编写函数mystrcpy(char*s1,char*s2),其功能与库函数strcpy( )的功能相同。
代码如下:
void newstrcpy(char *s1,char *s2) {
while(*s2)
{*s1=*s2;s1++;s2++;} *s1='\\0'; }
main()
{char a[100],b[100]; gets(a);gets(b); newstrcpy(a,b); puts(a); }
29.编写函数mystrcmp(char*s1,char*s2),其功能与库函数strcmp( )的功能相同。
代码如下:
int newstrcmp(char *s1,char *s2) {
int result;
while(*s1==*s2&&*s1) {s1++;s2++;} result=*s1-*s2; return result;} main()
{char a[100],b[100]; gets(a);gets(b);
printf(\
30.有一函数:
x x<1
Y={2x-1 1≤x<10 3x-11 x≥10 # include \main()
{ float x,y; scanf(\if (x<1) y=x;
if (x>=1&&x<10) y=2*x-1; if(x>=10)y=3*x-11;
printf(\31.求1!+2!+3!+......20! # include \main()
{ int n;double s,t;/*尽管结果实际是整型数,但受表达范围的限制, 应该将其定
义为双精度实型数*/ s=0;t=1.0;
for (n=1;n<=20;n++){t=t*n;s=s+t;/*此两句可谓妙也!在求下一项之时,利用前一项
已经有之结果*/}
printf(\}
32.用牛顿迭代方法求方程2X^3+4X^2+3X-6的根。 # include \# include \main()
{ float f1,f2,x1,x2;/*f1为原函数之值,f2为导函数之值*/ scanf(\
f1=2*x1*x1*x1-4*x1*x1+3*x1-6;
f2=6*x1*x1-8*x1+3;/*分别求出原函数和导函数之值*/
x2=x1-f1/f2;/*此为利用前一次近似值求下一个近似值的叠代公式,初始近似值
是任选的,从键盘输入*/ while (fabs(x2-x1)>=1e-5)/*如果相邻两次近似值之差不小于0.00001,则继续 叠代*/
{x1=x2;f1=2*x1*x1*x1-4*x1*x1+3*x1-6;
f2=6*x1*x1-8*x1+3;x2=x1-f1/f2;}/*脱离循环时即是满足精度要求的时候*/ printf(\输出之*/}
33.用Xn+1=(Xn+a/Xn)/2求a^(1/2)。 # include \# include \main()
{ float x,y0,y1,y2; scanf(\y1=(y0+x/y0)/2;
while (fabs(y1-y0)>=1e-5) {y0=y1;y1=(y0+x/y0)/2;} printf(\}
34.求分数序列2/1,3/2,5/3,8/5,13/8??前20项之和。
# include \main()
{float k,i,j,item;float s,t;
s=0;k=1;i=1;j=2;/*s用于累加,k用于记项数,i为每一项的分母,j为每项的分子*/
while (k<=20)
{t=j/i;s=s+t;item=i;i=j;j=item+j;k++;}/*用t=j/i求出每一项,而后累加到s 中
去.注意序列的规律:从第二项开始,每一项的分母是前一项的分子,每一项的分子是
前一项的分子与分母之和.故用i=j为下一项准备分母,j=item+j 为下一项准备分子.
item的作用是先把i原值保存起来.如果没有此项,而写成:i=j;j=i+j是否可行呢?请读者自己思考之*/ printf(\}
将一个数组中的值按逆序存放。 # include \ main()
{ int a[10],b[10];/*数组b为数组a的逆序存放*/ int i,j,k,t;
for (i=0;i<=9;i++)
scanf(\输入数组a*/ for (i=0;i<=9;i++)
printf(\输出数组a*/ printf(\
for (i=0;i<=9;i++) b[9-i]=a[i];/*把数组a逆序放入数组b中*/ for (i=0;i<=9;i++)
printf(\输出数组b*/ printf(\}
35.打印出下列杨辉三角形。 1
1 1
1 2 1
1 3 3 1 ??
# include \main()
{ int m,n,c;
for (m=0;m<10;m++)/*m代表行数,m=0代表第0行,共10行*/ { c=1;printf(\输出每行第一个元素1,占4列宽*/
for (n=1;n<=m;n++)/*每一行的元素个数为m+1个,已经输出了一个*/
{c=c*(m-n+1)/n;printf(\利用公式计算新的元素,并输出之, 输出
每个元素均占4列宽度*/
printf(\
36.求两个数的最大公约和最小公倍(使用函数) int maxgongyue(a,b) int a,b;
{ int i,maxgong,min;
if (a>b) min=b;else min=a; for (i=1;i<=min;i++)
if (a%i==0&&b%i==0) maxgong=i; return(maxgong);} int mingongbei(a,b) int a,b;
{ int i,mingongbei,max,c; c=a*b;
if(a>b) max=a;else max=b; for (i=c;i>=max;i--)
if (i%a==0&&i%b==0) mingongbei=i; return(mingongbei);} main() {int x,y;
int maxgongyue1,mingongbei1; scanf(\
maxgongyue1=maxgongyue(x,y); mingongbei1=mingongbei(x,y);
printf(\}
37.写一个判数是否素数和程序。 # include \
extern int prime(x)/*定义判断一个数x是否是素数的函数*/ int x;
{int k,flag;/*flag为是否为素数的标志*/
flag=1;for (k=2;k 某一步除尽了,则flag变为0,说明x不是素数*/ if(x%k==0) flag=0; else continue; return(flag); } 定义一个带参数的宏,使两个参数的值互换。 # define swap(a,b) t=a;a=b;b=t/*宏定义:swap(a,b)代表t=a;a=b;b=t;*/ main() { int a,b,t; printf(\scanf(\输入两数*/ swap(a,b);/*相当于t=a;a=b;b=t*/ printf(\输出结果*/ } 38.输入两个整数,求它们相除时的余数。 # define surplus(a,b) ((a)%(b))/*宏定义,surplus(a,b)代表两个表达式作求余 运算.之所以用((a)%(b)),乃因替换时可以有表达式的情况*/ main() { int a,b;printf(\scanf(\输入两数*/ printf(\输出结果*/ } 39.用宏定义求从三个数中找最大数 # include \自己撰写的文件*/ # define max(a,b) ((a)>(b)?(a):(b))/*宏定义:max(a,b)展开后为 ((a)>(b)?(a):(b)),即求a和b中较大者*/ main() { int a,b,c; scanf(\输入三个十进制整数*/ digit(max(max(a,b),c));}/*(max(max(a,b),c))为宏调用,即为a,b,c中最大数,此句是按整数十进制格式输入最大数*/ 40.排序问题 41.挑满足条件的数(最大、最小、能被某一数整除等等) 42.两全矩阵相加 43.两个矩阵相乘 **关于程序设计之典型问题 1.排序问题 2.穷举法 3.叠代法 4.递归 5.分段函数的计算 6.把程序结果保存到文件中