此代码算的2/1圆周率,里面既有累乘也有累加 s1=s1*n/(2*n+1); 这个右边是累乘n-1的s1再乘*n/(2*n+1)就是n累乘的s1,再把每个s1累加就是圆周率
while(s1>=eps) {
s+=s1;
s1=s1*n/(2*n+1);
n++;
}
//此题为找出字符串中最后一个与t1字符串字符串相等的子字符串,并将其赋值为t2字符串,首先传地址给 fun函数
//分别为s要查找的字符串字符串,t1,t2字符串还有w为修改后的字符 ,首先把s字符拷贝给w字符,用while循环遍历w字符
// 再让指针p指向w遍历到的单个字符,r指向t1字符 ,如果r指向的字符与p指向的字符相等,两个指针都往后移,如果不相等则
//推出循环,w指针指向下一个字符,r指针重新指向t1开头再次比较,因为两个子字符串长度相等所以当其中一个指针r指向'/0'
//时两个t1这个字符串就和s的子字符串匹配上了,然后指针a指向这时的w,也就是遍历前的p这样一此类推最后a会指向最后一个
//t1字符串可以匹配的子字符串的第一个字符,然后通过循环赋值将t2赋值给a,w字符串就修改完成
#include <stdio.h>
#include <string.h>
//此题为找出字符串中最后一个与t1字符串字符串相等的子字符串,并将其赋值为t2字符串,首先传地址给 fun函数
//分别为s要查找的字符串字符串,t1,t2字符串还有w为修改后的字符 ,首先把s字符拷贝给w字符,用while循环遍历w字符
// 再让指针p指向w遍历到的单个字符,r指向t1字符 ,如果r指向的字符与p指向的字符相等,两个指针都往后移,如果不相等则
//推出循环,w指针指向下一个字符,r指针重新指向t1开头再次比较,因为两个子字符串长度相等所以当其中一个指针r指向'/0'
//时两个t1这个字符串就和s的子字符串匹配上了,然后指针a指向这时的w,也就是遍历前的p这样一此类推最后a会指向最后一个
//t1字符串可以匹配的子字符串的第一个字符,然后通过循环赋值将t2赋值给a,w字符串就修改完成
void fun (char *s, char *t1, char *t2 , char *w)
{
char *p , *r, *a;
strcpy( w, s );
/************found************/
while ( *w )
{ p = w; r = t1;
while ( *r )
/************found************/
if ( *r == *p )
{ r++; p++; }
else break;
if ( *r == '\0' ) a = w;
w++;
}
r = t2;
while ( *r ){ *a = *r; a++; r++; }
}
void main()
{
char s[100], t1[100], t2[100], w[100];
printf("\nPlease enter string S:"); scanf("%s", s);
printf("\nPlease enter substring t1:"); scanf("%s", t1);
printf("\nPlease enter substring t2:"); scanf("%s", t2);
if ( strlen(t1)==strlen(t2) )
{ fun( s, t1, t2, w);
printf("\nThe result is : %s\n", w);
}
else printf("\nError : strlen(t1) != strlen(t2)\n");
}
//典型的对文件操作代码,首先定义结构体类型STU,然后定义数组插入数据,定义文件指针fp,并用wb及二进制写入的方式打开文件student.dat,将结构体数组写入,再将原始数字打印出来,然后,
//将文件传入函数用二进制读出的方式将数据读到指针s,按照s[i].sno对数组排序然后再写入文件夹
#include <stdio.h>
#define N 5
typedef struct student {
long sno;
char name[10];
float score[3];
} STU;
void fun(char *filename)
{ FILE *fp; int i, j;
STU s[N], t;
/**********found**********/
fp = fopen(filename, "rb");
fread(s, sizeof(STU), N, fp);
fclose(fp);
for (i=0; i<N-1; i++)
for (j=i+1; j<N; j++)
/**********found**********/
if (s[i].sno > s[j].sno)
{ t = s[i]; s[i] = s[j]; s[j] = t; }
fp = fopen(filename, "wb");
/**********found**********/
fwrite(s, sizeof(STU), N, fp);
fclose(fp);
}
void main()
{ STU t[N]={ {10005,"ZhangSan", 95, 80, 88}, {10003,"LiSi", 85, 70, 78},
{10002,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90, 82, 87},
{10001,"MaChao", 91, 92, 77}}, ss[N];
int i,j; FILE *fp;
fp = fopen("student.dat", "wb");
fwrite(t, sizeof(STU), 5, fp);
fclose(fp);
printf("\n\nThe original data :\n\n");
for (j=0; j<N; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",t[j].sno, t[j].name);
for (i=0; i<3; i++) printf("%6.2f ", t[j].score[i]);
printf("\n");
}
fun("student.dat");
printf("\n\nThe data after sorting :\n\n");
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), 5, fp);
fclose(fp);
for (j=0; j<N; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]);
printf("\n");
}
}
这差不多是对数组操作的进阶,将数组的前m个元素移到数组后面,首先for循环确定要往前移几次每次在移动之前记录第一个字符,因为每次往前移第一个字符都会被覆盖,所以,往前移动m个就相当于记录了m个字符,然后就是对字符w的前移操作, for(j=1;w[j]!='\0';j++){w[j-1=w[j]},从第二个字符覆盖第一个字符开始往前移一位,然后 w[j-1]=t,将第一个字符放到最后一个字符当中,依次类推,每次往前移之前记录第一个字符,移动后在把字符放到最后,移动了m位,就放了m个,从而完成了操作
#include <stdio.h>
#include <string.h>
#define N 80
void fun (char *w,int m)
{
int i,j;
char t;
for(i=1;i<=m;i++) /*进行m次的循环左移*/
{ t=w[0];
for(j=1;w[j]!='\0';j++) /*从第2个字符开始以后的每个字符都依次前移一个字符*/
w[j-1]=w[j];
w[j-1]=t; /*将第1个字符放到最后一个字符中*/
}
}
void main()
{ char a[N]= "ABCDEFGHIJK";
int m;void NONO ();
printf("The original string:\n");puts(a);
printf("\n\nEnter m: ");scanf("%d",&m);
fun(a,m);
printf("\nThe string after moving:\n");puts(a);
printf("\n\n");
NONO();
}