首页 > 其他分享 >C语言例题

C语言例题

时间:2023-02-28 20:26:13浏览次数:38  
标签:main include int scanf number C语言 printf 例题

  1. 判断一个数是否为素数
#include <stdio.h>
int main()
{
    int n,i=1;
    printf("请输入n的值:\n");
    scanf("%d",&n);
    //此处可用i <= n^(1/2)进行优化
    for(i=1;i<n-1;i++)//从1开始也可以判读1不是素数
        if(n%i==0)break;
    if(i<n)printf("%d不是素数\n",n);
    else printf("%d是素数\n",n);
}
  1. 斐波那契数列第n项是否能被3整除
    在繁荣山丘,有一种奇怪的斐波那契数列,人们不关心他第几项是多少,只关心它能否被3整除。在这里,,F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2)。
    请你判断一下第n项是否能被3整除
#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    //通过找规律得出的结论
    if(n % 4 == 2){
        printf("YES");
    }else {
        printf("NO");
    }
     return 0;
}
  1. 大小写转换代码
#include <stdio.h>
int main()
{
    char ch;
    scanf("%c",&ch);
    //大小写字符的ASCII码相差32,且小写字符的更大
    ch=(ch>='A'&&ch<='Z')? (ch+32):ch;
    ch=(ch>=‘a’&&ch<=‘z’)? (ch - 32):ch;
    printf("%c\n",ch);
    return 0;
}
  1. 向上/下取整
    #include <math.h>
    floor为向下取整函数 ,输入输出都是浮点型,若要得到整形的,要使用(int)()进行强制转换
    ceil为向上取整函数,其他用法同上
  2. 取糖果问题
    桌子上有1堆糖果,一共有n颗,两人轮流取糖果。规定每次最少拿1颗,最多拿m颗,最后拿完的人获胜。(两个人都很聪明,都懂得使用最优策略)
#include <stdio.h>
int main()
{
    int n,m;
    scanf("%d %d",&m,&n);
    if(n% (m+1) == 0){		//第一个人拿的时候处于平衡态
        printf("Second win");
    }else {					//第一个拿的时候不处于平衡态,取x个使第二个人拿的时候处于平衡态就能保证最后一个拿到糖果
        printf("First win");
    }
    return 0 ;
}

6.利用迭代法计算x=sqrt(a)
求平方根的迭代公式为:
Xn+1=0.5*(Xn+a/Xn)。

#include<stdio.h>
Int main()
{
	Int a;
	scanf(“%d”,&a);
	double x =1.0,x1;
	do{
	x1 = x;
	x = (x1 + a/x1)/2;
	}while(fabs(x1-x)>1e-5);//用来约束精确程度
	printf(“%lf”,x);
}
  1. 斐波那契数列(4个一行)
#include <stdio.h>
int main()
{
    int f1=1,f2=1;
    int i;
    for(i=1;i<=20;i++)
    {
        printf("%12d%12d",f1,f2);
        if(i%2==0)
            printf("\n");
        f1=f1+f2;
        f2=f2+f1;
    }
    return 0;
}
  1. 找零问题
#include <stdio.h>
int main()
{
    int x;
    int one,two,five;
    int exit=0;
    scanf("%d",&x);
    for(one=1;one<x*10;one++){
        for(two=1;two<x*10/2;two++){
            for(five=1;five<x*10/5;five++){
                if(one+two*2+five*5==x*10){
                    printf("可以用%d个一角加%d个2角加%d个5角得到%d元\n",one,two,five,x);
                    exit=1;
                    break;
                }
            }
            if(exit==1) break;
        }
        if(exit==1)break;
    }
    return 0;
}
  1. bool量
#include <stdio.h>
#include <stdbool.h>
int main()
{
    bool b=6>5;//bool量的值只有1或0,关系式正确即为0
    bool t=true;
    t=2;		//bool量不是0就是1
    printf("%d\n",b);
    printf(“%d\n”,t);//此时不会打印出2,而会打印出1,因为2为非0数
    return 0;
}
  1. 计算各种量的字节长度
