汉扬编程 编程大纲 (c语言100道经典题)C语言入门经典例题:求100~999的水仙花数

(c语言100道经典题)C语言入门经典例题:求100~999的水仙花数

(c语言100道经典题)C语言入门经典例题:求100~999的水仙花数

(c语言100道经典题)C语言入门经典例题:求100~999的水仙花数

​C和C++的区别:

(c语言100道经典题)C语言入门经典例题:求100~999的水仙花数

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

(c语言100道经典题)C语言入门经典例题:求100~999的水仙花数

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。

所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“

设计这个概念已经被融入到C++之中

”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

​例如:

153=1*1*1+5*5*5+3*3*3 153为三位数,它的每个数字的三次方之和等于153。

要求:用C语言实现求出100~999之间的所有水仙花数。

要验证一个三位数是不是水仙花数很简单,只要把它的三个数字的三次幂加起来,看看是否等于它本身即可。所以问题的关键是如何用C语言得到一个三位数的三个数字。

我们知道任意一个三位数,都等于它的百位数乘以100,加上它的十位数乘以10,再加上它的个位数乘以1 。比如:567=5*100+6*10+7*1 。

根据这一特性,我们可以得出,一个三位数的百位数就等于该数除以100的整数部分(567除以100的整数部分为5,即它的百位数是5),而十位数等于该数减去百位数乘以100再除以10的整数部分((567-5*100)再除以10的整数部分等于6,即该数十位数是6),而个位数就等于该数减去百位数乘以100,再减去十位数乘以10(567-5*100-6*10=7,个位数为7)。

代码中关键部分做了详细的注释,代码中的i++等价于i=i+1。编写在visualstudio中的运行结果如下:

我们可以得知,100~999之间的水仙花数为:153,370,371,407

如果要求1000~9999之间的水仙花数呢?原理是一样的,依次得到四位数的千位数、百位数、十位数和个位数即可。自己动手试一试吧!

C语言新手的100个报错解法 已更新11个错误

学习目标收藏文章报错可以过来查[更新数据]此文将会持续更新,收录错误信息,若本文没有收录记得联系我~ CSDN 1_bit持续更新中…[发布日期:2020年11月16日 14:55:00]更新:暂无

C语言教程《零基础看得懂的C语言入门教程》——(一)脱离学习误区

《零基础看得懂的C语言入门教程》——(二)简单带你了解流程

《零基础看得懂的C语言入门教程》——(三)轻松悟第一个程序

《零基础看得懂的C语言入门教程》——(四)基本数据类型变量

《零基础看得懂的C语言入门教程》——(五)变量、常量及运算

《零基础看得懂的C语言入门教程》——(六)轻松了解逻辑运算

《零基础看得懂的C语言入门教程》——(七)循环分分钟上手

《零基础看得懂的C语言入门教程》——(八)基本数组真简单

《零基础看得懂的C语言入门教程》——(九)数组与循环嵌套

《零基础看得懂的C语言入门教程》——(十)指针原来是这样

《零基础看得懂的C语言入门教程》—(十一)自定义函数很简单

《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事

最近发了C语言的基础教程,得了很多C语言初学者的支持,并且向我询问了很多问题;通过了解大多数的C语言新手的问题得知,大多数的同学都是犯的类似的错误,在此我编写一篇文,大家若出现问题,查看编辑器的提示报错信息,复制关键字后,在该文章搜搜内容,即可查看,若没有查询到可以联系我,我将在此文收录该错误~ 多谢支持~

错误及解决方案如下错误示例1 报错索引:expected ‘)’ before ‘;’ token简介: 第一个C语言程序“HelloWorld”,在一部分新手学习的时候,经常会出现中英文标点混打情况,在绝大多数编程中,标点符号皆是英文的标点符号。错误示例:

#include<stdio.h>int main(){ printf("HelloWorld");}说明: 以上示例,在 printf("HelloWorld")后的反括号错将英文的反括号")“打成了中文的”)"。新手不注意观察将会极难找到这个错误。

编辑器典型报错提示:expected ')' before ';' token报错解析: 由于反括号")“错误打成了”)",导致编译器在解析代码时,发现成对的圆括号少了一半。编译器这时是懵的,所以通过编辑器问你expected ')' before ';' token;这句报错表示“我需要在在分号前的括号你把他丢哪去了?我找不到了,你要还给我”。其实我们通过仔细观察中文的标点要比英文的标点大一点。编写建议: 编写代码时最好是成对输入括号,不要输入一个括号后接着输入",然后又继续输入HelloWorld;推荐的方式是先输入成对的符号,例如先输入一对英文括号(),随后在一对括号中输入英文的双引号"",接着再往双引号内输入HelloWorld,这时就保证了标点符号的统一。正确代码:

#include<stdio.h>int main(){ printf("HelloWorld");}错误示例2 报错索引: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘<’ token简介: 依旧使用第一个C语言程序“HelloWorld”,在一部分新手学习的时候,经常会出现在头文件前少打#号的情况;这时候去搜索报错,问题依旧找不到解决办法。错误示例:

include<stdio.h>int main(){ printf("HelloWorld");}说明: 以上示例,在 include<stdio.h>前,少打了#号,由于可能会与某一些语言的“#”号注释记混,就导致了该问题。

编辑器典型报错提示:expected '=', ',', ';', 'asm' or '__attribute__' before '<' token报错解析: 由于少打了#号,导致编译器在解析代码时,“胡言乱语”,因为头文件声明并没有太多的内容给予编译器提示,编译器只知道,你在<号前少了什么东西,反正就是错了,编译器自己也很懵。所以通过编辑器问你expected '=', ',', ';', 'asm' or '__attribute__' before '<' token;这句报错表示“我现在啥都不知道,我只懂你在这个地方搞错了。因为我被你吓到了,我自己都差点胡言乱语”。这个时候可能你上网搜都搜不到对应的解决办法,那是因为这个错,可能错的不错(有点尴尬)。编写建议: 头文件就记住#开头就ok。正确代码:

#include<stdio.h>int main(){ printf("HelloWorld");}错误示例3 警告索引: incompatible implicit declaration of built-in function ‘printf’简介: 依旧使用第一个C语言程序“HelloWorld”,在一部分新手学习的时候,经常会漏掉头文件的输入,当然这个问题在某些情况下不会报错,可能会提示一个警告。错误示例:

int main(){ printf("HelloWorld");}说明: 以上示例,没有输入头文件 #include<stdio.h>前。

编辑器典型报错提示:[Warning] incompatible implicit declaration of built-in function 'printf'报错解析: 由于少打了头文件引用,导致编译器在解析代码时给你了点人情,毕竟头文件知道printf这些熟人是哪个地方的,所以就免为其难的帮了你一下。编写建议: 头文件是代码中使用系统函数的支撑,你需要使用什么函数必须告诉编译器这些东西在哪,如果编译器不熟,它就无法帮你去找到这些东西。正确代码:

#include<stdio.h>int main(){ printf("HelloWorld");}错误示例4 报错索引: undeclared (first use in this function)简介: 在编写C语言时,由于C语言是区分大小写的,若没达到设定的标记一致,则会出现错误;例如a与A是两个东西,Age和age也是两个东西。所以在进行程序编写时,一定要注意标记的统一。错误示例:

#include<stdio.h>int main(){ int a=0; printf("%d",A);}说明: 以上示例,定义了一个整型变量a,并且初始化值等于0;但是在输出变量a的时候错误的将a写成了A,导致错误的出现。

编辑器典型报错提示:[Error] 'A' undeclared (first use in this function)报错解析: 由于将a打成了大写A,编译器在进行编译的时候,编译器发现这个A它是第一次遇见,并不知道是啥,所以就将这个信息告诉了你。编写建议: 这种情况无法避免,通过报错提示是较为容易的解决方式,并且变量命名最好有“意义”,可以表达当前变量的含义。正确代码:

#include<stdio.h>int main(){ int a=0; printf("%d",a);}错误示例5 报错索引: expected declaration or statement at end of input简介: 在编写C语言时,由于C语言是有区块、有层级的,并且内容需要通过一定的符号表示当前层级或块的开始或结束,或者理解为有始有终。若在编写缺少开头标记或结束标记将会产生错误;较为容易出现的错误是结束标记的缺少。错误示例:

#include<stdio.h>int main(){ 说明: 以上示例,使用helloworld为示例,在helloWorld程序结束后并没有使用花括号进行结尾说明,导致编译器报错。

编辑器典型报错提示:expected declaration or statement at end of input报错解析: 由于尾部没有添加结束符,编译器在进行编译的时候,发现尾部没有添加标记,所以就将这个信息告诉了你。那为什么编译器不自动帮你加上去?那是因为编译器编译的时候无法判断你是要做什么,不能从主观角度考虑你编写程序产生的错误,所以报错后只能自己修改。编写建议: 编写代码时最好是成对输入括号,不要输入一个括号或后接着输入,推荐的方式是先输入成对的符号,例如先输入一对英文括号()或{},随后在在其中编写代码内容。正确代码:

#include<stdio.h>int main(){ printf("HelloWorld");}错误示例6 报错索引: 无报错简介: 在编写C语言时,使用scanf接收值一定要注意取地址,变量取地址使用取地址符“&”。错误示例:

#include<stdio.h>int main(){ int a=0; scanf("%d",a);}说明: 以上示例, 在将至存入变量a时由于没有加取地址,这时编译器不会报错,因为这个地方是地址,变量a为0也可以作为地址,但是会发生不可估计的后果如程序运行时程序崩溃。

编辑器典型报错提示:无报错,编译顺利报错解析: 无报错,但是程序运行时将会出现程序崩溃等情况”。编写建议: 熟记语法规则,这是对整体编写规则的不了解。正确代码:

#include<stdio.h>int main(){ int a=0; scanf("%d",&a);}错误示例7 报错索引: 无报错简介: 在编写C语言时,使用scanf接收多个值,在scanf中最好使用显式来表示%d或者其它格式说明符的间隔,若是%d%d默认使用空格隔开。示例:

#include<stdio.h>int main(){ int a=0; int b=0; scanf("%d%d",&a,&b); printf("%d,%d",a,b);}说明: 以上示例, 输入值时,需要输入一个值使用空格后再输入一个值再按enter键确认。或者输入一个值后按下enter,随后再输入一个值,此时将会给两个变量赋值。

编辑器典型报错提示:无报错,编译顺利报错解析: 无报错,但是程序运行时自己不清楚如何赋值将会导致某一值赋值失败”。编写建议: 推荐使用scanf("%d,%d",&a,&b);或其他字符间隔。代码:

#include<stdio.h>int main(){ int a=0; int b=0; scanf("%d %d",&a,&b); printf("%d,%d",a,b);}错误示例8 报错索引: 无报错简介: 在编写C语言时,使用两个等于号表示判断等于号左右两边的值是否相等;使用一个等于号表示将等于号右边的值赋值给左边。错误示例:

#include<stdio.h>int main(){ int a=0; if(a=1){ printf("a等于1"); }}说明: 以上程序if判断中将会一直判断正确,因为并没有使用两个等于号判断,一个等于号是赋值,这个结赋值操作是正确的,将会为Ture。

编辑器典型报错提示:无报错,编译顺利报错解析: 无报错,if永远判断正确”。编写建议: 熟悉语法规则。代码:

#include<stdio.h>int main(){ int a=0; if(a==1){ printf("a等于1"); }}错误示例9 报错索引: 无报错简介: 在编写C语言时,使用switch若只想进行常规判断,则必须在每一个case块内,代码结束的末端添加break表示跳出;若未添加,则会导致错误程序一直运行到下一个case块内代码,直到结束或遇见break为止。错误示例:

#include<stdio.h>int main(){ int a=0; switch(a){ case 0: printf("等于0\\n"); case 1: printf("等于1\\n"); break; case 2: printf("等于2\\n"); default: printf("未知\\n"); } }说明: 以上进行case判断后将会运行 printf("等于0\\n");以及printf("等于1\\n");代码。

编辑器典型报错提示:无报错,编译顺利报错解析: case判断正确后将会一直运行之后未加break的case块代码。编写建议: 熟悉语法规则。代码:

#include<stdio.h>int main(){ int a=0; switch(a){ case 0: printf("等于0\\n"); break; case 1: printf("等于1\\n"); break; case 2: printf("等于2\\n"); break; default: printf("未知\\n"); } }错误示例10 报错索引: called object ‘printf’ is not a function or function pointer简介: 在编写C语言时,勿将系统函数或其它有含义的标记作为变量或其它使用。错误示例:

#include<stdio.h>int main(){ int printf=0; printf("%d",printf);}**说明:**使用了输出函数printf作为变量,这是不允许的。

编辑器典型报错提示:called object 'printf' is not a function or function pointer报错解析: 编译器告诉你,你这个东西用错了,在这里不是这样用的,反正编译器自己就是不给你用。就像你进一个学校,校长叫小明,你说你也叫小明为什么不能进。编写建议: 熟悉变量命名规则。代码:

#include<stdio.h>int main(){ int printf_v=0; printf("%d",printf_v);}错误示例11 报错索引: 无报错简介: 在编写C语言时,勿将越界使用数组。错误示例:

#include<stdio.h>int main(){ int a[2]={0,1}; printf("%d",a[3]);}**说明:**使用了未确定的区域值,将会造成后果不可控,输出的值也是随机的。

编辑器典型报错提示:无报错解析: 无。编写建议: 检查数组,编写数组使用函数,检查长度再赋值。代码:

#include<stdio.h>int main(){ int a[2]={0,1}; printf("%d",a[1]);}

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/7134.html

没有电脑可以学习c语言吗?

C语言中,参数写成a-1与–a有什么区别?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部