C语言基础部分练习(http://acm.hgnu.edu.cn)

前言

 最近有朋友和同学找我要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);

    }
}

 

posted @ 2021-10-15 18:06  lzstar-A2  阅读(263)  评论(1编辑  收藏  举报