C语言上机实践

汉诺塔

#include<stdio.h>
int arr[9]={0,1,2,3,4,5};
void f(int n,char a,char b,char c){
    if(n==1)printf("%d:%c->%c\n",arr[n],a,c);
    else{
        f(n-1,a,c,b);
        printf("%d:%c->%c\n",arr[n],a,c);
        f(n-1,b,a,c);
    }
}
int main()
{
    char a='a',b='b',c='c';
    f(3,a,b,c);
    return 0;
}

选择排序

#include<stdio.h>
#define N 100
int main()
{
    int i,j,n,t,a[N],k;
    scanf("%d",&n);
    for(i=0;i<n;i++)  //输入数组
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if(a[j]<a[k])
                k=j;
        }
        t=a[i]; a[i]=a[k]; a[k]=t; //将最小值交换到a[i]位置
        for(j=0;j<n;j++)
        {
            printf("%d ",a[j]);
        }
        printf("\n");
    }
    return 0;
}

冒泡排序

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

字符转换

从键盘中输入一个字符串,将其中的小写字符转换大写输出,其他保持不变

输入:a1FG2Bbcd 输出:A1FG2BBCD

#include<stdio.h>
#include<string.h>
int main()
{
    char string[100];
    gets(string);
    printf("%s",strupr(string));
    return 0;
}

字符取数

从键盘中输入一个字符串,将其中的数字输出

#include<stdio.h>
int main()
{int i;
char a[10];
gets(a);
for(i=0;i<10;i++)
{if(a[i]>='0'&&a[i]<='9')
printf("%c",a[i]);
}
return 0;
}

字符逆序

从键盘中输入一个字符串,按逆序输出该串
输入:abcd 输出:dcba

#include<stdio.h>
#include<string.h>
int main()
{
    int i,n;
    char c[50];
    puts("input the string:");
    gets(c);
    n=strlen(c);
    for(i=n-1;i>=0;i--)
        printf("%c",c[i]);
    return 0;
}

判断回文字符串

回文输入一个字符串,判断它是否为回文

#include<stdio.h>
#include<string.h>
int main()
{
	int i,j,temp=1;
	char a[100];
	printf("从键盘中输出一个字符串:\n");
	gets(a);
	j=strlen(a);
	for(i=0;i<=j;i++)
	{
	   if(a[i]!=a[j-1-i])
	   {
       temp=0;
	   break;
	   }
	}
	if(temp==0) printf("不是回文\n");
	else printf("是回文\n");
	return 0;
}

整数逆序

从键盘中输入一个整数,按逆序输出123 输出321

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d",&a);
    while(a!=0)
    {
        b=a%10;
        printf("%d",b);
        a=a/10;
    }
    return 0;
}

超级素数

一个素数,依次从个位开始去掉一位,两位……若得到的都是素数,且各数字不为0,则称为超级素数
373->37->3
求100-900之间的超级素数

#include<stdio.h>
int f(int n){
    int x=1;
    if(n<2)return 0;
    for(int i=2;i*i<n+1;i++){
        if(n%i==0){
            x=0;
            break;
        }
    }
    return x;
}
int main(){
    for(int i=100;i<=900;i++){
        int x=0;
        if(f(i)&&f(i/100)&&f(i/10))
            x=1;
        if(x)printf("%d  ",i);
    }
    return 0;
}



大范围
#include<stdio.h>
int f(int n){
    int x=1;
    if(n<2)return 0;
    for(int i=2;i*i<n+1;i++){
        if(n%i==0){
            x=0;
            break;
        }
    }
    return x;
}
int main(){
    for(int i=100;i<=90000;i++){
        int t=i,x=1;
        while(t>0){
            if(!f(t)){
                x=0;
                break;
            }
            t/=10;
        }
        if(x)printf("%d  ",i);
    }
    return 0;
}

数字取数

下面程序实现将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:7531。请根据主程序写出其调用的void fun(int s,int *t)函数

#include <stdio.h>
void fun(int s,int *t)
{
    int i=0,a[20]={0};
    while(s>0){
        int x=s%10;
        if(x%2==1){
           a[i++]=x;
        }
        s/=10;
    }
    *t=0;
    while(i>=0)
        *t=*t*10+a[i--];
}
int main()
{
    int x=87654321,y;
    fun(x,&y);
    printf("%d, %d\n", x ,y);
    return 0;
}

年龄递归

有 5 个人坐在一起,问第五个人多少岁?他说比第四个人大 2 岁。问第四个人岁数,他说比第三个人大 2 岁。问第三个人,又说比第二人大两岁。问第二个人,说比第一个人大2岁。最后问第一个人,他说是 10 岁。利用递归实现:求第五个人多少岁

