目录
先来看看这道题
若输入5,4则输出4,5?
void main() {
int a,b;
scanf ("%d,%d",&a,&b);
if (a>b) a=b;b=a;
else a++;b++;
printf ("%d,%d",a,b);
}
别秀了,根本秀不起来!
在if和else之间如果有多条语句,则必须使用复合语句,否则程序语法错误。该程序if和else之间有两条语句a=b;b=a;,但没有加{ },是错误的。
if和else之间隔了条语句,故有语法错误不能通过编译
1.指针在函数中使用并改变实参
void swap(int *pa,int *pb)
{
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
(实参和与其对应的形参各占用独立的存储单元)
2、
char* sp, s[10]; sp = "Hello"; 正确,sp为一个字符型指针,通过赋值获得了“hello”的地址;
char* sp, s[10]; s = "Hello"; 错误,字符数组赋值,用采用strcpy()函数strcpy(s,"Hello");
3、
x|(x+1)统计x二进制数中,0的个数
x&(x-1)统计x二进制数中,1的个数
4、
for(;;) 和 while(1) 的功能是相同的
5、
语句 char str[10] = "str"; 和 char str[10] = {"str"}; 等价
与char str[10] = {"s",“t“,”r"};不等价
6、
int
* p1和
int
*p1没有区别,赋值时要么p1或p2=&a;要么对指针进行解引,即*p1或*p2=a。
7、简单递归
7.1输入一个正整数n,将其逆序输出。要求定义和调用函数reverse(num),其功能是将num逆序输出,要求用递归实现。例如,输入12345,输出54321。
void reverse (int num)
{
if (num<10;)
{
printf("%d", num);
}
else
{
printf("%d", num%10);;
reverse(num/10);;
}
}
7.2定义递归函数sum(n)计算1+2+...+n, 其中n的类型是int,函数类型是double。
double sum(int n)
{
if (n==0)
return 0;
else
return n+sum(n-1);
}
7.3递归求阶乘
int fact(int n)
{
if(n==0)
return 1;
else
return n*fact(n-1);
}
7.4定义函数gcd( m, n),用递归法求m和n的最大公约数。 使用辗转相除法求最大公约数的递归算法描述如下:
int gcd(int m, int n)
{
if(n==0)
{
return m;
}
else
{
return gcd(n,m%n);
}
}
总结:找出第n项的通项公式放在else,推出通项公式减小逼近的值放在if中判断后结束。
8、冒泡排序
#include<iostream>
using namespace std;
const int N=101;
void BubbleSort(int a[],int len)
{
for(int i=0;i<len;i++)
for(int j=0;j<len-1-i;j++)
if(a[j]>a[j+1])
swap(a[j],a[j+1]);
}
int main()
{
int