栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言复习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言复习

目录

C语言基础知识

简单的输入输出和变量

 变量数据类型语句和输入输出

大小写的转换

字符'5'变为数字5(字符串变数字)

赋值和算数运算关系 运算逻辑运算

 输入字符串"1024",得到整形1024

取一个四位数1024的个十百千位

C语言的基本控制结构

选择结构

输入三个数,按从小到大输出

输入一个格式为x+y的二元算数运算表达式,输出这个表达式的计算结果(计算器)

循环结构

求1到10的累加和

从键盘读入十个整数,计算它们的平均值

求1~100中所有偶数之和

求n!

十个数中找大的

从键盘读入一行字符,统计其中包含的数字字符个数,并输出

计算机算法初步

循环嵌套

打印10个*,打印五行

最大公约数

最小公倍数

穷举法判断一个数是否为素数(从此处开始只复习了关键的)

递推与迭代法

数据的组织结构

一维数组

基本操作:赋值、接收数据、输出、求和

找数组元素最大值及其下标

将数组中元素逆序排列

数组a有n个元素,向数组下标为k的位置插入一个元素x

数组a有n个元素,删除数组下标为k的元素

数组的排序和查找

选择排序

冒泡排序

顺序查找

二分查找

一维数组和字符串

 从键盘输入两个字符串,将这两个字符串连起来作为一个字符串,输出该字符串

中的函数

把一个字符串按逆序存放

易错点总结


C语言基础知识

简单的输入输出和变量

考点:

  • printf()中%d、%f的使用
  • scanf()的使用(记得加取地址符&)
  • 交换变量的值
  • #include 
    int main()
    {
    	int a, b, t;
    	printf("Enter two integers:");
    	scanf("%d %d",&a,&b);//此处""中最好不要加都好。否则输入时须输入a,b。
    						//加一个空格可以,输入时读取空格切换至下一个数的读取
    	printf("a=%d,b=%dn",a,b);
    
    	t = a;	//注意第一句不要写a=t,t是一个未初始化的变量,一个储存值的媒介,未初始化时不能写在赋值符右边
    	a = b;
    	b = t;
    	
    	printf("交换两变量的值后:na=%d,b=%d", a, b);
    
    	return 0;
    }


 变量数据类型语句和输入输出
  • 习惯上符号常量名用大写,变量名用小写,变量名见名知意
  • 字符常量:用单引号括起来的一个字符

char k='S';  //内存中存放的时ASCII码值

输入字符时内存中存放的是ASCII码值,每个字符都对应着一个ASCII,ASCII码大小写相差32。

先排的大写,即大写的ASCII码较小写的小。

//内存中存放的是ASCII码值
//每个字符都对应着一个ASCII码
//ASCII码大小写相差32,先排的大写
#include 
int main()
{
	int x = 65;
	char k = 'a';

	printf("%d %cn",x,x);
	printf("%d %cn",k,k);

	return 0;
}

//输出为
//65 A
//97 a

大小写的转换
#include 
int main()
{
	char a;
	printf("请输入一个小写字符:");
	scanf("%c",&a);
	printf("n该小写字符%c的大写为%c",a,a-32);
    //要是没记住大小写相差32也可以这么写
    printf("n该小写字符%c的大写为%c",a,a-('a'-'A'));

	return 0;
}

字符串常量:

  • 双引号括起来的,如"pro"
  • 字符串在内存中所占用的空间为:字符串长度加一,因末尾默认有'',一个字符串停止的标记

字符'5'变为数字5(字符串变数字)
#include 
int main()
{
	//字符'5'变为数字5
	char ch='5';
	printf("%d",ch-'0');

	//字符串"16"变为数字16
	//用getchar()读字符
    //然后用字符变数字

	
	return 0;
}

 练习:已知圆的半径,计算圆的面积

思考:变量:圆的半径、面积

           圆周率为常量

#include 
#define pi 3.14
int main()
{
	int r;
	double area;
	printf("请输入圆的半径:");
	scanf("%d",&r);
	area = pi * r * r;
	printf("圆的面积为%.2lf",area);

	return 0;
}

