字符串方法
strlen(char *str) : 求字符串长度
strcpy(char *dest, char *src) : 把src拷贝到dest
strcat(char *dest, char *src) : 把src连接到dest后面
strcmp(char *s1, char *s2) : 按照各个字符(ascii)比较s1和s2,相等则返回0,否则返回ascii相减的结果
strstr(char *s1, char *s2) : 在s1中查找s2,返回找到的位置,若找不到则返回NULL
switch中条件判断只能是四种类型,整形,字符型,布尔类型(C语言中没有bool类型),枚举类型
枚举类型默认是从0开始
排序算法
//
// main.c
// test2
//
// Created by 丁小未 on 13-7-10.
// Copyright (c) 2013年 dingxiaowei. All rights reserved.
//
#include <stdio.h>
#define N 4
//冒泡排序
int* bubbleSort(int *num,int NN) //前面参数是指向整形数组的指针,后面的N是这个数组的大小
{
for (int i=0; i<NN-1; i++) { //排序N-1次
for (int j=0; j<NN-1-i; j++) { //每次都从第一个一次往后面的比,大的排在后面,但后面已经排序好了的就不需要比了
if (num[j]>num[j+1]) {
num[j]=num[j]^num[j+1]; //yi'huo
num[j+1]=num[j]^num[j+1];
num[j]=num[j]^num[j+1];
}
}
}
int *p=num; //返回数组
return p;
}
//快速排序
void* quickSort(int *num,int NN)
{
}
//显示调用排序方法后的数组
void* show(int num[],int NN,int(*p)(int num[],int NN)) //指向数组的指针,和指向函数的指针
{
return p(num, NN);
}
int main(int argc, const char * argv[])
{
// printf("您想要排序几个数:");
// scanf("%d",&N);
printf("输入您要排序的%d个数(例如:1 3 2 4)\n",N);
int num[N];
for (int i=0; i<N; i++) {
scanf("%d",&num[i]);
}
printf("您输入的数组是:");
for (int i=0; i<N; i++) {
printf("%d ",num[i]);
}
printf("\n");
//冒泡排序
/*
for (int i=0; i<N-1; i++) { //排序N-1次
for (int j=0; j<N-1-i; j++) { //每次都从第一个一次往后面的比,大的排在后面,但后面已经排序好了的就不需要比了
if (num[j]>num[j+1]) {
num[j]=num[j]^num[j+1];
num[j+1]=num[j]^num[j+1];
num[j]=num[j]^num[j+1];
}
}
}
*/
show(num,N, bubbleSort); //使用委托,调用外部函数,但数组是地址传递,不是值传递,所以在外面函数将main函数中的数组作为参数传递的时候,改变参数中的数组中的值,实际上就改变了数组中的值
printf("冒泡排序后的数组是:");
for (int i=0; i<N; i++)
{
printf("%d ",num[i]);
}
//快速排序
}
指针必须先指向一个变量,然后才能对他赋值,不然很危险!
指针可以实现多个返回值,只是函数的参数会比较多
指针遍历数组
char a[] = "dxw";//定义的是一个字符串变量,可以改变
char *p = "dxw" ; // 定义的是一个字符串常量!严格来说,应该写成const char* p = "dxw";前面加常量修饰符
//通过指针来遍历数组
char a[]="dingxiaowei"
char *p=a;
for(;*p!='\0';p++)
{
printf("%c",*p); }
简易计算器
指向函数的指针,函数名就代表函数的地址,就像数组名就代表数组地址
//
// main.c
// test1
//
// Created by 丁小未 on 13-7-10.
// Copyright (c) 2013年 dingxiaowei. All rights reserved.
//
#include <stdio.h>
int sum(int a,int b)
{
int c = a + b;
printf("%d + %d = %d",a,b,c);
return c;
}
int minus(int a,int b)
{
int c = a - b;
printf("%d - %d = %d",a,b,c);
return c;
}
int mul(int a,int b)
{
int c = a * b;
printf("%d * %d = %d",a,b,c);
return c;
}
int div(int a,int b)
{
int c = a / b;
printf("%d / %d = %d",a,b,c);
return c;
}
//count函数是用来做a跟b之间的运算
//至于做什么运算取决于p
int count(int a,int b,int(*p)(int ,int))
{
return p(a,b);
}
int main(int argc, constchar * argv[])
{
//int result = count(5, 6,sum);
//printf("result:%d",result);
/*
//定义了一个指向函数的指针变量p
//被p指向的函数:返回值为int类型,结婚搜两个int类型的参数
int (*p)(int a,int b);
//让指针变量p指向sum函数
p = sum;
//利用指针变量p简介调用sum函数
//(*p)(5,6);
//这样也可以
p(5,6);
*/
int a,b,c,fuhao;
char flag='y';
printf("******欢迎进入四则运算********\n");
do
{
printf("请输入功能(1.加法;2.减法;3.乘法;4.乘法),以及输入两个运算数[例如想计算1+2:就输入1 1 2]:");
scanf("%d %d %d",&fuhao,&a,&b);
switch (fuhao) {
case1:
count(a, b, sum);
break;
case2:
count(a, b, minus);
break;
case3:
count(a, b, mul);
break;
case4:
count(a, b, div);
break;
default:
printf("您输入的不正确,请重新选择功能!");
break;
}
printf("\n您想继续吗?(y/n)\n");
flag = getchar();
flag = getchar();
//scanf("%c",&flag);
}while ('y'==flag);
return0;
}