while循环和do循环、缓冲区、一维数组
缓冲区
输入缓冲区
从键盘得到数据的时候用户输入的数据首先进入输入缓冲区,然后程序从输入缓冲区里获得数字,先进入输入缓冲区的数据必须先处理(类似排队),如果先进入输入缓冲区的数据无法处理,程序就得不到后进入输入缓冲区的数据。使用以下两条固定语句可以删除输入缓冲区里的无效数据:
scanf("%*[^\n]"); //删除输入缓冲区里第一个'\n'符前面的所有内容
scanf("%*c"); //删除输入缓冲区里第一个字符
输出缓冲区
printf标准函数把要显示的内容放在输出缓冲区里,计算机在合适的时候把输出缓冲区里的内容显示在屏幕上,以下四种情况下输出缓冲区里的内容会显示在屏幕上:
1.如果输出缓冲区里包含换行字符则换行字符前面的部分会显示在屏幕上
2.如果程序结束了则它放在输出缓冲区里的内容会显示在屏幕上
3.如果输出缓冲区被充满了则它里面的内容会显示在屏幕上
4.在程序里使用一条固定语句 fflush(stdout);可以强制把输出缓冲区里的内容显示在屏幕上,(scanf函数也有这样的作用)。
数组
数组可以用来代表内存里一组连续的同类型的存储区,这些存储区叫做数组的元素,数组也需要先声明然后才能使用,声明数组的时候除了需要提供类型名称和数组名称以外还需要提供一个整数表示数组里的存储区个数。
数组一旦存在它里面包含的存储区个数就不可以改变了,数组通常不可以作为整体使用,一般一次只使用其中的某个存储区,数组里每个存储区的编号不同,这个编号叫做数组的下标,数组里第一个存储区的下标是0,向后依次递增,最大下标是存储区个数减一,超过范围的下标不可以使用(类似闯红灯)。
数组名称和下标一起可以用来表示数组里的存储区,可以在for循环里依次处理数组里的所有存储区 ,这个循环的循环变量应该依次代表数组里的所有有效下标,初始化数组的时候可以提供多个数据,他们应该写在一对大括号中间,相邻初始化数据之间用括号分开,初始化数组的时候如果初始化数据的个数比存储区的个数多就把多余的初始化数据忽略。
初始化数组的时候如果初始化数据的个数比存储区的个数少就把后面的存储区初始化成0,初始化数组的时候如果初始化数据的个数和数组里存储区的个数一样多就可以省略数组声明里的存储区个数。
练习:编写程序从键盘得到多个数字(数字个数不超过5个,由用户实现给定),把这些数字按照倒序显示在屏幕上,然后计算这些数字的和并把结果显示在屏幕上。
练习:编写程序得到一张彩票(彩票由7个1到36之间的整数构成),然后把彩票里的所有数字显示在屏幕上。
数组名称不可以代表存储区,数组名称可以用来代表第一个存储区的地址,数组名称不可以被赋值,可以对数组名称进行sizeof计算,结果是数组里所有存储区的总大小。C99规范里允许使用变长数组,声明变长数组的时候使用变量表示数组里的存储区个数。
变长数组
如果多次运行这个程序则每次变长数组里包含的存储区个数都可能不同。在某一次运行程序的过程中变长数组里包含的存储区个数不会改变,变长数组不可以初始化。
一维数组
声明一维数组时只需要用一个整数表示数组里的存储区个数
多维数组
多维数组不仅可以表示多个存储区,还可以对他们进行分组(分组可以多次进行)。
二维数组
二维数组是最常见的多维数组,他只能表示存储区的一次分组情况,声明二维数组的时候需要提供两个整数,第一个整数表示分组个数,第二个整数表示分组里的存储区个数。二维数组通常也不能作为整体 使用,一般一次只使用其中某个存储区,表示二维数组里存储区的时候需要提供两个下标,前一个下标表示分组编号(组下标),后一个下标表示分组里的存储区编号(组内下标),组下标的有效范围从0开始到分组个数减一为止;组内下标的有效范围从0开始到分组里存储区个数减一为止。
可以把二维数组当作一维数组进行初始化,也可以在初始化二维数组的时候对初始化数据进行分组,每组初始化数据用来初始化一组存储区。如果可以根据初始化数据个数计算出分组个数就可以省略二维数组声明里的分组个数。
点击查看代码
/*
*
*
*输入缓冲区管理
*
*
* */
#if 0
#include<stdio.h>
int main (){
int num = 0;
printf("请输入一个数字:\n");
scanf("%d",&num);
scanf("%*[^\n]");
scanf("%*c");
printf("num=%d\n",num);
printf("请输入一个数字:\n");
scanf("%d",&num);
printf("num=%d\n",num);
return 0;
}
#elif 0
/*
*
*输出缓冲区
*
*
* */
#include<stdio.h>
int main (){
printf("1");
fflush(stdout);
while (1){
}
return 0;
}
#elif 0
/*
*
*数组演示
*
* */
#include<stdio.h>
int main (){
int arr[5]; //数组声明语句
int num = 0;
arr[2] = 10;
for (num = 0;num <= 4;num ++){
arr[num] = num;
}
for (num = 4;num >= 0;num --){
printf(" %d ",arr[num]);
}
printf("\n");
return 0;
}
#elif 0
/*
*
*数组练习
*
*
* */
#include<stdio.h>
int main (){
int arr[5] = {0};
int qty = 0,num = 0,sum = 0; //用户输入的数字个数qty <5
printf("请输入数字个数:\n");
scanf("%d",&qty);
for (num = 4;num >= 0;num--){
printf("请输入一个数字:\n");
scanf("%d",&arr[num]);
if (num == 5 - qty){
//检查数组是否被填满
break;
}
}
for (num = 5 - qty;num <= 4;num++){
printf("%d",arr[num]); //倒序显示用户输入的数字
}
printf("\n");
for (num = 5 - qty;num <= 4;num++){
sum += arr[num];
}
printf("求和结果是: %d \n",sum);
return 0;
}
#elif 0
/*
*
*得到7个1到36之间的随机数
*将数字显示出来
*
* */
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main (){
int num = 0,tmp = 0,cnt = 0,num1 = 0; //cnt 用于记录已经得到有效数字
int arr[7] = {0},arr1[7] = {0};
srand(time(0));
/*for (num = 0;num <= 6;num++){
arr[num] = rand() % 36 + 1;
}//含有重复的数字
*/
do {
tmp = rand() % 36 + 1;
for (num = 0;num <= cnt - 1;num++){ //把新数字和以前得到的所有数字依次作对比
if (tmp == arr[num]){
break;
}
}
if (num == cnt){
arr[cnt] = tmp;
cnt++;
}
}while(cnt < 7);
for (num = 0;num <= 6;num++){
printf(" %d",arr[num]);
}
printf("\n");
for (num = 0;num <= 6;num++){
printf("请输入一个数字:\n");
scanf("%d",&arr1[num]);
}
cnt = 0;
for (num = 0;num <= 6;num++){
for (num1 = 0;num1 <= 6;num1++){
if (arr[num] == arr1[num1]){
cnt++;
break;
}
}
}
printf("买对的数字个数%d\n",cnt);
return 0;
}
#elif 0
#include<stdio.h>
int main (){
int arr[5] = {0};
printf("arr是%p\n",arr);
printf("arr[0]是%p\n",&arr[0]);
printf("sizeof(arr)=%ld\n",sizeof(arr));
return 0;
}
#elif 0
#include<stdio.h>
int main (){
int size = 0;
printf("请输入一个数字:");
scanf("%d",&size);
int arr[size]; //变长数组
printf("sizeof(arr)=%ld\n",sizeof(arr));
return 0;
}
#elif 1
/*
*
*
*二维数组
*
* */
#include<stdio.h>
int main (){
int arr[3][2],cnt = 0;
// arr[1][0] = 0;
int row = 0, col = 0;
for (row = 0;row <= 2;row++){
for (col = 0;col <= 1;col++){
arr[row][col] = cnt;
cnt++;
}
}
for (row = 0;row <= 2;row++){
for (col = 0;col <= 1;col++){
printf(" %d ",arr[row][col]);
}
printf("\n");
}
return 0;
}
#endif
while循环和do循环、缓冲区、一维数组的更多相关文章
- Java基础学习(一) -- Java环境搭建、数据类型、分支循环等控制结构、简单一维数组详解
一:java概述: 1982年,SUN公司诞生于美国斯坦福大学校园,并于1986年上市,在NASDAQ(纳斯达克:是全美证券商协会自动报价系统)的标识为SUNW,2007年改为JAVA. 2009年4 ...
- java 基础 04 循环结构 一维数组
内容: (1)循环结构 (2)一维数组 1.循环结构 1.1for循环 (1)语法格式 for(初始化表达式1;条件表达式2;修改初始化表达式3){ 循环体; } (2)执行流程 执行初始化表达式 = ...
- 【php】实现多个一维数组转换成二维循环数组
1.目的:将下面类型数组转换成模板循环打印二维数组 数组库一维数组: 模板要求循环二维数组: 2.代码: header("Content-type: text/html; charset=u ...
- js循环一维数组按指定长度截取为二维数组
//随便创建一个数组 let data = "abcdefghijklmnopkrstuvw12322999".split(""); //总数组 let pro ...
- 059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环
059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环 本文知识点:增强型for循环 增强型for循环格式 案例练习增强型for循环 数组名字 ...
- 学JAVA第九天,for循环算质数及for遍历数组的方法。
昨天终于收到了评论,老开心了!!! 算质数之前是我最怕的一件事,以前上学不好好学,之前学C#的时候也没好好研究, 直到今天老师逼我要用JAVA算质数,硬着头皮琢磨老半天才琢磨透,现在看来也挺简单的. ...
- 410 for 循环 运算 改变循环的控制流 死循环 遍历数组 定义方法 有名函数匿名函数 定义函数的方法取值 date math 局部变量 函数 局部与全局变量 次幂/随机数/取绝对值/向上取整/平方根
for(1.表达式1;2.表达式2;3.表达式3){ 4.循环体语句; } 先执行1 ,在执行2, 表达式, 如果2结果为false,退出循环 如果2是true 执行4 在执行3 执行2 举例打印1- ...
- js循环处理后台返回的json数组
<script type="text/javascript"> function gongdan_search(elm){ var dangqian_value=$(e ...
- 创建一个长度是5的数组,并填充随机数。使用for循环或者while循环,对这个数组实现反转效果
package day01; import java.util.Random; /** * 首先创建一个长度是5的数组,并填充随机数.使用for循环或者while循环,对这个数组实现反转效果 * @a ...
- js循环判断创建新对象放数组中
原效果 之后效果: <!doctype html> <html lang="en"> <head> <meta charset=" ...
随机推荐
- Ubuntu18.04系统下 临时使用 socks5代理apt-get的方法
参考: https://www.cnblogs.com/iwetuan/p/13567810.html ------------------------------------------------ ...
- DolphinScheduler分布式集群部署指南(小白版)
官方文档地址:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 DolphinScheduler简介 摘自官网:Apache DolphinSc ...
- 零基础学习人工智能—Python—Pytorch学习(三)
前言 这篇文章主要两个内容. 一,把上一篇关于requires_grad的内容补充一下. 二,介绍一下线性回归. 关闭张量计算 关闭张量计算.这个相对简单,阅读下面代码即可. print(" ...
- Java核心编程-第一卷
不要在程序中使用char类型 boolean: 两个值 true false 逻辑判断 整形布尔之间不能转换
- 使用 preloadComponents 进行组件预加载
title: 使用 preloadComponents 进行组件预加载 date: 2024/8/18 updated: 2024/8/18 author: cmdragon excerpt: 摘要: ...
- 基于surging的产品项目-木舟开源了!
一 . 概述 因为前段时间电脑坏了,导致代码遗失,踌躇满志马上上线的平台产品付之东流,现在熬夜在写代码希望能尽快推出企业正常使用的平台产品,而这次把代码开源,一是让大家对surging 使用有个深入的 ...
- Sql语句的两表联合查询
string sql = "select mID,mName,mSex,mAge,(select fzName from TxlFenZu where ID=mFenZu) as mFenZ ...
- freertos学习(九)软件定时器
软件定时器 软件定时器是freeRTOS通过一个硬件定时器,实现的定时器.可以实现不同时长的多个定时任务 不从中断上下文中执行定时器回调函数(不消耗任何处理时间) 实现流程 设置软件定时器,推入定时器 ...
- 全网最适合入门的面向对象编程教程:43 Python 常用复合数据类型-扩展内置数据类型
全网最适合入门的面向对象编程教程:43 Python 常用复合数据类型-扩展内置数据类型 摘要: 在 Python 中,内置数据类型(如列表.字典.集合等)非常强大,但在某些情况下,可能需要扩展这些数 ...
- 【YashanDB知识库】汇聚库23.1环境发生coredump
[标题]汇聚库23.1环境发生coredump [问题分类]数据库错误 [关键词]YashanDB, 汇聚库, coredump [问题描述]在23.1.1.200版本数据库环境创建dblink.视图 ...