【c语言】一些刷题遇到的小知识点—1(会更新)

本文介绍了C语言中的基础概念,包括浮点数四舍五入、输入年月日的分割、使用scanf和printf进行格式化、循环结构(for、while)的应用,以及猜数字游戏和素数检测的实现。同时提到了代码中的错误和优化技巧。
摘要由CSDN通过智能技术生成

简单c语言概念类题目. 

题目一 四舍五入

要求:输入浮点型数字自动四舍五入 (如输入3.1 输出3)

// 因为转换规则内的精度参数可以直接帮我们自动四舍五入。
// 只需要在% f中间加上.0就可以了,这样表示
精确到小数点后0位。
// 举一反三,假如说要精确到小数点后两位,那么就是 % .2f这样写,也就是在中间加上.2
#include <stdio.h>

int main() {
    double d = 0;
    scanf("%lf", &d);
    printf("%.0f", d);
    return 0;
}

题目二  输入年月日

要求:输入一串数字,输入的数字能自动在输出中分成年月日   
        (如 输入👉19790506 输出👉你的出生日期是1979年05月06日)

  
//  所以我们要提前准备好 存放年月日的三个变量 int a,b,c;而非单个的a
    小知识点:通过 scanf 函数的 % n 格式(n是实数)控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据。

//  { scanf("%4d%2d%2d", &a, &b, &c) ;
//   第一个四个数字,第二 三都是两个数字,所以是
%4  %2  %2
//   输入完成 把他们放到a b c的地址
 }
#include<stdio.h>

int main()
{
    int a = 0,b = 0,c = 0;
    scanf("%4d%2d%2d", &a,&b,&c);
    printf("你的出生日期是%d年%d月%d日", a,b,c);
    return 0;
}

  你以为你对了?hhh
  你会发现你输入的19790506,输出的结果中本该出现05月,而却是5月!!! 0呢?0呢??

 ————嘿嘿,知识点空缺了吧(没错就是作者大大我犯的错误QAQ )

 小知识点: printf 函数的 % 0格式控制符,输出数值时指定左面不使用的空位置自动填0。

  于是我恍然大悟需要这打印的时候做点什么
——👉 printf (" month =%02d\n", b);

int main()
{
    int a = 0, b = 0, c = 0;
    scanf("%4d%2d%2d", &a, &b, &c);
    printf("你的出生日期是%d年%02d月%02d日", a, b, c);
    return 0;
}

 分支和循环类题目

题目一 猜数字游戏

首先,我们进入游戏,需要游戏菜单,所以需要一进入页面就显示的菜单,这里我用了do while循环结构,在do阶段先噶菜单

在菜单中,我们还需要游戏按钮选项,点击开始或退出,不同按钮触发我们用的是switch开关结构

开始游戏,猜数字需要 先系统生成随机数字,这里运用的是rand, srand, time的结构 

// 这里记录下我de新知识点:

        //  头文件rand和srand <stdlib.h>   

                               time<time.h>

        //  ②随机数运用形式 :(范围a到b的随机数)a + rand ( ) % ( b - a + 1 ) 

                                           ( 如:1-100的随机数: 1 + rand( )% 100 )

                                           srand((unsigned int)time(NULL))

其次,猜数字猜大猜小,需要猜好几次,所以我们考虑用for/while循环

以下是我敲的代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void game()  //游戏单独调用函数
{
	int r = rand() % 100 + 1;//这是随机数生成
	int guess = 0;
	int count = 7; //设置了机会次数

	for(count=7;count<=7&&count>0;) //我用的for循环
	{
		printf("还剩下%d次机会", count);
		printf("请输入你猜的数字:");
		scanf("%d", &guess);
		count--;
		if (guess > r)
		{
			printf("猜大了\n");
		}
		else if (guess < r)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜对了!你真棒!\n");

			break;
		}
		if (count == 0)
		{
			printf("很遗憾,在规定的时间你没猜出!输了吧!傻逼!!\n");
		}
	}

}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));  //随机数的srand只需调用一次,于是我放前面了

	do  //菜单放在do的位置
	{
		printf("***********************\n");
		printf("*****1.开始游戏********\n");
		printf("*****0.退出游戏********\n");
		printf("***********************\n");
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game(); //游戏单独调用函数来作,这样代码没那么臃肿
			break;
		case 0:
			printf("退出成功\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

题目二 求100-200的全部素数以及素数个数

这个是运算结果

    这题我犯了个错误,导致我运算的结果都只有素数个数等于0 

    各位看官能看出哪里错了嘛

   (咳咳不信都看得出来 /固执 /自我安慰)

int main()          这是含错误的代码
{
	int a = 0;//a是100-200内的数
	int c = 0;//c是标记非素数的
	int count = 0;
	for (a = 100; a <= 200; a++)
	{
		
		int b = 0;
		for (b = 2; b <= a - 1; b++) //是2到(素数-1)的数的范围
		{
			if (a % b == 0)
			{
				c = 1;
				break;
			}

		}
		if (c == 0)
		{
			count++;
			printf("%d\n", a);

		}
	}
				printf("count=%d", count);
	
	return 0;

}

3

2

1

 ————公布答案啦

错误是应该把第7行的放到第11行去

减肥法

这个得知道这个c是用来干嘛的,我后边标了注释,即c像个标记

    如果不是素数就变为0,是素数就保持1不变

假设第一次变成了0 只能代表当前的数字不为素数,所以下次循环的时候要重新初始化,再去判断下一个数是不是素数

要是放在外面,这个c就不管循环多少次都是0,没有意义了

(嘻嘻给自己讲的真好,夸夸~)

  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值