#include <stdio.h>
#include <stdbool.h>
int main()
{
    bool b=6>5;//bool量的值只有1或0,关系式正确即为0
    bool t=true;
    t=2;		//bool量不是0就是1
    printf("%d\n",b);
    printf(“%d\n”,t);//此时不会打印出2,而会打印出1,因为2为非0数
    return 0;
}
  1. 计算1-1/2+1/3-1/4……-1/100
#include <stdio.h>
int main()
{
    int sign=1;
    double deno=2.0,term,sum=1;
    while(deno<100)
    {
        sign=-sign;		//用sign来改变正负号
        term=sign/deno;
        sum=sum+term;
        deno++;
        
    }
    printf("%f\n",sum);
    return 0;
}
  1. 比较三个数的大小关系(按a<b<c的顺序排列)
#include <stdio.h>
int main()
{
    int a,b,c,dem;
    scanf("%d %d %d",&a,&b,&c);
    if(a >b)
    {
        dem = a;
        a = b;
        b = dem;
    }
    if(b >c)
    {
        dem = b;
        b = c;
        c = dem;
    }
    if(a >c)
    {
        dem = a;
        a = c;
        c = dem;
    }
    printf("%d",dem);
    return 0;
}
  1. 冒泡排序
#include<stdio.h>
int main()
{
    int n = 0,j = 0,i = 0,t = 0;
    int number[100];
    scanf("%d",&n);
    for (i = 0;i< n;i++){
        scanf("%d",&number[i]);
    }
    for (i = 0;i< n-1;i++){
        for(j = 0;j < n-1-i;j ++){
            if(number[j]>number[j+1]){
                t = number[j];
                number[j] = number[j+1];
                number[j+1] = t;
            }
        }
    }
    printf("%d %d",number[n-2],number[1]);
    return 0;
}
//输出的不一定是次大值和次小值,因为可能存在两个或多个最大/小值的情况
 #include<stdio.h>
int main()
{
    int n = 0,j = 0,i = 0,t = 0;
    int number[100];
    int min1,min2;
    int max1,max2;
    scanf("%d",&n);
    for (i = 0;i< n;i++){
        scanf("%d",&number[i]);
    }
    min1 = number[0];
    min2 = min1;
    for (i = 0;i< n;i++){
        if(number[i] < min2){
            min2 = number[i];
            if(min2 < min1){
                t = min2;
                min1 = min2;
                min2 = t;
            }
        }
        if(min1 == min2){
            min2 = number[I];//若相等,则将其赋值为另一个值
        }
    }
    max1 = number[0];
    max2 = max1;
    for (i = 0;i< n;i++){
        if(number[i] > max2){
            max2 = number[i];
            if(max2 > max1){
                t = max2;
                max2 = max1;
                max1 = t;
            }
        }
        
        if(max1 == max2){
            max2 = number[i];
        }
    }
    printf("%d %d",max2,min2);
    return 0;
}
#include <stdio.h>
int main()
{
    int n = 0;
    int numbers[100];
    int i = 0,j = 0;
    int t = 0;
    int max = 0,min = 0;
    scanf("%d",&n);
    for(i = 0; i < n;i++){
        scanf("%d",&numbers[i]);
    }
    for(i = 0;i < n - 1;i++){
        for(j = 1;j <=n - 1 - i;j++){
            if(numbers[j - 1] > numbers[j]){
                t = numbers[j - 1];
                numbers[j - 1] = numbers[j];
                numbers[j] = t;
            }
        }
    }
    min = numbers[0];
    max = numbers[n - 1];
    for(i = 0;i < n - 1;i++){
        if(numbers[i] > min){
            min = numbers[i];
            break;
        }
    }
    for(i = n-1;i>=0;i--){
        if(numbers[i] < max){
            max = numbers[i];
            break;
        }
    }
    printf("%d %d",max,min);


    return 0;
}
  1. 金字塔