一些常用的格式说明符


putchar和getchar

char ch;

ch=getchar();

putchar(ch); 

#include 
int main()
{
	
	int k;
	char ch;
	scanf("%d%c",&k,&ch);//若输入15a则输出15 a
                         //若输入15 a则输出15  
                         //因%c读入的是“ ”
                         //解决办法:加一句getchar();
	printf("%d %cn",k,ch);

	return 0;
}

赋值和算数运算关系 运算逻辑运算

前两章复习方法有些慢,马上就要考试了,于是改为易错知识点+例子+习题

  • 复合赋值运算符间不能有空格,例:+=
  • 强制类型转换
  • 把float或double类型强制换为int型时,取整数部分,不会四舍五入。

double d=1.33;

int x;

x=(int)d;

//则x=3

//注意:d未改变

用于int做除法

int a=7,b,c;

b=a/3;   //b=2

c=(float) a/3    //c=7÷3

  • 逻辑运算符

表示ch为小写字母

(’a‘<=ch) && (ch<='A')

  •  自增++、自减--运算符

int x=1,y=2,result;

result=x*(y++);  //result=2,y=3

result=x*(++y);  //result=3,y=3


 输入字符串"1024",得到整形1024
#include 
int main()
{
	int a, b, c, d;
	int result;
	a = getchar() - '0';
	b = getchar() - '0';
	c = getchar() - '0';
	d = getchar() - '0';
	result = a * 1000 + b * 100 + c * 10 + d;
	printf("result=%d",result);
	
	return 0;
}

取一个四位数1024的个十百千位
#include 
int main()
{
	int a=1024;
	int ge, shi, bai, qian;
	ge = a % 10;
	shi = a / 10 % 100;
	bai = a / 100 % 10;
	qian = a / 1000;
	printf("ge=%dnshi=%dnbai=%dnqian=%dn",ge,shi,bai,qian);

	return 0;
}

C语言的基本控制结构

选择结构

switch case语句

switch(表达式)        //若表达式语句与case中常量符合,则执行该case

{

        case 常量1:

                语句1;

                break;

        case 常量2:

......

        default:

                语句;

}

输入一个整数,求该整数的绝对值

#include 
int main()
{
	int input, output;
	printf("Enter integer:");
	scanf("%d",&input);

	if (input < 0)
		output = -input;
	else
		output = input;

	printf("该整数的绝对值为:%d",output);

	return 0;
}

判断一个数是否为偶数,是打印它本身,不是打印它的二倍

#include 
int main()
{
	int input;
	printf("Enter integer:");
	scanf("%d", &input);

	if(input%2==0)
		printf("%d", input);
	else
		printf("%d", 2*input);

	return 0;
}

读一个字符,若是小写换大写打印,不是打印本身

#include 
int main()
{
	char input;
	scanf("%c", &input);

	if (input >= 'a' && input <= 'z')  //记得写等于!!!
		printf("%c", input - 32);
	else
		printf("%c",input);

	return 0;
}

从键盘输入三个数,输出其中最大的

#include 
int main()
{
	int x, y, z, max;
	scanf("%d%d%d",&x,&y,&z);
	max = x;
	if (max < y)
		max = y;
	if (max < z)
		max = z;
	printf("%d",max);

	return 0;
}

输入三个数,按从小到大输出

先确定最小,再确定第二小

#include 
int main()
{
	int x, y, z, t;
	scanf("%d%d%d", &x, &y, &z);
	if (x > y) {
		t = x;
		x = y;
		y = t;
	}
	if (x > z) {
		t = z;
		z = x;
		x = t;
	}
	if (y > z) {
		t = y;
		y = z;
		z = t;
	}
	printf("%d<%d<%d",x,y,z);

	return 0;
}

