找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1952|回复: 20
收起左侧

C语言学习中遇到很多问题如图(做硬件的 刚学)

[复制链接]
ID:668004 发表于 2020-7-21 16:38 | 显示全部楼层 |阅读模式
#include <stdio.h>
/* count digits, white space, others */
main()
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[ i] = 0;[ i]
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[ i]);[ i]
printf(", white space = %d, other = %d\n",
nwhite, nother);
}
当把这段程序本身作为输入时,输出结果为:
digits = 9 3 0 0 0 0 0 0 0 1, white space = 123, other = 345


学习中遇到很多问题如图(做硬件的  刚学C)
51hei图片20200721151721.png
51hei图片20200721153445.png
51hei图片20200721155238.png
回复

使用道具 举报

ID:452950 发表于 2020-7-21 17:45 | 显示全部楼层
图1:
1、赋值语句,从右往左运算
2、没有输出,if...eise if...else是条件选择语句,满足条件则执行下面{}中的语句,只有一句可以省略大括号。||是或,几个条件||并列时满足一个就可以
3、++i;单独一行时与i=i+1;i++差不多,在有些情况下不一样,如for(i=0;i<5;i++){;}是先循环一次再加一,for(i=0;i<5;++i){;}是先加一,再进行循环
4、printf是输出语句,%d是占位符, %是引导符,d表示十进制整数的形式输出,实际输出的是后面对应位置的变量的数值,根据前面的运算得到结果
回复

使用道具 举报

ID:668004 发表于 2020-7-21 17:50 | 显示全部楼层
xxpp2011 发表于 2020-7-21 17:45
图1:
1、赋值语句,从右往左运算
2、没有输出,if...eise if...else是条件选择语句,满足条件则执行下面 ...

printf后面括号里面怎么有那么多变量值打印
回复

使用道具 举报

ID:668004 发表于 2020-7-21 17:51 | 显示全部楼层
xxpp2011 发表于 2020-7-21 17:45
图1:
1、赋值语句,从右往左运算
2、没有输出,if...eise if...else是条件选择语句,满足条件则执行下面 ...

还有那个自加1是为了干嘛?计算输入内容的个数?
回复

使用道具 举报

ID:452950 发表于 2020-7-21 17:56 | 显示全部楼层
图2:
1、定义变量不一定要赋初值,可以在后面需要的时候赋值,定义变量时会分配对应长度的寄存器,初始值通常为不确定值(有的初值为0)
2、&&为与,选择语句中两个条件&&并列时需要都满足才执行下面的语句,运算符有>=和<=和=,没有=>或=<
3、和经验+3一样没什么目的,只是为了让你算

图3:
printf语句“”里面的其他字符按原样输出,%d替换成以十进制整数输出的对应变量数值
回复

使用道具 举报

ID:668004 发表于 2020-7-21 18:30 | 显示全部楼层
xxpp2011 发表于 2020-7-21 17:56
图2:
1、定义变量不一定要赋初值,可以在后面需要的时候赋值,定义变量时会分配对应长度的寄存器,初始值 ...

那&和&&在逻辑上有何不一样?
回复

使用道具 举报

ID:668004 发表于 2020-7-21 18:33 | 显示全部楼层
xxpp2011 发表于 2020-7-21 17:56
图2:
1、定义变量不一定要赋初值,可以在后面需要的时候赋值,定义变量时会分配对应长度的寄存器,初始值 ...

不是有三个prinft吗?分别输出些什么东西?
怎么后面那个prinft括号里面有那么多变量
回复

使用道具 举报

ID:452950 发表于 2020-7-21 18:45 | 显示全部楼层
QWE4562012 发表于 2020-7-21 18:33
不是有三个prinft吗?分别输出些什么东西?
怎么后面那个prinft括号里面有那么多变量

1、输出什么你的图例已经给答案了
2、怎么有那么多变量值打印?==>想输出一百个变量都可以,没有为什么,占位符按顺序与后面的变量对应
3、&是两个变量按位相与,&&是两个表达式的真假同时为真则为真
4、基本概念还是要看书的,或者看视频,没有编程基础直接接触例程怎么学

回复

使用道具 举报

ID:668004 发表于 2020-7-22 08:40 | 显示全部楼层
xxpp2011 发表于 2020-7-21 17:45
图1:
1、赋值语句,从右往左运算
2、没有输出,if...eise if...else是条件选择语句,满足条件则执行下面 ...

非常感谢,我要好好看看
回复

使用道具 举报