#include <stdio.h>
int f(int n,int age)
{
    if(n==5)return age;
    return f(n+1,age+2);
}
int main()
{
    int age;
    age=f(1,10);
    printf("%d\n", age);
    return 0;
}

报数退出

N个人围成一圈,从第1个人开始顺序报号1,2,3。 凡报到“X”者退出圈子,找出
最后留在圈子中的人原来的序号。

#include<stdio.h>
#define N 13
#define X 3
int main()
{
	int a[N]={0},n=N,i=0,x=0;
    while(1){
        if(a[i]==0){
            x++;
            if(x==X) {
                a[i] = 1;
                n--;
                x=0;
                if(n==0)break;
                printf("exit:%d\n",(i+1)%13);
            }
        }
        i++;
        i%=N;
    }
    printf("%d",i+1);
	return 0;
}

一元二次方程

从键盘任意输入a、b、c的值,编程计算并输出一元二次方程ax^2 +bx+c=0的实根

#include <stdio.h>
#include<math.h>
int main()
{
	double a,b,c,x;
	scanf("%lf,%lf,%lf",&a,&b,&c);
	x=b*b-4*a*c;
	if(x>0){
		printf("x1=%.5lf\n",(-b+pow(x,0.5))/2/a);
		printf("x2=%.5lf\n",(-b-pow(x,0.5))/2/a);
	}else if(x==0){
		printf("x1=x2=%.5lf\n",(-b+pow(x,0.5))/2/a);
	}else{
		printf("无实根");
		
	}
	return 0;
}

二进制转十进制

#include <stdio.h>
#include <math.h>
#include <string.h>

int main()
{
    char s[21];
    long a,i,len;
    printf("请输入一个二进制数:\n");
    scanf("%s",s);
    len=strlen(s);
    a=0;
    for(i=len-1;i>=0;i--)
        if(s[i]=='1') a=a+pow(2.0, len-1-i);
    printf("其转换的十进制数为:");
    printf("%ld\n",a);
    return 0;
}

矩阵转置

#include<stdio.h>
int main()
{int i,j,a[3][2],b[2][3];
    printf("please input 6 number:\n");
    for(i=0;i<3;i++)
        for(j=0;j<2;j++)
            scanf("%d",&a[i][j]);
    printf("the array a is:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
            printf("%4d",a[i][j]);
            b[j][i]=a[i][j];
        }
        printf("\n");
    }
    printf("the array b is:\n");
    for(j=0;j<2;j++)
    {
        for(i=0;i<3;i++)
            printf("%4d",b[j][i]);
        printf("\n");
    }
    return 0;
}

最大最小2*3

#include<stdio.h>
int main()
{
	int a[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}},b[3][2];
	int i,j;
	for(i=0;i<=2;i++)
	{
		for(j=0;j<=3;j++)
		{
			b[i][0]=a[i][0];
			if(a[i][j]>a[i][0])b[i][0]=a[i][j];
		}
		for(j=0;j<=3;j++)
		{
			b[i][1]=a[i][0];
			if(a[i][j]>a[i][0])b[i][j]=a[i][j];
		}
	}
	for(i=0;i<=2;i++)
	{
		for(j=0;j<=1;j++)
		printf("%3d",b[i][j]);
		printf("\n");
	}
	return 0;
}

数学函数

@y=cos sqrt(a+x的2次方)+ln(ax)  a=43;x=24;
#include<stdio.h>
#include<math.h>
int main()
{
    int a=43,x=24,y;
    y=cos(sqrt(a+x*x))+log(a*x);
    printf("y=%d\n",y);
    return 0;
}

@y=sin(sqrt(a+x*x))+exp(a*x)
#include<stdio.h>
#include<math.h>
int main()
{
    double a=4.3,x=2.4,y;
    y=sin(sqrt(a+x*x))+exp(a*x);
    printf("y=%lf\n",y);
    return 0;
}

最大公约数和最小公倍数

#include<stdio.h>
int main(void)
{
    int m,n,t,a,b;
    scanf("%d%d",&m,&n);
    a=m*n;
    t=m % n;
    while(t!=0)
    {
        m=n;
        n=t;
        t=m%n;
    }
    printf("最大公约数是:%d\n",n);
    printf("最小公倍数是:%d\n",a/n);
    return 0;
}


#include<stdio.h>  
int main(void)  
{    
  int m,n,t,a,b;  
  scanf("%d%d",&m,&n);  
  a=m*n;  
  while(m!=n)  
  {  
    if(m>n)  
        m=m-n;  
    else  
        n=n-m;  
  }      
  printf("最大公约数是:%d\n",n);  
  printf("最小公倍数是:%d\n",a/n);        
  return 0;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值