






例题
#include<stdio.h>
int main()
{
float add(float x,float y);
float a,b,c;
scanf("%f %f",&a, &b);
c=add(a,b);
printf("%.1f\n",c);
}
float add(float x,float y)
{
return x+y;
}

#include<stdio.h>
int main()
{
double power(float x,float y);
float a,b;
double c;
scanf("%f %f",&a, &b);
c=power(a,b);
printf("%.1lf\n",c);
}
double power(float x,float y)
{
int i;
double result=1;
for(i=0;i<y;i++)
{
result*=x;
}
return result;
}

第二题答案:
#include<stdio.h>
int srqt(int a)
{
int z;
int result=0;
for(z=0;z*z<=a;z++)
{
result=z;
}
return result;
}
int main()
{
int x,y;
printf("请输入一个数:\n");
scanf("%d",&x);
printf("求平方根:\n");
y=srqt(x);
printf("算术平方根是%d:\n",y);
}
二分查找法解题:
#include<stdio.h>
int mySqrt(int n)
{
int left=0,right=n,ans=0;
while(left<=right)
{
int mid=(left+right)/2;
if(mid*mid==n)
{
return mid;
}
else if(mid*mid<n)
{
ans=mid;
left=mid+1;
}
else
{
right=mid-1;
}
}
return ans;
}
int main()
{
int x;
printf("请输入一个整数:");
scanf("%d",&x);
printf("算术平方根是:%d\n",mySqrt(x));
return 0;
}
3题答案:
#include "stdio.h"
int main()
{
int num[10]={0};
int blank=0,others=0;
char c;
printf("请输入字符:\n");
while((c=getchar())!='\n')
{
if(c>='0'&&c<='9')
{
num[c-'0']++;
}
else if(c==' '||c=='\t'||c=='\n')
{
blank++;
}
else
{
others++;
}
}
printf("\n统计结果: \n");
for(int i=0;i<10;i++)
{
printf("数字%d出现了%d次\n",i, num[i]);
}
printf("空白符出现了%d次\n",blank);
printf("其他字符出现了%d次\n",others);
return 0;
}
函数的嵌套调用

#include "stdio.h"
int squre(int x)
{ long z;
z=x*x;
return z;
}
long factorial(int n)
{
int i;
long result=1;
for(i=1;i<=n;i++)
{
result*=i;
}
return result;
}
int main()
{
long sum = 0;
int base;
base = 2;
long square_2 = squre(base); // 算 2*2 = 4
long fact_2 = factorial(square_2); // 算 4! = 24
sum += fact_2;
base = 3;
long square_3 = squre(base);
long fact_3 = factorial(square_3);
sum += fact_3;
printf("最终结果 s = %ld\n", sum);
return 0;
}
递归

递归必须有一个退出条件

#include "stdio.h"
long resursion(int n);
int main()
{
int n;
long result;
printf("input a integer number:\n");
scanf("%d",&n);
result=resursion(n);
printf("%d!=%ld\n",n, result);
}
long resursion(int n)
{
long temp_result;
if(n<0)
{
printf("n < 0,input error!\n");
}
else if(n==0||n==1)
{
temp_result=1;
}
else
{
temp_result=resursion(n-1)*n;
}
return temp_result;
}



#include "stdio.h"
int shu(int x)
{
int z;
if(x>0)
{
z=x;
}
else
{
z=0;
}
return z;
}
int main()
{
int i,result;
int a[10]={1,2,3,4,-1,-2,-3,-4,2,3};
for(i=0;i<10;i++)
{
result=shu(a[i]);
printf("%d\n",result);
}
return 0;
}


#include "stdio.h"
int test(int b[10])
{
int i=0;
for(;i<10;i++)
{
printf("%d",b[i]);
}
}
int main()
{
int a[10]={2,4,6,8,10,12,14,16,18,20};
test(a);
putchar('\n');
return 0;
}


