C语言第四章

C语言程序设计现代方法第二版,第四章课后编程习题全部答案 已验证通过编译,但不保证在细节上不存在遗漏,仅供参考 4.1 #include <stdio.h> int main (void) { int num, rev; printf ("Enter a two-digit number: "); scanf ("%2d", &num); // 这里的%2d是为了只取2位有效数字; int a, b; a =... 阅读详情

二十一.循环

1.数数几位数

程序读入一个4位以下(含4位)的正整数,输出这个整数的位数

输入:352 输出:3

计算机通过数的范围来决定位数

2.程序实现

int x;
int n=1;
scanf("%d",&x);
if(x>999)
n=4;
else if(x>99)
n=3;
else if(x>9)
n=2;
printf("%d",n); 

题目明确4位数及以下的正整数

因为从高处往下判断,所以不需要判断上限

反过来不行,>从高往低判断,<反之

如果都用if

int x;
int n=1;
scanf("%d",&x);
if(x>999){
n=4;
}
if(x>99){
n=3;
}
if(x>9){
n=2;
}
if(x>0){
n=1;
}
printf("%d",n); 

这样写结果都是1

3.任意范围的正整数怎么办

用判断位数的方法在一定范围内可以做

换一个方法想:给一个极大的正整数,让计算机数数,怎样让计算机数数,eg三位逆序的题,352%100=52,123456789%100000000=23456789,但是如何得到100000000?如果换一下,从右边开始划,123456789/10=12345678,去掉最右边的数,不断的划,直到没有数可以划(0),在这个过程中计数,计数的结果就是几位数

int x;
int n=0;
scanf("%d",&x);
n++;
x/=10;
if(x>0){
  n++;
  x/=10;
   if(x>0){
  n++;
  x/=10;
    if ...
    }
} 
printf("%d\n",n);

还是没完没了,需要引入一种手段

4.while

int x;
int n=0;
scanf("%d",&x);
n++;
x/=10;
while (x>0){
  n++;
  x/=10;
}
printf("%d\n",n);

在4行做一个断点,调试,程序一直在while循环,直到满足x>0结束

n加1,x少一位,直到x=0时结束while循环

刚才自己用了很大的数试,失败,因为计算机可以表达的最大的整数是有范围的

二十二.while循环和if

1.while和if的区别

while(x>0){

x/=10;

n++;

}

if(x>0){

x/=10;

n++;

}

while是反复做,if是一次性做

循环体内要有能改变条件的机会

int x;
int n=0;
scanf("%d",&x);
n++;
x/=10;
while (x>0){
  n++;
}
printf("%d\n",n);

调试发现程序一直在while循环

因为缺少x/=10;也就是循环体内缺少能改变条件的机会,pat系统会判定超时

2.while循环

如果把while翻译成当,那么while循环的意思是当条件满足时,不断地重复循环体内的语句

循环执行之前判断是否继续循环,所以可能循环一次也没有被执行

条件成立是循环继续的条件

3.验证

去掉n++; x/=10;会怎么样

手动验证

x

352

35

3

0

n

0

1

2

3

测试程序常使用边界数据,如有效范围两端的数据、特殊的倍数等:个位数、10、0、负数

0和负数解决不了,目前两个方法解决0

加入n++; x/=10;或加入if-else

int x;
int n=0;
scanf("%d",&x);
if(x>0){
while (x>0){
  n++;
  x/=10;
}
}else{
  n=1; 
} 
printf("%d\n",n);

4.其他调试的方法printf

在程序中间插入printf

int x;
int n=0;
x=352;
while (x>0){
  n++;
  x/=10;
  printf("x=%d,n=%d\n",x,n);
}
printf("%d\n",n);

二十三.do-while循环

1.数位数的算法

用户输入x;

初始化n为0;

x=x/10,去掉个位;

n++;

如果x>0,回到3;

否则n就是结果

int x;
int n=0;
scanf("%d",&x);
n++;
x/=10;
while (x>0){
  n++;
  x/=10;
}
printf("%d\n",n);

如果去掉了n++; x/=10;

则"如果x>0,回到3;"是在"x=x/10,去掉个位;"中运行的

能不能做完了再看条件

2.do-while循环

do

{

<循环体语句>

}while(<循环条件>);//记住分号

在进入循环的时候不做检查,而是在执行完一轮循环体的代码之后,再来检查循环的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环

3.两种循环

左边do-while,右边while

