标题: C语言学习中遇到很多问题如图(做硬件的 刚学) [打印本页]

作者: QWE4562012    时间: 2020-7-21 16:38
标题: C语言学习中遇到很多问题如图(做硬件的 刚学)
#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 (158.08 KB, 下载次数: 53)

51hei图片20200721151721.png

51hei图片20200721153445.png (97.78 KB, 下载次数: 73)

51hei图片20200721153445.png

51hei图片20200721155238.png (102.98 KB, 下载次数: 60)

51hei图片20200721155238.png

作者: xxpp2011    时间: 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表示十进制整数的形式输出,实际输出的是后面对应位置的变量的数值,根据前面的运算得到结果
作者: QWE4562012    时间: 2020-7-21 17:50
xxpp2011 发表于 2020-7-21 17:45
图1:
1、赋值语句,从右往左运算
2、没有输出,if...eise if...else是条件选择语句,满足条件则执行下面 ...

printf后面括号里面怎么有那么多变量值打印
作者: QWE4562012    时间: 2020-7-21 17:51
xxpp2011 发表于 2020-7-21 17:45
图1:
1、赋值语句,从右往左运算
2、没有输出,if...eise if...else是条件选择语句,满足条件则执行下面 ...

还有那个自加1是为了干嘛?计算输入内容的个数?
作者: xxpp2011    时间: 2020-7-21 17:56
图2:
1、定义变量不一定要赋初值,可以在后面需要的时候赋值,定义变量时会分配对应长度的寄存器,初始值通常为不确定值(有的初值为0)
2、&&为与,选择语句中两个条件&&并列时需要都满足才执行下面的语句,运算符有>=和<=和=,没有=>或=<
3、和经验+3一样没什么目的,只是为了让你算

图3:
printf语句“”里面的其他字符按原样输出,%d替换成以十进制整数输出的对应变量数值
作者: QWE4562012    时间: 2020-7-21 18:30
xxpp2011 发表于 2020-7-21 17:56
图2:
1、定义变量不一定要赋初值,可以在后面需要的时候赋值,定义变量时会分配对应长度的寄存器,初始值 ...

那&和&&在逻辑上有何不一样?
作者: QWE4562012    时间: 2020-7-21 18:33
xxpp2011 发表于 2020-7-21 17:56
图2:
1、定义变量不一定要赋初值,可以在后面需要的时候赋值,定义变量时会分配对应长度的寄存器,初始值 ...

不是有三个prinft吗?分别输出些什么东西?
怎么后面那个prinft括号里面有那么多变量
作者: xxpp2011    时间: 2020-7-21 18:45
QWE4562012 发表于 2020-7-21 18:33
不是有三个prinft吗?分别输出些什么东西?
怎么后面那个prinft括号里面有那么多变量

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


作者: QWE4562012    时间: 2020-7-22 08:40
xxpp2011 发表于 2020-7-21 17:45
图1:
1、赋值语句,从右往左运算
2、没有输出,if...eise if...else是条件选择语句,满足条件则执行下面 ...

非常感谢,我要好好看看
作者: QWE4562012    时间: 2020-7-22 08:43
xxpp2011 发表于 2020-7-21 18:45
1、输出什么你的图例已经给答案了
2、怎么有那么多变量值打印?==>想输出一百个变量都可以,没有为什么 ...

在看C程序设计语言这本书。。这个就是打基础的  第三个prinft怎么一来就一个逗号?为什么第二个prinft一来没有逗号
作者: SKYLAR123    时间: 2020-7-22 08:59
想让第二prinft与第三prinft在同一行显示,又想区分开,就用了一个逗号,你运行一下不就知道啦
作者: SKYLAR123    时间: 2020-7-22 09:01
'0'是字符不是数0对应码表可以查询,楼主你好好补补C的基础知识
作者: QWE4562012    时间: 2020-7-22 09:10
xxpp2011 发表于 2020-7-21 18:45
1、输出什么你的图例已经给答案了
2、怎么有那么多变量值打印?==>想输出一百个变量都可以,没有为什么 ...

printf(", white space = %d, other = %d\n",------------------------这里怎么一来有逗号?而前面没有参数
作者: QWE4562012    时间: 2020-7-22 09:11
SKYLAR123 发表于 2020-7-22 08:59
想让第二prinft与第三prinft在同一行显示,又想区分开,就用了一个逗号,你运行一下不就知道啦

我用的是keil  学的是单片机C语言
作者: QWE4562012    时间: 2020-7-22 09:44
SKYLAR123 发表于 2020-7-22 09:01
'0'是字符不是数0对应码表可以查询,楼主你好好补补C的基础知识

现在就是在学基础啊  
作者: QWE4562012    时间: 2020-7-22 09:50
SKYLAR123 发表于 2020-7-22 08:59
想让第二prinft与第三prinft在同一行显示,又想区分开,就用了一个逗号,你运行一下不就知道啦

同一行显示?那为什么第二个prinft()括号里面第一个不是逗号

51hei图片20200722094734.jpg (26.38 KB, 下载次数: 61)

51hei图片20200722094734.jpg

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

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

作者: SKYLAR123    时间: 2020-7-22 10:51
QWE4562012 发表于 2020-7-22 09:50
同一行显示?那为什么第二个prinft()括号里面第一个不是逗号

就是这种运行,然后你就可以去掉逗号试试效果,
%d后面加上\t或者\n
这种程序各种效果多尝试就理解了;你要补充的C的基础知识例如字符、进制、printf()的输出格式,通常这个是在一本书的最前面,再好好看看吧
作者: QWE4562012    时间: 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?输出之间有没有逗号或者空格?
作者: SKYLAR123    时间: 2020-7-22 11:28
QWE4562012 发表于 2020-7-22 11:11
1.没有双引号 输出的是文本?不是 字符本身?

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

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

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1