#include<stdio.h>
int main()
{
    int i,j;
    char n;
    scanf("%c",&n);
    for(i=0;i<=n-'A';i++)
    {
        for(j=0;j<n-'A'-i;j++)
            printf(" ");
        for(j=0;j<=i;j++)
            printf("%c",j+'A');
        for(j=i-1;j>=0;j--)
            printf("%c",j+'A');
        printf("\n");
    }
    return 0;
}
  1. 一元二次方程是否有整数解
#include<stdio.h>
#include<math.h>
int fun(double *x1, double *x2, double a, double b, double c)
{
    double dt,absdt;
    if(fabs(a)<1e-14)//解决浮点数比较误差的问题
        return 0;//a为0时
    dt=b*b-4*a*c;
    absdt=fabs(dt);
    if(absdt<1e-14){
        *x1=*x2=-b/(2*a);
        return 1;
    } else if(dt>0){
        *x1=(-b+sqrt(dt))/(2*a);
        *x2=(-b-sqrt(dt))/(2*a);
        return 1;
    } else return 0;
}
int main()
{
    double a,b,c,x1,x2;
    scanf("%lf%lf%lf",&a,&b,&c);
    if(fun(&x1,&x2,a,b,c)==1){
        if(x1 == x2){
            if((int)(x1) == x1){
                printf("%.2f",x1);
            }else{
                printf("No solution");
            }
        }else{
            if((int)(x1) == x1){
                printf("%.2f",x1);
                printf("%.2f",x2);
            }else{
                printf("No solution");
            }
        }}else
        printf("No solution");
    return 0;
}
  1. 给定一个十进制数,把它转化为八进制数。
#include <stdio.h>
int main()
{
	int n=0,m=1,k=0,i=0;
	int a[32]={0};
	scanf("%d",&n);
    while((m!=0) && (i<32))
	{
		 
		k=n%8;
    m=n/8;
		a[i]=k;
		n=m;  //把除数赋值给被除数
		i++;
	}
	for(i=i-1;i>=0;i--)
	{
		
		printf(“%d”,a[I]);//逆序输出
	}
	return 0;
}
  1. 一个大于9的数,便用其数位之和去代替这个数,如果位数仍然大于9,则继续重复上述步骤,直到其小于10为止。
#include <stdio.h>
int main()
{
    int x = 0;
    scanf("%d",&x);
    int sum = 10;
    while(sum >=10)
    {
        sum = 0;
        while(x > 0) {
            sum += x % 10;
            x /= 10;
        }
        x = sum;
    }
    printf("%d",sum);
    return 0;
}
  1. 判断三边能否构成三角形
#include<stdio.h>
main()
{
    int s[3];
    int i=1;
    int n;
    scanf("%d",s[0]);
    scanf("%d",s[1]);
    scanf("%d",s[2]);
    n=s[0]+s[1]+s[2];
    for(i=0;i<3;i++)
    {
        if (s[i]<n-s[i])
            continue;
        if(s[i]>=n-s[i])
            printf("Three edges can not be composed of triangles");
    }
    if(i=2&&s[2]<n-s[2])
        printf("Three edges can be 	     	composed of triangles");
return 0;
}
  1. 统计输入字符的种类的个数
#include <stdio.h>
int main()
{
    int i = 0;
    int l = 0,s = 0,n = 0,e  = 0;
    char c;
    while((c = getchar())!= '\n'){
        
        if((c>= 'a' &&c <='z') ||(c>='A' &&c <='Z')){
            l++;
        }else if(c>='0' && c <='9'){
            n ++;
        }else if(c==' '){
            s++;
        }else{
            e++;
        }
    }
    printf("%d %d %d %d",l,s,n,e);
    return 0;
}
  1. 求两个数的最大公因数和最小公倍数
#include <stdio.h>
int main()
{
    int m,n,i,u,max=0,min = 0,bigger;
    scanf("%d %d",&m,&n); //注意此处若为%d,%d则输入时也要,
    if(n > m){
        bigger = n;
    }else{
        bigger = m;
    }
    for(i = bigger;i>=1;i--){
        if(m % i == 0 && n % i == 0 ){
            max = i;
            printf("%d\n",max);
            break;
        }
    }

    for(u = 1;i<=1000;u++){
        if((max *u) % m == 0 && (max *u) % n == 0){
            min = max *u;
            break;
        }
    }
    printf("%d\n%d\n",max,min);
    return 0;
}
  1. 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