do-while循环在循环体执行结束的时候才来判断条件,无论如何,循环都会执行至少一遍,然后判断条件

和while循环相同的是,条件满足时执行循环,条件不满足时结束循环

int x;
scanf("%d",&x);
int n=0;
do{
x/=10;
n++;
}while(x>0);//注意分号 
printf("%d\n",n);

二十四.猜数

1.猜数游戏

让计算机来想一个数,然后让用户来猜,用户每输入一个数,就告诉它是大了还是小了,直到用户猜中为止,最后还要告诉用户它猜了多少次

因为需要不断重复让用户猜,所以需要用到循环

在实际写出程序之前,我们可以先用文字描述程序的思路

核心重点是循环的条件

人们往往会考虑循环终止的条件

思路

计算机随机想一个数,记在变量number里;

一个负责计次数的变量count初始化为0;

让用户输入一个数字a;

count递增(加一);

判断a和number的大小关系,如果a大,就输出"大";如果a小就输出"小";

如果a和number是不相等的(无论大还是小),程序回到第3步;

否则,程序输出"猜中"和次数,然后结束

循环的条件是a和number不相等

srand(time(0));
int number = rand()%100+1;
int count = 0;
int a = 0;
printf("我已经想好了一个1到100之间的数。");
do {
    printf("请猜这个1到100之间数:");
    scanf("%d", &a);
    count++;
    if (a > number) {
    printf("你猜的数大了。");
    } else if (a < number) {
    printf("你猜的数小了。");
    }
} while (a != number);
printf("太好了,你用了%d次就猜到了答案。\n", count);

2.随机数

每次召唤rand()就得到一个随机的整数

#include <stdio.h>
#include <stdlib.h>//23因为67写的
#include <time.h>
int main()
{
    srand(time(0));//先不管
    int a = rand();
    printf("%d\n", a);
    return 0;
}

3.%100

x%n的结果是[0,n-1]的一个整数

    srand(time(0));
    int a = rand();
    a=1234; 
    printf("%d\n", a%100);

结果是34,这样得到一个获得100内随机数的方法

7次为什么可以猜出来?每次一半一半猜ovo

二十五.算平均数

1.算平均数

让用户输入一系列的正整数,最后输入-1为止,表示输入结束,然后程序计算出这些数字的平均数,输出输入的数字的个数和平均数

变量->算法->流程图->程序

2.变量

一个可以记录整数的变量

平均数计算:每读到一个数,加到累加的变量中,当全部数据读完,再拿这个变量/读到的个数

所以还需要两个变量

3.算法

sum(累加的变量)和count(个数)初始化=0

scanf读入number

如果number!=-1,则将number加入sum,count+1,再回去

如果number==1,则计算并输出sum/count(用浮点数,因为真正结果可能带小数点)

4.流程图

5.代码

int number;
int sum;
int count;
do{
  scanf("%d",&number);
if(number!=-1){
  sum+=number;
  count++;
}
}while(number!=-1);
printf("%f",1.0*sum/count); 

但是do-while和if有两个语句判断number!=-1;怎样修改

int number;
int sum;
int count;
scanf("%d",&number);
while(number!=-1){
  sum+=number;
  count++;
  scanf("%d",&number);//while循环里面没有改变number!=-1的条件,加一个scanf 
}
printf("%f",1.0*sum/count); 

二十六.整数求逆

1.整数的分解

一个整数是由1至多位数字组成的,如何分解出整数的各个位上的·数字,然后加以计算

整数%10,得到个位数

整数/10,去掉个位数

再对步骤3的结果%10,得到原整数的十位数

…

类推

2.数的逆序

输入一个正整数,输出逆序的数

结尾的0的处理

3.代码

有两种情况,例如输入700,得到7或007

得到7

int x;
//scanf("%d",&x);
x=12345; 
int digit;
int ret=0;
while(x>0){
  digit=x%10;
  //printf("%d\n",digit);
  ret=ret*10+digit;
  printf("x=%d,digit=%d,ret=%d\n",x,digit,ret);
  x/=10; 
} 
printf("%d",ret);

得到007

int x;
//scanf("%d",&x);
x=700; 
int digit;
int ret=0;
while(x>0){
  digit=x%10;
  printf("%d",digit);
  ret=ret*10+digit;
  //printf("x=%d,digit=%d,ret=%d\n",x,digit,ret);
  x/=10; 
} 
//printf("%d",ret);

