专升本期间部分C语言程序整理

说明

这些程序是我在专升本期间在CSDN上上传的作业、练习等,仅为学习备考的一小部分程序,整理成一篇文章,方便专升本的学弟学妹参考。

时间:2021年~2022年专升本期间

字符串题

输入字符串提取 数字字符 并 求和 (4处错)

题目:输入一个字符串,将其数字符号选出按顺序组成一个整数并输出到屏幕上。

例如:输入-3#45^67@,得到-34567;输入3#4-5*67,得到34567。

#include<stdio.h>
#include<string.h>
int main()
{char s[50];int i,n=0;	//错误1:n没赋初值 gets(s);	//错误2:gets写成了get() if(s[0]=='-')putchar(s[0]);for(i=0;i<strlen(s);i++){if(s[i]>='0'&&s[i]<='9'){//错误3:①②写反了 n*=10;		//②n+=s[i]-'0';	//① 错误4:写成了 n=s[i]-'0';  }}printf("%d",n);return 0;} 

运行结果1:
输入:-3#45^67@
输出:-34567

运行结果2:
3#4-5……67@
34567

strlen的实现

//计算长度 #include<stdio.h>
int main()
{char *str1 = "abcdefg", *str2;str2 = str1;	while(*str1++);{str1++;}printf("%d",str1 - str2);	//9
}

strcat()的实现

//链接字符串
#include<stdio.h>int main()
{char s1[30] = "abcdefg",s2[30] = "hijklmn";char *str1 = s1 , *str2 = s2;while(*str1){str1++;}while(*str2){*str1++ = *str2++;}printf("%s",s1);	//abcdefghijklmn 	//输出数组名,不要输出指针名。
//  printf("%s",str1);	//无输出结果,因为此时str2指向了0	 } 

strcpy()的实现

#include<stdio.h>int main()
{char str1[30] = "abcdefghiklmn",str2[30] = "asdljgs";char *s1 = str1 , *s2 = str2;while(*s2){*s1 = *s2;s1++;s2++;}*s1 = '\0';printf("%s",str1);	//asdljgs } 

删除字符串

#include<stdio.h>int main()
{char s[30] = "a1b2c3d4ef5";char *p=s;int n=0,i=0;while(s[i]){if(s[i] < '0' || s[i] > '9' ){s[n++] = s[i];}i++;}s[n] = '\0';printf("%s",s);	//abcdef}

比较字符串(本题认为值为左串与右串第一个不相同字符之差(左-右))

#include<stdio.h>int main()
{char s1[30],s2[30];int i,j;scanf("%s%s",s1,s2);for(i=0;s1[i]==s2[i];i++);printf("%d",s1[i]-s2[i]);    
}#include<stdio.h>int main()
{char s1[30],s2[30];char *p = s1,*q =s2;scanf("%s%s",s1,s2);    //scanf("%s%s",p,q);while(*p == *q){p++,q++;}printf("%d",*p-*q);
}

运行结果都如下:

abcdefg
abceefg
-1

字符串转成顺序数字

//把数字字符串转成数字

#include<Stdio.h>int main()
{char s[10] = "1234";int i,n=0;for(i=0;s[i];i++){n=n*10+s[i]-'0';}printf("%d",n);
}

1234

2.字符串转成逆序数字
方法很简单啊,把for循环的3条语句都改了就好了,此外注意添加头文件

//把数字字符串转成逆序数字 
#include<Stdio.h>
#include<string.h>int main()
{char s[10] = "1234";int i,n=0;for(i=strlen(s)-1 ;i>=0 ;i--){n=n*10+s[i]-'0';}printf("%d",n);
}

4321

输出字符串中最长的单词

#include<Stdio.h>int main()
{char str[80] = "this  isndnsjfida  is a pencil   good   ";char *p,*s = str;int num=0,max = 0;while(*s){while(*s&&(*s>='a'&&*s<='z'||*s>='A'&&*s<='Z')){num++;s++;}if(num > max){max = num;p = s;}num = 0;while(*s&&*s==' '){s++;}}*p = 0;puts(p-max);
}

pencil

判断回文串

#include<stdio.h>
#include<string.h>int main()
{char s[30] = "abcba";int i,j;for(i = 0 , j=strlen(s)-1; i<j; i++,j--)	//-1 不是strlen(s) {if(s[i] != s[j]){break;}}if(i>=j){printf("是回文串");}else{printf("不是回文串");}} 

是回文串

​子串

#include<stdio.h>
#include<string.h>int main()
{char s1[30] = "abcdabdabe" ,s2[10] = "ab";int i,j;int num = 0;for(i=0; i<strlen(s1); i++){for(j=0; j<strlen(s2); j++){if(s1[i+j] != s2[j]){break;}}if(j == strlen(s2)){num++;}}printf("%d",num);return 0; 
} 

3

输入三个字符串,分别统计每个串的大写字母个数

方法1:指针数组法

#include<stdio.h>int main()
{char str[3][50]; char *name[3] = {str[0],str[1],str[2]}; //指针必须有指向int num[3]={0};int i,j;for(i=0;i<3;i++){gets(*(name+i));for(j=0;*(*(name+i)+j);j++){if(*(*(name+i)+j)>='A'&&*(*(name+i)+j)<='Z'){num[i]++;}}printf("大写字母有%d个",num[i]);putchar('\n');}
}

A1B2C3D4
大写字母有4个
zxcasdG
大写字母有1个
大写字母有0个

方法2:二维数组法

#include<stdio.h>int main()
{char name[3][80];int num[3]={0};int i,j;for(i=0;i<3;i++){gets(name[i]);for(j=0;name[i][j];j++){if(name[i][j]>='A'&&name[i][j]<='Z'){num[i]++;}}printf("大写字母有%d个",num[i]);putchar('\n');}
}

abcABC123A
大写字母有4个
gjfA
大写字母有1个
kgsSHB4
大写字母有3个

数组题

从整形数组中计算奇数元素的平均值

#include<stdio.h>double ave(int b[],int n)
{double sum=0.0;int i,j=0;	//j:奇数个数for(i=0;i<n;i++){if(b[i]%2!=0){sum+=b[i];j++; 	}} printf("奇数有:%d个\n",j);printf("%f 除以 %d = %f\n",sum,j,sum/j);return sum/j;
}
int main()
{int a[100];int i,n;printf("请输入元素个数:");scanf("%d",&n); for(i=0;i<n;i++){printf("请输入a[%d]:",i); scanf("%d",&a[i]);}printf("The result is : %lf",ave(a,n));	return 0;
}

请输入元素个数:5
请输入a[0]:1
请输入a[1]:2
请输入a[2]:3
请输入a[3]:4
请输入a[4]:5
奇数有:3个
9.000000 除以 3 = 3.000000
The result is : 3.000000

设计程序统计某班全体学生三门课的成绩,要求先输入学生人数,并依次输入每个学生的三门成绩,统计出每门课程的全班平均分及每个考生所有考试的总分。

#include<stdio.h>int main()
{int i,j;int n;double a[100][5] = {0};double avg1 = 0 , avg2 = 0 , avg3 = 0;scanf("%d",&n);	//n:学生人数for(i=0; i<n; i++)8{scanf("%lf%lf%lf",&a[i][0],&a[i][1],&a[i][2]);a[i][3] = a[i][0] + a[i][1] + a[i][2];	//a[i][3]保存 总分 avg1+=a[i][0]/n;	//科目1平均分 avg2+=a[i][1]/n;avg3+=a[i][2]/n;} for(i=0;i<n;i++){printf("第%d个考生总分:%lf\n", i+1 , a[i][3]);}printf("科目1:%lf\n科目2:%lf\n科目3:%lf\n",avg1,avg2,avg3);}

3
1 2 3
4 5 6
7 8 9
第1个考生总分:6.000000
第2个考生总分:15.000000
第3个考生总分:24.000000
科目1:4.000000
科目2:5.000000
科目3:6.000000

假设10个整数存储在数组a[10]中,要求把其中能被12整除的数标记为T,其他标记为F,标记存储在字符数组b[10]中下标相同的对应位置。输出这两个数组

#include<stdio.h>int main()
{int a[10] = {1,12,144,24,48,25,26,32,2,36};int b[10] = {0};int i;for(i=0; i<10; i++){//写法1.if - else //		if(a[i]%12==0)
//		{
//			b[i] = 'T';
//		}
//		else
//		{
//			b[i] = 'F';
//		}
//		//写法2.条件表达式b[i] = a[i]%12==0 ? 'T' : 'F'; }for(i=0; i<10; i++){printf("%-3d - %c\n",a[i],b[i]);}
}

1 - F
12 - T
144 - T
24 - T
48 - T
25 - F
26 - F
32 - F
2 - F
36 - T

输出10行杨辉三角

include<stdio.h>int main()
{int a[10][10] = {0};int i,j;for(i=0; i<10; i++){a[i][0] = 1;a[i][i] = 1;} for(i=1; i<10; i++){for(j=1; j<=i; j++)	// <= 或 < 都可以 {a[i][j] = a[i-1][j-1] + a[i-1][j];}}for(i=0; i<10; i++){for(j=0; j<=i; j++){printf("%-5d",a[i][j]);}putchar('\n');}
}

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

递归输出杨辉三角

#include<stdio.h>int f(int i , int j)
{if(j==0||j==i){return 1;}elsereturn f(i-1,j-1) + f(i-1,j);
}int main()
{for(int i=0;i<=9; i++){for(int j=0;j<=i;j++){printf("%d\t",f(i,j)); }putchar('\n');}} 

判断对称数组

#include<stdio.h>
#define M 4
#define N 4
typedef int integer;integer Fun(int a[][4])
{int i,j;for(i=0; i<M; i++){for(j=0; j<N; j++){if(a[i][j] != a[j][i]){return 0;}}}return 1;} void main()
{int a[M][N] = {1,3,4,5,3,2,7,9,4,7,1,6,5,9,6,1};if(Fun(a)){printf("是对称数组");}else{printf("不是对称数组");}
}

是对称数组

斐波那切数列数组法

#include<stdio.h>int main()
{int s[40] = {0,1};int i;for(i=0;i<20;i++){printf("%d\t",s[i]);s[i+2] = s[i] + s[i+1];if((i+1) % 5 == 0)putchar('\n');}} 

0 1 1 2 3
5 8 13 21 34
55 89 144 233 377
610 987 1597 2584 4181

递归输出斐波那契额数列

#include<stdio.h>int f2(int x)
{if(x==0){return 0;}else if(x==1){return 1;}else{return f2(x-2)+f2(x-1);}} int main(){int n,i;scanf("%d",&n);for(i=0;i<n;i++){printf("%d\t",f2(i));}return 0;}

在这里插入图片描述

两个两个输出

#include<stdio.h>int main()
{int i=0,j=1,k;for(k=0;k<10;k++){printf("%d\t%d\n",i,j);i+=j;j+=i;}
}

​​​​​​​​在这里插入图片描述

删除指定下标的数组元素

硕成大模考的一道题,答案给错了,太坑了


#include<stdio.h>
#define N 5void fun(int a[], int k, int *n) 
{int *p,* q,*r=a;if(k<0||k>=N) {printf("error!\n");exit(0);}for(p=a,q=a+k;p<a+N;p++){if(p!=q){*r++=*p;}else(*n)--;}
}int main()
{int a[N] ,k ,n=N,*p;for(p=a;p<a+N;p++) scanf("%d",p);	scanf("%d",&k);	fun(a,k,&n);for(p=a ;p<a+n;p++)printf("%d\t",*p);
} 

1 2 3 4 5
2
1 2 4 5

将一个整数插入到已经排好序的数组中,是该数组仍然有序

#include<stdio.h>int main()
{int a[10] = {1,2,3,4,6,7};int x;scanf("%d",&x);int i = 0,j;while(x > a[i]){i++;	}for(j=5 ; j>=i; j--)a[j+1] = a[j];if(x>a[5]){a[6] = x; }else{a[i] = x;	}for(i=0;i<7;i++){printf("%d\t",a[i]);}
}

0
0 1 2 3 4 6 7

5
1 2 3 4 5 6 7

8
1 2 3 4 6 7 8

删除数组中的重复数字

在这里插入图片描述

#include<stdio.h>int delete(int a[],int n)
{int i,j,flag = 1,k=0;printf("数组原来元素为:");for(i=0;i<n;i++){printf("%6d",a[i]);}putchar('\n');for(i=0;i<n;i++){flag = 1;j=i; for(j=i+1;j<n;j++){if(a[i]==a[j]){flag = 0;break;}}if(flag ==1){a[k++] = a[i];}}printf("\n数组删除后的元素为:");for(i=0;i<k;i++){printf("%6d",a[i]);}putchar('\n');for(i=k;i<n;i++){a[i]=0;}return k;
}int main()
{int a[] = {1,1,1,2,2,2,3,3,4,5};printf("删除后有%d个元素",delete(a,10));return 0;
}

数组原来元素为: 1 1 1 2 2 2 3 3 4 5
数组删除后的元素为: 1 2 3 4 5
删除后有5个元素

方法2

#include<stdio.h>int f(int a[],int n)
{int i,j,k=0,num;printf("\n数组删除前的元素为:");for(i=0;i<n;i++){printf("%6d",a[i]);}putchar('\n');for(i=0; i<n; i+=num){num = 0;for(j=0;j<n;j++){if(a[i] == a[j])num++;}a[k++] = a[i];}printf("\n数组删除后的元素为:");for(i=0;i<k;i++){printf("%6d",a[i]);}putchar('\n');return k;
}void main()
{int a[10] = {1,1,2,2,2,3,3,4,4,5};printf("删除后有%d个元素",f(a,10));
}

数组删除前的元素为: 1 1 2 2 2 3 3 4 4 5
数组删除后的元素为: 1 2 3 4 5
删除后有5个元素

方法3

int delete(int *b,int n)
{int i,num = 0;for(i=0; i < num ; i++){if(b[i] != b[i+1])b[num++] = b[i];}return num;
}

1 2 3 4 4 5 6 6 6 7
删除前:
1234456667
删除后:
1234567

删除后有7个字符

## 指针程序题
### 指针s所指向的字母数字串只包含数字和字母,编写程序实现如下功能:只保留第一个字母前的数字字符,其余数字字符全部删除。例如:12ab3cd456e → 12abcde
```c
#include<stdio.h>void Fun2(char *s)
{//123abc12cd1char *p = s;while(*s >= '0' && *s <= '9'){s++;}p = s;while(*s){if(*s < '0' || *s > '9'){*p = *s;p++;}s++;}*p = '\0';//	printf("删除数字字符后的字符串为:%s" , p);	//p指针已经指向了最后一个元素,所以输出结果为空白。应在主函数中调用输出。 
}int main()
{char s[32];scanf("%s",s);Fun2(s);printf("删除数字字符后的字符串为:%s" , s);} 

12ab3cd456e
删除数字字符后的字符串为:12abcde

用数组实现。

#include<stdio.h>void Fun2(char *s)
{//123AB12CD1int i=0 , j=0;while(s[i]>='0' && s[i]<='9'){i++;}j=i;for(; s[i]; i++){if(s[i]<'0' || s[i]>'9'){s[j++] = s[i];}}s[j] = 0;printf("删除后的字符串为:%s",s);	//是下标实现的,所以可以在此处输出。 
}int main()
{char s[32];scanf("%s",s);Fun2(s);					
//	Fun2("123as321y4ddgf"); 	//程序不执行,无反应 } 

12ab3cd456e
删除后的字符串为:12abcde

统计字符串 中的 子串 出现的次数。例如 “abcabdabe” 中 “ab” 出现次数为 3 ,“abc”出现次数为 1

#include<stdio.h>int FUN(char s1[],char s2[])
{char *p1 = s1,*p2 = s2;char *p3 = NULL;int num = 0;while(*p1){p3 = p1;while(*p2 == *p3){p2++,p3++;}if(*p2 == '\0'){num++;}p2 = &s2[0];p1++;}return num;} int main() 
{printf("个数为:%d\n",FUN("abcabdabe","ab"));	//个数为:3printf("个数为:%d\n",FUN("abcabdabe","abc"));	//个数为:1return 0;
}

个数为:3
个数为:1

鞍点

//鞍点#include<stdio.h>
#define N 4int main()
{int i,j,flag=0,t,maxi,maxj,mini,max,min;	//定义int a[N][N] =	{1,2,3,4,1,2,3,4,9,10,11,12,13,14,15,16};for(i=0; i<N; i++){maxj = 0;maxi = i;max = a[i][0];for(j=0; j<N; j++){if(a[i][j] > max){max = a[i][j];maxj = j;maxi = i;			}			}//产生了单行最大值mini = i;for(t=0; t<N; t++) {if(a[t][maxj] < max){mini = t;}}//产生了单列最小值if(mini == maxi){printf("鞍点:%d行%d列:%d\n",maxi,maxj,max);flag = 1;}}if(!flag){printf("没有鞍点");}}

鞍点:0行3列:4
鞍点:1行3列:4

结构体题

1.统计结构体数组中性别(sex)为’M’的变量的个数。

要求:

①数组元素依次赋初值为:{1 , “Andy” , ‘M’ } 、 {2 , “Mike” , ‘F’ } 、 {3 , “Rose” , ‘M’}。

②结构体定义如下:struct Student{int num;char name[30];char sex;};

#include<stdio.h>struct Student{int num;char name[30];char sex;
};int Fun(struct Student *s , int n)
{int num=0; int i;for(i=0; i<n; i++){if(s[i].sex == 'M'){num++;}}return 3;
}int main()
{struct Student s[3] = {1,"Andy",'M',2,"Mike",'F',3,"Rose",'M'};printf("%d",Fun(s , 3));return 0;
}

3

2.通过函数调用实现:讲结构体数组中的三个元素按num成员进行升序排列。

要求:

①数组元素依次赋初值为:{12,“sunny”,89.1}、{8,“henry”,73.5}、{21,“lucy”,91.7}。

②结构体定义如下:struct s{int num;char name[30];float score;};

写法1:在函数外部 定义 结构体变量并且赋值,参数值为空。

#include<stdio.h>struct s{int num;char name[30];float score;
}a[3] = {{12,"sunny",89.1} , {8,"henry",73.5} , {21,"lucy",91.7}}; void fun()
{int i,j;struct s t;for(i=0; i<2; i++){for(j=0; j<2-i; j++){if(a[j].num > a[j+1].num){t = a[j];a[j] = a[j+1];a[j+1] = t;}}}}int main()
{int i;fun();for(i=0; i<3; i++){printf("%d,%s,%f\n",a[i].num , a[i].name , a[i].score);}return 0;
}

8,henry,73.500000
12,sunny,89.099998
21,lucy,91.699997

写法2:在主函数中定义变量,通过参数传递变量值

#include<stdio.h>struct s{int num;char name[30];float score;
};void fun(struct s *a , int n)
{int i,j;struct s t;for(i=0; i<n-1; i++){for(j=0; j<n-1-i; j++){if(a[j].num > a[j+1].num){t = a[j];a[j] = a[j+1];a[j+1] = t;}}}}int main()
{struct s a[3] = {{12,"sunny",89.1} , {8,"henry",73.5} , {21,"lucy",91.7}}; int i;fun(a,3);for(i=0; i<3; i++){printf("%d,%s,%f\n",a[i].num , a[i].name , a[i].score);}return 0;
}

8,henry,73.500000
12,sunny,89.099998
21,lucy,91.699997

3.计算n名学生成绩的平均分并通过函数返回。

要求:

结构体代码如下:
struct StudentScore{double score;};

#include<stdio.h>struct StudentScore{double score;
};double Fun(struct StudentScore *a , int n)
{int i;double sum = 0.0;for(i=0; i<n; i++){sum += a[i].score;	}return sum/n;
}int main()
{struct StudentScore a[100];int n;	//学生数量 int i;printf("请输入学生数量:");scanf("%d",&n);for(i=0; i<n; i++){printf("请输入第%d个学生的成绩:",i+1);scanf("%lf",&a[i].score);}printf("%lf",Fun(a,n));return 0;
}

请输入学生数量:3
请输入第1个学生的成绩:90
请输入第2个学生的成绩:100.0
请输入第3个学生的成绩:80
90.000000

4.输入三个学生的学号,姓名,分数,输出分最高同学的所有信息。

#include<stdio.h>int main()
{struct stu{int num;char name[20];float score;};int i;struct stu a[3] , max;for(i=0; i<3; i++){printf("第%d个:",i+1);scanf("%d%s%f",&a[i].num,&a[i].name,&a[i].score);}max = a[0];		//结构体变量整体赋值 for(i=1; i<3; i++){if(max.score < a[i].score)max = a[i];		//结构体变量整体赋值 }printf("成绩最高的是%d号,%s,%f分",max.num,max.name,max.score);
}

第1个:1 亚历山大 80
第2个:2 牛顿 100
第3个:3 李白 59
成绩最高的是2号,牛顿,100.000000分

4.2用函数

#include<stdio.h>struct stu{				//struct stu定义 应该放全局。如果在主函数内,那么定义函数会提示没这个类型。 int num;char name[20];float score;
};struct stu Fun(struct stu *a,int n)
{struct stu max = a[0];int i;for(i=1; i<3; i++){if(max.score < a[i].score)max = a[i];		//结构体变量整体赋值 }return max;
}int main()
{int i;struct stu a[3] = {1,"li",70.1,2,"wang",70.5,3,"zhai",70.3};struct stu max = Fun(a,3);printf("成绩最高的是%d号,%s,%f分",max.num,max.name,max.score);
}

成绩最高的是2号,wang,70.500000分

枚举类型三道题

1.枚举类型数据的输入和输出

#include<stdio.h>enum fruits{watermelon,peach,strawberry,banana,pineapple,apple
};int main()
{char fts[][20] = {"watermelon","peach","strawberry","banana","pineapple","apple"};enum fruits x;int k;scanf("%d",&k);x=(enum fruits)k;printf("%s",fts[x]);
}

2
strawberry
5
apple

2.枚举类型数据的关系运算

#include<stdio.h>enum fruits{watermelon,peach,strawberry,banana,pineapple,apple
};int main()
{enum fruits x;int k;scanf("%d",&k);x=(enum fruits)k;if(x==peach)printf("x=%d,peach=%d,x==peach\n",x,peach);else if(x>peach)printf("x=%d,peach=%d,x>peach\n",x,peach);else if(x<peach)printf("x=%d,peach=%d,x<peach\n",x,peach);return 0;} 

1
x=1,peach=1,x==peach
2
x=2,peach=1,x>peach
4
x=4,peach=1,x>peach

3.水果拼盘

#include<stdio.h>enum fruits{watermelon,peach,strawberry,banana,pineapple,apple};int main()
{char fts[][20] = {"西瓜","桃子","草莓","香蕉","菠萝","苹果"};enum fruits a,b,c,d;int k = 0;for(a = watermelon; a<=apple; a++)for(b = a+1; b<=apple; b++)for(c = b+1; b<=apple; c++)for(d = c+1; b<=apple; d++)printf("%d:%s %s %s %s\n",++k,fts[a],fts[b],fts[c],fts[d]);printf("共有%d种水果",k);} 

1:西瓜 桃子 草莓 香蕉
2:西瓜 桃子 草莓 菠萝
3:西瓜 桃子 草莓 苹果
4:西瓜 桃子 香蕉 菠萝
5:西瓜 桃子 香蕉 苹果
6:西瓜 桃子 菠萝 苹果
7:西瓜 草莓 香蕉 菠萝
8:西瓜 草莓 香蕉 苹果
9:西瓜 草莓 菠萝 苹果
10:西瓜 香蕉 菠萝 苹果
11:桃子 草莓 香蕉 菠萝
12:桃子 草莓 香蕉 苹果
13:桃子 草莓 菠萝 苹果
14:桃子 香蕉 菠萝 苹果
15:草莓 香蕉 菠萝 苹果
共有15种水果拼盘

其他

最大公约数递龟实现

#include<stdio.h>int Fun(int m , int n)
{int r;if((r = m % n) == 0){return n;}else{m = n;n = r;return Fun(m , n); }
}int main()
{int m = 18 , n = 12;int s = m * n;printf("最大公约数:%d\n最小公倍数:%d",Fun(m,n) , s / Fun(m , n));
}

最大公约数:6
最小公倍数:36

输出100以内的素数

//素数 #include<stdio.h>int main()
{int n=100,i,j;for(i=1; i<100; i++){for(j=2; j<i; j++){if(i%j == 0){break;}}if(i == j){printf("%d\t",i);}}
}

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
53 59 61 67 71 73 79 83 89 97

公约数穷举法 和 辗转相除法

#include<stdio.h>int main()
{int m=36,n=12,i;for(i=n; i>=1; i--){if(m%i==0&&n%i==0)break;}printf("最大公约数是%d\n最小公倍数是%d\n",i,m*n/i);
}

最大公约数是12
最小公倍数是36

方法2:辗转相除法
辗转相除法终止条件是 余数=0!!!!!!!!!!!!

除数是最小公约数!!!!!!!!!在这里插入图片描述

#include<stdio.h>int main()
{int m=12,n=36,r;int s=m*n;while(r=m%n){m=n;n=r;}printf("最大公约数是%d\n最小公倍数是%d\n",n,s/n);
}

最大公约数是12
最小公倍数是36

复习函数指针 + 质因数分解

#include<stdio.h>void nb(int n)
{int i;printf("%d = ",n);for(i=2; n!=i ;i++){if(n % i == 0){printf("%d * ", i );n /= i;i--;}}printf("%d\n",n);}int main()
{//定义方法1: 先定义后赋值 
//	void (*p)(int p);	 //等价 void (*p)(int);	 void (*p)(int abc); //不检查形参变量名是否一致 
//	p = nb;	//等价 p = &nb;//定义方法2:定义同时赋值 void (*p)(int p) = nb;for(int n=10; n<=20; n++){(*p)(n);}
}

10 = 2 * 5
11 = 11
12 = 2 * 2 * 3
13 = 13
14 = 2 * 7
15 = 3 * 5
16 = 2 * 2 * 2 * 2
17 = 17
18 = 2 * 3 * 3
19 = 19
20 = 2 * 2 * 5

一元二次方程求根

/*1.两根不相等,两根相等,虚根
*/ 
#include<stdio.h>
#include<math.h>int main()
{int s=0;int a,b,c,x1,x2,t;scanf("%d%d%d",&a,&b,&c);t = b*b-4*a*c; if(t < 0 ){t = abs(t);printf("根为:x = %d ± %di\n",-b/2/a , (int)sqrt(t)/ (2*a));//由于输出格式%d,sqrt()的返回值是double,所以需要强制类型转换,//才可输出正确结果	}	else if(t > 0){	x1 = (-b + sqrt(t)) / (2*a);x2 = (-b - sqrt(t)) / (2*a);printf("根为:x1 = %d\nx2 = %d\n",x1,x2);}else{x1 = -b / 2 / a;printf("根为:x1 = x2 = %d\n",x1);} 
}

1987年,国际C语言混乱代码大赛

发表时间:2022年3月27日 B站ROCK直播
看到的各位,别报这家机构了,听我一句劝~~~

#include<stdio.h>
#include<stdbool.h>int main()
{printf(&true["\021%sck\012\0"], true["have"] + "fro" - 0x60);//第一层//背景:历史背景//1987年,国际C语言混乱代码大赛,获奖作品//第一层 (宏定义)printf("true = %d\n",true);//第二层printf("%s\n","fro"+1); //const char *p = "fro";//printf("%s\n" , p+1);//第三层printf("%c\n","have"[1]);//const char * p = "hava";//printf("%c\n",p[1]);//printf("%c\n ,*(p+1);//第四层 printf("%d\n",(1)["hava"]);	//97//(1)["hava"] 等价于 "hava"[1] //第五层 printf("%d\n",(1)["hava"] - 0x60); //1 0x60:96//第六层 printf("%s\n","fro" + (1)["have"] - 0x60);//第七层printf("%s\n","fro" + true["have"] - 0x60);	//带不带()编译器都能识别 //第八层printf("%s\n",&"abcde"[1]); //bcde//在字符串中,任意一个字符的地址,就是一个"子串"//第九层printf("%s\n",&true["abcde"]); //第十层printf("%s\n",&"?%sck\n"[1]); //%sck\n//第十一层printf("%s\n",&"\021%sck\012\0"[1]);	//%sck\n//第十二层 //冲! //第十三层 printf(&true["\021%sck\012\0"], true["have"] + "fro" - 0x60);//		"%sck\n", "ro"//rock! return 0;
}

rock
true = 1
ro
a
97
1
ro
ro
bcde
bcde
%sck
%sck
rock

可变参数:实现多个整数的和,但是参数的个数不确定

//可变参数函数
//题目:定义一个函数,实现多个整数的和,但是参数的个数不确定/*应用于:1.某些场合下,参数的个数不确定2.【主要场合】命令行工具的解析 在嵌入式/物联网中有着广泛的使用 
*/ 
#include<stdio.h>
#include<stdarg.h>int add(int n , ...)	//...表示可变参数 
{int sum = 0;//可变参数使用,第一步va_list arglist;	//定义一个变量,表示参数列表//va list实际是一个指针,指向arglist //可变参数使用,第2不va_start(arglist , n); for(int i=0; i<n; i++){sum += va_arg(arglist , int);}va_end(arglist);return sum;} int main(){int x = add(9, 1,2,3,4,5,6,7,8,9);printf("sum = %d\n" , x);	//45}

输入一个正整数,以相反的顺序输出该数。 1234 → 4321

方法1:

//逆序输出数字
#include<stdio.h>int main()
{int n = 1234;int i,s=0;while(n){s = s * 10 + n % 10;n /= 10;}printf("%d",s);} 

4321

方法二:一位一位数字输出

#include<stdio.h>int main()
{int n = 1234;do{printf("%d",n%10);}while(n/=10);} 

从键盘输入一个正整数,求出各位数字之和,各位数字之积,并输出。

#include<stdio.h>int main()
{int n = 1234;int i , s = 0 , mul = 1;while(n){s += n % 10;mul *= n % 10;n /= 10;}printf("sum:%d\nmul:%d",s,mul);} 

sum:10
mul:24

​数字累加 规律题

这种题在纸上先写写画画,找到规律后就好办了。

1-22+333-4444+……+999999999
方法1:简单

#include<stdio.h>int main()
{int i,j=0,t=0,s=0;int flag=1;	//正负号变量 for(i=1;i<=9;i++){t = (t+j) * 10 + i;j = j * 10 + 1;s += t * flag;printf("%d\n",t*flag);flag = -flag;}printf("\n\nsum=%d",s);
}

1
-22
333
-4444
55555
-666666
7777777
-88888888
999999999
sum=918273645

方法2:两个循环

#include<stdio.h>int main()
{int i,j,t,s=0;int flag=1;	//正负号变量for(i=1; i<=9; i++){t = 0;for(j=1; j<=i; j++){t = t * 10 + i;}printf("%d\n",t*flag);s += t*flag;flag = -flag;}printf("\n\nsum=%d",s);}

1
-22
333
-4444
55555
-666666
7777777
-88888888
999999999
sum=918273645

二分查找法

#include<stdio.h>int main()
{int a[10]={1,2,3,4,5,6,7,8,9,10};int l = 0 , r = 10 - 1 , mid;int n;printf("请输入要查找的数:");scanf("%d",&n);while(l<=r){mid = l + (r - l) / 2;	//据说防溢出,不咋懂 if(a[mid] < n){l = mid+1;}else if(a[mid] > n){r = mid-1;}else if(a[mid] == n){break;}}printf("数%d的下标是:%d",n,mid);
}

请输入要查找的数:5
数5的下标是:4

牛顿迭代法

在这里插入图片描述

#include<stdio.h>
#include<math.h>
#define eps 1e-6int main()
{float x1,x0,f,f1;x1 = 1.0;do{x0 = x1;f = ((2 * x0 - 4) * x0 + 3) * x0 - 6;	f1 = (6 * x0 - 8) * x0 + 3;x1 = x0 - f / f1;}while(fabs(x1 - x0) > eps);printf("%6.2f",x1);	return 0;
} 

2.00

递归的初级中级高级应用

初级 - 斐波那切数列
int fib(int n)
{if(n <= 2){return 1;}else{return fib(n-1) + fib(n-2);}} int main()
{for(int i=1; i <= 10; i++){printf("%d\t",fib(i));}
}

1 1 2 3 5 8 13 21 34 55

中级 - 汉诺塔

void hnt(int n,const char *start , //起始柱 const char *mid ,	//中间柱 const char *dest)	//目标柱
{if(n == 1 ){printf("从%s移动到%s\n",start , dest);return ;} else{hnt(n-1 , start , dest , mid); //中间柱变成了目标柱 printf("从%s移动到%s\n",start,dest);hnt(n-1 , mid , dest , start);}
}int main()
{hnt(3, "A柱","B柱","C柱");return 0;
} 

从A柱移动到C柱
从A柱移动到B柱
从C柱移动到A柱
从A柱移动到C柱
从B柱移动到C柱
从B柱移动到A柱
从C柱移动到B柱

高级 - 排列组合

//高级应用 - 
//对于指定的数字,请列出所有的排列组合
//例如:3的排列组合
// 1 2 3 、 1 3 2 、2 1 3 、 2 3 1 、 3 1 2 、 3 2 1
#include<stdio.h>
#define N 3		//可以改变数值 int used[N] = {0};	//0:未被使用 1:已经使用 
int data[N] = {0};	//用来存放我们使用的数字void work(int i)	//i表示已经放入了i个数据 
{for(int j = 0; j < N; j++)	//对所有的数字搜索一遍 {//取出一个可以使用的数字 if(used[j] == 0)	// = 0:数字j还未被使用 {//...马上使用数字j data[i] = j;	////修改标记used[j] = 1;if(i == N-1)	//塞满了就打印 {for(int k=0; k<N; k++){printf("%d ",data[k]+1);}putchar('\n'); }else	//没塞满就继续塞 {work(i + 1);}//清理现场 used[j] = 0;} }	} int main(){work(0);}

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

数组名作为形参时,可以数组名++

#include<stdio.h>int func(int a[5],int n)
{a++;	//正常执行 
}
int main()
{int a[5] = {1,2,3,4,5};//a++;	//报错 func(a,5);printf("%d",0Xffa);
}

原因是:
数组名作为实参,值传递首元素地址;
因数组名作为形参,会转换为指针,指向实参中数组首元素地址,因此形参必须是一个存储地址值的变量,即指针变量。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS论文写作——公式和公式序号格式化

首先新建一个表格&#xff0c;表格尺寸按你的需求来确定&#xff0c;直接 插入--》表格 即可。 然后在表格对应位置填上公式&#xff08;公式要用公式编辑器&#xff09;和公式序号&#xff0c;然后可以按照单独的单元格或者整行或整列等来设置样式&#xff0c;比如居中对齐、…

电脑监控软件的监控方式有哪些

电脑监控软件是一种用于监视和控制计算机操作的工具&#xff0c;通常用于企业或个人对计算机的使用情况进行监控和管理。本文将探讨电脑监控软件的监控方式及其存在的问题。 首先&#xff0c;电脑监控软件的监控方式主要包括以下几种&#xff1a; 1、屏幕监控&#xff1a;这种…

【23-24 秋学期】NNDL 作业10 BPTT

习题6-1P 推导RNN反向传播算法BPTT. 习题6-2 推导公式(6.40)和公式(6.41)中的梯度&#xff0e; 习题6-3 当使用公式(6.50)作为循环神经网络的状态更新公式时&#xff0c; 分析其可能存在梯度爆炸的原因并给出解决方法&#xff0e; 习题6-2P 设计简单RNN模型&#xff0c;分别…

洛谷P1044 [NOIP2003 普及组] 栈 递归方法

目录 核心&#xff1a; 问题转化&#xff1a; 状态转化&#xff1a;&#xff08;你得先读懂题&#xff0c;理解我们要干什么&#xff09; 对应不同情况下的状态转化&#xff1a;&#xff08;比如栈空就不能出栈&#xff0c;&#xff0c;&#xff09; AC代码&#xff1a; 题…

【每日OJ —— 110. 平衡二叉树】

每日OJ —— 110. 平衡二叉树 1.题目&#xff1a;110. 平衡二叉树2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目&#xff1a;110. 平衡二叉树 2.解法 2.1.算法讲解 1.这道题中的平衡二叉树的定义是&#xff1a;二叉树的每个节点的左右子树的高度差的绝对值不超过 11…

Android12之MediaCodec硬编解码调试手段(四十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

继续画图带你学习TCP 其他 7 大特性

四、滑动窗口机制 五、流量控制 六、拥塞控制 (安全机制) 七、延迟应答 (效率机制) 八、捎带应答 (效率机制) 九、粘包问题 十、保活机制 TCP总结 四、滑动窗口机制 滑动窗口机制&#xff0c;是在可靠性的前提下&#xff0c;进一步地提高传输效率 认识滑动窗口 一发一收…

vscode的eslint检查代码格式不严谨的快速修复

问题&#xff1a; 原因&#xff1a;复制的代码&#xff0c;esLint检查代码格式不正确。或者写的代码位置不严谨&#xff0c;总是提示 解决 设置在Ctrl S保存时自动格式化代码 1、vscode设置 2、点击右上角&#xff0c;切换json模式 3、添加设置 "editor.codeActionsOn…

Rust UI开发(五):iced中如何进行页面布局(pick_list的使用)?(串口调试助手)

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 这是一个系列博文&#xff0c;本文是第五篇&#xff0c;前四篇链接&#xff1a; 1、Rust UI开发&#xff08;一&#xff09;&#xff1a;使用iced构建UI时…

【零基础入门Python】Python If Else流程控制

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门Pythonhttps://blog.csdn.net/arthas777/category_12455877.html Python if语句 Python if语句的流程图 Python if语句示例 Python If-Else Statement Python if else语句的流程图 使用Python if-else语句 …

JVM 运行时内存篇

面试题&#xff1a; 讲一下为什么JVM要分为堆、方法区等&#xff1f;原理是什么&#xff1f;&#xff08;UC、智联&#xff09; JVM的分区了解吗&#xff0c;内存溢出发生在哪个位置 &#xff08;亚信、BOSS&#xff09; 简述各个版本内存区域的变化&#xff1…

木质家具行业分析:我国市场规模总资产达1669.19亿元

木质家具是指以天然木材和木质人造板为主要材料&#xff0c;配以其他辅料(如油漆、贴面材料、玻璃、五金配件等)制作各种家具的生产活动。 近年来实木家具越来越受到广大消费者的青睐。继板式家具、板式定制家具之后&#xff0c;板木家具与整木定制家具渐渐走进人们的视野。但目…

酵母双杂交服务专题(四)

关于酵母双杂交服务的常见问题 问题1&#xff1a;酵母双杂交的筛选流程&#xff1f; 研究者将特定基因作为钓饵&#xff0c;在一个精心挑选的cDNA文库中进行筛选&#xff0c;目的是找到与该钓饵蛋白发生相互作用的蛋白质。通过这种筛选&#xff0c;可以从阳性反应的酵母菌株中…

Cesium 顶点吸附和区域拾取

Cesium 顶点吸附和区域拾取 基于深度实现可以自定义拾取范围大小 // 顶点吸附// const result pickAreaHelper.pickNearest(viewer.scene, movement.endPosition, 32, 32);// 区域拾取const result pickAreaHelper.pickArea(viewer.scene, movement.endPosition, 32, 32);顶…

新生儿规避感染的完全指南

引言&#xff1a; 新生儿的免疫系统尚处于发育阶段&#xff0c;对外界环境的抵抗力相对较弱。因此&#xff0c;规避感染成为父母在新生儿护理中至关重要的一环。本文将深入探讨新生儿规避感染的注意事项&#xff0c;为父母提供详尽的指南&#xff0c;以确保宝宝健康成长。 第一…

树莓派Python程序开机自启动(Linux下Python程序开机自启动)

前一阵子用python编写了一个驱动I2C程序读写屏幕&#xff0c;输出IP的小程序&#xff0c;程序编好后需要树莓派使能程序开机自启动。其实这些方法对任何Linux系统都适用。 方法一&#xff1a;此方法的缺点是不进入默认pi的账号&#xff0c;甚至不开hdmi开启桌面的话&#xff0…

金融银行业更适合申请哪种SSL证书?

在当今数字化时代&#xff0c;金融行业的重要性日益增加。越来越多的金融交易和敏感信息在线进行&#xff0c;金融银行机构必须采取必要的措施来保护客户数据的安全。SSL证书作为一种重要的安全技术工具&#xff0c;可以帮助金融银行机构加密数据传输&#xff0c;验证网站身份&…

python动态圣诞下雪图

运行图片 代码 import pygame import random# 初始化Pygame pygame.init()# 创建窗口 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption(Christmas Tree)# 定义颜色 GREEN (34, 139, 34) RED (255, 0, 0) WHITE (255…

公众号50个数量怎么操作?

一般可以申请多少个公众号&#xff1f;公众号申请限额在过去几年内的经历了很多变化。对公众号申请限额进行调整是出于多种原因&#xff0c;确保公众号内容的质量和合规性。企业公众号的申请数量从50个到5个最后到2个&#xff0c;对于新媒体公司来说&#xff0c;这导致做不了公…

【Node.js】笔记整理 5 - Express框架

写在最前&#xff1a;跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识&#xff0c;需要格外注重实战和官方技术文档&#xff0c;文档建议作为手册使用 系列文章 【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n…