C语言基础2

来源:互联网 发布:centos 7.3安装pptp 编辑:程序博客网 时间:2024/05/22 14:26

一、一维数组

一维数组的定义格式为:

类型说明符  数组名[常量表达式];  例如:  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;
}