c语言中如何读取数字_用c语言求n个数的最大值和最小值

c语言中如何读取数字,用c语言求n个数的最大值和最小值?

#include <stdio.h>

#define N 5 /*此处可改输入数字个数,比如5*/

main()

{

int a[N];

int i,max,min;

for(i=0;i<N;i++)

scanf("%d",&a[i]);

max=a[0]; /*假设第一个读入的数就是最大数*/

min=a[0]; /*假设第一个读入的数就是最小数*/

for(i=1;i<N;i++)

{if(a[i]>max) max=a[i];

if(a[i]<min) min=a[i];}

printf("\n最大数是 : %d\n",max);

printf("最小数是 : %d\n",min);

}

智能水表显示c00012是什么原因?

可能是以下两种情况:

1、插卡不灵敏因为智能水表采用插卡的方式读取信息,卡槽会长期暴露在外容易出现异物进入,在插卡时就会出现不灵敏等情况。用户在使用智能水表时要多留意其中是否有异物,如果发现及时清理,保证卡槽的干净。

2、开启水龙头无水流出这种情况有可能是卡内无剩余的水量,及时充值即可。如充值后仍然不出水也有可能是水表进水口前阀未打开,尝试手动将水表前阀打开,如果仍然不出水,那就需要进行详细的检测。

c语言有哪几种循环结构?

使用循环可以多次重复地执行多条语句,这里的“多条语句”称为循环体。在C语言中,可以使用三种循环,分别是:while、do...while和for。还有go to语句也可达到循环目的,但不常用。在这些语句中,循环体被重复执行的次数由循环条件控制,称为控制表达式(controlling expression)。这是一个标量类型的表达式,也就是说,它属于一个算术表达式或指针表达式。如果控制表达式的值不等于 0,循环条件为 true,反之,循环条件为 false。语句 break 和 continue 用于在一次循环还未执行完时,跳转出循环或返回到循环头部。

while 循环

只要控制表达式为 true,while 循环就会反复地执行语句:

while (表达式)语句

while 表达式是顶部驱动(top-driven)的循环:先计算循环条件(也就是控制表达式)。如果为 true,就执行循环体,然后再次计算控制表达式。如果控制表达式为 false,程序跳过循环体,而去执行循环体后面的语句。从语法上讲,循环体只有一条语句组成。如果需要执行多条语句时,可以使用语句块把它们组合在一起。例 1 展示了一个简单的 while 循环,从控制台读入多个浮点数,并把它们累加。例 1 展示了一个简单的 while 循环,从控制台读入多个浮点数,并把它们累加。【例1】一个 while 循环

/* 从键盘输入数字,然后输出它们的平均值

* -------------------------------------- */

#include <stdio.h>

int main()

{

double x = 0.0, sum = 0.0;

int count = 0;

printf( "\t--- Calculate Averages ---\n" );

printf( "\nEnter some numbers:\n"

"(Type a letter to end your input)\n" );

while ( scanf( "%lf", &x ) == 1 )

{

sum += x;

++count;

}

if ( count == 0 )

printf( "No input data!\n" );

else

printf( "The average of your numbers is %.2f\n", sum/count );

return 0;

}

在例 1 中,只要用户输入一个小数,下面的控制表达式即为 true:

scanf( "%lf", &x ) == 1

然而,只要函数 scanf()无法将字符串输入转换成浮点数(例如,当用户键入字母 q 时),则 scanf()返回值 0(如果是遇到输入流的尾端或发生错误时,则返回值 -1,表示 EOF)。这时,循环条件为 false,程序将会跳出循环,继续执行循环体后面的 if 语句。

for 循环

和 while 一样,for 循环也是一个顶部驱动的循环,但是它包含了更多的循环逻辑,如下所示:

for ([表达式1];[表达式2];[表达式3]) 语句