<明解C语言>第四章练习4-2答案 在这里插入代码片 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a, b ; printf("请输入两个整数:"); scanf("%d%d,", &a,&b); int max, min, sum; min = (a > b) ? b : a; max = (a > b) ? a : b; /*取最大值和最小值尽量用条件语句不要用这种:if (a > 阅读详情

相关推荐

明解C语言中级篇练习代码------第四章

一放假真的就看不进书了害 而且这章习题真的好难!超级无敌巨难!!! 4-6想了好久还是没想出来 哭哭( •̥́ ˍ •̀ू ) 练习4-1 //编写一个限制玩家可以输入次数的“珠玑妙算”程序。 #include <time.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> void make4digit (int x[]) {

Isabel_Bei的博客 681

《明解C语言》笔记及课后习题答案 【第四章】

练习4-1/*---改写判断整数型符号的程序,使其可以重复输入和输出---*/ #include &lt;stdio.h&gt; int main(void) { int a, retry; do { printf("请输入一个数:"); scanf("%d",&amp;a); if(a == 0) puts("该整数为0"); if(a &gt; 0) puts(...

VividColors的博客 1万+

从零到一:手把手教你用STM32F103C8T6打造个人专属开发板(附立创EDA工程与源码)

本文详细介绍了如何使用STM32F103C8T6微控制器从零开始设计和制作个人专属开发板。内容涵盖硬件选型、原理图设计、PCB布局、功能验证等全流程,并提供了立创EDA工程文件和源码,帮助开发者深入理解STM32开发板的硬件架构与设计要点。

weixin_26802933的博客 286

C语言程序设计现代方法第二版 第四章答案

1: #include<stdio.h> int main(void) { int x; printf(“Enter a two-dight number:”); scanf("%d",&x); printf(“The reversal is:%d%d\n”,x%10,x/10); return 0; } 2: #include<stdio.h> int main(...

qq_29445129的博客 1551

每天一个优秀提示词学习收藏 - 文本去AI化(四)

宝子们,今天不藏私啦!我把这段时间四处搜罗、潜心钻研出来的文本去AI化Prompt 提示词大礼包双手奉上,这可都是能让你的 AI 创作水平原地起飞的干货!走过路过不要错过,赶紧码住,开启你的 AI 创作进阶之旅吧!

2447

软件测试工程师最常用的Linux系统命令大全(汇总)

cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。

1331

谭浩强C语言课后习题——第四章

(x = a) && (y = b) && 0 0 && 0 && 0 结果为0。(a + b) + c - 1 && b + c / 2 1 && 1,结果为1。3. a + b > c && b == c 1 && 0,结果为0。c || 1 0 || 1,结果为1。2.a || b + c && b - c 1 || 1,结果为1。1. b + c && b - c 1 && 1,结果为1。

m0_71570705的博客 1484

Vivado安装教程:多版本共存的配置技巧

详解Vivado安装教程中的多版本共存配置技巧,帮助用户在同一系统中管理不同版本的Vivado开发环境,提升开发效率与兼容性,适用于需要切换版本的FPGA开发者。

weixin_35257663的博客 1777

明解C语言代码练习——第四章

名解C语言代码练习第四章——程序的循环控制部分

qq_44791751的博客 154

innovus:InstPad、CellPad 、module padding、clock cell halo

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?site_num指的是padding的大小以site宽度为单位。

m0_61544122的博客 2028

T507 buildroot linux4.9之RLT8211F 1000M以太网开发调试

调试T507的gmac,解决该RTL8211F 1000m以太网中调试遇到的问题

目前从事linux驱动开发,多交流多学习吧 689

C语言第四章重要知识总结

C语言第四章重要知识总结 第四章 键盘输入和屏幕输出 单个字符的输入/输出 4.1 ● 字符\n代表一个字符 ● ASCII码值小写英文字母比大写英文字母值大32 ● 函数getchar()没有参数,函数的返回值就是从终端键盘读入的字符 函数printf()的格式转换说明 %d有符号,%u(unsigned int) %o(八进制) %x(十六进制) %X无符号 %d...

mmsx2017的博客 1149

MVDR算法: 自适应波束形成在信号处理领域中扮演着重要的角色。本文将介绍MVDR(最小方差无失真响应)算法,并提供相应的Matlab源代码实现。

