字符型数组
可以使用 char s[ ] [ ] = { } 来进行初始化,如上图所示,s数组内存空间也如上图所示。
二维数组的数组名 s 为 &s[0] 是s[0] 一维数组的地址。
二维数组 可以用 rows = sizeof(s) / sizeof(s[0]) 来计算 行数。
puts函数只能调用一维数组。 可以用循环语句来打印二维数组。
代码练习e1:创造一个二维字符数组 char s[] [100] = {“Hello”, “China”,”Amercia”,"World!"}
;比较三个一维字符数组的大小,输出最大值。
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char s[][100] = {"Hello","China","Amercia","World!"};
char max[100];
int rows = sizeof(s) / sizeof(s[0]);
strcpy(max,s[0]);
int i;
for(i = 1; i < rows; ++i)
{
if(strcmp(max,s[i]) < 0)
{
strcpy(max,s[i]);
}
}
puts(max);
return 0;
}
e2.定义一个数组char s[] [100] = {“Hello”, “China”,”Amercia”,"World!"}将这个二维数组内的字符串进行升序排序。
#include<stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
char s[][100] = {"Hello","World!","China","Amercia"};
int rows = sizeof(s) / sizeof(s[0]);
int i;
for(i = 0; i < rows / 2; ++i)
{
char t[100];
strcpy(t,s[i]);
strcpy(s[i],s[rows - i -1]);
strcpy(s[rows - i - 1],t);
}
for(i = 0; i < rows; ++i)
{
puts(s[i]);
}
return 0;
}
函数
一个C程序有且只有一个主函数,一个C程序可由一个主函数和若干个子函数组成。
可以在子函数中调用其他子函数。
C程序的执行是从main函数开始的,如果在main函数内调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。
函数分两类。
1.无参函数 2.有参函数
有参函数:
定义有参函数的一般形式为:
类型标识符 指的是函数返回值的类型。 函数名后面的()不能省略。
例:
int add(int a, int b)
{
int ret;
ret = a + b;
return ret;
}
定义了一个名为add的函数,返回值 ret 是int型 。
函数的调用: 函数名(实参);
函数一定要有 return 返回值,如果无则返回值随机。
代码练习
e3.用函数实现打印指定范围内所有的素数;
#include<stdio.h>
int sushu(int number)
{
int i;
for( i = 2; i < number; ++i)
{
if(number % i == 0)
{
return 0;
}
}
if(number == 0 || number == 1)
{
return 0;
}
return 1;
}
void sushuPrint(int begin, int end)
{
int counter = 0;
for(begin; begin <= end; ++begin )
{
if(sushu(begin))
{
printf("%3d ",begin);
++counter;
if(counter == 10)
{
counter = 0;
printf("\n");
}
}
}
putchar('\n');
}
int main(int argc, const char *argv[])
{
sushuPrint(0,100);
return 0;
}
e4.编写函数实现求最大公约数gcd和最小公倍数lcm.
#include<stdio.h>
int maxOfTwoNumbers(int n1, int n2)
{
return n1 > n2 ? n1 : n2;
}
int minOfTwoNumbers(int n1 , int n2)
{
return n1 < n2 ? n1 : n2;
}
int gcd(int n1 , int n2)
{
int g = maxOfTwoNumbers(n1,n2);
for(g; ; ++g)
{
if(g % n1 == 0 && g % n2 == 0 )
{
return g;
}
}
}
int lcm(int n1 , int n2)
{
int l = minOfTwoNumbers(n1,n2);
for(l; ;--l)
{
if(0 == n1 % l && 0 == n2 % l)
{
return l;
}
}
}
int main(int argc, const char *argv[])
{
int n1,n2,ret;
printf("请输入两个整数:\n");
ret = scanf("%d%d",&n1,&n2);
if(ret != 2)
{
printf("error! imput again!\n");
return 0;
}
printf("gcd = %d\n",gcd(n1,n2));
printf("lcm = %d\n",lcm(n1,n2));
return 0;
}