一、一维数组
一维数组的定义格式为:
类型说明符 数组名[常量表达式]; 例如: int a[10]; 它表示定义了一个整形数组,数组名为a,有10个元素。
1.在定义数组时对数组元素赋以初值。
例如:int a[10]={0,1,2,3,4,5,6,7,8,9};
2. 可以只给一部分元素赋值。例如:
int a[10]={0,1,2,3,4};
定义a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素值为0。
3.在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。
例如:int a[5]={1,2,3,4,5};
也可以写成 int a[]={1,2,3,4,5};
二、二维数组
1.可以对部分元素赋初值。
例如: int a[3][4]={{1}, {5}, {9}};也可以对各行中的某一元素赋初值,如int a[3][4]={{1}, {0,6}, {0, 0, 0, 11}};
2.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
例如:
int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};等价于:、int a[ ][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
数组a【3】【4】,下列表示a【1】【1】
*(a[1]+1)
*(&a[1][1])
(*(a+1))[1]
*(a[0]+5)
三、字符数组
例如:char c[10];
c[0]=′I′ ; c[1]=′ ′; c[2[=′a′; c[3]=′m′;
c[4]=′ ′; c[5]=′h′; c[6]=′a′; c[7]=′p′;
c[8]=′p′; c[9]=′y′;
为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”——‘\0’。
逐个字符输入输出。用格式符“%c”输入或输出一个字符。
将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。
1. puts函数
其一般形式为: puts (字符数组)
其作用是将一个字符串(以′\0′结束的字符序列)输出到终端
2. gets函数
其一般形式为:gets(字符数组)
其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。
3. strcat函数
其一般形式为:strcat(字符数组1,字符数组2)
Strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。
4. strcpy函数
其一般形式为:strcpy(字符数组1,字符串2)
strcpy是“字符串复制函数”。
5. strcmp函数
其一般形式为:strcmp(字符串1,字符串2)
strcmp的作用是比较字符串1和字符串2。
比较的结果由函数值带回
(1) 如果字符串1=字符串2,函数值为0。
(2) 如果字符串1>字符串2,函数值为一正整数。
(3) 如果字符串1<字符串2,函数值为一负整数。
6. strlen函数
其一般形式为: strlen (字符数组)
strlen是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括′\0′在内)。
四、函数
形参与实参
形式参数:定义函数时函数名后面括号中的变量名
实际参数:调用函数时函数名后面括号中的表达式
函数调用的形式:
(1)作为函数语句调用。函数一般无返回值。例:
printf(“Hello,World!\n”);
(2)作为函数表达式调用。例:
m=max(a,b)*2;
(3)作为函数参数调用。例:
printf(“%d”,max(a,b));
m=max(a,max(b,c));
例题:
1.题目:编写程序,打印出9×9乘法表
#include<stdio.h>
int main()
{
int a[9]={0};
int i,j,k;
for (i=0;i<9;i++)
{
a[i]=i+1;
}
for (j=0;j<9;j++)
{
for (k=0;k<=j;k++)
{
printf("%d*%d=%d ",a[j],a[k],a[j]*a[k]);
}
printf("\n");
}
return 0;
}
2.题目:编写程序,实现strcmp()相同功能myStrcmp()函数
#include<stdio.h>
#include<string.h>
int myStrcmp(char *str1,char *str2)
{
int long1,long2,i,j;
printf("input two str:\n");
gets(str1);
gets(str2);
long1=strlen(str1);
long2=strlen(str2);
j=(long1>long2)?long1:long2;
for (i=0;i<j;i++)
{
if (*(str1+i)==*(str2+i))
{
continue;
}
return (*(str1+i)>*(str2+i))?1:(-1);
}
}
int main()
{
int k;
char str1[100],str2[100];
k=myStrcmp(str1,str2);
printf("%d\n",k);
return 0;
}
3.题目:编写程序,将十进制转换为8进制并输出(不允许使用printf("%o"))
#include<stdio.h>
int main()
{
int a[100];
int t;
int i;
int n;
int j;
printf ("10 jin zhi:\n");
scanf ("%d",&n);
for (t = 0; t <100; t++)
{
if (n != 0)
{
i = n % 8;
a[t] = i;
n = n / 8;
}
else
break;
}
printf ("8 jin zhi:\n");
for (j = t; j >= 0; j--)
{
printf ("%d",a[j]);
}
printf ("\n");
return 0;
}
4.题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。(google面试题)
例如 输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。
分析:这是一道广为流传的google面试题
#include<stdio.h>
int main()
{
int temp,i,k,n;
int count=0;
printf("enter a number:\n");
scanf("%d",&n);
for (i=0;i<=n;i++)
{
temp=i;
while(temp!=0)
{
k=temp%10;
temp=temp/10;
if (k==1)
{
count++;
}
}
}
printf("the number of 1:%d\n",count);
return 0;
}