输入一个格式为x+y的二元算数运算表达式,输出这个表达式的计算结果(计算器)
#include 
int main()
{
	double a, b, c;
	char operator1;
	printf("请输入一个表达式(如x+y)");
	scanf("%lf%c%lf",&a,&operator1,&b);
	
	switch (operator1)
	{
	case '+':
		c = a + b;
		break;
	case'-':
		c = a - b;
		break;
	case'*':
		c = a * b;
		break;
	case'/':
		c = a / b;
		break;
	default:
		printf("Input Error!");
	}

	printf("%.2lf%c%.2lf=%.2lf",a,operator1,b,c);
	return 0;
}

键盘输入坐标,判断象限

#include 
int main()
{
	int x, y;
	printf("请输入坐标x,y(x,y不为0):");
	scanf("%d,%d",&x,&y);
	switch ((x>0)+2*(y>0)) //若为真,则为一
	{
	case 0:
		printf("第三象限");
		break;
	case 1:
		printf("第四象限");
		break;
	case 2:
		printf("第二象限");
		break;
	case 3:
		printf("第一象限");
		break;
	default:
		printf("Input Error!");
	}
	
	return 0;
}

#include 
int main()
{
	int a, b, c;
	char op;
	scanf("%d%c%d",&a,&op,&b);
	switch (op) {
	case '+':
		c = a + b;
		break;
	case '-':
		c = a - b;
		break;
	case '*':
		c = a * b;
		break;
	case '/':
		c = a / b;
		break;
	}
	printf("%d%c%d=%d",a,op,b,c);

	return 0;
}

#include 
int main()
{
	double t, y;
	printf("请输入t:");
	scanf("%lf",&t);
	//用if语句
	if (t >= 0 && t < 1)
		y = t * t;
	else if (t >= 1 && t < 2)
		y = t * t - 1;
	else if (t >= 2 && t < 3)
		y = t * t - 2 * t + 1;
	//用switch语句
	switch ((int)t)
	{
	case 0:
		y = t * t;
		break;
	case 1:
		y = t * t - 1;
		break;
	case 2:
		y = t * t - 2 * t + 1;
		break;
	}

	printf("y=%.2lf",y);

	return 0;
}

循环结构

要记得i++啊!!!!

while(循环表达式)

{

        循环体

}

 for(表达式1;表达式2;表达式3)

{

        循环体

}

有两种情况:1、知道循环次数:用for

                      2、不知道循环次数:while(1) 


求1到10的累加和
#include 
int main()
{
	int i=1, s = 0;
	while (i <= 10)
	{
		s += i;
		i++;
	}
	printf("1到10的累加和为:%d",s);
	return 0;
}

从键盘读一个数,求1到这个数之间所有整数的和

#include 
int main()
{
	int i = 1, s = 0, x;
	scanf("%d",&x);
	while (i <= x) {
		s += i;
		i++;
	}
	printf("1到%d之间所有整数的和为:%d",x,s);

	return 0;
}

从键盘读两个数,求这两个数之间所有整数的和

#include 
int main()
{
	int y, s = 0, x;
	scanf("%d%d", &x,&y);
	while (x<=y) {
		s += x;
		x++;
	}
	printf("整数的和为:%d",s);

	return 0;
}

从键盘读两个数,求这两个数之间所有整数的和,读入的第一个数可能比第二个大

#include 
int main()
{
	int s = 0, x, y, t;
	scanf("%d%d",&x,&y);
	if (x > y) {
		t = x;
		x = y;
		y = t;
	}
	while (x <= y) {
		s += x;
		x++;
	}
	printf("整数的和为:%d", s);
	return 0;
}

从键盘读入十个整数,计算它们的平均值
#include 
int main()
{
	int x, sum = 0, i = 0;
	double ave;
	while (i < 10) {
		scanf("%d",&x);
		sum += x;
		i++;
	}
	ave = sum * 1.0 / 10;
	printf("%.2lf",ave);

	return 0;
}

从键盘读入十个整数,求它们中偶数的和

#include 
int main()
{
	int x, sum = 0, i = 0;
	
	while (i < 10) {
		scanf("%d",&x);
		if(x%2==0)
			sum += x;
		i++;
	}
	
	printf("%d",sum);

	return 0;
}