#include<stdio.h>
int main()
{
	int i,n,m,a[45];
	scanf("%d",&n);
while(~scanf("%d",&m))
{
	a[1]=1;
	a[2]=1;
	a[3]=2;
	for(i=4;i<=m;i++)
	{
		a[i]=a[i-1]+a[i-2];
	}
	printf("%d\n",a[m]);
}
	return 0;
}
  1. 铺地砖:一个矩形游泳池(大小为n x m),需要在游泳池内部的最外围,铺一圈宽度为1的防滑瓷砖,想请你帮帮忙,看看什么样的地砖比较合适。输入有两行,第一行有两个正整数n,m(3<=n,m<=20),表示需要铺的范围,第二行一个整数A,表示地砖的尺寸A×1(1<=A<=min(n,m))。如果地砖恰好能铺满泳池一圈,则输出”YES”,否则输出”NO”。
#include <stdio.h>
int main()
{
    int n,m,A;
    scanf("%d %d %d",&n,&m,&A);
    if ((n % A == 0  && (m -2) % A == 0) ||( m % A == 0 && (n - 2) % 1 == 0) ){
        printf("YES");
     }else if(n % A == 0 &&(n - 2) % A == 0 &&(m - 1)%A == 0) {
         printf("YES"); //此情况和下一种情况都包涵在第四种情况内了
     }else if(m % A == 0 &&(m - 2) % A == 0 &&(n - 1)%A == 0) {
         printf("YES");
     }else if((n - 1) % A == 0 &&(m - 1) % A == 0 ) {
         printf("YES");
     }else {
        printf("NO");
    }
    return 0;
}
  1. 给定一个二十四时表示的时间,求过了N分钟后的时间。
