妈妈再也不用担心我的C语言啦!
妈妈再也不用担心我的C语言啦!
养个好习惯,点个赞,关注再走吧!专升本备考期间总结出来的,建议收藏。
算法总结
x + x + 1 + x + 2 \sqrt{x+x+1+x+2} x+x+1+x+2是整数
编程,在[1,98]查找并输出所有满足条件“x+x+1+x+2的平方根是整数”的数x(如输出2、11,因为2+3+4的和为9,11+12+13和为36,他们的平方根3、6都是整数)
#include
#include
void main()
{ int i,s;for(i=1;i<=98;i++) {s=3*i+3;if(sqrt(s)==(int)sqrt(s)){printf("%d\n",i);}}
}
s(n)=a+aa+aaa+aa…a
#include
int main()
{int n,a,s=0,term=0;printf("a,n=");scanf("%d%d", &a, &n);for(int i=1; i<=n; i++){term+=a;s+=term;a*=10;}printf("%d\n", s);return 0;
}
1!+2!+3!+4!+…+20!
#include
int main()
{int i;//定义为double型,以得到更多的精度,否则无法容纳求得的结果double s=0,m=1;for(i=1; i<=20; i++){m*=i;s+=m;}//输出时,用22.15e格式,使数据宽度为22,数字部分中小数位数为15位printf("%22.15e\n", s);return 0;
}
生兔子(斐波那契数列)
生兔子:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
#include
int main()
{long int t1,t2;t1=t2=1;for(int i=1; i<=20; i++){printf("%12ld%12ld", t1, t2);if(i%2==0){printf("\n"); }t1=t1+t2;t2=t1+t2;} return 0;
}
0-7能组成的奇数个数
tips:第一位只能为1-7;最后一位只能为1,3,5,7;中间位可以为0-8;
#include int main(){//cnt的初始值为4表示:只有一位数字组成的奇数个数为4个long total=4,cnt=4;int i;for(i=2; i<=8; i++){printf("%d位数为奇数的个数是%ld\n", i-1, cnt);if(i<=2){cnt*=7; }else{cnt*=8;}total+=cnt;} printf("%d位数为奇数的个数是%ld\n", i-1, cnt);printf("奇数的总个数是%ld\n", total);return 0;}
n阶顺时针螺旋方阵
打印用户指定的n阶顺时针螺旋方阵(n<10)
#include
#include int main()
{int a[10][10];int i,j,k=0,m,n;scanf("%d", &n);//方阵的层数m与方阵的阶数n的关系:m=(n+1)/2if(n%2==0){m=n/2; } else{m=(n+1)/2;}for(i=0; i<m; i++){for(j=i; j<n-i; j++){k++;a[i][j]=k;}for(j=i+1; j<n-i; j++){k++;a[j][n-i-1]=k;}for(j=n-i-2; j>=i; j--){k++;a[n-i-1][j]=k;}for(j=n-i-2; j>=i+1; j--){k++;a[j][i]=k;}}for(i=0; i<n; i++){for(j=0; j<n; j++){printf("%5d", a[i][j]);}printf("\n");}return 0;
}
求一元二次方程的跟
#include
#include int main(){double a,b,c,x1,x2,disc,realpart,imagpart;scanf("%lf%lf%lf", &a, &b, &c);//误差小于10^(-6)if(fabs(a)<=1e-6){printf("不是一元二次方程\n");}else{disc=b*b-4*a*c;//判断判别式是否小于一个很小的数,1e-6=10^(-6)。若小于此数,就认为disc等于0,有两个相等的实根 if(fabs(disc)<=1e-6){printf("两个相等的实根:%8.4f\n", -b/(2*a));}//disc>0,有两个不相等的实根 else if(disc>1e-6){x1=(-b+sqrt(disc))/2*a;x2=(-b-sqrt(disc))/2*a;printf("两个不等的实根:%8.4f and %8.4f\n", x1, x2);}//disc<0,有两个不相等的共轭复跟 else{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("两个不等的共轭复跟:\n");printf("%8.4f+%8.4fi\n", realpart, imagpart);printf("%8.4f-%8.4fi", realpart, imagpart);}}return 0;
}
指针交换两个变量(2)
输入两个整数,按先大后小的顺序输出这两个数。请用指针来编程
#include int main()
{int a,b,*p,*q,*r;printf("请输入两个整数:\n");scanf("%d,%d",&a,&b);p=&a;q=&b;if(a<b){r=p;p=q;q=r;}printf("较大数位%d,较小数位%d。\n",*p,*q);return 0;
}
#include int main()
{int a,b,*p,*q,t;printf("请输入两个整数:\n");scanf("%d,%d",&a,&b);p=&a;q=&b;if(a<b){t=*p;*p=*q;*q=t;}printf("较大数位%d,较小数位%d。\n",a,b);return 0;
}
二维数组逆序输出
#include #define M 2
#define N 3int main()
{void inverse(int a[][N], int b[][N]);int a[M][N],b[M][N],i,j;for(i=0; i<M; i++){for(j=0; j<N; j++){scanf("%d", &a[i][j]);}}inverse(a,b);for(i=0; i<M; i++){for(j=0; j<N; j++){printf("%d\t", b[i][j]);}//二维数组输出完一行后记得换行printf("\n");}return 0;
}void inverse(int a[][N], int b[][N])
{int i,j;for(i=0; i<M; i++){for(j=0; j<N; j++){b[M-i-1][N-j-1]=a[i][j];}}
}
一维数组逆序输出(2)
将数组a中n个整数按相反顺序存放,分别用数组名做参数和用指针做参数
方法一:用数组名做参数
#include int main()
{void reverse(int a[], int n);int a[5]={3,43,-4,45,5};int i;reverse(a,5);for(i=0; i<5; i++){printf("%d\t", a[i]);}return 0;
}void reverse(int a[], int n)
{int i,j,t,middle;middle=(n-1)/2;for(i=0; i<=middle; i++){j=n-1-i;t=a[i];a[i]=a[j];a[j]=t;}
}
方法二:用指针做参数
#include int main()
{void reverse(int *a, int n);int a[5]={3,43,-4,45,5};int i;reverse(a,5);for(i=0; i<5; i++){printf("%d\t", a[i]);}return 0;
}void reverse(int *a, int n)
{int *i,*j,*p,t,middle;middle=(n-1)/2;i=a;j=n-1+a;p=middle+a;for( ; i<=p; i++,j--){t=*i;//i指向数组的第一个元素*i=*j;//j指向数组的最后一个元素*j=t;//p指向中间值}
}
一维数组找最值
输入10个数,要求输出其中值最大的元素和该数是第几个数。要求用数组元素做函数实参
#include
int main()
{int max(int x,int y);int a[10],i,m,idx;for(i=0; i<10; i++){scanf("%d", &a[i]);}m=a[0];for(i=1; i<10; i++){if(max(m,a[i])>m){m=max(m,a[i]);idx=i;}}printf("%d %d\n", m, idx+1);return 0;
}int max(int x,int y)
{return x>y?x:y;
}
二维数组输出值
用指针变量输出输出二维数组元素的值
tips:*(p+i)+j是二维数组i行j列的元素地址,而 *( *(p+i)+j)则是i行j列元素的值
#include int main(){int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};int (*p)[4];int i,j;p=a;for(i=0;i<3;i++){for(j=0;j<4;j++){printf("%2d ", *(*(p+i)+j));}}return 0;
}
*二维数组找鞍点
找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
#include
#define N 4
#define M 5
int main()
{int i,j,k,a[N][M],max,maxj,flag;for(i=0; i<N; i++){for(j=0; j<M; j++){scanf("%d", &a[i][j]);}}for(i=0; i<N; i++){max=a[i][0];maxj=0;//找出第i行中的最大数for(j=0; j<M; j++){if(a[i][j]>max){//将本行的最大数存放在max中 max=a[i][j];maxj=j; }flag=1;for(k=0; k<N; k++){//将最大数和其同列元素相比 if(max>a[k][maxj]){flag=0;continue;}}}if(flag){printf("a[%d][%d]=%d\n", i, maxj, max);break;}}if(!flag){printf("It is not exist!\n");}return 0;
}
大小写字母转换
设计函数实现将一个字符串中小写字母转化为大写字母
#include
#include int main()
{void convert(char *s);char s[]="124asdfAJLJAsdj4Nr";convert(s);puts(s);return 0;
}void convert(char *s)
{while(*s!='\0'){if(islower(*s)){*s=toupper(*s);}s++;}
}
3个整数求大者
调用函数,求3个整数中的大者
#include
int main()
{int max();extern int a,b,c;scanf("%d%d%d", &a, &b, &c);printf("max=%d\n", max());
}
int a,b,c;
int max()
{int m;m=a>b?a:b;if(c>m){m=c;}return m;
}
统计单词个数
#include int main()
{char a[81];int w=0,n=0;gets(a);for(int i=0; a[i]!='\0'; i++){if(a[i]==' '){w=0;}else if(w==0){w=1;n++;}}printf("There are %d words int this line.\n", n);
}
统计数字个数
统计给定数据中0到9数字个数
#include int main()
{int i,data[20]={0,1,2,2,3,3,6,3,8,0,1,1,3,4,5,1,7,8,9,3} ;int cnt[10]={0} ;for(i=0; i<20; i++){cnt[data[i]]+=1;} for(i=0; i<10; i++){printf("数字%d的个数:%d\n",i,cnt[i]);}return 0;
}
统计字符个数
有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数
#include int main()
{char a[3][80];int i,j,Letter=0,letter=0,digital=0,space=0,other=0;for(i=0; i<3; i++){gets(a[i]);for(j=0; j<80&&a[i][j]!='\0'; j++){if(a[i][j]>='A'&&a[i][j]<='Z'){Letter++;}else if(a[i][j]>='a'&&a[i][j]<='z'){letter++;}else if(a[i][j]>='0'&&a[i][j]<='9'){digital++;}else if(a[i][j]==' '){space++;}else{other++;}}}printf("Letter=%d\nletter=%d\ndigital=%d\nspace=%d\nother=%d\n", Letter, letter, digital, space, other);return 0;
}
删除指定字符
#include int main()
{void del_char(char a[],char n);char a[80],n;gets(a);n=getchar();del_char(a,n);return 0;
}void del_char(char a[],char n)
{char p[80];int i,j;for(i=0,j=0; a[i]!='\0'; i++){if(n!=a[i]){p[j++]=a[i];}}p[j]='\0';puts(p);
}
找最大字符串
有3个字符串,要求找出其中最大者
#include
#include
int main()
{char str[3][20];char string[20];int i;for(i=0; i<3; i++){gets(str[i]);}if(strcmp(str[0],str[1])>0){strcpy(string,str[0]);}else{strcpy(string,str[1]);}if(strcmp(str[2],string)>0){strcpy(string,str[2]);}printf("\nthe largest string is:%s\n", string);return 0;
}
求pi的近似值
用pi/4=1-1/3+1/5-1/7+…公式求pi的近似值,知道发现某一项的绝对值小于1e-6为止(该项不累加)。
#include
#include
int main()
{int sign=1;double pi=0.0,n=1.0,term=1.0;while(fabs(term)>=1e-6){pi+=term;n+=2;sign=-sign;term=sign/n;}printf("pi=%10.8f\n", pi*4);return 0;
}
字符串复制(5)
tips:将字符串中从第m个字符开始的n个字符复制到另一个字符串
- 对gets()和puts()的使用
- gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加’\0’字符
- puts()输出字符串时遇到’\0’(即:字符结束符)才停止;并且自动在字符串末尾添加一个换行符
#include int main()
{char a[100],b[100];int m,n,i;gets(a);scanf("%d %d", &m, &n);//i从0开始加并且条件是小于要复制的个数(即i//好像是废话,因为数组下标本来就是从0开始哈哈哈for(i=0; i<n; i++){//如果不好理解,可以代数进去b[i]=a[m+i-1];}printf("%s\n", b);return 0;
}
将字符串a复制为字符串b
方法一:下标法
#include int main(){char a[]="I am a student!",b[100];int i;// *(a+1) 相当于 a[i] 同理:*(b+i) 相当于 b[i]for(i=0; *(a+i)!='\0'; i++){*(b+i)=*(a+i);}*(b+i)='\0';printf("%s\n", a);//可直接用 puts(b) 输出在字符数组,或者用格式字符串 %s for(i=0; b[i]!='\0'; i++){printf("%c", b[i]);}return 0;
}
方法二:指针法
#include int main(){char a[]="I am a student!",b[100],*p1,*p2;for(p1=a,p2=b; *p1!='\0'; p1++,p2++){*p2=*p1;}*p2='\0';printf("string a is:%s\n", a);printf("string b is:%s\n", b);return 0;
}
用函数调用实现字符串的复制(用字符数组做参数;形参用字符指针变量)
方法一:形参用字符数组做参数
#include int main()
{void copy_string(char a[], char b[]);char a[100]="I am a student!",b[100];copy_string(a,b);puts(a);puts(b);return 0;
} void copy_string(char a[], char b[])
{int i;for(i=0; a[i]!='\0'; i++){b[i]=a[i];}b[i]='\0';
}
方法二:形参用指针参数
#include int main()
{void copy_string(char a[], char b[]);char *a="I am a student!",b[100];copy_string(a,b);puts(a);puts(b);return 0;
} void copy_string(char *a, char *b)
{for( ; *a!='\0'; a++,b++){*b=*a;}*b='\0';
}
字符串逆序
#include
#include int main()
{//中间变量 t 就是一个交换器char a[100],t;int i,j,k;scanf("%s", &a);k=strlen(a);//看到这个for语句不要懵,注意`;`即可for(i=0,j=k-1; i<k/2; i++,j--){t=a[i];a[i]=a[j];a[j]=t;}printf("%s\n", a);return 0;
}
字符串插入
从键盘输入一个字符串a,并在串中的最大元素后边插入另外输入的字符串b
#include
#include int main()
{char a[100],b[]="@#@",max;int i=0,j;gets(a);max=a[i];for(i=0; a[i]!='\0'; i++){if(max<a[i]){max=a[i];j=i;}}i=strlen(a)+strlen(b)-1;for( ; i>j; i--){a[i]=a[i-strlen(b)];}j=0;i++;while(b[j]!='\0'){a[i]=b[j];printf("%c\n", a[i]);i++;j++;}puts(a);return 0;
}
字符串比较
比较两个字符串,若s1>s2,输出一个正数;若s1=s2,输出0;若s1 从键盘输入两个字符串a和b,要求不用库函数strcat把字符串b的前五个字符连接到字符串a中;如果b的长度小于5,则把b的所有元素都连接到a中 从键盘输入一个整数,用折半查找法找出该数在10个有序整型数组a中的位置。若该数不在a中,则打印出相应信息 鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,百钱买百鸡。问鸡翁、母、雏各几何?输出所有买法,每一种鸡至少要一只 两个乒乓球队进行比赛,各出3人。甲队为A,B,C3人,乙队为X,Y,Z3人。已知A不和X比,C不和X,Z比,请编程找出3对赛手的名单 给出年、月、日,计算该日是该年的第几天 逆序输出:你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照输入相反的顺序输出所读到数字,不包括最后标识结束的-1 逆序的三位数: 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和 有一行电文,已按下面规律译成密码:A=>Z,B=>Y,C=>X… a=>z,b=>y,c=>x… 即将第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。编程将密码译回原文,并输出密码和原文 将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。如“China!”转换为“Glmre!”。 一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多高。 猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上就只剩一个了。求第1天共摘了多少个桃子。 有5个学生坐在一起,第1个学生10岁,第2个学生比第1个学生大2岁,第3个学生比第2个学生大2岁…依次类推,第5个学生比第4个大2岁,求第5个学生的年龄。 写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如输入1990,应输出"1 9 9 0"。 将数组a中n个整数按相反的顺序存放 用指针 写一个函数,输入一行字符,将此字符串中最长的单词输出 用二分法求下面方程在(-10,10)之间的跟: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0MhjuBRO-1622860361151)(file://D:\Study\blogImg\image-20210526154956234.png?lastModify=1622017241)] 用迭代法求x=sqrt(a)。求平方根的迭代公式为 要求前后两次求出的x的差的绝对值小于1e-5。 用牛顿迭代法求下面方程在1.5附近的根: 牛顿迭代公式为: 用牛顿迭代法求根。方程为 ,系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的一个实根。求出根后由主函数输出。 方法一: 方法二:使用指针 输出1000以内的完数 输入一个大于3的整数n,判定它是否为素数(prime,又称质数) 求100~200间的全部素数 用删选法求100之内的素数 计算e=1 + 1/1! + 1/2! + 1/3! +…+1/n! 的值并输出 (设n=20) 一个整型数组里的5个元素由键盘输入,将每个元素变为原来的两倍后再依次输出。请用指针来编程 tips: 有两个小组,分别有 5 名学生和 10 名学生。请编程输入这些学生的成绩,并调用一个 aver 函数求这两个小组的平均分(要求形参和实参都是用指针变量) tips: 已知整型二维数组a[3] [4]={1,2,3,4,5,6,6,5,4,3,2,1}。请用指针变量输出二维数组各个元素的值 tips: 比如&a[0] [0]可以写成a[0]+0,0省略后就是a[0];&a[2] [3]可以写成a[0]+2*4+3(二维数组有4列),运算一下后半部分,结果就是a[0]+11 1:有3名学生学习4门课,学生一的成绩分别是65,67,70,60。学生二的成绩分别是80,87,90,81。学生三的成绩分别是90,99,93,98。将上述成绩输入二维数组,并通过函数输出三人的总平均分 方法一(形参实参都是数组名): 方法二(形参是指针变量,实参是数组名): tips: 方法三:如果题目要求我们形参是指针变量,实参也是指针变量,那就按照以下三步来修改(前两步没变) 1:有3名学生学习4门课,学生一的成绩分别是65,67,70,60。学生二的成绩分别是80,87,90,81。学生三的成绩分别是90,99,93,98。将上述成绩输入二维数组,并通过函数输出第2个学生的各科成绩 tips: 和指针与一维数组的用法是完全一样的 1:定义字符串a为“I am shuaibi!”,将其赋值到字符串b里,并输出字符串b 一般来说我们都明白以下两点: 但有些时候,不一定是这样写,而是采用了一些简便写法。简便写法写起来不要用&和[],是比较省事的。但这时候读起程序来就比较费劲了。其实简便写法的规律就是以下两条: 输入a和b两个整数,按先大后小的顺序输出a和b。(要求:a和b的值不变,交换指针变量的p1和p2的值) 用函数处理,而且用指针类型的数据作函数参数#include#include九九乘法表
#include杨辉三角形
#include 折半查找法
#include百钱买百鸡
#include 最大公约数
#include乒乓球比赛
#include 判断第几天
#include插入排序
#include冒泡排序
#include选择排序
#include水仙花数
#include逆序输出(2)
#include#include数列求和
#include打印图形
*************************
#include * * * * ** * * * ** * * * ** * * * ** * * * *
#include 电文密码(2)
#include#include自由落体
#include猴子吃桃
#include递归求n!
#include 学生年龄
#include 数字空格
#include数组逆序(2)
#include#include*最长单词
#include*二分法
#include*魔方阵
#include*迭代法(3)

#include![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1KdyseH2-1622860361156)(D:/Study/blogImg/image-20210526154956234.png)]](https://img-blog.csdnimg.cn/20210605103338540.png)

#include
#include*n阶勒让德多项式
#include汉诺塔
#include回文数(2)
#include#include完数
#include素数(4)
#include#include#include#include递归
#include指针变量与一维数组
#include指针变量与一维数组相关函数
#include指针变量与二维数组
#include指针变量与二维数组相关函数
#include#include#include用指向二维数组行变量的指针做形参
#include指针变量与字符串
#include指针与一维二维数组的数值关系
交换两个数
#include#include
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
