前言
最近有朋友和同学找我要c语言基础练习答案,为了方便分享,放在我的博客上了,如果对你确实有帮助,可以考虑点下赞或打赏哦(都能通过,没有专注于搞算法,所以有的地方可以优化,欢迎在评论区留言)
A. A+B问题
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d",&a,&b);
c=a+b;
printf("%d",c);
return 0;
}
B. 圆的面积
#include<stdio.h>
int main()
{
double p=3.1415926535898;
double r,s;
scanf("%lf",&r);
s=p*r*r;
printf("%0.6lf",s);
}
C. 闰年
#include<stdio.h>
int main()
{
int y;
scanf("%d",&y);
if(y%400==0||(y%4==0&&y%100!=0)){
printf("yes");
}
else
printf("no");
return 0;
}
D. 求四个数的最大数
#include<stdio.h>
int main()
{
int a[4];
int i,max;
for(i=0;i<4;i++)
{
scanf("%d",&a[i]);
}
max=a[0];
for(i=0;i<4;i++)
{
if(max<a[i])
max=a[i];
}
printf("%d",max);
return 0;
}
E. 判断素数
#include<stdio.h>
int main()
{
int flag=1,i,a;
scanf("%d",&a);
if(a==1){
printf("NO");
return 0;
}
for(i=2;i<a;i++)
if(a%i==0)
flag=0;
if(flag==0)
printf("NO");
else
printf("YES");
return 0;
}
F. 最大公约数
#include<stdio.h>
int main()
{
int n,m,t;
scanf("%d%d",&n,&m);
while((t=n%m)!=0)
{
n=m;
m=t;
}
printf("%d",m);
return 0;
}
G. 奇数和
#include<stdio.h>
int main()
{
int i,n;
long k=0;
scanf("%d",&n);
for(i=1;i<n;i+=2){
k+=i;
}
printf("%ld",k);
}
H. 阶乘和
#include<stdio.h>
int main(){
long n,i;
long sum=1;
long k=0;
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
sum=sum*i;
k+=sum;
}
printf("%ld",k);
return 0;
}
I. 分解质因数2
#include <stdio.h>
int main(){
int n; // 用户输入的整数
int i; // 循环标志
scanf("%d",&n);
printf("%d = 1*",n);
for(i=2; i<=n; i++){
while(n!=i){
if(n%i==0){
printf("%d*",i);
n=n/i;
}else
break;
}
}
printf("%d\n",n);
return 0;
}
J. 求n以内所有素数
#include<stdio.h>
int main()
{
int flag,i,j,n;
scanf("%d",&n);
for(i=2;i<n;i++){
flag=1;
for(j=2;j<i;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag==1)
{
printf("%d\n",i);
}
}
}
K. 从小到大排序
#include<stdio.h>
int main()
{
int n,i,j,temp;
int arr[100];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(arr[i]>arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
L. 数据去重
#include<stdio.h>
int main(){
int n,i,t,res=0;
int arr[100];
scanf("%d",&n);
for(i = 0; i < n; i++){
scanf("%d",&arr[i]);
}
for(i = 0; i < n - 1; i++){
if(arr[i] == arr[i + 1] && arr[i] != 0){
for(t = i+1; t < n - 1; t++){
arr[t] = arr[t + 1];
}
arr[t] = 0;
i--;
res++;
}
}
for(i = 0; i < n - res; i++){
printf("%d ",arr[i]);
}
return 0;
}
M. 连接字符串
#include<stdio.h>
int main()
{
int i=-1;
int j=-1;
char arr1[60],arr2[30];
scanf("%s",arr1);
scanf("%s",arr2);
while(arr1[++i]!='\0');
while(arr2[++j]!='\0')
{
arr1[i++]=arr2[j];
}
arr1[i]='\0';
printf("%s",arr1);
return 0;
}
N. 合并序列
#include<stdio.h>
int main()
{
int m,n;
int i,j,k=0;
int arr1[100],arr2[100];
scanf("%d",&m);
scanf("%d",&n);
for(i=0;i<m;i++){
scanf("%d",&arr1[i]);
}
for(i=0;i<n;i++){
scanf("%d",&arr2[i]);
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++){
//找到位置后移
if(arr1[i]>arr2[n-1]){
arr2[n]=arr1[i];
n++;
break;
}
if(arr1[i]<arr2[j]){
for(k=n+1;k>j;k--){
arr2[k]=arr2[k-1];
}
arr2[j]=arr1[i];
n++;
break;
}
}
}
for(i=0;i<n;i++)
{
printf("%d ",arr2[i]);
}
}
O. 大整数加法
#include<stdio.h>
#include<string.h>
int main()
{
int bigint_1[100001] = {0};
int bigint_2[100001] = {0};
char sNum_1[100001] = {'\0'};
char sNum_2[100001] = {'\0'};
//输入大整数1和大整数2
scanf("%s %s",sNum_1,sNum_2);
for(int i = 0,j = strlen(sNum_1) - 1;j >= 0;)
{
bigint_1[i++] = sNum_1[j--] - '0';
}
for(int i = 0,j = strlen(sNum_2) - 1;j >= 0;)
{
bigint_2[i++] = sNum_2[j--] - '0';
}
int k = 0;
while(k <= 100000)
{
bigint_1[k] += bigint_2[k];
if(bigint_1[k] >= 10)
{
bigint_1[k+1]++;
bigint_1[k] -= 10;
}
k++;
}
int mark = 0;
int i = 0;
for(i = 100000;i >= 0;i--)
{
if(bigint_1[i] != 0)
{
mark = i;
break;
}
}
if(i == -1)
{
printf("0\n");
}
else
{
for(int i = mark;i >= 0;i--)
{
printf("%d",bigint_1[i]);
}
putchar('\n');
}
return 0;
}
P. 杨辉三角
#include<stdio.h>
int main()
{
int i,j,n;
int arr[50][50];
scanf("%d",&n);
for(i=0;i<n;i++)
{
arr[i][0]=1;
arr[i][i]=1;
}
for(i=2;i<n;i++)
{
for(j=1;j<i;j++){
arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
Q. 水仙花数
#include<stdio.h>
int main()
{
int i,g,s,b;
for(i=100;i<1000;i++){
g=i%10;
s=i/10%10;
b=i/100;
if(g*g*g+s*s*s+b*b*b==i){
printf("%d\n",i);
}
}
}
R. 回文数
#include<stdio.h>
int main()
{
int g,s,b,q,i=2546;
for(i=1000;i<10000;i++){
g=i%10;
s=i%100/10;
b=i/100%10;
q=i/1000;
if((g==q)&&(s==b))
{
printf("%d\n",i);
}
}
}
S. 删除零元素
#include<stdio.h>
int main()
{
int i,n;
int arr[50];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
if(arr[i]==0){
i--;
n--;
}
}
printf("%d\n",n);
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
}
T. 输出倒三角
#include<stdio.h>
int main()
{
int i,j,n;
scanf("%d",&n);
for(i=n;i>0;i--)
{
for(j=0;j<i;j++)
{
printf("* ");
}
printf("\n");
}
}
U. 1000以内的完数
#include<stdio.h>
int main()
{
//注释部分用于显示因子
//int c=0,temp[500];
for(int i=2;i<=1000;i++)
{
int sum=1;
for(int j=2;j<=i/2;j++)
{
if(i%j==0)
{
sum+=j;
//temp[c++]=j;
}
}
if(sum==i)
{
printf("%d\n",i);
}
}
}
V. 单词翻转
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,n;
char dc[100];
char dcs[10][100];
i=j=-1;
n=0;
gets(dc);
while(dc[++i]!='\0')
{
if(dc[i]=='\40')
{
dcs[n][++j]='\0';
n++;
j=-1;
continue;
}
dcs[n][++j]=dc[i];
}
dcs[n][++j]='\0';
for(i=n;i>=0;i--)
{
printf("%s",dcs[i]);
if(i!=0){
printf(" ");
}
}
}
W. 报数
#include<stdio.h>
int main()
{
int arr[1000]={0};
int i,n,m,count,k=1;
scanf("%d",&n);
scanf("%d",&m);
count=n;
for(i=0;;i=(i+1)%n)
{
if(count==1)
break;
if(arr[i]==1)
continue;
if(k==m)
{
arr[i]=1;
k=0;
count--;
}
k++;
}
for(i=0;i<n;i++)
{
if(arr[i]==0){
printf("%d\n",i+1);
}
}
}
X. 九九乘法表
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%d*%d=%d ",i,j,i*j);
}
printf("\n");
}
}
Y. 分解质因数
#include<stdio.h>
int main()
{
int i,j,k,t,n;
scanf("%d",&k);
scanf("%d",&t);
for(i=k;i<=t;i++)
{
n=i;
printf("%d=",n);
for(j=2;j<n;j++)
{
if(n%j==0)
{
printf("%d*",j);
n=n/j;
j=1;
}
}
printf("%d\n",n);
}
}