linux_C一站学习--课后习题(一)简单函数;分支语句;深入理解函数
来源:互联网 发布:pip linux 编辑:程序博客网 时间:2024/06/05 17:40
3.3 形参和实参
1、定义一个函数increment,它的作用是将传进来的参数加1,然后在main函数中用increment函数来增加变量的值:
void increment(int x){ x = x + 1;}int main(void){ int i = 1, j = 2; increment(i); /* now i becomes 2 */ increment(j); /* now j becomes 3 */ return 0;}
这个increment函数能奏效吗?为什么?
答:不能,因为在函数increment()内部,是形参x自加1,并没有将x赋给i或j,而在函数increment()调用完后,函数的栈就自行释放,x就算自加1,也是被释放掉,所以该自加1就没有任何意义,注意:变量i,j和形参x是不同的量。
正确的做法:
#include <stdio.h>int increment(int x){x=x+1;return x;}int main(void){int i=1,j=2;i=increment(i);j=increment(j);printf("i=%d,j=%d\n",i,j);return 0;}
4.1 if语句
1、以下是程序段编译能通过,执行也不出错,但是执行结果不正确(根据第 3节“程序的调试”,这是一个语义错误),请分析一下哪里错了。还有,既然错了为什么编译能通过呢?
int x = -1;
if (x > 0);
printf("x is positive.\n");
错在if后面的条件表达式后多了个;号。能编译成功是因为这不是一个语义错误,而是一个逻辑错误。
4.2 if/else语句
1、写两个表达式,分别取整数x的个位和十位。
2、写一个函数,参数是整数x,功能是打印参数x的个位和十位。
解:个位u=a%10;
十位d=((a%100)-u)/10
/*Example: * please enter a integer: * 34 * the tens is 3,the units is 4. * *//*Type Contract * (number)->(string) * */#include <stdio.h>/*This programme will give the units and tens of the integer we enter*/int main(void){int a,u,d;/*int m=0;*/printf("please enter a integer.\n");scanf("%d",&a);u=a%10;d=((a%100)-u)/10; printf(" the tens is %d,the units is %d.\n",d,u);/*int i=0;for(i=0;;i++){if(a/(10^i)==0)m=i;printf("this number is a %d-digit integer.\n",m);break;}*/return 0;}
5.1 return语句
1、编写一个布尔函数int is_leap_year(int year),判断参数year是不是闰年。如果某一年的年份能被4整除,但不能被100整除,那么这一年就是闰年,此外,能被400整除的年份也是闰年。
/*This program will determine whether a entered integer reprents a leap year. * If it can be devided by 4 but can't be devided by 100,it is a leap year; * besides, it can be devided by 400,it is also a leap year. * Also,this program will list the situation of whether it is a leap year from 1990 to 2020. * */#include <stdio.h>int is_leap_year(int year){if((year%4==0)&&(year%100!=0)){return 1;}else if(year%400==0){return 1;}elsereturn 0;}/*Function name:print_year * Input parameter: * b:int,can only be 0 or 1,indecates the controlling expression * intyear:int,represents the number of year we entered after the terminal has reminded us * Output:a string printed by c-function 'printf' * Function:print whether the year is a leap year * * */void print_year(int b,int intyear){if (b==0) printf("%d is not a leap year.\n",intyear);elseprintf("%d is a leap year.\n",intyear);}int main(void){int a,b;printf("please enter an integer to judge whether it is a leap year.\n");scanf("%d",&a);b=is_leap_year(a);print_year(b,a);int i=1990;for(i=1990;i<=2020;i++){int b=is_leap_year(i);print_year(b,i);}return 0;}
5.3递归
1、编写递归函数求两个正整数a和b的最大公约数(GCD,GreatestCommon Divisor),使用Euclid算法:
1.如果a除以b能整除,则最大公约数是b。
2.否则,最大公约数等于b和a%b的最大公约数。
/* * This program will get the Greatest Common Divisor(GCD) of two positive integers, with the applying of Euclid arithmetic: * 1.If a devides b with no reminder,the GCD is a * 2.Else,GCD equles the GCD of b and (a%b) * */#include <stdio.h>int GCD(int a,int b){if(a%b==0)return b;else{int recurse=GCD(b,a%b);return recurse;}}int main(void){int n1,n2,gcd;printf("please enter 2 different integer.\n");scanf("%d%d",&n1,&n2);gcd=GCD(n1,n2);printf("The Greatest Common Divisor if %d and %d is %d.\n",n1,n2,gcd);return 0;}
2、编写递归函数求Fibonacci数列的第n项,这个数列是这样定义的:
fib(0)=1
fib(1)=1
fib(n)=fib(n-1)+fib(n-2)
/* *This program will find out the n th item of the Fibonacci Series. fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2) What is Fibonacci Series? every item,except the 1st and the 2nd, equals the summary of it's prvent two items. 1,1,2,3,5,8,13,21,34,33,89,144... * */#include <stdio.h>int fibonacci(int n){if(n==0)return 1;else if(n==1)return 1;else{int recurse1=fibonacci(n-1);int recurse2=fibonacci(n-2);int result=recurse1+recurse2;return result;}}int main(void){int a,b;printf("which item of the Fibonacci Series whould you like to know,please enter it.\n");scanf("%d",&a);b=fibonacci(a);printf("the %d .th item of Fibonacci Series is %d.\n",a,b);/*List the previous n items of the F series,n can be get from the keyboard*/int c;int i=1;printf("Would you like to get the previous n items of the Fibonacci Series?give us a number.\n");scanf("%d",&c);for(i=1;i<=c;i++){int d=fibonacci(i);printf("No.%d item is:%d.\n",i,d);}return 0;}
- linux_C一站学习--课后习题(一)简单函数;分支语句;深入理解函数
- linux_C一站学习--学习笔记(一)程序的基本概念;常量、变量和表达式;简单函数
- 深入学习python(一) lambda函数
- 周志华《机器学习》课后习题解答系列(一):目录
- if语句实现分支结构 课后习题
- 阅读深入理解计算机系统(一)--------------- 函数优化
- c程序设计(4)函数课后习题
- 《深入理解计算机系统》第八章 (一)关于子进程创建函数fork的理解
- 深入理解计算机系统学习(一)第一章
- 深入理解计算机学习笔记(一)
- 《深入理解计算机系统》学习笔记(一)
- 深入理解计算机系统学习笔记(一)
- 《linux c 编程一站式学习》课后部分习题解答(一)
- 习题35 分支和函数
- LINUX_C 线程总结(一)
- 项目三 多段函数求值 (2)用switch语句构造多分支结构 方法一
- javaScript之函数,分支结构 (一)
- 第五章作业 (一)课后习题部分
- 将小写字母转化成大写字母
- 三位大股东推动盖茨辞去微软董事长职位
- ACM学习-POJ-1163-The Triangle
- JDBC小小实例教程
- 百度2014校招笔试题目题解(更新了第1题的算法,10.9下午)
- linux_C一站学习--课后习题(一)简单函数;分支语句;深入理解函数
- IT也疯狂:十一长假特别篇
- TortoiseGit GitHub 使用小计
- vb.net 中的AndAlso
- 堆排序
- 根据前序跟中序遍历的结果建立二叉树——迭代和递归的方法
- 豆瓣客户端(三)发送图文广播
- 快速幂-poj3641
- 介绍一个牛人的机器学习PPT