c语言入门训练题(一)

前言

对于刚入门c语言的小白,多做题是有利于提高的逻辑和代码能力,以下的几道题有些是在牛客网上的题目,有些是我经常看到过的题目。刚开始写这些题,我认为有必要先思考一下,思考不出来在看答案。

奇偶统计

题目描述

任意输入一个正整数N,统计1~N之间奇数的个数和偶数的个数,并输出

输入描述

一行,一个正整数N。(1≤N≤100,000)

输出描述

一行,1~N之间奇数的个数和偶数的个数,用空格分开。

代码如下

#include<stdio.h>
int main()
{
    int N;
    int even=0;//统计偶数的个数
    int odd=0;//统计奇数个数
    scanf("%d ",&N);
    for(int i=1;i<=N;i++)//对1-N遍历一遍
    {
       if(i%2==0)//判断偶数
       {
        even++;
       }
        else if(i%2==1)//判断奇数
        {
         odd++;
        }
    }
    printf("%d %d\n",odd,even);
    return 0;
}

三角形判断

题目描述

KiKi想知道已经给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)

输入描述

题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。

输出描述

针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”

代码:

#include<stdio.h>
int main()
{
    int a,b,c;
    while((scanf("%d%d%d",&a,&b,&c))!=EOF) //多组输入,若输出错误时,scanf的返回值为EOF,此时循环结束
    {
       if(a+b<=c||a+c<=b||b+c<=a)//判断不是三角形的条件
       {
          printf("Not a triangle!\n");
       }
        else
        {
            if(a==b&&a==c)//判断等边三角形的条件,注意不能写成a==b==c
          {
            printf("Equilateral triangle!\n");
          }
           else if(a==b||a==c||b==c)//若不是等边三角形,在判断等腰三角形
           {
               printf("Isosceles triangle!\n");
           }
           else{
         printf("Ordinary triangle!\n");//其余为普通三角形
            }
        }
 
}

从大到小输出

题目描述

写代码将三个整数数按从大到小输出。
例如:
输入:2 3 1
输出:3 2 1

代码

int main()
{
	int a, b, c;
	int mid;
	scanf("%d%d%d", &a, &b, &c);
	if (a < b)//判断a,b大小
	{
		mid = a;
		a = b;
		b = mid;
	}
	if (a < c)//判断a,c大小
	{
		mid = a;
		a = c;
		c=mid;
	}
	if (b < c)
	{
		mid = b;
		b = c;
		c = mid;
	}
	printf("%d %d %d\n", a, b, c);//从大到小输出
	return 0;
}

打印素数

题目描述

写一个代码:打印100~200之间的素数

思路一

试除法,对[2,i-1]中每个数都试除一次,如果有其中一个可以除,则该数不是素数

int main()
{
	int count = 0;
	int i = 0;
	int j = 0;
	for (i = 100; i <= 200; i++)
	{
		for (j = 2; j <i; j++)
		{
				//判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
			if (i % j == 0)
			{
				break;
			}
		}
		if (j == i)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\n%d\n", count);
	return  0;
}
思路二

如果i能够被[2, sqrt(i)]之间的任意数据整除,则i不是素数
原因是:如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m),另一个大于或等于 sqrt(m)
如果是6则,[2,3)它可以被2整除,则该数不是素数,如果是15,则区间[2,4),15能被3整除,所以它不是素数
代码

int main()
{
	int count = 0;
	int i = 0;
	int j = 0;
	for (i = 100; i <= 200; i++)
	{
	//判断是否为素数
		for (j = 2; j <=sqrt(i); j++)
		{
			if (i % j == 0)//如果是素数,则跳出循环
			{
				break;
			}
		}
		if (j == i)
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\n%d\n", count);
	return  0;
}

数9的个数

编写程序数一下 1到 100 的所有整数中出现多少个数字9

int main()
{
	int i;
	int count = 0;
	for (i = 1; i <= 100; i++)
	{
		if (i % 10==9)//个位上9的个数
		{
			count++;
		}
		if (i / 10 == 9)//十位上9的个数
		{
			count++;
		}
	}
	printf("%d\n", count);
	return 0;
}
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值