------------------------------------------------------------------------------------------
8. 控制语句
条件语句: If switch
if语句:
if(条件表达式) 程序块
if(条件表达式) 程序块 else 程序块
if(条件表达式1)程序块elseif(条件表达式2)程序块 …else程序块
#if 1
int main ()
{
/* if条件语句 */
float score;
scanf("%f",&score);
if(score>=60)
{
printf("你的分数是:%4.1f\n",score);
printf("你通过了测试");
}
else
{
printf("你的分数是:%4.1f\n",score);
printf("你没有通过测试");
}
return 0;
}
#endifswitch语句:
switch(表达式)
case 常量表达式1: 程序块1 break;
case 常量表达式2: 程序块2 break;
default: 默认程序块 break;
循环语句:while for(根据某个条件是否成立决定是否重复执行程序)
int main (){
/* switch条件语句 计算器*/
float a,b;
char operate;
scanf("%f %c %f",&a,&operate,&b);
switch (operate){
case '+': printf("%f %c %f 的结果是:%f \n",a,operate,b,a+b); break;
case '-': printf("%f %c %f 的结果是:%f \n",a,operate,b,a-b); break;
case '*': printf("%f %c %f 的结果是:%f \n",a,operate,b,a*b); break;
case '/': printf("%f %c %f 的结果是:%f \n",a,operate,b,a/b); break;
default: printf("输入运算符错误:\n"); break;
}
return 0;
}
While语句
while(表达式) 程序块 while条件成立 一直执行if只执行一次
do程序块while(表达式) do先执行一次再判断是否成立,再决定是否执行下一次
#if 1
int main (){
/* while循环 1到100的和*/
int sum = 0, i = 0;
while(i<=100){
sum += i; /*sum = sum + i */
i++;
}
printf("1到100只和是:%d\n",sum);
i = 0;
sum = 0;
do{
sum += i; /*sum = sum + i */
i++;
}while(i<=100);
printf("1到100的和是:%d\n",sum);
return 0;
}
#elif 1
int main (){
/* 语句嵌套 */
float money,earn = 0,debt = 0;
while(1){
printf("请输入金额:\n");
scanf("%f",&money);
if(money>0){
earn+=money;
}else if(money<0){
debt+=money;
}else{ /*等于0 退出*/
break;
}
}
printf("earn: %f , debt: %f ./n",earn,debt);
return 0;
}
#endiffor语句
for(初始表达式,条件表达式,后处理表达式) 程序块
#if 0
int main (){
/* for循环 1到100的和*/
int sum = 0;
for(int i=1;i<=100;i++)
{
sum+=i;
}
printf("1到100的和是:%d\n",sum);
return 0;
}
#elif 1
int main (){
/* for循环 判断一个数是否是质数*/
int a; scanf("%d",&a);
/* demo1 */
/*
for(int i = 2; i<a ; i++){
if(a%i==0){
printf("%d不是质数",a);
return 0;
}
}
printf("%d是质数",a);
*/
/* demo2 */
int flag = 0;
for(int i = 2; i<a ; i++){
if(a%i==0){
flag = 1;
break;
}
}
if(flag == 1){
printf("%d不是质数",a);
}
else{
printf("%d是质数",a);
}
return 0;
}
#endif9. 数组
数组是在内存中连续存储的具有相同类型的一组数据的集合。
通过下标访问数组数据的值。
定义数组:int arr[5]; int brr[5]={3,4,5,8};
int crr[]={3,4,5,8};
#if 1
int main (){
/* 键盘输入学生成绩 计算平均数*/
float scoreArr[100], score, sum;
int n = 0;
while(1){
scanf("%f",&score);
if(score<0){
break;
}
scoreArr[n] = score;
sum+=score;
n++;
}
for(int i=0;i<n;i++){
printf("%f\t",scoreArr[i]);
}
printf("\n");
printf("平均分数是:%5.2f",sum/n);
return 0;
}
#endif
10.函数
一个命名的程序块,执行专门的任务。
返回类型 函数名 (参数){函数体}。void表示函数无返回类型
递归函数:调用自身的函数。
#if 0
/*函数定义 */
void fun (int n){ /* 形式参数 */
for(int i = 0;i<n;i++){
printf("hello\n");
printf("第%d次\n",i);
}
}
int main(){
fun(5); /* 函数调用 实际参数 */
return 0;
}
#elif 0
/* n的阶乘 */
int fun (int n){
int result = 1;
for(int i = 1;i<=n;i++){
result*=i;
printf("%d\n",result);
}
return result;
}
int main(){
printf("%d\n",fun(5));
return 0;
}#elif 1
/*递归函数 n的阶乘 n=1 n!=1 n>1 n!=n(n-1)! */
int fun (int n){
if(n == 1){
return 1;
}else{
return n*fun(n-1);
}
}
int fic(int n){
if(n<=2){
return 1;
}else{
return fic(n-1)+fic(n-2);
}
}
/*递归函数 斐波那契数列 F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*) */
int main(){
int n = 5;
printf("%d的阶乘计算\n",n);
printf("%d\n",fun(n));
printf("%d的斐波那契数列计算\n",n);
for(int i = 1;i<=n;i++){
printf("%d\n",fic(i));
}
return 0;
}
#endif11指针
定义:变量的地址,可以通过取地址运算符&得到变量的地址
指针变量:用来存储“指针(地址)”的变量
设type是一个数据类型,则type*也是一个类型,叫做type指针类型,type*类型的变量是存储type类型变量的地址。
Eg:int a = 3; int *p=&a;
可以通过“解引用运算符”* 得到一个指针变量指向的变量;
Eg:int a=4,b=5; int *p=&a;
*p = 6; /* 此时a=6*/
b=*p /* 此时b=6*/
#if 1
/*指针 变量*/
int main(){
/*指针指向变量 */
int a=1,b=2;
int *p=&a;
printf("a:%d,b:%d\n",a,b);
printf("a的地址是:%p\n",&a);
printf("p的取值是:%p\n",p);
printf("a的变量值是:%d\n",a);
printf("p的指向值是:%d\n",*p);
b=*p; /* *p解引用指向对应变量的值 */
printf("a:%d,b:%d\n",a,b);
return 0;
}
#endif
可以用指针变量指向数组某个元素