从键盘读入十个整数,求它们中偶数的个数

#include 
int main()
{
	int x, i = 0, count = 0;
	while (i < 10) {
		scanf("%d",&x);
		if (x % 2 == 0)
			count++;
		i++;
	}
	printf("%d",count);

	return 0;
}

从键盘读若干个数求和,输入负数时结束

#include 
int main()
{
	int x, sum = 0;
	while (1) {
		scanf("%d",&x);
		if (x >= 0) {
			sum += x;
		}
		else
			break;
	}
	printf("%d",sum);

	return 0;
}

求1~100中所有偶数之和
#include 
int main()
{
	int sum = 0, i;
	for (i = 1; i <= 100; i++) {
		if (i % 2 == 0)
			sum += i;
	}
	printf("%d",sum);

	return 0;
}

求n!
#include 
int main()
{
	int i, f=1,n;
	scanf("%d",&n);
	for (i = 1; i <= n; i++) {
		f = f * i;
	}
	printf("%d",f);

	return 0;
}

十个数中找大的
#include 
int main()
{
	int x, i, max;
	scanf("%d",&x);
	max = x;
	for (i = 1; i < 10; i++) {
		scanf("%d",&x);
		if (max < x)
			max = x;
	}
	printf("max=%d",max);

	return 0;
}

从键盘读入一行字符,统计其中包含的数字字符个数,并输出
#include 
int main()
{
	int count = 0;
	char ch;
	while (1) {
		ch = getchar();
		if (ch == 'n')
			break;
		if (ch >= '0' && ch <= '9')
			count++;
	}
	printf("%d",count);

	return 0;
}

可多次输入的计算器程序的编写

#include 
int main()
{
	char op,button;
	double a, b, c;
	printf("打开计算器输入s,关闭计算器输入e。n");
	
	while (1) {
		printf("请输入:");
		scanf("%c",&button);
		//printf("%c",button);
		if (button == 'e')
			break;
		if (button == 's') {
			scanf("%lf%c%lf", &a, &op, &b);
			switch (op) {
			case '+':
				c = a + b;
				break;
			case '-':
				c = a - b;
				break;
			case '*':
				c = a * b;
				break;
			case '/':
				c = a / b;
				break;
			}
			printf("c=%.2lf", c);
		}
		
		else if (button == 'e')
			break;
	}

	return 0;
}

计算机算法初步

循环嵌套

打印10个*,打印五行

外循环i控制五行

内循环j控制每行星花数

#include 
int main()
{
	int i, j;
	for (i = 1; i <= 5; i++) {
		for (j= 1; j <= 10; j++) {
			printf("*");
		}
		printf("n");
	}

	return 0;
}

打印3*3的矩阵

#include 
int main()
{
	int i, j, x;
	x = 1;
	for (i = 1; i <= 3; i++) {
		for (j = 1; j <= 3; j++) {
			printf("%d ",x );
			x++;
		}
		printf("n");
	}

	return 0;
}

打印星花(倒过来的三角形)

#include 
int main()
{
	int i, j;
	for (i = 1; i <= 3; i++) {
		for (j = 1; j <= 3-i; j++)
			printf(" ");
		for (j = 1; j <= 2 * i - 1; j++)
			printf("*");
		printf("n");
	}

	return 0;
}

最大公约数

r=m%n,r==0时,n即为所求最大公约数。

14%21=14,若不做第一步比大小、交换,则多循环一次

#include 
int main()
{
	int m, n, r,t;
	scanf("%d%d",&m,&n);
	if (m < n) {
		t = n;
		n = m;
		m = t;
	}
	r = m % n;
	while (r != 0) {
		m = n;
		n = r;
		r = m % n;
	}
	printf("最大公约数为:%d",n);

	return 0;
}

最小公倍数

三种方法,逐渐优化(求m,n的最小公倍数,若不理解可先实例化,再抽象)

  1. 从1到m*n遍历
  2. 最小公倍数一定≥它们中的任意一个,故从m或n开始遍历
  3. 最小公倍数一定是m或n的整数倍,若为m的整数倍,则1到n遍历(m到m*n见第二个),m的整数倍%n==0时,该m的整数倍即为最小公倍数