在一个典型的 for 循环中,在循环体顶部,下述三个动作需要执行:(1) 表达式 1:初始化只计算一次。在计算控制表达式之前,先计算一次表达式 1,以进行必要的初始化,后面不再计算它。(2) 表达式 2:控制表达式每轮循环前都要计算控制表达式,以判断是否需要继续本轮循环。当控制表达式的结果为 false,结束循环。(3) 表达式 3:调节器调节器(例如计数器自增)在每轮循环结束后且表达式 2 计算前执行。即,在运行了调节器后,执行表达式 2,以进行判断。例 2 展示了使用一个 for 循环初始化数组内每个元素的过程。【例2】用 for 循环初始化数组

#define ARR_LENGTH 1000

/* ... */

long arr[ARR_LENGTH];

int i;

for ( i = 0; i < ARR_LENGTH; ++i )

arr[i] = 2*i;

for 循环头部中的三个表达式可以省略一个或多个。这意味着 for 循环头部最短的形式是:

for ( ; ; )

如果没有控制表达式,则表示循环条件始终是 true,也就是说,这定义了一个死循环。下面所示的 for 循环,既没有初始化表达式,也没有调节器表达式,它与 while(表达式)语句含义是等效的:

for ( ;表达式; )

事实上,每个 for 循环都可以被改写成 while 循环,反之亦然。例如,例 2 的 for 循环可完全等效为下面的 while 循环:

i = 0; // 初始化计数器

while ( i < ARR_LENGTH ) // 循环条件

{

arr[i] = 2*i;

++i; // 递增计数器

}

一般来说,当循环内有计数器或索引变量需要被初始化,并且在每次循环时需要调整它们的值时,最好使用 for 循环,而不是 while 循环。在ANSI C99中,也可以使用声明来替代表达式1。在这种情况下,被声明变量的作用域被限制在 for 循环范围内。例如:

for ( int i = 0; i < ARR_LENGTH; ++i )

arr[i] = 2*i;

变量 i 被声明在该 for 循环中(与例 2 不同)for 循环结束之后,变量 i 将不会再存在。逗号运算符常常被用在 for 循环头部,以在表达式 1 中实现多个初始化操作,或者在表达式 3 对每个变量做调整操作。例如,函数 strReverse()使用两个索引变量以保存字符串中字符的次序:

void strReverse( char* str)

{

char ch;

for ( size_t i = 0, j = strlen(str)-1; i < j; ++i, --j )

ch = str[i], str[i] = str[j], str[j] = ch;

}

借助于逗号运算符,可以在只允许出现一个表达式的地方,计算多个表达式。

do...while 循环

do...while 循环是一种底部驱动的循环:

do 语句 while (表达式);

在控制表达式被第一次计算之前,循环体语句会首先被执行一次。与 while 和 for 循环不同,do...while 循环会确保循环体语句至少执行一次。如果控制表达式的值为 true,那么另一次循环就会继续;如果是 false,则循环结束。在例 3 中,读入与执行命令的函数至少会被调用一次。当使用者离开菜单系统,函数 getCommand()将返回常量 END 的值。【例3】do···while

// 读入和执行所选的菜单命令

// --------------------------------------------

int getCommand( void );

void performCommand( int cmd );

#define END 0

/* ... */

do

{

int command = getCommand(); // 询问菜单系统

performCommand( command ); // 执行所选的菜单命令

} while ( command != END );

例 4 展示了标准库函数 strcpy()的一个版本,循环体仅为一条简单的语句,而不是一个语句块。因为在循环体执行之后才计算循环条件,所以字符串终止符'\0'也会被复制。【例4】函数 strcpy()使用 do...while

// 将字符串2复制到字符串1

// ----------------------------

char *strcpy( char* restrict s1, const char* restrict s2 )

{

int i = 0;

do

s1[i] = s2[i]; // 循环体:复制每一个字符

while ( s2[i++] != '\0' ); // 如果刚刚复制的是'\0',则结束循环

return s1;

}