#include "stdio.h"
float test(int b[10])
{
int j=0,sum=0;
for(;j<10;j++)
{
sum+=b[j];
}
return (float)sum/10.0;
}
int main()
{
int i;
float result;
int a[10]={0};
printf("输入十个学生的成绩:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
result=test(a);
printf("平均成绩是%f\n",result);
return 0;
}
局部变量和全局变量







#include "stdio.h"
float average(float a[])
{
float aver=0;
int i;
for(i=0;i<10;i++)
{
aver+=a[i];
}
return aver/10.0;
}
float max(float b[])
{
float ma=b[0];
int j;
for(j=1;j<10;j++)
{
if(b[j]>ma)
{
ma=b[j];
}
}
return ma;
}
float min(float c[])
{
float mi=c[0];
int k;
for(k=1;k<10;k++)
{
if(c[k]<mi)
{
mi=c[k];
}
}
return mi;
}
int main()
{
float score[10];
printf("请输入十个学生成绩:\n");
int i;
for(i=0;i<10;i++)
{
scanf("%f",&score[i]);
}
float max1,min1,avera;
avera=average(score);
max1=max(score);
min1=min(score);
printf("平均成绩为%f\n",avera);
printf("最大成绩为%f\n",max1);
printf("最小成绩为%f\n",min1);
return 0;
}


变量的存储类别









register变量

















#include "stdio.h"
#include "string.h"
extern void delete_char(char str[],char c);
int main()
{
char c[100];
char c;
printf("请输入字符串内容:\n");
gets(str);
printf()
}
指针












#include "stdio.h"
int main()
{
int a,b;
int *pointer_1,*pointer_2;
a=100;
b=10;
pointer_1=&a;
pointer_2=&b;
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pointer_1,*pointer_2);
return 0;
}






答案如下:
#include "stdio.h"
int main()
{
int *p1,*p2,*p,a,b;
printf("请输入两个数:\n");
scanf("%d %d",&a, &b);
p1=&a;
p2=&b;
if(a<b)
{
p=p1;
p1=p2;
p2=p;
}
printf("%d %d",*p1,*p2);
return 0;
}