MVDR算法是一种用于抑制干扰信号并增强感兴趣信号的自适应波束形成算法。它的基本思想是通过对干扰信号进行空间滤波,使其在感兴趣信号方向上的输出功率最小化。这种方法可以提高信号的质量和可辨识度,特别是在存在多个干扰源的复杂环境中。本文将介绍MVDR(最小方差无失真响应)算法,并提供相应的Matlab源代码实现。使用MVDR算法,我们可以通过对观测信号进行波束形成来抑制干扰信号并增强感兴趣信号。以上是MVDR算法的Matlab实现。的每一列代表一个阵列元素的观测信号。表示期望的波束指向,即感兴趣信号的方向。

HackWhisper的博客 1246

c语言第四章作业,C语言第四章作业

C语言第四章作业选择题1、设ch是char型变量,其值为A,且有下面的表达式: ch=(ch>='A'&&ch<='Z')?(ch+32):ch 上面表达式的值是( B ) A、 A B、 a C、 Z D、z2、 设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中, 值为...

weixin_42530458的博客 378

YOLO11 锚框机制全解析:从改进 K-means 聚类到自适应优化,附多场景实战(附代码)

摘要 YOLO11的锚框机制采用"自适应、动态化、场景感知"的设计理念,通过数据驱动的锚框生成、多尺度感知分配和实时优化策略,显著提升目标检测性能。相较于早期YOLO版本,YOLO11的锚框完全基于训练集目标分布自适应生成,并引入智能分配策略,使不同尺寸目标获得最优匹配。技术架构包含自适应锚框生成、多尺度分配器和动态优化模块,通过改进的K-means聚类和交并比计算实现精准匹配。YOLO11锚框机制在检测精度、训练稳定性和场景适应性方面均有显著提升,为复杂场景下的目标检测提供更优解决方案

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1321

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

啊哈C语言第四章

啊哈c语言,记录c语言入门过程

Yum341的博客 244

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C语言的日常代码学习(明解c语言的第四章

mcDonaldw的博客 161

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

啊哈C语言第四章第六节答案

第四章 第6节

清风笑的博客 1865

c语言第四章作业,大学C语言第四章作业答案

大学C语言第四章作业答案,期末考试的题库,二级C语言的练习第四章课后习题参考程序三、编程1、输入一个正整数,判断该数为奇数还是偶数。参考程序:(1)#includeint main(){}(2)#includeint main(){}int a; printf("please enter an integer:"); scanf("%d",&a); switch(a%2) { case 0...

weixin_39897887的博客 247

谭浩强c语言第四章,谭浩强C语言第4章.doc

谭浩强C语言第4章c语言程序设计练习题 顺序结构1、下面程序的输出是______main(){int k=11;printf("k=%d,k=%o,k=%x\n",k,k,k);}A) k=11,k=12,k=13B) k=11,k=13,k=13C) k=11,k=013,k=oXbD) k=11,k=13,k=b2、以下合法的C语言赋值语句是 A)a=b=58 B)k=int(a+b) ; C...

weixin_35968572的博客 217

上交大版C语言程序设计第四章

qq_40445993的博客 344

C语言程序设计(第四版)谭浩强 课后习题答案 第四章

C语言程序设计(第四版)谭浩强 课后习题答案 第四章第四章1.什么是算术运算?什么是关系运算?什么是逻辑运算?2.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?3.写出下面各逻辑表达式的值。4.有3个整数a,b,c由键盘输入,输出其中最大的数5.从键盘输入一个小于1000的正数,要求输出它的平方根(如果不是整数,则取其整数部分)。6.有一个函数7.有一个函数8.给出100分制...

o_p_1的博客 3318

谭浩强第四版C语言第四章课后习题答案

谭浩强第四版C语言第三章课后习题答案 #include <stdio.h> int main() { /*4-4 int a,b,c; printf("请输入三个整数:\n"); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); int max = a; if(max < b) max =b; if(max < c) max = c; printf("max

jason-star博客 1026

谭浩强c语言第四章习题

谭浩强c语言第四章习题

klsks的博客 539

明解C语言 入门篇 第四章练习题

明解C语言 入门篇 第三章练习题4-14-24-34-44-54-64-74-84-94-104-114-124-134-144-154-164-174-184-194-204-214-224-234-244-25 4-1 #include <stdio.h> int main() { int retry; do { int no; printf("请输入一个整数:"); scanf("%d",&no);

qq_44841196的博客 2951

谭浩强C语言(第五版)第四章课后题

if(n / 10000 >= 1) { //五位数。printf("请重新输入");4.10(if语句版本)

m0_73946323的博客 856
上一篇: C语言第三章
下一篇: C语言第五章
Olive_Embedded
博客等级 码龄98天 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值