一道基础C语言题,求解,最好附上这部分的知识点(通俗易懂点)。
学习C语言,说难也难,说不难也不难,主要是入门难,如果通过"入门"这一关,那么下面就容易多了.不过到了"指针"这个知识点,那就又麻烦了.相对于其他的编程,C语言算是比较难的了,而且C语言也是非常重要的,它是很多编程的基础,所以一定要学好C语言,有些大学计算机系学的第一个编程语言,就是C语言,可见其重要性,建议你最好让老师教,建议你下载"C语言程序设计曾怡讲 谭浩强编",这样就好一些.
http://www.gougou.com/search?search=C%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E6%9B%BE%E6%80%A1%E8%AE%B2%E8%B0%AD%E6%B5%A9%E5%BC%BA%E7%BC%96&id=0
到这里下载,再配一本教材就行了.教材你自己找吧
如果你真的要自学的话,下面是我帮您查找的C语言自学方法,供您参考:一、C语言入门的基本学习方法
《C语言》的内容很丰富,有的部分涉及到的细节很多,如硬件知识和数据结构知识等,自学时不可能面面俱到,否则必然会顾此失彼,反而抓不住主要矛盾。笔者认为对初学C语言的考生,开始不必在每一个细节上过于死抠,而应当把主要精力放在最基本、最常用的那些部份,待有一定的基础后再深入到一些非主要的细节,有一些细节需要通过较长期的实践才能熟练掌握。初学C语言时,可能会遇到有些问题理解不透,请不要气馁,鼓足勇气向后面的内容学习,待学完后面的章节知识,前面的问题也就迎刃而解了。学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是学习的人最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。
下面我们就围绕《C语言》的特点、以98年全国等级考试大纲为基础,把里面的重点和难点,从宏观和微观两个角度,就如何学好这门课程提供一些建议和方法,供大家学习时参考。
首先从宏观上谈一谈自学C语言的方法。
我认为要学好C语言首先必须了解等级考试C语言的大纲和内容,以及各种辅助材料的用途,这是学好C的基础。从以前的经验以及考网上的一些信息可知,要自学C语言必须准备以下资料:
1、 教材:大家现在都公认是清华大学谭浩强主编的那本,当然有其他的也可以,如高校出版社的。
2、 习题集:我认为清华大学的《C语言样题汇编》不错。书后面附有答案。
3、 上机练习:我认为南开大学的那个可以,最好是在考前从头到尾做一遍。答案可以去考网下载区下载。
4、 大纲:这个肯定要的,可以在考网二级版那里去下,然后打印出来。
5、 自学计划:为了做到有计划有目的地学习C语言,大家可以根据自己的学习(或工作)情况,制定一个自学计划,循序渐进地学习。
6、 模拟盘:为了更好地熟悉考场环境,下一个模拟盘是必不可少的,可以在http://studywang.yeah.net/。下载,注意,在下载时要把锁匙盘一起下回来,否则不能进入考试环境。
7、 教学光盘:如果能买到C语言的教学光盘,那当然更好,这样可以更直观地学习C语言了。
下面从微观上针对C语言的几个重点和难点,逐个谈谈具体的自学方法。
二 如何学习C语言的运算符和运算顺序
C语言的运算功能十分丰富,运算种类远多于其它程序设计语言。因此,当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。
初学者往往对此感到非常困难,觉得C语言学习太繁杂,其实只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。
下面是所有的运算符按优先级不同分类列表:(对不起,因为表格显示不正常,已被我删除大家可以看书上的)
表中列出15种优先级的运算符,从高到低,优先级为1 ~ 15,最后边一栏是结合规则,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序。
下面我们通过几个例子来说明:
(1) 3*20/4%10 这个表达式中出现3种运算符,是同级运算符,运算顺序按从左至右结合,因此先计算3 * 20=60,然后被4除,结果为15,最后是%(求余数)运算,所以表达式的最终结果为15%10 = 5
(2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
例子中的“;”是C语言的语句分隔符,执行顺序为从左到右,第1条语句执行后a的值为3,第2条语句执行后b的值为5,第3条语句中有两个运算符前置+ +和*,按表中所列顺序,+ +先执行,*后执行,所以+ + a执行后,a的值为4,由于+ +为前置运算,所以a的值4参与运算,C的值为20,最后执行第4条语句,由于a + +为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。
这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20。
(3)a = 3,b = 5,b+ = a,c = b* 5
例子中的“,”是逗号结合运算,上式称为逗号表达式,自左向右结合,最后一个表达式的结果值就是逗号表达式的结果,所以上面的逗号表达式结果为40,a的值为3,b的值为8,c的值为40。
三、如何学习C语言的四种程序结构
(1)顺序结构
这种结构的程序比较简单,就是按照语句的排列顺序依次执行的机制。顺序结构的执行顺序是自上而下,依次执行,因此编写程序也必须遵守这一规定,否则你的程序执行结果就不对。
例如;a = 3,b = 5,现交换a,b的值,正确的程序为:
c = a;
a = b;
b = c;
执行结果是a = 5,b = c = 3如果改变其顺序,写成:
a = b;
c = a;
b = c;
则执行结果就变成a = b = c = 5,不能达到预期的目的,这是初学者常犯的错误。
顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径R,计算S = 3.14159*R*R,输出圆的面积S。而大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的块体、循环结构中的循环体等。
C语言自学方法(2)
(2) 分支结构
分支结构与顺序结构不同,其执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。
分支结构适合于带有逻辑条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。
学习分支结构不要被分支嵌套所迷惑,只要弄清基本的分支结构,嵌套结构也就不难了。嵌套只不过是分支块体中又包括分支语句而已,不是新知识,只要你基础知识扎实,分支嵌套也难不住你,下面我们重点讨论几种基本的分支结构的学习方法。
①If(条件)
{
块
}
这种分支结构中的块可以是一条语句,此时“{
}”可以省略,也可以是多条语句。它有两条分支路径可选,一条是条件为真,执行块,另一条是条件不满足,跳过块。
如,计算x的绝对值,根据绝对值定义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程序段为:if(x<0)
x=-x;
②if(条件)
{块1}
else
{块2}
这是典型的分支结构,如果条件成立,执行块1,否则执行块2,块1和块2都有1条或若干条语句构成。
如:求ax^2+bx+c=0的根
分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程序段如下:
d=b*b-4*a*c;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
x1=(-b-sqrt(d))/2a;
printf(“x1=%8.4f,x2=%8.4f
”,x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf(“x1=%8.4f+%8.4fi
”r, i);
printf(“x2=%8.4f-%8.4fi
”r,i)
}
③多路分支:其语句格式为:
if(条件1) {块1};
else if(条件2) {块2}
else if(条件3) {块3}
……
else if(条件n) {块n}
else {块n+1}
④switch语句:
switch
语句也是多分支选择语句,又称为多路开关语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if—else 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。
(3)循环结构:
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do –while循环和for循环。
四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提昌用goto循环,所以下面我们重点讲解另外的三种循环。
常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,大家好好看一下书中三种循环的格式和执行顺序,如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。
注意:在while和do—while循环体内和for
循环中的第3语句中,应包含趋于结束的语句(如I++,I--),否则就可能成了一个死循环,这也是初学者的一个常见错误。
下面我们来讨论下这三种循环的异同之处:
用while和do—while循环时,循环变量的初始化的操作应在循环体之前,而for循环是在语句1中进行的;while
循环和for循环都是先判断表达式,后执行循环体,而do—while循环是先执行循环体后判断表达式,也就是说do—while的循环体最少被执行一次,而while
循环和for就不一定了。这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,不能用break和
continue语句进行控制。
这三种结构并不是彼此孤立的,在循环中可能出现分支、顺序结构,分支中也可能出现循环、顺序结构而把循环、分支看成一个语句,它又是构成顺序结构的一个元素,因此这三种结构相互结合,就能实现各种算法,设计出解题程序,但若是很大的题目,这样编出的程序往往很长,重复结构多,并且可阅读性差,因此我们常将C程序设计成模块化结构。
(4)模块化程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个合法的C函数,然后用主函数调用函数及函数调用函数实现一大C程序:C程序=主函(main)+若干个函数。
在程序设计中,常将一些常用的功能模块写成函数,也可以将大程序段分割成若干函数,前者目的在于减少重复编写程序段的工作量,后者目的在于缩短模块长度,以便程序阅读方便。
一个源程序文件由一个或多个函数组成,它是一个编译单位,而一个C程序由一个或多个源程序文件组成。对较大的程序,往往分成多个文件,这样可以分别编写、分别编译,提高高调试效率,一个源程序文件可以被多个C程序公用。
C程序的的执行是从main()函数开始,调用其它函数后流程回到main函数,在main中结束整个函数运行,main函数的称是系统规定的,用户可以修改其内容即函数体,但不能修改其名称和参数,一个C程序必须有一个main函数,也只能有一个main函数。
所有函数都是平行的,即在定义函数时是互相独立的一个函数度不从属于另一个函数,即函数不能嵌套定义,但可以互相调用,但不能调用main函数。
函数分成两类,即标准函数和用户自定义函数,标准函数又称库函数,由系统提供,用户可直接调用,C语言提供了丰富的库函数,请考生在编写C程序时查阅教材后的函数说明,这可节省你的编程工作量;用户自定义函数由编程者自己编写。
我就说这么多了,祝您自学成功!!
任何知识的学习没有太多捷径,但有经验、方法及教训
(1)基础教材选择-系统又通俗易懂,最好有该书配套免费视频
建议选择系统正统的大学教材,尽量不要选择“多少天精通C语言”等吸引眼球的教程,相信一点C语言学习没有速成。这里给大家推荐一本不错的入门教程:清华大学出版社-孙海洋-C语言程序设计,讲解很透彻、知识点很全面、例程较多且通俗易懂。优酷“孙海洋课题”还有全书免费教学视频,便于自学。
(2)动起手来--立马安装VC++6.0或VS开发环境
C语言是特别注重动手实操能力的课程!!动起手来,现在开始安装VC++6.0开发环境,从第一个经典程序“Hello,world!”开始,每一个例题及知识点均通过开发环境验证、理解深化。多做每一章小型实验操作(网上多得很)。提升代码调试能力。
(3)有了基础后,一般可以有两个发展方向可供选择
(i)转向项目实战
建议购买一本C语言项目教程,在实践项目中强化理论知识的学习。
(ii)继续深入理论学习
建议购买国外经典深入学习C语言的教程,人民邮电出版社-C Primer Plus(第5版),或者 机械工业出版社-C程序设计语言(第2版.新版)
下定信心,坚持下去!希望对你有所帮助。
下面是转载的 孙海洋 版 C语言程序设计 部分内容截图。
数组类型的变量有三个重要的限制:数组长度固定不变,在编译时必须知道其长度,数组只在定义它的块语句内存在.
实际的程序往往不能忍受这样的限制-------它们需要在运行时 动态地分配数组.虽然数组长度是固定的,但动态分配的数组不必在编译时知道其长度,可以(通常也是)在运行时才确定数组长度.与数组变量不同,动态分配的数组将一直存在,知道程序显式释放它为止.
每一个程序在执行时都占用一款可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区(free store)或堆(heap).C语言程序使用一对标准库函数malloc和free在自由存储区中分配存储空间,而C++语言则使用new和delete表达式实现相同的功能.
1.动态数组的定义
数组变量通过指定类型、数组名和维数来定义.而动态分配数组时,只需指定类型和数组长度,不必为数组对象命名,new表达式返回指向新分配数组的第一个元素的指针:
int *pia=new int[10]; //array of 10 uninitialized ints
此new表达式分配了一个含有10个int型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针pia.
new表达式需要指定指针类型以及在方括号中给出的数组维数,该维数可以是任意的复杂表达式.创建数组后,new将返回指向数组第一个元素的指针.在自由存储区中创建的数组对象是没有名字的,程序员只能通过其地址间接地访问堆中的对象.
2.初始化动态分配的数组
动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化;如果数组元素是内置类型,则无初始化:
string *psa=new string[10]; //array of 10 empty strings
int *pia=new int[10]; //array of 10 ninitialized ints
这两个new表达式都分配了含有10个对象的数组.其中第一个数组是string类型,分配了保存对象的内存空间后,将调用string类型的默认构造函数依次初始化数组中的每个元素.第二个数组则具有内置类型的元素,分配了存储10个int对象的内存空间,但这些元素没有初始化.
也可使用跟在数组长度后面的一对空圆括号,对数组元素做值初始化:
int *pia2=new int[10](); //array of 10 uninitialized ints
圆括号要求编译器对数组做值初始化,在本例中即把数组元素都设置为0.
-----------------------------------------------------我是无辜的分割线-----------------------------------------------
注解:对于动态分配的数组,其元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值.
----------------------------------------------------我依然是无辜的分割线---------------------------------------------
3.const对象的动态数组
如果我们在自由存储区中创建的数组存储了内置类型的const对象,则必须为这个数组提供初始化:因为数组元素都是const对象,无法赋值.实现这个要求的唯一方法是对数组做值的初始化:
//error:uninitialized const array
const int *pci_bad=new const int[100];
//ok:value-initialized const array
const int *pci_ok=new const int[100]();
C++允许定义类类型的const数组,但该类类型必须提供默认构造函数:
//ok:array of 100 empty strings
const string *pcs=new const string[100];
在这里,将使用string类的默认构造函数初始化数组元素.
当然,已创建的常量元素不允许修改------因此这样的数组实际上用处不大.
4.允许动态分配空数组
之所以要动态分配数组,往往是由于编译时并不知道数组的长度.我们可以编写如下代码
size_t n=get_size(); //get_size returns number of elements needed
int *p=new int[n];
for(int *q=p;q!=p+n;++q)
/* process the array */;
计算数组长度,然后创建和处理该数组.
有趣的是,如果get_size返回0会怎么样?答案是:代码仍然正确执行.C++虽然不允许定义长度为0的数组变量,但明确指出,调用new动态创建长度为0的数组是合法的:
char arr[0]; //error:cannot define zero-length array
char *cp=new char[0]; //ok:but cp can't be dereferenced
用new动态创建长度为0的数组时,new返回有效的非零指针.该指针与new返回的其他指针不同,不能进行解引用操作,因为它毕竟没有指向任何元素.而允许的操作包括:比较运算,因此该指针能在循环中使用;在该指针上加(减)0,或者减去本身值,得0值.
在上述例题中,如果get_size返回0,则仍然可以成功调用new,但是p并没有指向任何对象,数组是空的.因为n为0,所以for循环实际比较的是p和q,而q是用p初始化的,两者具有相等的值,因此for循环条件不成立,循环体一次都没有执行
5.动态空间的释放
动态分配的内存最后必须进行释放,否则,内存最终将会逐渐耗尽.如果不再需要使用动态创建的数组,程序员必须显式地将其占用的存储空间返还给程序的自由存储区.C++语言为指针提供delete[]表达式释放指针所指向的数组空间:
delete[] pia;
该语句回收了pia所指向的数组,把相应的内存返还给自由存储区.在关键字delete和指针之间的空方括号对是必不可少的:它告诉编译器该指针指向的是自由存储区中的数组,而并非单个对象.
----------------------------------------------我是郁闷的分割线----------------------------------------------------
小心:如果遗漏了空方括号对,这是一个编译器无法发现的错误,将导致程序在运行时出错.
---------------------------------------------我很郁闷,真的--------------------------------------------------------
理论上,回收数组时缺少空方括号对,至少会导致运行时少释放了内存空间,从而产生内存泄漏(memory leak).对于某些系统和/或元素类型,有可能会带来更严重的运行时错误.因此,在释放动态数组时千万别忘了方括号对.
----------------------------------------------------------我是困倦的分割线-------------------------------------
C风格字符串与C++的标准库类型string的比较:
以下两段程序反映了使用C风格字符串与C++的标准库类型string的不同之处.使用string类型的版本更短、更容易理解,而且出错的可能性更小:
//C-style character string implementation
const char *pc="a very long literal string";
const size_t len=strlen(pc +1); //space to allocate
//performance test on string allocation and copy
for(size_t ix=0;ix!=1000000;++ix){
char *pc2=new char[len+1]; //allocate the space
strcpy(pc2,pc); //do the copy
if(strcmp(pc2,pc)) //use the nuw string
; //do nothing
delete[] pc2; //free the memory
}
//string implementation
string str("a very long literal string");
//performance test on string allocation and copy
for(int ix=0;ix!=1000000;++ix){
string str2=str; //do the copy,automatically allocated
if(str!=str2) //use the new string
; //do nothing
} //str2 is automatically freed
---------------------------------------------------我是困倦的分割线------------------------------------------------------------
6.动态数组的使用
通常是因为在编译时无法知道数组的维数,所以才需要动态创建该数组.例如,在程序执行过程中,常常使用char*指针指向多个C风格字符串,于是必须根据每个字符串的长度实时地动态分配存储空间.采用这种技术要比建立固定大小的数组安全.如果程序员能够准确计算出运行时需要的数组长度,就不必再担心因数组变量具有固定的长度而造成的溢出问题.
假设有以下C风格字符串:
const char *noerr="success";
//...
const char *err189="Error: a function declaration must "
"specify a function return type!";
我们想在运行时把这两个字符串中的一个复制给新的字符数组,于是可以用以下程序在运行时计算维数:
const char *errorTxt;
if(errorFound)
errorTxt=err189;
else
errorTxt=noerr;
//remember the 1 for the terminating null
int dimension=strlen(errorTxt)+1;
char *errMsg=new char[dimension];
//copy the text for the error into errMsg
strncpy (errMsg,errorTxt,dimension);
别忘记标准库函数strlen返回的是字符串的长度,并不包括字符串结束符,在获得的字符串长度上必须加1以便在动态分配时预留结束符的存储空间.
习题4.27 假设有下面的new表达式,请问如何释放pa?
int *pa=new int[10];
delete[] pa; 释放pa所指向的数组空间.
习题4.28 编写程序由从标准输入设备读入的元素数据建立一个int型vector对象,然后动态创建一个与vector对象大小一致的数组,把vector对象的所有元素复制给新数组.
//从标准输入设备读入的元素元素数据建立一个int型vector对象
//然后动态创建一个与该vector对象大小一致的数组,
//把vector对象的所有元素复制给新数组
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> ivec;
int ival;
//读入元素数据并建立vector
cout<<"Enter numbers:(Ctrl+Z to end)"<<endl;
while(cin>>ival)
ivec.push_back(ival);
//动态创建数组
int *pia=new int[ivec.size()];
//复制元素
int *tp=pia;
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter,++tp)
*tp=*iter;
//释放动态数组的内存
delete[] pia;
return 0;
}
习题4.29 对本小节第五条框中的两段程序:
a.解释这两个程序实现什么功能?
b.平均来说,使用string类型的程序执行速度要比用C风格字符串的快很多,在我们用了五年的PC机上其平均执行速度分别是:
user 0.47 # string class
user 2.55 # C-style character string
你预计的也一样吗?请说明原因.
a.这两段程序的功能是:执行一个循环次数为1000000的循环,在该循环的循环体中:创建一个新字符串,将一个已存在的字符串复制给新字符串,然后比较两个字符串,最后释放新字符串
b.使用C风格字符串的程序需要自己管理内存的分配和释放,而使用string类型的程序由系统自动进行内存的分配和释放,因此比使用C风格字符串的程序要简短,执行速度也要快一点
习题4.30 编写程序连接两个C风格字符串字面值,把结果存储在一个C风格字符串中.然后再编写程序连接两个string类型字符串,这两个string类型字符串与前面C风格字符串字面值具有相同的内容.
//连接两个C风格字符串字面值.
//把结果存储在一个C风格字符串中
#include<cstring>
int main()
{
const char *cp1="Mary and Linda";
const char *cp2="are firends";
size_t len=strlen(cp1)+strlen(cp2);
char *result_str=new char[len+1]; //动态分配数组
strcpy(result_str,cp1);
strcat(result_str,cp2);
delete[] result_str;
return 0;
}
//连接两个string类型字符串
#include<string>
using namespace std;
int main()
{
const string str1("Mary and Linda");
const string str2("are friends.");
string result_str;
result_str=str1;
result_str+=str2;
return 0;
}
大一学过 可惜我也忘得差不多了 帮不了你
10道经典的C语言例题(含参考程序)
1.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一个“水仙花数”,因为153=1^3+5^3+3^3。include include int main(){ int bai_wei,shi_wei,ge_wei,i,sum=0;for(i=100;i<1000;i++){ bai_wei=i\/100;shi_wei=(i%100)\/...
c语言题目 求解 很基础的
4. C正确,它是逗号表达式,x=y+z+5把y+z+5的值赋给x,然后y增1赋给y。A选项中=是右结合的,先算y*5=x+z,这试图把x+z的值赋给y*5这个非左值表达式,是非法的。所以A、C并不矛盾。5. B正确,参照4题的A,这里b是变量而非表达式(4题A中是y*5),所以正确。D选项中a+7是表...
5道c语言 基础题目 求解
23. .输入一个百分制成绩,输出相应的五级制成绩。百分制成绩与五级制成绩之间的转换标准为:90分以上为A,80-89分为B,70-79分为C,60-69分为D,60以下为E。例1:输入 :95 输出:A 例2:输入:63
两道很基础的C语言题 求求好心人帮忙给出答案和解析
第一题,从题目看,main中输入了一个字符数组到item,并把这个item传给delnum处理,delnum中的那个循环,是逐个判断s[i]是否是小于'0'或者大于9,即判断s[i]是否非数字,如果非数字,则用s[j++]=s[i]来将内容保存,举个例子,比如输入a9,在delnum中,第一次循环i=0,s[0]为'a',满足if...
三道简单的C语言题目
"%c",&ch); if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')zm++; else if(ch==' ')kg++; else if(ch>='0'&&ch<='9')sz++; else if(ch!='\\n')qt++; }while(ch!='\\n'); printf("英文字母:%d\\n",zm); printf("空格:%d\\n",kg)...
C语言题目,求大神解答
typedef struct { long id; \/\/学号 char name[10]; \/\/姓名 char sex[2]; \/\/性别 }PS;\/\/删除函数 int delete(PS *p1, int m, PS *p2, int n){ int i, j;\/\/遍历p1数组 for (i = 0; i < m; i++){ \/\/遍历p2数组 for (j = 0; j < n; j++){ \/\/如果p1...
求解这道c语言题目
sizeof(*a)=4,因为有取值符*,表示把a当成一个指针(int*),而a指向数组的首地址,即a=&(a[0]),即sizeof(*a)=sizeof(*&(a[0]))=sizeof(a[0])=sizeof(int)=4。(a+1)中把a当成一个指针,a+1=a+sizeof(int),a+1指向a的下一个整形地址既&a[1]。因此*(a+1)=*(&a[...
求高人解答几道C语言题目
k = 2时,j = 2,3,4,5,s = 1 + 2 + 3 + 4 + 5 = 15 k = 4时,j = 4,5,s = 1 + 4 + 5 = 10 程序输出是 : 10 2、i = 1,5,9,13,对应每个i,j的取值为 3,7,11,15,19,m共有4 × 5 = 20次增1运算,因为m的初值为0,所以m的终值为20,所以...
两道C语言题目,编程实现。1.求8的阶乘。2.求1到8的阶乘和。
1~8的阶乘 include<stdio.h> void main(){ int i,j,m;long int sum;for(i=1;i<=8;i++){ m=1;sum=0;for(j=1;j<=i;j++){ m=m*j;} sum+=m;printf("%d!=%ld\\n",i,sum);} } 8的阶乘:include<stdio.h> void main(){ int i,j=1;for(i=1;i<=8;i++){ j=j...
C语言题:已知圆的半径r=2.5,圆柱的高h=1.8,求圆周长,圆柱的体积。
圆的周长为:15.70,圆柱的体积为:35.33。正确代码实现:include <stdio.h> define PI 3.14 int main () { float r= 2.5,h=1.8;float C=0,V=0;C= PI*2*r;printf("%.2f\\n",C);V = PI*r*r*h;printf("%.2f\\n",V);return 0;} ...
独伦合比: 编程大大忌,在同一表达式中,千万不要出现同一个变量多个自增操作,在不同的编译器下往往出现不同的结果 你这个表达式可以说是巧合,因为同一个j多个自增,但好在没有别的操作符使用它. 结果就是21,但是你没有办法确定那三个自增以后是 6 7 8还是8 7 6,有的编译器从前往后执行,有的编译器从后往前执行. 不是21是24?都很正常,这个代码本身写的就很不符合规则.如果你是来请教问题的,就最好修改代码,如果你是来炫耀你的编译器的,那忽略我跟你说的“编程大大忌,在同一表达式中,千万不要出现同一个变量多个自增操作,在不同的编译器下往往出现不同的结果”
云县15228301979: 求解一道简单的C语言C程序C编程题 - ?
独伦合比: 题目没说清.1.输入仅限于小写字母还是所有字符;2 y,z输出a,b还是也按ASCII码向后推两位.#include <stdio.h>#include <string.h> int main() { char iword; char oword; while(iword = getchar()) { if(iword == '\n') break; oword = (iword - 95) % 26 + 97; printf("%c",oword); } printf("\n"); return 0; } 输入:abcdefxyz 输出:cdefghzab 此程序仅限输入小写字母.
云县15228301979: 一道简单的c语言题目求解 - ?
独伦合比: #include <stdio.h> int main() { char c[5]; printf("输入4位数\n"); scanf("%s",c); for(int i=0;i<4;i++) printf("%c ",c[i]); scanf("%s",c); return 0; }
云县15228301979: c语言的一道简单题目 求详解 - ?
独伦合比: 答案是25,选C.VOID PRTY,正确来说应该写为void PRTY(int x),这句是定义一个没有返回值的函数.根据题目给出的程序,该函数的作用是打印该函数的参数.在主函数(main()函数)里,先定义了一个整型变量a,并给a赋值为25,然后把变量a当成参数调用PRTY函数,则结果是打印变量a的值,也就是25,故选C.
云县15228301979: 求解一道简单的C语言题 - ?
独伦合比: 一:输入十进制,输出八、十、十六进制.#include <stdio.h> int main(void) { int n;scanf("%d", &n);printf("八进制:%o\n", n); printf("十进制:%d\n", n); printf("十六进制:%x\n", n); return 0; } 例子:16 八进制:20 十进制...
云县15228301979: 一道c语言的简单题,求解要详细解答过程 - ?
独伦合比: 一步步来说吧,从调用fun开始说起void fun(char *x,char *y) //x=p, y=q { char t; t=*x; //t="abc" *x=*y; //*x="123" 相当于 *p="123",因为x和p指向相同的变量内存地址 *y=t; //*y="abc" 同上*q ="abc" }所以,输出结果就是: 123,abc
云县15228301979: 一道C语言的逻辑运算问题 很基础的 求解答16.下面程序的输出结果是 A . main() {int x,y,z; x=y=1; z=x++ - 1; printf(“%d,%d\t”,x,z); z+= - x+++(++y||++z); printf(... - ?
独伦合比:[答案] ++y等于2,++z等于1,“或”的结果为1.-x++=-2,所以z=-1. 对于数字,“非零”即为真 所以4||5=1,3&&2=1
云县15228301979: 一道简单的C语言编程题?
独伦合比: 如下,望采纳#include <stdio.h>#include <stdlib.h> int main(){ int a[10],i,j; for(i=0;i<10;i++) scanf("%d",&a[i]); //输入10个数 //冒泡排序,从小到大 for(i=0;i<10;i++) { for(j=i+1;j<10;j++) { if(a[j]<a[i]) { int tmp=a[j]; a[j]=a[i]; a[i]=tmp; } } } //输出 for(j=0;j<10;j++) printf("%d ",a[j]); printf("\n"); return 0;}
云县15228301979: c语言的一道编程题目,求解~~~ - ?
独伦合比: c语言一道题目,求解 悬赏分:0 - 离问题结束还有 14 天 23 小时 题目是:把一个链表按反序排序,即将原链头当作链尾,原链尾当作链头.将链表的数据保存在文中,并能读取出来,用函数实现.我把程序写成如下了,可是为什么保存不了呢...
云县15228301979: 200分求解c语言入门题 - ?
独伦合比: 1、#include main() { int m,n,max,min,k; printf("输入两个正整数:"); scanf("%d%d",&m,&n); max=m>n?m:n; min=mwhile(true) { k=(max%min); if(k==0) { break; } max=min; min=k; } printf("最大公约数:%d\n",min); printf("最小公...