#if 1
/*指针 数组*/
int main(){
/*指针指向数组地址即数组第一个元素的地址 */
int arr[5]={3,5,7,1,10}, b;
int *q=arr; /* 等价于int *q=arr[0]; */
printf("arr的地址为:%p\n",arr);
printf("arr[0]的地址为:%p\n",&arr[0]);
printf("q的取值为:%p\n",q);
/*
*q解引用指向对应变量的 则 *q==arr[0] 则 *[q+2] = arr[2]
arr[i] == *(arr+i) = *(q+i) = q[i]
*/
printf("arr[2]的值为:%d\n",arr[2]);
printf("q[2]的取值为:%d\n",q[2]); /* q[2]==*(q+2) */
b=arr[1];
for(int *p=arr;p<arr+5;p++){
printf("%d\t",*p);
}
return 0;
}
#endif
指针作为函数的参数

#if 1
/*指针做参数 两个变量交换 */
void swap1 (int a, int b){
int temp = a;
a=b;
b=temp;
}
void swap2 (int *a, int *b){
int temp = *a;
*a=*b;
*b=temp;
}
int main(){
int x=3,y=4;
printf("x=%d,y=%d\n",x,y);
printf("……执行交换函数swap1……\n");
swap1(x,y);
printf("x=%d,y=%d\n",x,y);
printf("……执行交换函数swap2……\n");
swap2(&x,&y);
printf("x=%d,y=%d\n",x,y);
return 0;
}
#endif数组作为函数的参数:数组名就是数组第一个元素的地址,因此传递的实际是指针。
Eg:void print(char arr,int n)=== void print(char *a,int n)
#if 1
/*数组名作为函数的参数
数组名就是数组第一个元素的地址,因此传递的实际是指针。
void print(char arr,int n)=== void print(char *a,int n)*/
void print(char arr[],int n){
for(int i=0;i<n;i++){
printf("%c\n",arr[i]);
}
}
int main(){
char crr[]={'h','e','l','l','o'};
print(crr,5);
return 0;
}
#endif
字符串
结尾带有”结束字符”,即“\0”的字符数组
Eg:char str[]={‘h’,‘e’,‘l’,‘l’,‘o’,‘\0’}

C语言字符处理函数头文件string.h
strlen(char* s) 返回字符串的长度
strcpy(char* s,’srt’)字符串拷贝
#if 1
#include <string.h>
int main (){
char arr[] = {'h','e','l','l','o'};
char str[] = {'h','e','l','l','o','\0'};
char* p="hello";
printf("str的长度为:%d,p的长度为:%d\n",strlen(str),strlen(p));
strcpy(str,"wang");
printf("%s\n",str);
printf("%s\n",p);
return 0;
}
/*实现自己的 strlen */
int strlen(char *s){
char *p=s;
while(*p!='\0'){
p++;
}
return p-s;
}
#endif(未完待续)
--------------------------------------------------------------------------------------------
看完点个赞吧,给别人点赞,会让自己觉得自己是一个善良的人。
关注一下,让自己觉得自己是一个友善的人,开放包容的人,人生会不经意间美妙一点点。
我的收获期待与你分享,希望一同成长!