C语言第四章

📅 2026/8/14 16:30:38
C语言第四章
二十一.循环1.数数几位数程序读入一个4位以下含4位的正整数输出这个整数的位数输入352 输出3计算机通过数的范围来决定位数2.程序实现int x; int n1; scanf(%d,x); if(x999) n4; else if(x99) n3; else if(x9) n2; printf(%d,n);题目明确4位数及以下的正整数因为从高处往下判断所以不需要判断上限反过来不行从高往低判断反之如果都用ifint x; int n1; scanf(%d,x); if(x999){ n4; } if(x99){ n3; } if(x9){ n2; } if(x0){ n1; } printf(%d,n);这样写结果都是13.任意范围的正整数怎么办用判断位数的方法在一定范围内可以做换一个方法想给一个极大的正整数让计算机数数怎样让计算机数数eg三位逆序的题352%10052123456789%10000000023456789但是如何得到100000000如果换一下从右边开始划123456789/1012345678去掉最右边的数不断的划直到没有数可以划0在这个过程中计数计数的结果就是几位数int x; int n0; scanf(%d,x); n; x/10; if(x0){ n; x/10; if(x0){ n; x/10; if ... } } printf(%d\n,n);还是没完没了需要引入一种手段4.whileint x; int n0; scanf(%d,x); n; x/10; while (x0){ n; x/10; } printf(%d\n,n);在4行做一个断点调试程序一直在while循环直到满足x0结束刚才自己用了很大的数试失败因为计算机可以表达的最大的整数是有范围的二十二.while循环和if1.while和if的区别while(x0){x/10;n;}if(x0){x/10;n;}while是反复做if是一次性做循环体内要有能改变条件的机会int x; int n0; scanf(%d,x); n; x/10; while (x0){ n; } printf(%d\n,n);调试发现程序一直在while循环因为缺少x/10;也就是循环体内缺少能改变条件的机会pat系统会判定超时2.while循环如果把while翻译成当那么while循环的意思是当条件满足时不断地重复循环体内的语句循环执行之前判断是否继续循环所以可能循环一次也没有被执行条件成立是循环继续的条件3.验证去掉n; x/10;会怎么样手动验证x3523530n0123测试程序常使用边界数据如有效范围两端的数据、特殊的倍数等个位数、10、0、负数0和负数解决不了目前两个方法解决0加入n; x/10;或加入if-elseint x; int n0; scanf(%d,x); if(x0){ while (x0){ n; x/10; } }else{ n1; } printf(%d\n,n);4.其他调试的方法printf在程序中间插入printfint x; int n0; scanf(%d,x); x352; while (x0){ n; x/10; printf(x%d,n%d\n,x,n); } printf(%d\n,n);二十三.do-while循环1.数位数的算法用户输入x初始化n为0xx/10去掉个位n如果x0回到3否则n就是结果int x; int n0; scanf(%d,x); n; x/10; while (x0){ n; x/10; } printf(%d\n,n);如果去掉了n; x/10;则如果x0回到3是在xx/10去掉个位中运行的能不能做完了再看条件2.do-while循环do{循环体语句}while(循环条件)//记住分号在进入循环的时候不做检查而是在执行完一轮循环体的代码之后再来检查循环的条件是否满足如果满足则继续下一轮循环不满足则结束循环3.两种循环左边do-while右边whiledo-while循环在循环体执行结束的时候才来判断条件无论如何循环都会执行至少一遍然后判断条件和while循环相同的是条件满足时执行循环条件不满足时结束循环int x; scanf(%d,x); int n0; do{ x/10; n; }while(x0);//注意分号 printf(%d\n,n);二十四.猜数1.猜数游戏让计算机来想一个数然后让用户来猜用户每输入一个数就告诉它是大了还是小了直到用户猜中为止最后还要告诉用户它猜了多少次因为需要不断重复让用户猜所以需要用到循环在实际写出程序之前我们可以先用文字描述程序的思路核心重点是循环的条件人们往往会考虑循环终止的条件思路计算机随机想一个数记在变量number里一个负责计次数的变量count初始化为0让用户输入一个数字acount递增加一判断a和number的大小关系如果a大就输出大如果a小就输出小如果a和number是不相等的无论大还是小程序回到第3步否则程序输出猜中和次数然后结束循环的条件是a和number不相等srand(time(0)); int number rand()%1001; 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.%100x%n的结果是[0,n-1]的一个整数srand(time(0)); int a rand(); a1234; printf(%d\n, a%100);结果是34这样得到一个获得100内随机数的方法7次为什么可以猜出来每次一半一半猜ovo二十五.算平均数1.算平均数让用户输入一系列的正整数最后输入-1为止表示输入结束然后程序计算出这些数字的平均数输出输入的数字的个数和平均数变量-算法-流程图-程序2.变量一个可以记录整数的变量平均数计算每读到一个数加到累加的变量中当全部数据读完再拿这个变量/读到的个数所以还需要两个变量3.算法sum累加的变量和count个数初始化0scanf读入number如果number-1则将number加入sumcount1再回去如果number1则计算并输出sum/count用浮点数因为真正结果可能带小数点4.流程图5.代码int number; int sum; int count; do{ scanf(%d,number); if(number!-1){ sumnumber; 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){ sumnumber; 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得到7int x; //scanf(%d,x); x12345; int digit; int ret0; while(x0){ digitx%10; //printf(%d\n,digit); retret*10digit; printf(x%d,digit%d,ret%d\n,x,digit,ret); x/10; } printf(%d,ret);得到007int x; //scanf(%d,x); x700; int digit; int ret0; while(x0){ digitx%10; printf(%d,digit); retret*10digit; //printf(x%d,digit%d,ret%d\n,x,digit,ret); x/10; } //printf(%d,ret);