# include<stdio.h>
int main()
{
    int a,c,t,b,d;  //a原先的小时数
    scanf("%d:%d\n%d",&a,&c,&t);


    d = (c+t)%60;
    b = (a + (c+t)/60)%24;      //(c+t)/60 =小时 ///之所以%24 一部分原因是b<=24 超过24小时就要归零

    if(b>=12)
        printf("%02d:%02d pm",b%12,d);   //%02d 表示存储两位数字 不足用0补上

    else
        printf("%02d:%02d am",b,d);

    return 0;
  1. 在按顺序给出他按了灯开关的宿舍号。问最多的时候有多少盏灯是亮着的。(假设一开始所有的灯都是关着的)
    第一行为两个正整数N,M,其中N表示有N层楼,每层楼有N间房(1 <= N <= 9); M表示这个奇怪的人共按了M次开关 (0 <= M <= 20)。
      接下来M行,每行一个三位的整数,表示每次按下开关的宿舍编号。整数的最高位表示宿舍所在的楼层,中间一位是0,最低位表示宿舍在这层楼的第几间。
#include <stdio.h>
int main()
{
    int N = 0,M = 0;
    scanf("%d %d",&N,&M);
    int rooms[20];
    int room_number[20];
    int room_floor[20];
    int room_sign[9][9];
    int cnt = 0;
    int i = 0,j = 0;
    for(i = 0;i < N;i++){
        for(j = 0;j < N;j++){
            room_sign[i][j] = -1;
        }
    }
    for(i = 0;i < M;i++){
        scanf("%d",&rooms[i]);
    }
    for(i = 0;i < M;i++){
        room_number[i] = rooms[i] % 10;
//        printf("%d\n",room_number[i]);
    }
    for(i = 0;i < M;i++){
        room_floor[i] = (rooms[i] - room_number[i]) / 100;
//        printf("%d\n",room_floor[i]);
    }
//    for(i = 0;i < N;i++){
//        for(j = 0;j < N;j++){
//            printf("%d\n",room_sign[i][j]);
//        }
//    }
    for(i = 0;i < M;i++){
        for(j = 0;j < N;j++){
            room_sign[room_floor[i]][j] = -room_sign[room_floor[i]][j] ;
//            printf("%d\n",room_sign[room_floor[i]][j]);
        }
        for(j = 0;j < N;j++){
            room_sign[j][room_number[i] ] = -room_sign[j][room_number[i]];
        }
    }
    for(i = 0;i < M;i++){
        for(j = 0;j < N;j++){
            if(room_sign[i][j] == 1){
                cnt ++;
            }
//printf("%d\n",room_sign[i][j]);
        }
    }
    printf("%d",cnt);
    return 0;
}
  1. 回文字符串
# include <stdio.h>
# include <string.h>

int main (void)
{
    int n;
    while (scanf("%d",&n)!=EOF)
    {
        int i,length,count;
        char a[1000],b[1000];
        while (n--)
        {

            count = 0;//每次循环必须初始化

            scanf("%s",a);
            length = strlen(a);//输入字符串并计算它的长度

            for (i=0;i<length;i++) //把字符数组a的内容倒序赋值给b
                b[i] = a[length-1-i];

            for (i=0;i<length;i++)//计算a,b中相等元素的个数
                if (b[i] == a[i])
                    count++;

            if (count == length)//如果所有元素都相等则说明 a中元素倒序排列后仍相等
                printf("yes\n");
            else
                printf("no\n");
        }

    }
    return 0;
}
  1. 求一个数的因子和
#include <stdio.h>
#include <math.h>

int main()
{
    long n, s = 0;
    int i;
    scanf("%ld", &n);
    for (i = 1; i <= sqrt(n); i++)	{
        if (n % i == 0)
            if (i == n / i)
                s += i;
            else
                s = s + i + n / i;
    }
    printf("%ld", s );
    return 0;
}
  1. 汉诺塔
#include <stdio.h>

void MoveTower(int num, char src, char dst, char trs);

int main()
{
    int n;
    char s, d, t;
    scanf("%d %c %c %c", &n, &s, &d, &t);
    MoveTower(n, s, d, t);
    return 0;
}
void MoveTower(int num, char src, char dst, char trs){
    if(num == 1){
        printf("%d: %c -> %c\n",num,src,dst);
    }else{
        MoveTower(num -1,src,trs,dst);
        printf("%d: %c -> %c\n",num,src,dst);
        MoveTower(num -1,trs,dst,src);
    }
}

标签:main,include,int,scanf,number,C语言,printf,例题
From: https://www.cnblogs.com/linhongyu0090/p/17165821.html

相关文章

  • C语言实现大数的加法
    #include<stdio.h>#include<string.h>#defineMAX200inta[MAX],b[MAX],c[MAX];chars1[MAX],s2[MAX];intmain(){gets(s1);gets(s2);intlens......
  • C语言 内存分区
    C语言对内存的使用划分为以下区域:栈区(stack)、堆区(heap)、全局区(静态区)、常量区、代码区。栈区:由编译器自动分配释放,按内存地址从高(地址)到低(地址)存储;栈区内容的作用域......
  • C语言预处理指令
    1、宏操作符##操作符可以把宏参数转换成字符串#include<stdio.h>#defineSTR(n)#nintmain(){printf("STR(n)中的值为:%s",STR(5+6));return0;}通过GCC预编译后可以......
  • c语言运算符优先级实例解析
    壹:  对于优先级:算术运算符>关系运算符>逻辑运算符>赋值运算符。逻辑运算符中“逻辑非!”除外。这是程序员总结出来的最快的学习方式。可在实战中,还是经常遇......
  • 【C语言】ceil、round。
    ......
  • 【C语言】ceil、round。
    ......
  • 计算机程序设计基础课程设计(C语言)[2023-02-28]
    计算机程序设计基础课程设计(C语言)[2023-02-28]计算机程序设计基础课程设计(C语言)设计任务书指导专业:机械电子工程指导教师:高峰仲惟燕机械电子工程学院二〇二二年十......
  • 【C语言】trunc、floor。
    ......
  • 【C语言】trunc、floor。
    ......
  • C语言:例如2+22+222+2222+22222(
    //题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。//1.程序分析:关键是计算出每一项的值。//2.......