c语言 试题总结
c语言 试题总结
1965. 2021C语言课前3 while循环
1. 洗衣服
#include <stdio.h>
#include <stdlib.h>int main()
{int n,m,mt=0;
while(scanf("%d%d",&n,&m)!=EOF)
{mt=n/m;
printf("%d\n",mt);}return 0;
}
EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。
要注意的是:在终端(黑框)中手动输入时,系统并不知道什么时候到达了所谓的“文件末尾”,因此需要用<Ctrl + z>组合键然后按 Enter 键的方式来告诉系统已经到了EOF,这样系统才会结束while.
https://blog.csdn.net/henu1710252658/article/details/83040281
1966.2021C语言课前4 for循环
1.求绝对值最大值
#include <stdio.h>
#include <stdlib.h>
#include <math.h>int main()
{int i, n, a, fa, max, maxold;scanf("%d", &n);scanf("%d", &a);max = ((a >= 0)? a : -a);maxold = a;for(i = 1; i < n; i++){scanf("%d", &a);fa = a;if(a < 0){fa = -a;}if(max < fa){max = fa;maxold = a;}}printf("%d\n", maxold);return 0;
}
不能使用abs函数,会超时(runtime error)
2.判断素数
#include <stdio.h>
#include <stdlib.h>int main()
{int n,i;int flag=1;scanf("%d",&n);for(i=2; i<n; i++){if(n%i==0)flag=0;}if(n!=1){if(flag==1)printf("This is a prime.");
elseprintf("This is not a prime.");}elseprintf("This is not a prime.");return 0;
}
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
3.最大公约数与最小公倍数
#include <stdio.h>
int main()
{int m,n,max,min,b,c,g;//printf("请输入两个整数:\n");scanf("%d %d",&m,&n);c=m%n;b=m*n;while(c!=0){m=n;n=c;c=m%n;}max=n;min=b/max;printf("%d\n%d\n",max,min);return 0;
}
一、最大公约数求法
(1)辗转相除法
设有两整数a和b:
① a%b得余数c
② 若c==0,则b即为两数的最大公约数
③ 若c!=0,则a=b,b=c,再回去执行①。
例如求27和15的最大公约数过程为:
27÷15 余12
15÷12 余3
12÷3 余0
因此,3即为最大公约数。
(2)相减法
设有两整数a和b:
① 若a>b,则a=a-b
② 若a<b,则b=b-a
③ 若a==b,则a(或b)即为两数的最大公约数
④ 若a!=b,则再回去执行①。
例如求27和15的最大公约数过程为:
27-15=12( 15>12 )
15-12=3( 12>3 )
12-3=9( 9>3 )
9-3=6( 6>3 )
6-3=3( 3==3 )
因此,3即为最大公约数。
二、求最小公倍数算法
最小公倍数=两整数的乘积÷最大公约数
4.数列求和
#include <stdio.h>
#include <stdlib.h>int main()
{int a,n,i,s,m;scanf("%d",&a);scanf("%d",&n);s=0;m=a;for(i=1; i<n; i++){s=s+m; //让个位等于a m=m*10+a;//进位后再补a }s=s+m;printf("%d\n",s);return 0;
}
m*10 好办法
5.做乘法
#include <stdio.h>
int main()
{int n,i,m;scanf("%d",&n);for(i=1; i<=n; i++){m=i*n;printf("%d*%d=%d\n",n,i,m);}return 0;
}
2063. 2021C实验5——函数
B . 字符串连接
#include <stdio.h>
main()
{char a[100],b[100];int i=0,j=0;//printf("Please input 2 strings:\n");gets(a); //输入字符串啊,a,bgets(b);while(a[i]!='\0')i++; // i 表示字符串a的'\0'所在的位置while(b[j]!='\0') //将b中字符一个个赋值给'\0'以及其后面的位置,i++,j++控制一一对应a[i++]=b[j++];a[i]='\0' ; //给一个结束标志puts(a); //输出return 0;
}
注意字符串的定义
输入输出流 gets和puts
在while循环中 i 表示字符串a的’\0’所在的位置
while(a[i]!='\0')i++;
while(b[j]!='\0') //将b中字符一个个赋值给'\0'以及其后面的位置,i++,j++控制一一对应a[i++]=b[j++];
先将i加到a的尾端,再在后面加上b串的内容,最后给a[i]一个结束标志a[i]=’\0’
实验1
A . 鲁东信电的密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uX8XYSLs-1642661712556)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211214164440635.png)]
#include<stdio.h>
#define N 256
int main() { char str[N]; int i,m;scanf("%d",&m);scanf("%s",str);i=0;while ( str[i]!=0 ) {if ( str[i]>='a' && str[i]<='z' ) str[i]=(str[i]-'a'+m)%26+'a';else if ( str[i]>='A' && str[i]<='Z' ) str[i]=(str[i]-'A'+m)%26+'A';i++;}printf("%s\n",str);
}
B . 圆柱和圆球
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DfPOwG6Y-1642661712557)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211214165827752.png)]
#include <stdio.h>int main()
{double h, r, l, s, sq, vq, vz;const double pi = 3.1415926;scanf("%lf %lf",&r,&h);l = 2 * pi * r;s = r * r * pi;sq = 4 * pi * r * r;vq = (4.0 / 3.0 * pi * r * r * r);vz = pi * r * r * h;printf("%.2lf %.2lf %.2lf %.2lf %.2lf",l,s,sq,vq,vz);return 0;
}
**1.**C语言中printf输出float和double都可以用%f,而double型数据还可以用%lf。
**2.**scanf当中若是对双精度的变量赋值是必须是%后跟lf,而printf当中可以用%f也可以用%lf没有限制。
实验2——选择结构
A . 成绩的等级转换***
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7T8GGbHa-1642661712558)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211214172712596.png)]
#include<stdio.h>
int main()
{int score[110],n;scanf("%d",&n);for(int i = 0;i<n;i++){scanf("%d",&score[i]);}
for(int i = 0;i<n;i++){if (score[i]<0 || score[i]>100){printf("input error\n");}else{switch(score[i]/10){case 0:case 1:case 2:case 3:case 4:case 5:printf("E\n");break;case 6:printf("D\n");break;case 7:printf("C\n");break;case 8:printf("B\n");break;case 9:case 10:printf("A\n");break;}}}return 0;
}
*** stack smashing detected ***: <unknown> terminated
注意数组大小是否满足要求
B . 四个整数的排序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4NEmaXTQ-1642661712558)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211215101002832.png)]
#include<stdio.h>int main()
{int a,b,c,d,h;scanf("%d%%%d%%%d%%%d",&a,&b,&c,&d); //选择输入if (b<a)h=a, a=b, b=h;if (c<a)h=a, a=c, c=h;if (d<a)h=a, a=d, d=h;if (c<b)h=b, b=c, c=h;if (d<b)h=b, b=d, d=h;if (d<c)h=c, c=d, d=h;printf("%d %d %d %d",a,b,c,d);return 0;}
C . 正整数的变换***
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W31nRFoL-1642661712559)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211215101019657.png)]
#include <stdio.h>int main(){
int a,n,h;
int f[10];
scanf("%d",&a);
while(a!=0){h=a%10;a=a/10;f[n]=h;n++;//TODO
}
printf("%d\n",n);for(int i =n-1;i>=0;i--){if(i!=0){printf("%d ",f[i]);//TODO}else{printf("%d\n",f[i]);}}for(int i =0;i<n;i++){printf("%d",f[i]);
}}
注意输出格式控制
如何让最后一个字符不空格***
for(int i =n-1;i>=0;i--){if(i!=0){printf("%d ",f[i]);//TODO}else{printf("%d\n",f[i]);}}
如果i是数组要输出的最后一个字符,那就进行if判断
D . 判断闰年***
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TfQO8AlA-1642661712559)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211215102428592.png)]
#include<stdio.h>int main()
{int a,y;int s[1001];scanf("%d",&a);
for(int i =0;i<a;i++){scanf("%d",&s[i]);}for(int i =0;i<a;i++){y=s[i];if((y%100!=0&&y%4==0)||y%400==0)printf("YES\n");elseprintf("NO\n");} return 0;}
判断闰年的方法
f((y%100!=0&&y%4==0)||y%400==0)
实验3
B . 找这样的5位数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gz23fVeV-1642661712560)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211215110308478.png)]
#include<stdio.h>int main(){int n,i;while(scanf("%d",&n)!=EOF){int m,k,t;int sum=0;int ans=0;for(i=10000;i<=99999;i++){m=i/1000;k=i%100;t=i/100%10;if(m%n==0&&k%n==0&&t%n==0){++sum;if(sum%n==0)printf("%d\n",i);else printf("%d ",i);}}}return 0;}
数字分割
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFfHMP94-1642661712561)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211215111237546.png)]
C . 二分法解方程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EF25ZQSX-1642661712561)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211215112520936.png)]
#include<stdio.h>
#include<math.h>
int main()
{double x0,x1, f, fd;x1=10;do {x0=x1;f = 2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6;fd = 6 * x0 * x0 - 8 * x0 + 3;x1 = x0 - f / fd;} while (fabs(x0-x1) >=1e-2);printf("%.6f", x1);return 0;
}
https://blog.csdn.net/qq_45891676/article/details/107906949?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link
D . 终于会求e的值了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V383kiWw-1642661712562)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211227000435992.png)]
#include<stdio.h>
//本来想用调和函数f返回int,但当n的值太大时,就超出了返回的int的最大范围会报错,所以要采用双精度
double fact(int n);int main()
{int n;double sum=0;while(scanf("%d",&n)!=EOF){for(int i=0;i<=n;i++){sum=sum+1.0/fact(i);}printf("%.6f\n",sum);sum = 0;}return 0;
}
//实现阶乘
double fact(int n)
{int i;double sum=1;for(i=1;i<=n;i++){sum=sum*i;}return sum;
}
实验4
A . 考上大学!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXjeFpro-1642661712562)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211226223707514.png)]
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>int main()
{long long n;int i,j;scanf("%lld",&n);int a[100001][6]={};for(i=0;i<n;i++){//memset(a,0,6);for(j=0;j<5;j++){scanf("%d",&a[i][j]);} }for(i=0;i<n;i++){float sum=0.0;float k;for(j=0;j<5;j++){sum+=a[i][j];}k=sum/5;printf("%.1f\n",k); }for(i=0;i<5;i++){float b[100001]={};for(j=0;j<n;j++){b[i]+=a[j][i];}if(i!=4)printf("%.1f\n",b[i]/n);elseprintf("%.1f",b[i]/n);}return 0;}
B . 简单的转换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXQrwfPo-1642661712563)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211226225309336.png)]
#include<stdio.h>
int trans(char a[])
{int n=0;for(int i=0;a[i]!='\0';i++){if(a[i]>='0'&&a[i]<='9')n=n*16+a[i]-'0';else if(a[i]>='a'&&a[i]<='f')n=n*16+a[i]-'a'+10;
// else if(a[i]>='A'&&a[i]<='F')
// n=n*16+a[i]-'A'+10;}return n;
}
int main()
{int i=0,n;char a[20],ch;while((ch=getchar())!='\0'){if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='f')||(ch>='A'&&ch<='F')){a[i++]=ch;}else{a[i]='\0';n=trans(a);printf("%d\n",n);break;}}return 0;
}
C . 超大福利
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AyPMx8eW-1642661712564)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211226230241864.png)]
#include<stdio.h>
#include<string.h>
int main()
{char a[100000]={'\0'},b[100000],c[100000];int i=0,j=0,l=0,len=0;gets(a);len=strlen(a);//统计字符串的长度,不包含'\0',但是包含空格for(i=0;i<=len;i++)//连a数组的结尾的\0'也算上,所以是<= if(a[i]==' '|| a[i]=='\0'){b[j]='\0';if(j>l){strcpy(c,b);//将数组b的内容复制到数组c中,注意写法!!l=j;}j=0;//这个要写在if的外面,//因为不论是否是最长单词,这个计数器都要清零,也就是从b[0]开始重新输入b数组_}else{b[j]=a[i];j++;}puts(c);return 0;
}
D . 统计难题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5bSUGqC2-1642661712565)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211226231219578.png)]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>int main()
{int i=0,n;int a[100001];int j;int b[10]={0};scanf("%d",&n);for(int t=0;t<n;t++){scanf("%d",&a[t]);}//memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
// memset(b,10,0);for(i=0;i<n;i++){j=a[i]%10;if(j==0){b[0]++;}if(j==1){b[1]++;}if(j==2){b[2]++;}if(j==3){b[3]++;}if(j==4){b[4]++;}if(j==5){b[5]++;}if(j==6){b[6]++;}if(j==7){b[7]++;}if(j==8){b[8]++;}if(j==9){b[9]++;}} for(int k=0;k<10;k++)printf("%d\n",b[k]);return 0;
}
E . 智商比赛
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BDSqeNW-1642661712565)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211226233009478.png)]
#include<stdio.h>
#include<stdlib.h>
#include<math.h>int main()
{int i=0;long n;scanf("%ld",&n);double k;k=sqrt(n);for(i=2;i<k;i++){if(n%i==0)break;}if (n <= 1)printf("No");else if (i <= k) //i小于n根的数n不是质数printf("No");elseprintf("Yes");return 0;
}
实验5
A . 回文串
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RuphrtQ7-1642661712566)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211228224321401.png)]
//判断字符串是否是回文
#include<stdio.h>
#include<string.h>
int huiwen(char *str)
{//char ch[100];int len=strlen(str); //获取字符串的长度int i,j,temp;for(i=0,j=len-1;i<=j;i++,j--) //第一位和最后一位相比较循环判断{if(str[i]==str[j]) //temp=1;else {temp=0;break;}}return temp;
}
main()
{char ch[10][100];
int n;
scanf("%d",&n);
for(int i = 0;i<n;i++){//无法判断特殊字符如空格键;scanf("%s",ch[i]) ; //可以判断键盘输入的任意字符if(huiwen(ch[i]))printf("yes\n");elseprintf("no\n");
}}
E . 什么是鞍点?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jEB20HZu-1642661712567)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211228225906441.png)]
#include<stdio.h>
#include<string.h>int main(){int n;int a[11][11]={};int i,j;int p,q;int N=1;scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);}}for(i=0;i<n;i++){int max=0,flag=1;for(j=0;j<n;j++){if(a[i][j]>max){max=a[i][j];p=i,q=j;} }for(int k=0;k<n;k++){if(max>a[k][q]){// printf("no exists");flag=0;break;}}if(flag==1){N=0;printf("%d",a[p][q]);break;}}if(N==1)printf("no exists");return 0;}
F . 进制转换***
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aI78zxR0-1642661712567)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211228230121087.png)]
#include <stdio.h>
#include <math.h>
int main()
{ int r,i,b; long long n,t;char a[100]; char c[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; scanf("%lld%d",&n,&r); t=n; t=(int)fabs(t); for(i=0;;i++) //无限循环{ b=t%r; if(b>=10) a[i]=c[b-10]; else a[i]=b+'0'; t=(t-b)/r; if(t==0) break;} //if(n<0) //printf("-"); for(;i>=0;i--) printf("%c",a[i]); //printf("\n"); return 0; }
G . 找一找,看一看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tb98VKtv-1642661712568)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211228231326922.png)]
#include<stdio.h>
#include<string.h>int chazhao(int a[],int len,int t)
{int low=0;int high=len-1;int mid;while(low<=high){mid=(low+high)/2;if(a[mid]==t)return mid;else if(a[mid]<t){low=mid+1;}else{high=mid-1;}}}int main(){int n,m;int a[100001];int i,j;int t;int q;int flag=0;scanf("%d %d",&n,&m);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<m;i++){flag=0;scanf("%d",&t);for(j=0;j<n;j++){if(t==a[j])flag=1;}if(flag==1){q=chazhao(a,n,t);q++;printf("%d\n",q);}elseprintf("no exists\n");}}
H . 我会排序了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aW3VY6Fk-1642661712568)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211228231445590.png)]
#include<stdio.h>
#include<string.h>int paixu(int a[],int n)
{int i,j;int temp;for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(a[j]>a[j+1] ){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}}int main(){int n;scanf("%d",&n);int a[101];int i,j;for(i=0;i<n;i++){scanf("%d",&a[i]);}paixu(a,n);for(i=0;i<n;i++){printf("%d ",a[i]);}}
实验6——指针
A . 指针排序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDGe5Shn-1642661712569)(C:\Users\91053\AppData\Roaming\Typora\typora-user-images\image-20211228232447662.png)]
#include<stdio.h>int main()
{int n;int i,j;int *p;scanf("%d",&n);int a[n];for(i=0;i<n;i++)scanf("%d",&a[i]);p=a;int t;for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(p[j]>p[j+1]){t=p[j];p[j]=p[j+1];p[j+1]=t;}}}for(i=0;i<n;i++){printf("%d ",p[i]);}return 0;}
f("%d",&t);
for(j=0;j<n;j++){
if(ta[j])
flag=1;
}
if(flag1){
q=chazhao(a,n,t);
q++;
printf("%d\n",q);}
else
printf(“no exists\n”);
}
}
#### H . 我会排序了[外链图片转存中...(img-aW3VY6Fk-1642661712568)]```c
#include<stdio.h>
#include<string.h>int paixu(int a[],int n)
{int i,j;int temp;for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(a[j]>a[j+1] ){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}}int main(){int n;scanf("%d",&n);int a[101];int i,j;for(i=0;i<n;i++){scanf("%d",&a[i]);}paixu(a,n);for(i=0;i<n;i++){printf("%d ",a[i]);}}
实验6——指针
A . 指针排序
[外链图片转存中…(img-QDGe5Shn-1642661712569)]
#include<stdio.h>int main()
{int n;int i,j;int *p;scanf("%d",&n);int a[n];for(i=0;i<n;i++)scanf("%d",&a[i]);p=a;int t;for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(p[j]>p[j+1]){t=p[j];p[j]=p[j+1];p[j+1]=t;}}}for(i=0;i<n;i++){printf("%d ",p[i]);}return 0;}