#include 
int main()
{
	int m, n, k;
	scanf("%d%d",&m,&n);
	for (k = 1; k <= m * n; k++) {
		if (k % m == 0 && k % n == 0) {
			printf("最小公倍数为:%d", k);
			break;
		}
	}

	return 0;
}
#include 
int main()
{
	int m, n, k;
	scanf("%d%d", &m, &n);
	for (k = m; k <= m * n; k++) {
		if (k % m == 0 && k % n == 0) {
			printf("最小公倍数为:%d", k);
			break;
		}
	}

	return 0;
}
#include 
int main()
{
	int m, n, k;
	scanf("%d%d", &m, &n);
	for (k = 1; k <= n; k++) {
		if (k * m % n == 0) {
			printf("最小公倍数为:%d", k * m);
			break;
		}
	}

	return 0;
}

请编写程序输出100到999之内的偶数,每行打印10个数

问题:不知道有几行→用while循环行

打印10个数后,j++

跳出列数循环后,i++

注意各循环跳出的判断,否则多打一行1000(因998≤999成立,继续循环10次)

int main()
{
	int i = 100 , j;
	while(1){
		for (j = 1; j <= 10; ) {
			if (i % 2 == 0) {
				printf("%d ", i);
				j++;
			}
			i++;
			if (i > 999)
				break;
		}
		
		printf("n");
		if (i > 999)
			break;
	}

	return 0;
}

 对于输入的一个正整数,判断其是否是素数。如果输入的不是一个正整数,还要求输出“Input error!”并提示用户重新输入直到输入正确为止。 

#include 
int main()
{
	int x, i;
	scanf("%d",&x);
	while (1) {
		if (x <= 0) {
			printf("请重新输入:");
			scanf("%d",&x);
		}
		else
			break;
	}
	for (i = 2; i < x; i++) {
		
		if (x % i == 0)
			break;
	}
	if (i == x)
		printf("%d是素数",x);
	else
		printf("%d不是素数",x);

	return 0;
}

 对于输入的正整数n和k,要求输出n以内最大的前k个素数,以及这些素数的和。 

测试说明

输入: 9994,7

输出: 9973,9967,9949,9941,9931,9929,9923,sum=69613


穷举法判断一个数是否为素数(从此处开始只复习了关键的)

当遍历一遍仍未能整除,i=(x-1)+1=x

#include 
int main()
{
	int x, i;
	scanf("%d",&x);
	for (i = 2; i <= x - 1; i++) {
		if (x % 2 == 0)
			break;
	}
	if (i == x)
		printf("是素数");
	else
		printf("不是素数");

	return 0;
}

打印100到200间所有素数

打印100到200间所有素数,打印时5个一行

待续


递推与迭代法

数据的组织结构

一维数组

特点:

  • 数组中的元素的类型相同
  • 一个数组占用一段连续的内存空间
  • 须预知数组元素的个数
  • 数组名存放数组首地址
  • 数组元素下标从0开始

初始化时可以只给一部分数组元素赋初值,未赋的认定为零

int a[10]={0};        //清零


基本操作:赋值、接收数据、输出、求和
#include 
int main()
{
	int a[10],b[3];
	int i,sum=0;
	//赋值
	for (i = 0; i < 10; i++) {
		a[i] = i + 1;
	}
	//接收数据
	for (i = 0; i < 3; i++) {
		scanf("%d",&b[i]);
	}
	//输出
	for (i = 0; i < 10; i++)
		printf("%d ",a[i]);
	printf("n");
	for (i = 0; i < 3; i++)
		printf("%d ", b[i]);
	printf("n");
	//求和
	for (i = 0; i < 10; i++) {
		sum += a[i];	
	}
	printf("n");
	printf("%d ", sum);

	return 0;
}