#include "stdio.h"
void swep(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
int main()
{
int a,b,*pointer_1,*pointer_2;
printf("请输入两个数:\n");
scanf("%d %d",&a, &b);
pointer_1=&a;
pointer_2=&b;
if(a<b)
{
swep(pointer_1,pointer_2);
}
printf("交换后的值为:%d %d\n",*pointer_1,*pointer_2);
return 0;
}

解法一:
#include "stdio.h"
int main()
{
int a, b, c;
int *pointer_1, *pointer_2, *pointer_3;
printf("请输入三个数:\n");
scanf("%d %d %d", &a, &b, &c);
// 找最大值 → 给 pointer_1
if (a >= b && a >= c)
pointer_1 = &a;
else if (b >= a && b >= c)
pointer_1 = &b;
else
pointer_1 = &c;
if (a <= b && a <= c)
pointer_3 = &a;
else if (b <= a && b <= c)
pointer_3 = &b;
else
pointer_3 = &c;
if ((&a != pointer_1) && (&a != pointer_3))
pointer_2 = &a;
else if ((&b != pointer_1) && (&b != pointer_3))
pointer_2 = &b;
else
pointer_2 = &c;
printf("从大到小:%d %d %d\n", *pointer_1, *pointer_2, *pointer_3);
return 0;
}
解法二:
#include "stdio.h"
void swap(int *pt1,int *pt2)
{
int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
void swep(int *q1,int *q2,int *q3)
{
if(*q1<*q2)
{
swap(q1,q2);
}
if(*q1<*q3)
{
swap(q1,q3);
}
if(*q2<*q3)
{
swap(q2,q3);
}
}
int main()
{
int a, b, c;
int *pointer_1, *pointer_2, *pointer_3;
printf("请输入三个数:\n");
scanf("%d %d %d", &a, &b, &c);
pointer_1=&a;
pointer_2=&b;
pointer_3=&c;
swep(pointer_1,pointer_2,pointer_3);
printf("交换后的顺序是:%d %d %d\n",*pointer_1,*pointer_2,*pointer_3);
return 0;
}
数组与指针





方法一:
#include "stdio.h"
int main()
{
int a[10]={9,8,7,6,5,4,3,2,1,0};
int i;
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
方法二:
#include "stdio.h"
int main()
{
int a[10]={9,8,7,6,5,4,3,2,1,0};
int i;
for(i=0;i<10;i++)
{
printf("%d\n",*(a+i));
}
return 0;
}
方法三:
#include "stdio.h"
int main()
{
int a[10]={9,8,7,6,5,4,3,2,1,0};
int *p;
for(p=a;p<a+10;p++)
{
printf("%d\n",*p);
}
return 0;
}

#include "stdio.h"
void reverse(int x[],int n)
{
int temp,i,j,m;
m=(n-1)/2;
for(i=0;i<=m;i++)
{
j=n-1-i;
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
int main()
{
int i,a[10]={3,7,9,11,0,6,7,5,4,2};
printf("原数组为:\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
printf("\n");
reverse(a,10);
printf("交换后的数组:\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
return 0;
}

#include "stdio.h"
int main()
{
int i,a[10],max,min;
printf("输入数组的值:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
max=a[0];
min=a[0];
for(i=1;i<10;i++)
{
if(a[i]>max)
{
max=a[i];
}
if(a[i]<min)
{
min=a[i];
}
}
printf("max=%d\n",max);
printf("min=%d\n",min);
return 0;
}
第二种解法:
#include "stdio.h"
int max,min;
void max_min_value(int arr[],int n);
int main()
{
int i,number[10];
printf("请输入十个数:\n");
for(i=0;i<10;i++)
{
scanf("%d",&number[i]);
}
max_min_value(number,10);
printf("max=%d min=%d",max,min);
return 0;
}
void max_min_value(int array[],int n)
{
int *p,*array_end;
array_end=array+n;
max=min=*array;
for(p=array+1;p<array_end;p++)
{
if(*p>max)
{
max=*p;
}
else if(*p<min)
{
min=*p;
}
}
}
归纳总结:




多维数组与指针







#include "stdio.h"
int main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (*p)[4],i,j;
p=a;
printf("i=");
scanf("%d",&i);
while(i>2||i<0)
{
printf("i=");
scanf("%d",&i);
}
printf("j=");
scanf("%d",&j);
while(j>3||j<0)
{
printf("j=");
scanf("%d",&j);
}
printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));
return 0;
}

#include "stdio.h"
int main()
{
char string[]="I Love guidian";
printf("%s\n",string);
return 0;
}

#include "stdio.h"
int main()
{
char *string="I Love China";
printf("%s\n",string);
return 0;
}

#include "stdio.h"
int main()
{
char a[]="China is a good country!",b[40];
int i;
for(i=0;*(a+i)!='\0';i++)
{
*(b+i)=*(a+i);
}
*(b+i)='\0';
printf("string a is:%s\n",a);
printf("string b is:\n");
for(int i=0;b[i]!='\0';i++)
{
printf("%c",b[i]);
}
printf("\n\n");
}
#include "stdio.h"
void copy(char c[],char d[])
{
int i=0;
while(c[i]!='\0')
{
d[i]=c[i];
i++;
}
d[i]='\0';
}
int main()
{
char a[]="China is a good country!";
char b[100]="I am a student!";
printf("a=%s\nb=%s\n",a,b);
copy(a,b);
printf("a=%s\nb=%s\n",a,b);
return 0;
}








#include "stdio.h"
int max;
int max_i(int x,int y)
{
max=x;
if(x<y)
{
max=y;
}
return max;
}
int main()
{
int (*p)(int,int);
int a,b,c;
p=max_i;
scanf("%d %d",&a, &b);
c=(*p)(a,b);
printf("a=%d b=%d max=%d\n\n",a, b, c);
return 0;
}


#include "stdio.h"
int main()
{
double score[][4]={{60.0,70.0,80.5,90.5},{56.0,89.0,67.0,88.0},{34.2,55.0,87.0,98.0}};
double *search(double(*pointer)[4],int n);
double *p;
int i,m;
printf("请输入学生的序号:\n");
scanf("%d",&m);
printf("The scores of number %d are:\n",m);
p=search(score,m);
for(i=0;i<4;i++)
{
printf("%5.2f\t",*(p+i));
}
printf("\n\n\n");
}
double *search(double (*pointer)[4],int n)
{
double *pt;
pt=*(pointer+n);
return pt;
}

答案:
#include "stdio.h"
/*
函数功能:检查单个学生的4门课程是否有不及格
参数:pointer 指向该学生4门成绩的行指针
返回值:有不及格 → 返回该学生成绩的首地址;全及格 → 返回NULL
*/
double *search(double (*pointer)[4])
{
int i;
// 遍历该学生的4门课程
for(i = 0; i < 4; i++)
{
// 只要有1门成绩低于60,判定为有不及格
if(*(*pointer + i) < 60.0)
{
return *pointer; // 返回该学生成绩的首地址
}
}
// 所有课程全及格,返回NULL
return NULL;
}
int main()
{
// 3个学生,每个学生4门课程的成绩(和你原代码一致)
double score[][4] = {{60.0,70.0,80.5,90.5},
{56.0,89.0,67.0,88.0},
{34.2,55.0,87.0,98.0}};
double *p;
int i;
// 自动计算学生总数(代码更通用,增减学生不用改逻辑)
int student_total = sizeof(score) / sizeof(score[0]);
printf("有不及格课程的学生信息:\n");
printf("学号\t各科成绩\n");
printf("------------------------------------\n");
// 遍历所有学生,筛选有不及格的
for(i = 0; i < student_total; i++)
{
// 检查第i个学生是否有不及格
p = search(score + i);
// p不为NULL → 该学生有不及格
if(p != NULL)
{
// 输出学号(从1开始,符合日常习惯)
printf("%d\t", i + 1);
// 输出该学生的4门成绩
for(int j = 0; j < 4; j++)
{
printf("%5.2f ", *(p + j));
}
printf("\n");
}
}
return 0;
}




#include "stdio.h"
#include "string.h"
int main()
{
char *name[]={"Fishc.com","www.Fishc.com","home.Fishc.com","Fishc.com/dz"};
char **p;
int i;
for(i=0;i<4;i++)
{
p=name+i;
printf("%s\n",*p);
}
}





#include "stdio.h"
int main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int *p1, *p2;
ptrdiff_t count; // 指针相减的结果类型是 ptrdiff_t
p1 = &a[0];
p2 = &a[9];
// 指针相减:得到两个指针之间的元素个数
count = p2 - p1;
printf("p1 和 p2 之间的元素个数:%lld\n", (long long)count);
return 0;
}



预处理命令:










带参宏定义














小结:



结构体和共用体










#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define num 3
struct person
{
int NUM;
char name[20];
};
int main()
{
struct person man[num];
int i;
for(i=0;i<num;i++)
{
printf("请输入第 %d 个人的名字:", i+1);
fgets(man[i].name, 20, stdin);
man[i].name[strcspn(man[i].name, "\n")] = '\0';
printf("请输入所得票数:");
scanf("%d",&man[i].NUM);
getchar();
}
printf("\n===== 投票结果 =====\n");
for(i=0;i<num;i++)
{
printf("姓名:%s\n所得票数:%d\n",man[i].name,man[i].NUM);
}
return 0;
}