ID:668004 发表于 2020-7-22 08:43 | 显示全部楼层
xxpp2011 发表于 2020-7-21 18:45
1、输出什么你的图例已经给答案了
2、怎么有那么多变量值打印?==>想输出一百个变量都可以,没有为什么 ...

在看C程序设计语言这本书。。这个就是打基础的  第三个prinft怎么一来就一个逗号?为什么第二个prinft一来没有逗号
回复

使用道具 举报

ID:636538 发表于 2020-7-22 08:59 | 显示全部楼层
想让第二prinft与第三prinft在同一行显示,又想区分开,就用了一个逗号,你运行一下不就知道啦
回复

使用道具 举报

ID:636538 发表于 2020-7-22 09:01 | 显示全部楼层
'0'是字符不是数0对应码表可以查询,楼主你好好补补C的基础知识
回复

使用道具 举报

ID:668004 发表于 2020-7-22 09:10 | 显示全部楼层
xxpp2011 发表于 2020-7-21 18:45
1、输出什么你的图例已经给答案了
2、怎么有那么多变量值打印?==>想输出一百个变量都可以,没有为什么 ...

printf(", white space = %d, other = %d\n",------------------------这里怎么一来有逗号?而前面没有参数
回复

使用道具 举报

ID:668004 发表于 2020-7-22 09:11 | 显示全部楼层
SKYLAR123 发表于 2020-7-22 08:59
想让第二prinft与第三prinft在同一行显示,又想区分开,就用了一个逗号,你运行一下不就知道啦

我用的是keil  学的是单片机C语言
回复

使用道具 举报

ID:668004 发表于 2020-7-22 09:44 | 显示全部楼层
SKYLAR123 发表于 2020-7-22 09:01
'0'是字符不是数0对应码表可以查询,楼主你好好补补C的基础知识

现在就是在学基础啊  
回复

使用道具 举报

ID:668004 发表于 2020-7-22 09:50 | 显示全部楼层
SKYLAR123 发表于 2020-7-22 08:59
想让第二prinft与第三prinft在同一行显示,又想区分开,就用了一个逗号,你运行一下不就知道啦

同一行显示?那为什么第二个prinft()括号里面第一个不是逗号
51hei图片20200722094734.jpg
回复

使用道具 举报

ID:636538 发表于 2020-7-22 10:45 | 显示全部楼层
本帖最后由 SKYLAR123 于 2020-7-22 11:43 编辑
QWE4562012 发表于 2020-7-22 09:50
同一行显示?那为什么第二个prinft()括号里面第一个不是逗号

printf("digits =");输出的是digits
回复

使用道具 举报

ID:636538 发表于 2020-7-22 10:51 | 显示全部楼层
QWE4562012 发表于 2020-7-22 09:50
同一行显示?那为什么第二个prinft()括号里面第一个不是逗号

就是这种运行,然后你就可以去掉逗号试试效果,
%d后面加上\t或者\n
这种程序各种效果多尝试就理解了;你要补充的C的基础知识例如字符、进制、printf()的输出格式,通常这个是在一本书的最前面,再好好看看吧
回复

使用道具 举报

ID:668004 发表于 2020-7-22 11:11 | 显示全部楼层
SKYLAR123 发表于 2020-7-22 10:45
那好好给你解释一下printf("digits =");输出的是digits =
for (i = 0; i < 10; ++i)
                printf(" %d", n ...

1.没有双引号 输出的是文本?不是 字符本身?

2.这个打印函数括号里面是不是有个对应的关系,比如prinft(小红,小黑,小白,100,200,300)
那小红=100,小黑=200,小白=300?输出之间有没有逗号或者空格?
回复

使用道具 举报

ID:636538 发表于 2020-7-22 11:28 | 显示全部楼层
QWE4562012 发表于 2020-7-22 11:11
1.没有双引号 输出的是文本?不是 字符本身?

2.这个打印函数括号里面是不是有个对应的关系,比如prin ...

求你看看书,再问吧,纠结的点没有意义。我想表达就是你想要什么效果就输出什么,双引号内加入逗号,或者空格的目的是什么,就是对应关系,或者表述有问题,是字符,你运行printf,你想要问什么,就去随意运行,自己尝试啊,不行看看书上有什么规定。
向这种看似一顿操作感觉很用功,但是你没有试过就来问,好像有点不好,就像这个逗号问的,你试试不就知道
回复

使用道具 举报

ID:668004 发表于 2020-7-24 08:57 | 显示全部楼层
SKYLAR123 发表于 2020-7-22 11:28
求你看看书,再问吧,纠结的点没有意义。我想表达就是你想要什么效果就输出什么,双引号内加入逗号,或者 ...

我就是在看书啊  经常卡住啊  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表