找数组元素最大值及其下标
#include 
int main()
{
	int max = 0, p = 0, i;
	int a[10] = {1,5,8,3,4,2};
	for (i = 0; i < 10; i++) {
		if (max < a[i]) {
			max = a[i];
			p = i;
		}
	}
	printf("最大值为:%d,最大值下标为:%d",max,p);

	return 0;
}

将数组中元素逆序排列
#include 
int main()
{
	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i, j, t;
	for (i = 0, j = 9; i < j; i++, j--) {
		t = a[i];
		a[i] = a[j];
		a[j] = t;
	}
	for (i = 0; i < 10; i++) {
		printf("%d ",a[i]);
	}

	return 0;
}

数组a有n个元素,向数组下标为k的位置插入一个元素x

把有数的往没数的挪,故先从数组的最后开始

要记得插入后数组元素增加

#include 
int main()
{
	int a[10] = { 1,2,3,4 };
	int i, n=4,k = 2, x = 10;
	for (i = n-1; i >=k; i--) {
		a[i + 1] = a[i];
	}
	a[k] = x;
	n++;
	for (i = 0; i < 9; i++) {
		printf("%d ",a[i]);
	}

	return 0;
}

数组a有n个元素,删除数组下标为k的元素
#include 
int main()
{
	int a[10] = { 1,2,3,4 };
	int i, n = 4, k = 2;
	for (i = k; i  

歌唱比赛评分

#include 
int main()
{
	int n = 5;
	int a[5];
	int i, min = 0, max = 0,sum=0;
	double average;
	
	for (i = 0; i < n; i++) {
		scanf("%d",&a[i]);
	}
	
	for (i = 0; i < n; i++) {
		if (a[max] < a[i])
			max = i;
		if(a[min]>a[i])
			min=i;
	}

	for (i = min; i < n; i++) {
		a[i] = a[i + 1];
	}
	n--;

	for (i = max; i < n; i++) {
		a[i] = a[i + 1];
	}
	n--;

	for (i = 0; i < n; i++) {
		sum += a[i];
	}

	for (i = 0; i < n; i++) {
		printf("%d ",a[i] );
	}

	average = sum * 1.0 / n;
	printf("average=%.2lf",average);

	return 0;
}

数组的排序和查找

选择排序

升序排列

共n个数,第一轮找出最小值与第一个数比大小,如果最小值不是第一个数的值,交换两数值,故外循环n-1次(至少两数比大小),内循环从i+1开始(先将第i个数看作最小值,每轮i++)

#include 
int main()
{
	int n = 10;
	int a[10] = { 5,1,8,3,4,9,45,32,8,7 };
	int min, i, j, t;

	for (i = 0; i < n - 1; i++) {
		min = i;
		for (j = i + 1; j < n; j++) {
			if (a[min] > a[j])
				min = j;
		}
		if (min != i) {
			t = a[min];
			a[min] = a[i];
			a[i] = t;
		}
	}

	for (i = 0; i < n; i++) {
		printf("%d ",a[i]);
	}


	return 0;
}

冒泡排序

顺序查找

遍历

记得给flag赋初值

#include 
int main()
{
	int input,i,flag=0;
	int a[10] = { 5,1,8,3,4,9,45,32,8,7 };
	int n = 10;
	scanf("%d",&input);

	for (i = 0; i < n; i++) {
		if (input == a[i]) {
			printf("%d",i);
			flag = 1;
		}
	}

	if (flag==0) {
		printf("未找到该值");
	}

	return 0;
}

输入 第一行输入一个整数n,值小于50。 第二行包含n个非负整数,为给定的数列。 第三行包含一个整数a,为待查找的数。

输出 如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。输出格式"%d"

#include 
int main()
{
	int arr[50];
	int n, i, a, flag=0;
	scanf("%d",&n);
	for (i = 0; i < n; i++) {
		scanf("%d",&arr[i]);
	}
	scanf("%d",&a);

	for (i = 0; i < n; i++) {
		if (arr[i] == a) {
			printf("%d", i);
			flag = 1;
			break;
		}
	}

	if (flag == 0)
		printf("%d",-1);

	return 0;
}

二分查找

若找到,则提前break,low<=high

#include 
#define NUM 10
int main()
{
	int value[NUM] = { 5,13,19,21,37,56,64,75,80,88 };
	int key;
	int low, high, mid;

	scanf("%d",&key);

	low = 0;
	high = NUM - 1;
	while (low <= high) {
		mid = (low + high) / 2;
		if (value[mid] == key)
			break;
		else if (value[mid] < key)
			low = mid + 1;
		else
			high = mid - 1;
	}
	if (low <= high)
		printf("位置为%d", mid);
	else
		printf("未找到");

	return 0;
}

输入 输入包括3行,第一行为整数n,第二行包括n个从小到大的整数,以空格分隔,第三行为整数m。

输出 如果在序列中找到整数m,则输出下标,格式"%d";如果不存在,则输出None。 

#include 
int main()
{
	int n, m, a[50];
	int mid, low, high, i;

	scanf("%d",&n);
	for (i = 0; i < n; i++) {
		scanf("%d",&a[i]);
	}
	scanf("%d",&m);

	low = 0; high = n - 1;
	while(low<=high){
		mid = (low + high) / 2;
		if (a[mid] == m)
			break;
		else if (a[mid] < m)
			low = mid + 1;
		else
			high = mid - 1;

	}

	if (low <= high)
		printf("%d", mid);
	else
		printf("None");

	return 0;
}

输入10个互不相同的整数并保存在数组中,找到该最大元素并删除它,输出删除后的数组 

注意不要超出数组最大范围(第三个for循环处)

#include 
int main()
{
	int a[10],n=10;
	int max,i;
	for (i = 0; i < n; i++) {
		scanf("%d",&a[i]);
	}
	max = 0;
	for (i = 0; i < n; i++) {
		if (a[max] < a[i])
			max = i;
	}

	for (i = max+1; i < n; i++) {
		a[i-1] = a[i ];
	}
	n--;
	for (i = 0; i < n; i++) {
		printf("%d ",a[i]);
	}

	return 0;
}

一维数组和字符串
  • 定义和输出

末尾记得写'',否则会输出乱码

    char d[] = { 'c','h','i',''};
    printf("%s",d);

  • 字符串的输出

printf和puts输出结果不同

    char s1[] = "abc";
    char s2[] = "def";
    puts(s1);
    puts(s2);
    printf("%s%s",s1,s2);

  • 字符串的输入

gets()和scanf

注意,都可用回车作为分隔符,但scanf的分隔符还有空格


 从键盘输入两个字符串,将这两个字符串连起来作为一个字符串,输出该字符串

思路:找s1的末尾,将s2接到s1的末尾,修复s1

#include 
int main()
{
	char s1[80];
	char s2[80];
	int i = 0, j = 0;
	gets(s1);
	gets(s2);

	while (s1[i] != '')	//跳出循环后的i为s1的末尾
		i++;

	while (s2[j] != '') {	//把s2中的每个元素放入s1中,当s2中没有元素可放了,跳出循环
		s1[i] = s2[j];
		i++;	//放完一个,挪到下一个格子
		j++;	//放完一个,挪到下一个要放的东西
	}

	//跳出循环后,此时i的下标位置为s1末尾的位置,字符数组末尾要加''
	s1[i] = '';
	puts(s1);

	return 0;
}

中的函数
  • 字符串比较strcmp(str1,str2)
返回值字符串比较
=0两字符串相等
  • 字符串拷贝strcpy(str1,str2)

将str2的内容拷贝到str1,函数返回str1

  • 计算字符串长度strlen(str)

该长度不包括'' 

  • 字符串连接strcat(str1,str2)

结果与上例相同,不过用了函数


把一个字符串按逆序存放

与把数组中的元素逆序存放相似,不过j=strlen(str)-1 (数组中初值j=n-1)

易错点总结
  • 循环时不写i++
  • 判断时不写=,例:判断一个字符是否为数字 '0'<=ch && ch<='9'
  • 循环嵌套时忘写外循环的控制量
  • scanf时写&

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347291.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号