为什么很多人觉得C语言只要学会了指针基本上差不多掌握这门语言?

从事嵌入式开发十几年,只要使用的编程语言有三种,C/C++ Java三种,其中C语言使用的时间最长,这门编程语言的最大特别是语法细节简介,但是灵活性非常强,从大的方面看要真正掌握一种编程语言,需要真正的项目实战,只是停留在理论层面上很难认清编程语言背后的本质,记得刚学习C语言阶段,基本上一个多月就把基础语法学习完了,并且做了大量的实习题目,觉得这门编程语言就这么回事了。

于是从学校的图书馆里面借了一本将近1000页的linux内核讲解书籍,开始先从战略上藐视对手,在战术上重视在开始几十页进展的还是比较顺利,始终觉得掌握好了基础的语法,后面的就是变通和灵活运用的问题了,还能变出什么幺蛾子结果,看到后面简直就是在阅读天书了,才知道了自己认识的浅薄,只是掌握点语法皮毛就想着挑大梁这种想法在编程行业显得非常的幼稚,编程行业除了理论之外实战经验显得非常重要。

回到题目中的C语言的核心知识点指针,C语言关键语法点指针,数组,结构体,回调,递归,函数等等,剩下就是这些个概念在项目实战中的应用了,指针对于初学者来讲就是一种双刃剑,如果真的掌握理解了,能在编程中提升非常大的效率,如果没有掌握对于很多初学者来讲就是一种折磨,很多人觉得学不好C语言版本的数据结构,其实很重要的一个障碍就是指针,如果对于指针了解清楚,再去切入数据结构的学习就会显得轻松许多,指针作为C语言里面最重要的语法一点不为过,但是认为掌握了指针C语言就会显得非常肤浅。

任何一种编程语言的背后都是大量的编程模式以及编程的套路,这些只有在真正的项目实战中才能掌握,而且对于一种编程语言越是做的时间长越是觉得自己的肤浅,更加不敢称之为精通,倒是现在很多初生牛犊在简历上写上精通几种编程语言,越是干的时间长越是忌讳提到精通两个字眼,所以讲只是掌握了指针就说掌握一门编程语言的一半显得认识不足,真正掌握编程语言还是靠项目实战,不是所谓几个重点语法这么简单的事情。

学习一种编程语言需要掌握几个重点要素,首先掌握理论基础,世要真正的明白,虽然编程语言是一种实践性的语言,但实践的前提是掌握理论基础,很多人不懂C语言的指针就是因为没有彻底明白指针的含义,只想着快点追赶进度,结果欲速则不达,越是重要的概念越是要彻底掌握明白;第二点就是实战,在掌握理论基础上就是通过项目实战获取经验,纸上谈兵永远也不做不了真正的项目,想尽一切办法去做项目实战,没有别的途径,直面问题的本质,希望能帮到你。

C语言中如何读取文件里的行数?

#include <stdio.h>

int hangshu(char FILE[])//输入工程目录下的文件名,或者其他目录下绝对路径名例如:c:\\1.txt;

{

char c;

int h=0;

FILE *fp;

fp=fopen(file,"r");

if(fp==NULL)

return -1;//表示文件打开错误

while((c=fgetc(fp))!=EOF)

{

if(c=='\n')

h++;

else

{

c=fgetc(fp);//这是处理最后一行可能没有换行标志,但是确文件结束。

if(c==EOF)

{

h++;

break;

}

}

}

return h;

}

int main()

{

int hs=hangshu("c:\\1.txt");//这里说明你要打开的文件。这个是c盘根目录下文件

int hst=hangshu("1.txt");//工程目录下的文件。

printf("行数:%d\n",hs);

printf("行数:%d\n",hs);

}

如上是用c编写的,不是c++.

运行的时候可以把中文注释去掉。

完全可以运行的,我已经测试过了。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者M管理员
    暂无讨论,说说你的看法吧