编程语言 | C | 代码整理 | 3月 && 5月

萧伯纳:"如果你教一个人什么事,他永远学不会!

编程语言 | C | 代码整理 | 3月 && 5月

在这里插入图片描述

2019/3/22

1.简单程序编辑
#include <stdio.h>       //编译预处理指令    "...."系统目录
int main()               //定义主函数
{                        //函数开始的标志
	printf("This is a C program.\n");  //输出所指定的一行信息
	system("pause");     //暂停
	return 0;            //函数结束的标志  作用:当mian函数执行结束前将
	                     //之后整数0作为函数值,返回到调用函数处
}
运行结果:
THIS is a C program.
Press any key to continue_

2.设置3个变量, a和b用来存放两个整数, sum用来存放合数.用赋值运算符"="把
相加的结果传给sum.
#include <stdio.h>              //编译预处理指令
int main()                      //定义主函数
{                               //函数开始
	int a, b, sum;              //程序的声明部分,定义a.b,sum为整形变量
	a = 123;                    //对变量a进行赋值
	b = 456;                    //对变量b进行赋值
	sum = a + b;                //进行a+b的运算,把结果存放在变量sum中
	printf("sum is %d\n",sum);  //输出结果
	system("pause");            //暂停
	return 0;                   //使函数返回值为0
}                               //函数结束

3.#include <stdio.h>
int main(){
	printf("%\n", sizeof(char));       // 1
	printf("%\n", sizeof(short));      // 2     
	printf("%\n", sizeof(int));        // 4
	printf("%\n", sizeof(long));       // 4  
	printf("%\n", sizeof(long long));  // 8
	printf("%\n", sizeof(float));      // 4
	printf("%\n", sizeof(double));     // 8
	printf("%\n", sizeof(long double));// 8
	return 0;     // sizeof 是C语言中的运算符,功能是告诉我们
}                //我们某个变量或者某个类型占了几个字节
数据类型:
char        //字符数据类型   -128---+127       0-255        1个字节
short       //短整型         -32768---+32767   0-65535     2个字节
int         //整形           -21亿---+21亿     0-49亿       4个字节              
long        //长整型                                        4个字节
long long   //更长的整形                                    8个字节
float       //单精度浮点型                                  4个字节
double      //双精度浮点型                                  8个字节

4.变量
#define _CRT_SECURE_NO_WARNINGS_
#include <stdio.h>
#include <stdlib.h>
	int a = 10;           //全局变量
int mian(){
	int num1 = 0;         // 局部变量
	int num2 = 0;         //局部变量
	printf("请输入两个整数: ");  
	scanf("%d %d,&num1, &num2");
	int result = num1 + num2;
	printf("result=%d\n",result);
	system("pause");            
	return 0;
}
区别:1.对于局部变量来说, 作用域为当前代码块, 生变周期也是当前代码块;
     2.对于全局变量来说, 作用域为整个工程, 生命周期是整个程序的运行过程.
5.字符串 + 转义字符 + 注释
字符串 : 有双引号引起来的一串字符称为字符串字面值, 字符串的结束标志是一个
	  \0 转义字符.
  转义字符: printf("My name is \"Yangjie\"");
//    \"...\"在字符串内部就可以使用
\t          在C语言中表示制表符(Tab)
\n          表示换行
\\          用于表示一个\
\ ?         在书写连续多个问号的使用, 防止他们被解析成三字母词
\'          用于表示字符常量
\"          用于表示一个字符串内部的双引号
\a          警告字符
\b          退格符
\f          进纸符
\r          回车
\ddd        表示1-3个八进制的数字
\xddd       表示3个十六进制的数字

%d          格式化字符串,表示即将打印一个十进制的有符号整数
%x          格式化字符串,表示即将打印一个十六进制的有符号整数
%p          用来打印指针变量,打印一个无符号的十六进制整数
%s          打印一个字符串

#include <stdio.h>
#include <string.h>
int main(){
	printf("%d\n",strlen("abcdef"));         //求字符串长度
	printf("%d\n",("c:\test\328\test.c"));   //\32被解析成一个转义字符
	system(pause);
	return 0;
}
注释:
ctrl + k ctrl + c    取消  ctrl + k  ctrl + u;   /**/   //

6.
#define _CRT_SECURE_NO_WARNINGS_
#include <stdio.h>
#include <stdlib.h>
int main(){
	int coding = 0;
	printf("你愿意认真敲代码吗? 1表示愿意 0表示不愿意\n");
	scanf("%d",coding);
	if (coding == 1){
		printf("您会得到好的offer!\n");
	}
	else if (coding == 0){
		printf("做一辈子普通人吧!\n");
	}
	else{
		printf("您的输入有误!\n");
	}
	system("pause");
	return 0;
}

7.循环语句
(1)while语句
(2)for语句
(3)do...while语句

8.函数
#include <stdio.h>
int Add(int x, int y){           //函数体
	int z = x + y;     
	return z;
}
int mian(){
	int num1 = 0;
	int num2 = 0;
	int sum = 0;
	printf("请输入两个整数: ");
	scanf("%d %d,&num1, &num2");
	sum = Add(x,y);              //函数的调用
	system("pause");
	return 0;
}

9.数组
#include <stdio.h>
int main(){
	int i = 0;
	int arr[10] = {0,1,2,3,4,5,6,7,8,9}
	for (i = 0; i < 10;++i){
		printf("%d",arr[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}

10.操作符
(1)算术操作符
+   -   *   /    %
(2)移位操作符
>>      <<    //按二进制移位
(3)位操作符
&(按位与) ^ (按位异或) | (按位或)
(4)赋值操作符
=  +=  -=  *=  /= &=  ^=  |=  >>=  <<=
(5)单目操作符
!            逻辑反操作
-            负值
+            正值
&            取地址
sizeof       操作符的类型长度(以字节为单位)
~            对一个二进制数按位取反
++           前置,后置++
--           前置,后置--
*            间接访问操作符
(6)关系操作符
>            
>=
<
<=
!=           "不相等"
==           "相等"
(7)逻辑操作符
&&            逻辑与
||            逻辑或
(8)条件操作符
exp1 ? exp2 : exp3
(9)逗号表达式
exp1,exp2,exp3,...expn
(10)下标引用 函数调用和结构成员
[]     ()      .       ->

11.常见关键词
auto  break  case  char  const  continue  default  do  double  else
enum  extern  float for  goto  if   int  register  return  short  
signed  sizeof  static  struct  switch  typedef   union  unsigned
void  volatile   while
关键词:typedef   (类型重命名)
关键词 : static   在C语言中,是用来修饰变量和函数的
	  (1)修饰局部变量,改变变量的生命周期,生命周期跟随整个程序
	  (2)修饰全局变量,改变作用域,只在当前文件中生效
	  (3)修饰函数
	  
12.#define 定义常量和宏
13.指针 
int main(){
	int num = 0;
	printf("%p",&num);
	return 0;
}

14.结构体
struc stu{
	char name[1024];  
	int age;
	char sex[5];
	char id[18];
}

2019/3/23

1.判断一个数是否为奇数

#include <stdio.h>
#include <stdlib.h>

int IsOdd(int x){
	if (x % 2 == 0){
		return 0;    //判定x是否为奇数,如果是输出1,否则为0
	}
	return 1;
}

int main(){
	printf("%d\n", IsOdd(11));
	system("pause");
	return 0;
}
    
运行结果:
1
    
2.输出1-100之间的奇数
#include <stdio.h>
#include <stdlib.h>

int IsOdd(int x){
	if (x % 2 == 0){
		return 0;    //判定x是否为奇数,如果是输出1,否则为0
	}
	return 1;
}  

int main(){
	int num = 1;
	while (num <= 100){
		if (IsOdd(num)){
			printf("%2d ", num);
		}
		num += 1;
	}
	system("pause");
	return 0;
}

运行结果:
1  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45
 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 
 91 93 95 97 99

3.switch的注意事项

 - break不能缺少
 - 最好加上default
 - switch中判定的变量必须是整数
 - case语句中只能有一个整数变量,不能写变量,更不能写表达式


#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
	printf("请输入今天是星期几: ");
	int day = 0;
	scanf("%d", &day);
	switch (day){
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期天\n");
		break;
	default:
		printf("您的输入有误!\n");
		break;
	}
	system("pause");
	return 0;
}

运行结果:
请输入今天是星期几 : 2
	星期二
请输入今天是星期几: 8
	您的输入有误!




#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	printf("请输入今天是星期几: ");
	int day = 0;
	scanf("%d", &day);
	if (day == 1 || day == 2 || day == 3 || day == 4 || day == 5){
		printf("weekday\n");
	}
	else if (day == 6 || day == 7){
		printf("weekend\n");
	}
	system("pause");
	return 0;
}

运行结果:
请输入今天是星期几 : 7
	weekend
请输入今天是星期几: 1
	weekday


4.打印1-1010个数
#include <stdio.h>
int main(){
	int i = 1;
	while (i<11){
		printf("%d ", i);
		i += 1;
	}
	system("pause");
	return 0;
}

运行结果:
1 2 3 4 5 6 7 8 9 10 请按任意键继续. . .


5.循环1-1010个数,遇到第一个3的倍数就停止循环
#include <stdio.h>
int main(){
	int i = 1;
	while (i<11){
		printf("%d\n", i);
		if (i % 3 == 0){
			break;
		}
		i += 1;
	}
	system("pause");
	return 0;
}

运行结果:
1
2
3

6.判断元素为质数或者合数

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i;
	int n;
	scanf("%d", &n);
	for (i = 2; i < n; ++i){
		if (n % i == 0){
			printf("是合数\n");
			break;
		}
	}
	if (i == n){
		printf("是质数\n");
	}
	system("pause");
	return 0;
}

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i;
	int n;
	int flag = 0;
	scanf("%d", &n);
	for (i = 2; i < n; ++i){
		if (n % i == 0){
			flag = 1;
			printf("是合数\n");
			break;
		}
	}
	if (flag == 0){
		printf("是质数\n");
	}
	system("pause");
	return 0;
}

7.计算n!

#include <stdio.h>
#include <stdlib.h>
int Factor(int n){
	int result = 1;
	int i;
	for (i = 1; i <= n; ++i){
		result *= i;
	}
	return result;
}

int main(){
	printf("%d\n", Factor(10));
	system("pause");
	return 0;
}

运行结果:
3628800

计算1!+2!+3!+...+n!


#include <stdio.h>
#include <stdlib.h>
int Factor(int n){
	int result = 1;
	int i;
	for (i = 1; i <= n; ++i){
		result *= i;
	}
	return result;
}
int main(){
	int sum = 0;
	int i;
	for (i = 1; i <= 10; ++i){
		sum += Factor(i);
	}
	printf("sum = %d\n", sum);
	system("pause");
	return 0;
}

运行结果:
sum = 15989652

8.welcome to shaanxi!


#include <stdio.h>                 //标准库文件
#include <stdlib.h>
#include <windows.h>               //系统函数文件
int main(){
	char str1[] = "welcome to shaanxi!";
	char str2[] = "###################";
	int left = 0;
	int right = strlen(str2) - 1;  //获取最后一个下标
	while (left <= right){
		printf("%s\n", str2);
		str2[left] = str1[left];
		str2[right] = str1[right];
		++left;
		--right;
		Sleep(1000);               //毫秒 dwmilliseconds
		//system("cls");           //清除
	}
	system("pause");
	return 0;
}

运行结果:
###################
w#################!
we###############i!
wel#############xi!
welc###########nxi!
welco#########anxi!
welcom#######aanxi!
welcome#####haanxi!
welcome ###shaanxi!
welcome t# shaanxi!
请按任意键继续. . .

9.查找一个数是否存在.
#include <stdio.h>                
#include <stdlib.h>
int main(){
	int arr[4] = { 9, 5, 2, 7 };
	int to_find = 2;
	int i;
	//遍历
	for (i = 0; i < 4; ++i){
		if (arr[i] == to_find){
			break;
		}
	}
	if (i == 4){
		printf("不存在!\n");
	}
	else{
		printf("存在!\n");
	}
	system("pause");
	return 0;
}

运行结果:
存在

2019/3/24

//1.给定两个整型变量的值,将两个值的内容进行交换
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a = 5, b = 10, tmp;
	tmp = a;
	a = b;
	b = tmp;
	printf("a=%d,b=%d\n", a, b);
	system("pause");
	return 0;
}

//2.给定两个整型变量的值,将两个值色内容进行交换(不创建临时变量)
//法一 普通操作
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a = 5, b = 10;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("a=%d,b=%d\n", a, b);
	system("pause");
	return 0;
}

//法二 异或操作
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a = 5, b = 10;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d,b=%d\n", a, b);
	system("pause");
	return 0;
}

//3.求10个整数中的最大值
//法一
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i;
	int max;
	int tmp;
	scanf("%d", &max);
	for (i = 1; i < 10; ++i){
		scanf("%d", &tmp);
		if (tmp>max){
			max = tmp;
		}
	}
	printf("%d", max);
	system("pause");
	return 0;
}

//法二
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i;
	int max;
	int tmp;
	int first = 1;
	for (i = 0; i < 10; ++i){
		scanf("%d", &tmp);
		if (first){
			max = tmp;
			first = 0;
			continue;
		}
		if (tmp>max){
			max = tmp;
		}
	}
	printf("%d", max);
	system("pause");
	return 0;
}

//求10个数中的次大值
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i = 1;
	int max, next;
	int tmp;
	scanf("%d %d", &max, &next);
	for (i = 2; i < 10; ++i){
		scanf("%d", &tmp);
		if (next>max){
			tmp = max;
			max = next;
			next = tmp;
		}if (tmp > max){
			next = max;
			max = tmp;
		}
		else if (tmp > next){
			next = tmp;
		}
	}
	printf("max= %d,next= %d\n", max, next);
	system("pause");
	return 0;
}

//4.将三个整数从大到小输出
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i;
	int max, next;
	int tmp;
	scanf("%d %d", &max, &next);
	if (next > max){
		tmp = max;
		max = next;
		next = tmp;
	}
	scanf("%d", &tmp);
	if (tmp > max){
		printf("%d %d %\n", tmp, max, next);
	}
	else if (tmp > next){
		printf("%d %d %\n", max, tmp, next);
	}
	else{
		printf("%d %d %\n", max, next, tmp);
	}
	for (i = 2; i < 4; ++i){
		scanf("%d", &tmp);
	}
	system("pause");
	return 0;
}

//5.求两个数的最大公约数
//法一
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a, b;
	int max = 0;
	int i;
	scanf("%d %d", &a, &b);
	//for (i = 2; i < a&&i < b;++i)
	for (i = 2; i < (a < b ? a : b); ++i){
		if (a%i == 0 && b%i == 0){
			max = i;
		}
	}
	if (max == 0){
		printf("%d和%d互质\n", a, b);
	}
	else{
		printf("%d和%d的最大公约数是%d\n", a, b, max);
	}
	system("pause");
	return 0;
}

//法二
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a, b, max = 0, c;
	int i;
	scanf("%d %d", &a, &b);
	while (c = a%b){
		a = b;
		b = c;
	}if (b == 1){
		printf("互质\n");
	}
	else{
		printf("最大公约数是%d\n", b);
	}
	system("pause");
	return 0;
}

//6.将数组A中的元素内容和数组B中的元素进行交换(数组一样大)
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void printArray(int a[], int n){
	int i;
	for (i = 0; i < n; ++i){
		printf("%d", a[i]);
	}
	printf("\n");
}
int main(){
	int a[10] = { 12345678910 };
	int b[10] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
	int i, tmp;
	printArray(a, 10);
	printArray(b, 10);
	for (i = 0; i < 10; ++i){
		tmp = a[i];
		a[i] = b[i];
		b[i] = tmp;
	}
	printArray(a, 10);
	printArray(b, 10);
	system("pause");
	return 0;
}

//7.计算1/1-1/2+1/1-1/4+.........+1/99-1/100的值
#include <stdio.h>
int main(){
	int i = 0;
	double sum = 0;
	double tmp = 1;
	int flag = 1;
	for (i = 1; i <= 100; ++i){
		tmp = 1.0 / i * flag;
		sum += tmp;
		flag *= -1;
	}
	printf("%lf\n", sum);
	system("pause");
	return 0;
}

//8.编程数一下1到100之间的所有整数中出现数字9的次数
#include <stdio.h>
int main(){
	int i = 0;
	int count = 0;
	for (i = 1; i <= 1000; ++i){
		if (i % 10 == 9){
			count++;
		}if (i / 10 % 10 == 9){
			count++;
		}if (i / 100 == 9){
			count++;
		}
	}
	printf("%d\n", count);
	system("pause");
	return 0;
}

//9.continue介绍
#include <stdio.h>
int main(){
	int i = 1;
	while (i <= 10){
		if (i % 5 == 0)
			continue;
		printf("%d\n", i);
		++i;
	}
	system("pause");
	return 0;
}

//10.for循环
#include <stdio.h>
int main(){
	int i = 0;
	for (i = 1; i <= 10; ++i){
		if (i % 3 == 0){
			continue;
		}
		printf("%d\n", i);
	}
	system("pause");
	return 0;
}

//11.EOF=end of file 文件结束标记,一般表示文件读取结束
#include <stdio.h>
int main(){
	int ch = 0;
	while ((ch = getchar()) != EOF)
		putchar(ch);
	system("pause");
	return 0;
}

//12.++i i++
/*++i
i += 1;
return i;

i++
int tmp = i;
i += 1;
return tmp;
*/

//13.编写代码实现模拟用户登录,并且只能登陆三次
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(){
	int i = 0;
	for (i = 0; i < 3; i++){
		printf("请输入您的密码:");
		char password[10] = { 0 };
		scanf("%s", password);
		if (strcmp(password, "123456") == 0){
			break;
		}
	}if (i < 3){
		printf("您的密码输入正确,登陆成功!\n");
	}
	else {
		printf("您的密码输入满三次,禁止登录!\n");
	}
	system("pause");
	return 0;
}

2019/3/25

//1.打印100~200 之间的素数 
//解法一
#include <stdio.h>

int main(){
	int i = 0;
	int count = 0;
	for (i = 100; i <= 200; i++){
		int j = 0;
		for (j = 2; j <= i - 1; j++){
			if (i%j == 0)
				break;
		}
		if (i == j){
			count++;
			printf("%d ", i);
		}
     }
	printf("\ncount = %d\n", count);
	system("pause");
	return 0;
}
//解法二
#include <stdio.h>
#include <math.h>
int main(){
	int i = 0;
	int count = 0;
	for (i = 101; i <= 200; i += 2){
		int j = 0;
		for (j = 2; j <= sqrt(i); j++){
			if (i%j == 0)
				break;
		}
		if (j > sqrt(i)){
			count++;
			printf("%d ", i);
		}
	}
	printf("\ncount = %d\n", count);
	system("pause");
	return 0;
}
//2. 输出乘法口诀表 
#include <stdio.h>
#include <math.h>
int main(){
	int i = 0;
	int j = 0;
	for (i = 1; i <= 9; i++){
		for (j = 1; j <= i; j++){
			printf("%d*%d=%2d ", i, j, i*j);
		}
		printf("\n");
	}
	system("pause");
	return 0;
}
//3. 判断1000年---2000年之间的闰年
#include <stdio.h>
#include <math.h>
int main(){
	int year = 0;
	int count = 0;
	for (year = 1000; year <= 2000; year++){
		if ((year % 400 == 0) || ((year % 4 == 0) &&
			(year % 100 != 0))){
			count++;
			printf("%d ", year);
		}
	}
	printf("count=%d\n", count);
	system("pause");
	return 0;
}
//4.判定一个数是否为奇数
#include <stdio.h>
int IsOdd(int x){
	if (x % 2 == 0){
		return 0;
	}
	return 1;
}
int main(){
	printf("%d\n", IsOdd(-101));
	system("pause");
	return 0;
}
//5.输出1-100之间的奇数
#include <stdio.h>
int IsOdd(int x){
	if (x % 2 == 0){
		return 0;
	}
	return 1;
}
int main(){
	int num = 1;
	while (num <= 100){
		if (IsOdd(num) == 1){
			printf("%d\n", num);
		}
		num += 1;
	}
	system("pause");
	return 0;
}

2019/3/26

//1.给定两个整型变量的值,将两个值的内容进行交换
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a = 5, b = 10, tmp;
	tmp = a;
	a = b;
	b = tmp;
	printf("a=%d,b=%d\n", a, b);
	system("pause");
	return 0;
}
//2.给定两个整型变量的值,将两个值色内容进行交换(不创建临时变量)
//法一 普通操作
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a = 5, b = 10;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("a=%d,b=%d\n", a, b);
	system("pause");
	return 0;
}
//法二 异或操作
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a = 5, b = 10;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d,b=%d\n", a, b);
	system("pause");
	return 0;
}
//3.求10个整数中的最大值
//法一
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i;
	int max;
	int tmp;
	scanf("%d", &max);
	for (i = 1; i < 10; ++i){
		scanf("%d", &tmp);
		if (tmp>max){
			max = tmp;
		}
	}
	printf("%d", max);
	system("pause");
	return 0;
}
//法二
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i;
	int max;
	int tmp;
	int first = 1;
	for (i = 0; i < 10; ++i){
		scanf("%d", &tmp);
		if (first){
			max = tmp;
			first = 0;
			continue;
		}
		if (tmp>max){
			max = tmp;
		}
	}
	printf("%d", max);
	system("pause");
	return 0;
}
//求10个数中的次大值
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i = 1;
	int max, next;
	int tmp;
	scanf("%d %d", &max, &next);
	for (i = 2; i < 10; ++i){
		scanf("%d", &tmp);
		if (next>max){
			tmp = max;
			max = next;
			next = tmp;
		}if (tmp > max){
			next = max;
			max = tmp;
		}
		else if (tmp > next){
			next = tmp;
		}
	}
	printf("max= %d,next= %d\n", max, next);
	system("pause");
	return 0;
}
//4.将三个整数从大到小输出
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int i;
	int max, next;
	int tmp;
	scanf("%d %d", &max, &next);
	if (next > max){
		tmp = max;
		max = next;
		next = tmp;
	}
	scanf("%d", &tmp);
	if (tmp > max){
		printf("%d %d %\n", tmp, max, next);
	}
	else if (tmp > next){
		printf("%d %d %\n", max, tmp, next);
	}
	else{
		printf("%d %d %\n", max, next, tmp);
	}
	for (i = 2; i < 4; ++i){
		scanf("%d", &tmp);
	}
	system("pause");
	return 0;
}
//5.求两个数的最大公约数
//法一
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a, b;
	int max = 0;
	int i;
	scanf("%d %d", &a, &b);
	//for (i = 2; i < a&&i < b;++i)
	for (i = 2; i < (a < b ? a : b); ++i){
		if (a%i == 0 && b%i == 0){
			max = i;
		}
	}
	if (max == 0){
		printf("%d和%d互质\n", a, b);
	}
	else{
		printf("%d和%d的最大公约数是%d\n", a, b, max);
	}
	system("pause");
	return 0;
}
//法二
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int a, b, max = 0, c;
	int i;
	scanf("%d %d", &a, &b);
	while (c = a%b){
		a = b;
		b = c;
	}if (b == 1){
		printf("互质\n");
	}
	else{
		printf("最大公约数是%d\n", b);
	}
	system("pause");
	return 0;
}

2019/3/27

//1.将数组A中的元素内容和数组B中的元素进行交换(数组一样大)
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void printArray(int a[], int n){
	int i;
	for (i = 0; i < n; ++i){
		printf("%d", a[i]);
	}
	printf("\n");
}
int main(){
	int a[10] = { 12345678910 };
	int b[10] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
	int i, tmp;
	printArray(a, 10);
	printArray(b, 10);
	for (i = 0; i < 10; ++i){
		tmp = a[i];
		a[i] = b[i];
		b[i] = tmp;
	}
	printArray(a, 10);
	printArray(b, 10);
	system("pause");
	return 0;
}
//2.计算1/1-1/2+1/1-1/4+.........+1/99-1/100的值
#include <stdio.h>
int main(){
	int i = 0;
	double sum = 0;
	double tmp = 1;
	int flag = 1;
	for (i = 1; i <= 100; ++i){
		tmp = 1.0 / i * flag;
		sum += tmp;
		flag *= -1;
	}
	printf("%lf\n", sum);
	system("pause");
	return 0;
}
//3.编程数一下1到100之间的所有整数中出现数字9的次数
#include <stdio.h>
int main(){
	int i = 0;
	int count = 0;
	for (i = 1; i <= 1000; ++i){
		if (i % 10 == 9){
			count++;
		}if (i / 10 % 10 == 9){
			count++;
		}if (i / 100 == 9){
			count++;
		}
	}
	printf("%d\n", count);
	system("pause");
	return 0;
}

2019/3/28

//1.在屏幕上输出以下图案: 
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int n;
	int i, j;
	scanf("%d", &n);
	for (i = 1; i < n; i++)
	{
		for (j = 1; j <= n - i; j++)
		{
			putchar(' ');
		}
		for (j = 1; j <= 2 * i - 1; j++)
		{
			putchar('*');
		}
		putchar('\n');
	}
	//逆序打印
	for (i = n; i >= 1; i--)
	{
		for (j = 1; j <= n - i; j++)
		{
			putchar(' ');
		}
		for (j = 1; j <= 2 * i - 1; j++)
		{
			putchar('*');
		}
		putchar('\n');
	}
	system("pause");
	return 0;
}
//2.求出100~999之间的所有“水仙花数”并输出。 
//“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,
//如;153=1+5+3 ? ,则153是一个“水仙花数”。
//法一
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(){
	int i, j;
	int a, b, c, sum;
	for (i = 100; i < 999; ++i){
		//取数字n的个位
		a = i % 10;
		//取数字n的十位
		b = i / 10 % 10;
		//取数字n的百位
		c = i / 100;
		sum = a * a * a + b * b * b + c * c * c;
		if (sum == i){
			printf("%d\n", i);
		}
	}
	system("pause");
	return 0;
}
//法二
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(){
	int i, j;
	int count = 0, sum = 0;
	char a[10] = { 0 };
	for (i = 0; i < 1000000000; i++)
	{
		//for(i=n;i;i/=10) i % 10将会对n的每一位进行遍历
		//for(i=n;i;i/=sn) i % sn将会对n在sn进制下的每一位进行遍历
		for (j = i; j; j /= 10)
		{
			a[count] = j % 10;
			count++;
		}

		for (j = 0; j < count; j++)
		{
			sum += pow(a[j], count);
		}
		if (sum == i)
		{
			printf("%d\n", i);
		}
		sum = 0;
		count = 0;
	}
	system("pause");
	return 0;
}
//3.求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字, 
//例如:2 + 22 + 222 + 2222 + 22222
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
	int tmp = 0, sum = 0;
	int i;
	int n;
	scanf("%d", &n);
	for (i = 0; i < 5; i++)
	{
		tmp = tmp * 10 + n;
		sum += tmp;
	}
	printf("%d\n", sum);
	system("pause");
	return 0;
}

2019/3/30

//1.完成猜数字游戏。 
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int Menu(){
	printf("================\n");
	printf("1.开始游戏\n");
	printf("0.结束游戏\n");
	printf("================\n");
	printf("请输入您的选项: \n");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}

void Game(){
	//1.生成一个随机数(1-100)
	int to_guess = rand() % 100 + 1;
	//2.提示用户输入一个数字
	while (1){
		printf("请输入一个整数: ");
		int num = 0;
		scanf("%d", &num);
		//3.拿用户准备的数字和随机数进行比较
		if (num < to_guess){
			printf("低了!\n");
		}
		else if (num>to_guess){
			printf("高了!\n");
		}
		else{
			printf("恭喜您猜对了!\n");
			return;
		}
	}
}
int main(){
	//计算机随机生成一个数字(1-100)
	//由用户来猜这个数字,如果用户猜对了,提示回答正确
	//如果用户猜对了,提示用户"高了/低了"让用户重新输入
	//时间戳
	//time返回值类型是time_t 有符号的64位整数
	//srand 参数 unsigned int 32位的无符号整数
	srand((unsigned int)time(0));
	while (1){
		int choice = Menu();
		if (choice == 1){
			Game();
		}
		else if (choice == 0){
			printf("goodbye!\n");
			break;
		}
		else{
			printf("您的输入有误!\n");
		}
	}
	system("pause");
	return 0;
}

//2.写代码可以在整型有序数组中查找想要的数字,
//找到了返回下标,找不到返回 - 1.(折半查找)
#include <stdio.h>
#include <stdlib.h>
int searchArray(int arr[], int n, int f){
	int left = 0;
	int right = n - 1;
	int mid;
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (arr[mid] < f)
		{
			left = mid + 1;
		}
		else if (arr[mid] > f)
		{
			right = mid - 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}

int main(){
	int a[10] = { 1, 3, 4, 5, 7, 9, 11, 13, 15, 16 };
	printf("%d\n", searchArray(a, 10, 13));
	system("pause");
	return 0;
}

//3.编写代码模拟三次密码输入的场景。 
//最多能输入三次密码,密码正确,提示“登录成功”, 密码错误,
//可以重新输入,最多输入三次。三次均错,则提示退出程序。
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//strcpy(str1 = str2);
//strcat(str1 += str2);
//strcmp(str1 > str2);
//strcasecmp(str1 > str2);
// strlen

int login(char pwd[]){
	//输入一个长度为
	char input[65] = { 0 };
	int i;
	for (i = 0; i < 3; i++)
	{
		scanf("%s", input);
		if (!strcmp(input, pwd))
		{
			return 1;
		}
	}
	return 0;
}

int main(){
	char pwd[] = "biterocket";
	char input[65] = { 0 };
	int i;

	if (login(pwd))
	{
		printf("登录成功!\n");
	}
	else
	{
		printf("登录失败!\n");
	}

	system("pause");
	return 0;
}

//4.编写一个程序,可以一直接收键盘字符,
//如果是小写字符就输出对应的大写字符,
//如果接收的是大写字符,就输出对应的小写字符,
//如果是数字不输出,如果遇到$就结束

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
#define isSmallLetter(ch) ((ch) <= 'z' && (ch) >= 'a')
int isBigLetter(char ch){
	return ch <= 'Z' && ch >= 'A';
}

int main(){
	char ch;
	while (1){
		ch = getchar();
		if (isSmallLetter(ch))
		{
			//putchar(ch - ('a' - 'A'));
			putchar(ch & ~(1 << 5));
		}
		else if (isBigLetter(ch))
		{
			putchar(ch | 1 << 5);
		}
		else if (isalnum(ch)){
			//do nothing
		}
		else if (ch == '$'){
			break;
		}
		else{
			putchar(ch);
		}
	}
	system("pause");
	return 0;
}

2019/3/31

//1.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定,
//输入9,输出9 * 9口诀表,输入12,输出12 * 12的乘法口诀表。
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <string.h>
int fun(a){
	int i, j;
	for (i = 1; i <= a; ++i){
		for (j = 1; j <= i; ++j){
			printf("%2d*%2d=%2d", i, j, i*j);
		}
		printf("\n");
	}
	return(a);
}
int main(){
	int a;
	printf("请输入一个数: \n");
	scanf("%d", &a);
	printf("", fun(a));
	system("pause");
return 0;
}

//2.使用函数实现两个数的交换。
#include <stdio.h>
void swapArgs(int * pi, int * pj){
	int tmp;
	tmp = *pi;
	*pi = *pj;
	*pj = tmp;
}
int main(){
	int i = 10, j = 20;
	swapArgs(&i, &j);
	printf("i = %d, j = %d\n", i, j);
	system("pause");
	return 0;
}

//3.实现一个函数判断year是不是润年。 
#include <stdio.h>
#include <stdlib.h>
int IsLeapYear(int year){
	if (year % 100 == 0){
		//判定是不是世纪闰年
		if (year % 400 == 0){
			return 1;
		}
		else{
			return 0;
		}
	}
	else {
		//判断是不是普通闰年
		if (year % 4 == 0){
			return 1;
		}
		else{
			return 0;
		}
	}
}
int main(){
	printf("%d\n", IsLeapYear(2000));
	system("pause");
	return 0;
}

//4.创建一个数组, 
//实现函数init()初始化数组、实现empty()清空数组、
//实现reverse()函数完成数组元素的逆置。
//要求:自己设计函数的参数,返回值
#include <stdio.h>
void init(int in[], int data[], int n){
	int i;
	for (i = 0; i < n; i++){
		in[i] = data[i];
	}
}

void empty(int data[], int n){
	int i;
	for (i = 0; i < n; i++){
		data[i] = 0;
	}
}

void reverse(int data[], int n){
	int tmp;
	int i, j;
	for (i = 0, j = n - 1; i < j; i++, j--){
		tmp = data[i];
		data[i] = data[j];
		data[j] = tmp;
	}
}

void printArray(int data[], int n){
	int i;
	for (i = 0; i < n; i++){
		printf("%d ", data[i]);
	}
	putchar('\n');
}

int main(){
	int a[10] = { 0 };
	int b[6] = { 1, 2, 3, 4, 5, 6 };
	init(a, b, 6);
	printArray(a, 10);
	reverse(a, 10);
	printArray(a, 10);
	empty(a, 10);
	printArray(a, 10);
	system("pause");
	return 0;
}

//5.实现一个函数,判断一个数是不是素数。
#include <stdio.h>
#include <stdlib.h>
//如果是素数,返回1,否则返回0
int IsPrime(int x){
	if (x <= 0){
		return 0;
	}
	for (int i = 2; i < x; ++i){
		if (x%i == 0){
			return 0;
		}
	}
	return 1;
}
int main(){
	printf("%d", IsPrime(111));
	system("pause");
	return 0;
}


2019/5/1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#pragma once

//1.输入4个整数,找出其中的最大数,用函数的嵌套调用来处理.
int max4(int a,int b,int c,int d){            //定义max4函数
	int max2(int a, int b);                   //对max2的函数声明
	int m;
	m = max2(a, b); //调用max2函数,得到a和b两个数的大着,放在m中
	m = max2(m, c); //调用max2函数,得到a,b,c三个数的大着,放在m中
	m = max2(m, d); //调用max2函数,得到a,b,c,d四个数的大着,放在m中
	return(m);                                //将m作为函数值带回main函数
}

int max2(int a,int b){                         //定义max2函数
	if (a>=b){
		return a;                        
	}
	else{
		return b;
	}
}

int main(){
	int max4(int a, int b, int c, int d);      //对max4的函数声明
	int a, b, c, d, max;
	printf("Please enter 4 integer numbers:");//提示输入四个数
	scanf("%d %d %d %d",&a,&b,&c,&d);          //输入四个数
    //调用max4函数,得到四个数中的最大者
	max = max4(a, b, c, d);           
	printf("max=%d\n",max);                    //输出最大者
	system("pause");
	return 0;
}
运行结果:
Please enter 4 interger numbers : 12 45 - 6 89
max = 89


//2.函数的递归调用
//有5个学生坐在一起,问第5个同学多少岁,他说比第4个同学大两岁;问第4个同学
//多少岁,他说比第3个同学大两岁;问第3个同学多少岁,他说比第2个同学大两岁;
//问第2个同学多少岁,他说比第1个同学大两岁;问最后一个同学,他说他10岁,
//请问第5个同学多少岁.
解题思路:
           age(5) = age(4) + 2;
           age(4) = age(3) + 2; 
		   age(3) = age(2) + 2;
		   age(2) = age(1) + 2;
		   age(1) = 10;


int age(int n){                                //定义递归函数
	int c;
	if (n==1){
		c = 10;
	}
	else{
		c = age(n - 1) + 2;
	}
	return(c);                                 //返回年龄
}

int main(){
	int age(int n);                            //对age函数的声明
	printf("No.5,age:%d\n",age(5));            //输出第5个学生的年龄
	system("pause");
	return 0;
}
运行结果:
No.5, age:18


//3.Hanoi汉诺塔问题,是一个古典的数学问题,用递归方法进行求解.问题是:古代
//有一个梵塔,塔内有3个座A,B,C.开始时A座上有64个盘子,盘子大小不等,大的在
//下,小的在上.有一个老和尚想把这64个盘子从A座移动到C座,但规定每次只允许
//移动一个盘子,且在移动过程中在3个座上都始终保持大盘在下,小盘在上.在移动
//过程中,可以利用B座,要求输出移动盘子的步骤.
解题思路:
为了便于理解, 先分析将A座上的三个盘子移动到C座的过程 :
(1)将A座上的2个盘子移动到B座上(借助C座)
(2)将A座上的1个盘子移动到座上
(3)将B座上的2个盘子移动到C座上(借助A座)
综合起来, 可得到移动3个盘子的步骤为 :
A->C, A->B, C->B, A->C, B->A, B->C, A->C
共经历7, 移动n个盘子需要经历(2 ^ n - 1), .
由上面的分析可知 : 将n个盘子从A座移动到C座, 可分解为以下3个步骤
		   (1)将A座的n - 1个盘子借助C盘先移动到B座上;
           (2)将A座上剩下的一个盘子移动到C座上;
           (3)将n-1个盘子从B座上借助于A座移动到C座上.
编写程序:分别用两个函数实现以上的两类操作,用hanoi函数实现上面第1类操作,用
move函数实习上面第2类操作, 函数调用hanoi(n,move,two,three)表示将n个盘子
one座移动到three座的过程(借助two座), 函数调用move(x,y)表示将1个盘子从x座
移动到y座的过程,x和y是代表A,B,C三座之一.


void move(char x,char y){                       //定义move函数
	printf("%c-->%c\n",x,y);
}

void hanoi(int n,char one,char two,char three){   //对hanoi函数的声明
	void move(char x,char y);                     //对move函数的声明
	if (n==1){
		move(one,three);
	}
	else{
		hanoi(n - 1, one, three, two);
		move(one, three);
		hanoi(n - 1, two, one, three);
	}
}

int main(){
	void hanoi(int n, char one, char two, char three);
	int m;
	printf("input the number of diskes:");
	scanf("%d",&m);
	printf("The step to move %d diskes:\n",m);
	hanoi(m, 'A', 'B', 'C');
	system("pause");
	return 0;
}
运行结果:
input the number of diskes : 3
The step to move 3 diskes :
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C


//4.输入10个数,要求输出其中值最大的元素和该数是第几个数.
//解题思路:
//(1)定义一个数组a, 长度为10, 用来存放10个数;
//(2)设计一个函数max,用来求两个数的最大者.
//(3)在主函数中定义一个变量m, 初值为a[0],每次调用max函数后的返回值存放在m中,
//用"打擂台"算法, 依次将数组元素a[1]-a[9]与m比较,最后得到m的值就是10个数中
//的最大者.

int max(int x,int y){
	return(x > y ? x : y);
}

int main(){
	int max(int x, int y);
	int a[10], m, n, i;
	printf("enter 10 integer numbers:");
	for (i = 0; i < 10; ++i){
		scanf("%d", &a[i]);
	}
	printf("\n");
	for (i = 1, m = a[0], n = 0; i < 10; ++i){
		if (max(m, a[i])>m){
			m = max(m, a[i]);
			n = i;
		}
	}
	printf("The largest number is %d\nit is the %dth number.\n", m, n + 1);
	system("pause");
	return 0;
}

2019/5/2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#pragma once

//一位数组名做函数参数
//1.有一个一维数组score,内放10个学生成绩,求平均成绩.
float average(float array[10]){           //定义average函数
	int i;
	float aver, sum = array[0];
	for (i = 1; i < 10; ++i){
		sum += array[i];                  //累加学生成绩
	}
	aver = sum / 10;
	return(aver);
}

int main(){
	float average(float array[10]);       //函数声明
	float score[10], aver;
	int i;
	printf("input 10 scores:\n");
	for (i = 0; i < 10;++i){
		scanf("%f",&score[i]);
	}
	printf("\n");
	aver = average(score);                //调用average函数
	printf("average score is %5.2f\n",aver);
	system("pause");
	return 0;
}
运行结果:
input 10 scores :
100 56 78 67.5 99 54 98 88.5 76 58

average score is 77.50


//2.使用选择法对数组中10个整数按照由小到大排序.
解题思路:
所谓选择法就是先将10个数中最小的数与a[0]对换; 再将a[1] - a[9]中最小的数
与a[1]对换......每比较一轮,找出一个未经排序的数中最小的一个.共比较9.
下面以5个数为例说明选择法的步骤.
a[0]  a[1]   a[2]   a[3]   a[4]
3      6      1      9      4  //未排序时的情况
1      6      3      9      4  //将5个数中最小的数1和a[0]对换
1      3      6      9      4  //将余下的后面4个数中最小的数3与a[1]对换
1      3      4      9      6  //将余下的3个数中最小的数4与a[2]对换
1      3      4      6      9  //将余下的2个数中最小的数6与a[3]对换,至此


void sort(int array[],int n){
	int i, j, k, t;
	for (i = 0; i < n - 1;++i){
		k = i;
		for (j = i + 1; j < n; ++j){
			if (array[j]<array[k]){
				k = j;
			}
		}
		t = array[k]; 
		array[k] = array[i];
		array[i] = t;
	}
}

int main(){
	void sort(int array[],int n);
	int a[10], i;
	printf("enter array:\n");
	for (i = 0; i < 10;++i){
		scanf("%d",&a[i]);
	}
	sort(a,10);                    //调用sort函数,a为数组名,大小为10
	printf("The score array:\n");
	for (i = 0; i < 10;++i){
		printf("%d ",a[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}
运行结果:
enter array :
45 2 9 0 - 3 54 12 5 66 33
The score array :
-3 0 2 5 9 12 33 45 54 66


//3.有一个3*4的矩阵,求所有元素中的最大值.
//解题思路:
//(1)先使变量max的初值等于矩阵中第1个元素的值
//(2)将矩阵中各个元素的值与max相比, 每次比较后都把"大者"存放在max中
//(3)全部元素比较后,max的值就是所有元素的最大值


int max_value(int array[][4]){              //函数定义
	int i, j, max;
	max = array[0][0];
	for (i = 0; i < 3;++i){
		for (j = 0; j < 4;j++){
			if (array[i][j]>max){
				max = array[i][j];          //把大者放在max中
			}
		}
	}
	return(max);
}
int main(){
	int max_value(int array[][4]);             //函数声明
	int a[3][4] = { {1, 3, 5, 7},              //对数组元素赋初值
	                {2, 4, 6, 8},
	              {15, 17, 34, 12} };
	printf("Max value is %d\n",max_value(a));  //max_value(a)为函数调用
	system("pause");
	return 0;
}
运行结果:
Max value is 34


//4.有一个一维数组,内放10个学生成绩,写一个函数,当主函数调用此函数后,
//能求出平均分,最高分和最低分.


float Max = 0, Min = 0;                         //定义全局变量Max,Min

float average(float array[10],int n){           //定义函数,有一形参是数组
	int i;
	float aver, sum = array[0];
	Max = Min = array[0];
	for (i = 1; i < n; ++i){
		if (array[i]>Max){
			Max = array[i];
		}
		else if (array[i]<Min){
			Min = array[i];
		}   
		sum += array[i];
	}
	aver = sum / n;
	return(aver);
}

int main(){
	float average(float array[10],int n);
	float score[10], aver;
	int i;
	printf("Please enter 10 scores:");
	for (i = 0; i < 10; ++i){
		scanf("%f", &score[i]);
	}
	aver = average(score,10);                //调用average函数
	printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",Max,Min,aver);

	system("pause");
	return 0;
}
运行结果:
Please enter 10 scores : 89 95 87.5 100 67.5 97 59 84 73 98
max = 100.00
min = 59.00
average = 85.00

2019/5/3

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#pragma once

//1.若外部变量和局部变量同名同名,分析结果.

int a = 3, b = 5;                             //a,b为全局变量
//形参a,b的作用范围
int max(int a, int b){                        //a,b是函数形参
	int c;
	c = a > b ? a : b;
	return(c);
}

int main(){                                   //函数声明,//a,b是函数形参
	int max(int a, int b);
	int a = 8;
	printf("max=%d\n",max(a,b));
	system("pause");
	return 0;
}

//2.考察静态局部变量的值.

int f(int a){
	auto int b = 0;                           //自动局部变量
	static c = 3;                             //静态局部变量
	b += 1;
	c += 1;
	return(a + b + c);
}

int main(){
	int f(int t);                             //函数声明
	int a = 2, i;                             //自动局部变量
	for (i = 0; i < 3;++i){
		printf("%d\n",f(a));                  //输出f(a)的值
	}
	system("pause");
	return 0;
}
运行结果:
7
8
9


//3.输出1到5的阶乘值.
//解题思路:
//(1)编写一个函数用来进行连乘;
//(2)如第1次调用时进行1乘1,第2次调用时再乘以2,第3次调用时再乘以3,以此下去.

int fac(int n){
	static int f = 1;
	f = f * n;
	return(f);
}

int main(){
	int fac(int n);
	int i;
	for (i = 1; i < 6;++i){
		printf("%d!=%d\n",i,fac(i));
	}
	system("pause");
	return 0;
}
运行结果:
1 != 1
2 != 2
3 != 6
4 != 24
5 != 120


//4.给定b的值,输入a和m,求a*b和a^m的值.

int A;
int power(int n){
	int i, y = 1;
	for (i = 1; i <= n;++i){
		y *= A;
	}
	return(y);
}

int main(){
	int power(int);
	int b = 3, c, d, m;
	printf("enter the number a and its power m:\n");
	scanf("%d,%d",&A,&m);
	c = A*b;
	printf("%d * %d = %d\n", A, b, c);
	d = power(m);
	printf("%d * * %d = %d\n", A, m, d);
	system("pause");
	return 0;
}
运行结果:
enter the number a and its power m :
13, 3
13 * 3 = 39
13 * * 3 = 2197

2019/5/4

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#pragma once

//1.通过指针变量访问整形变量.

int main(){
	int a = 100, b = 10;             //定义并且初始化
	int* pointer_1,* pointer_2;      //定义指向整形数据的指针变量
	pointer_1 = &a;                  //把变量a的地址赋给指针变量pointer_1
	pointer_2 = &b;                  //把变量b的地址赋给指针变量pointer_2
	printf("a=%d,b=%d\n",a,b);
	printf("* pointer_1=%d,* pointer_2=%d\n", *pointer_1, *pointer_2);
	system("pause");
	return 0;
}
运行结果:
a = 100, b = 10
* pointer_1 = 100, *pointer_2 = 10


//2.输入a和b两个整数,按照先大后小的顺序输出a和b.
解法一:
int main(){
	int* p1, *p2, *p, a, b;               //p1,p2的类型是int* 类型
	printf("please enter two integer numbers:");
	scanf("%d,%d",&a,&b);
	p1 = &a;                              //使p1指向变量a
	p2 = &b;                              //使p2指向变量b
	if (a < b){
		p = p1;
		p1 = p2;
		p2 = p;
	}
	printf("a = %d,b = %d\n",a,b);
	printf("max = %d,min = %d\n",*p1,*p2);//输出p1和p2所指向的变量的值
	system("pause");
	return 0;
}
运行结果:
please enter two integer numbers : 8, 22
a = 8, b = 22
max = 22, min = 8


解法二:
void swap(int* p1, int* p2){
	int temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

int main(){
	void swap(int* p1, int* p2);
	int a, b;
	int* pointer_1, *pointer_2;
	printf("please enter a and b:");
	scanf("%d,%d",&a,&b);
	pointer_1 = &a;                  
	pointer_2 = &b;
	if (a < b){
		swap(pointer_1,pointer_2);
	}
	printf("max = %d,min = %d\n", a, b);
	system("pause");
	return 0;
}


//3.输入3个整数a,b,c,要求按照由大到小的顺序将他们输出,用函数实现.
//解题思路:用swap函数交换两个变量的值,用exchange函数改变这3个变量的值.

void swap(int* p1, int* p2){              //定义交换2个变量的值的函数
	int temp;
	temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

void exchange(int* q1,int* q2,int* q3){   //定义交换3个变量的值交换的函数
	void swap(int* p1, int* p2);          //函数声明
	if (* q1 < * q2){
		swap(q1, q2);
	}
	if (*q1 < *q3){
		swap(q1, q3);
	}
	if (*q2 < *q3){
		swap(q2, q3);
	}
}

int main(){
	void exchange(int* q1, int* q2, int* q3);
	int a, b, c, *p1, *p2, *p3;
	printf("please enter three numbers:");
	scanf("%d,%d,%d",&a,&b,&c);
	p1 = &a; p2 = &b; p3 = &c;
	exchange(p1,p2,p3);
	printf("The order is:%d,%d,%d\n",a,b,c);
	system("pause");
	return 0;
}
运行结果:
please enter three numbers : 20, -54, 67
The order is : 67, 20, -54


//4.有一个整形数组,有10个元素,要求输出数组中的全部元素.
//解法一:(下标法)

int main(){
	int a[10];
	int i;
	printf("please enter 10 integer numbers:");
	for (i = 0; i < 10;++i){
		scanf("%d",&a[i]);
	}
	for (i = 0; i < 10; ++i){
		printf("%d ", a[i]);           //数组元素用数组名和下标表示
	}
	printf("%\n");
	system("pause");
	return 0;
}
//运行结果:
//please enter 10 integer numbers : 0 1 2 3 4 5 6 7 8 9
//0 1 2 3 4 5 6 7 8 9


//解法二:通过数组名计算数组元素的地址,找出元素的值.

int main(){
	int a[10];
	int i;
	printf("please enter 10 integer numbers:");
	for (i = 0; i < 10; ++i){
		scanf("%d",&a[i]);
	}
	//通过数组名和元素序号计算元素地址,再找到该元素
	for (i = 0; i < 10; ++i){
		printf("%d ",*(a+i));       
	}
	printf("\n");
	system("pause");
	return 0;
}


// 解法三:用指针变量指向数组元素.

int main(){
	int a[10];
	int i, *p;
	printf("please enter 10 integer numbers:");
	for (i = 0; i < 10; ++i){
		scanf("%d", &a[i]);
	}
	for (p = a; p < (a + 10);++p){
		printf("%d ", *p);          //用指针指向当前的数组元素
	}
	printf("\n");
	system("pause");
	return 0;
}


// 解法四:

int main(){
	int a[10];
	int i, *p;
	printf("please enter 10 integer numbers:");
	for (p = a; p < (a + 10); ++p){
		scanf("%d", p);
	}
	for (p = a; p < (a + 10); ++p){
		printf("%d ", *p);         
	}
	printf("\n");
	system("pause");
	return 0;
}

2019/5/5

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#pragma once

//1.将数组a中n个整数按相反顺序存放.
//例如:3  7  9  11  0  6   7  5  4  2
//	 2  4  5   7  6  0  11  9  7  3
解法一:
void inv(int x[],int n){
	int temp, i, j, m = (n - 1) / 2;
	for (i = 0; i <= m;++i){
		j = n - 1 - i;
		//将x[i]和x[j]进行交换
		temp = x[i];
		x[i] = x[j];
		x[j] = temp;
	}
	return;
}

int main(){
	void inv(int x[], int n);               //inv函数声明
	int i, a[10] = { 3, 7, 9, 11, 0, 6, 7, 5, 4, 2 };
	printf("The original array:\n");
	for (i = 0; i < 10;++i){
		printf("%d ",a[i]);                 //输出未交换时数组各元素的值
	}
	printf("\n");
	inv(a, 10);                             //调用inv函数,进行交换
	printf("The array has been inverted:\n");
	for (i = 0; i < 10; ++i){
		printf("%d ",a[i]);                 //输出交换后数组各元素的值
	}
	printf("\n");
	system("pause");
	return 0;
}


//解法二 :

void inv(int* x, int n){                   //形参x是指针变量
		int temp, *i, *j, *p, m = (n - 1) / 2;
		i = x;
		j = x + n - 1;
		p = x + m;
		for (; i <= p; ++i,--j){
			//将* i和* j进行交换
			temp =* i;
			* i = * j;
			* j = temp;
		}
		return;
	}

int main(){
	void inv(int* x, int n);               //inv函数声明
	int i, a[10] = { 3, 7, 9, 11, 0, 6, 7, 5, 4, 2 };
	printf("The original array:\n");
	for (i = 0; i < 10; ++i){
		printf("%d ", a[i]);                 //输出未交换时数组各元素的值
	}
	printf("\n");
	inv(a, 10);                             //调用inv函数,进行交换
	printf("The array has been inverted:\n");
	for (i = 0; i < 10; ++i){
		printf("%d ", a[i]);                 //输出交换后数组各元素的值
	}
	printf("\n");
	system("pause");
	return 0;
}


//解法三:
void inv(int* x, int n){                   //形参x是指针变量
	int temp, *i, *j, *p, m;
	m = (n - 1) / 2;
	i = x;
	j = x + n - 1;
	p = x + m;
	for (; i <= p; ++i, --j){
		//将* i和* j进行交换
		temp = *i;
		*i = *j;
		*j = temp;
	}
	return;
}

int main(){
	void inv(int* x, int n);               //inv函数声明
	int i, arr[10] ,* p = arr;             //指针变量p指向arr[0]
	printf("The original array:\n");
	for (i = 0; i < 10; ++i,++p){
		scanf("%d",p);                     //输入arr数组的元素
	}
	printf("\n");
	p = arr;                               //指针变量p重新指向arr[0]
	inv(p, 10);                            //调用inv函数,实参p是指针变量
	printf("The array has been inverted:\n");
	for (p = arr; p < arr+10; ++p){
		printf("%d ",*p);            
	}
	printf("\n");
	system("pause");
	return 0;
}
运行结果:
The original array :
3 7 9 11 0 6 7 5 4 2
The array has been inverted :
2 4 5 7 6 0 11 9 7 3
*/

//2.用指针方法对10个整数按照由大到小顺序排序.
//解题思路:
//(1)在函数中定义数组a存放10个整数, 定义int* 型指针变量p并指向a[0];
//(2)定义函数sort使数组a中的元素按由大到小的顺序排列;
//(3)在主函数中调用sort函数中, 用指针变量p作实参;
//(4)用选择法进行排序;
void sort(int x[],int n){
	int i, j, k, t; {
		for (i = 0; i < n - 1; i++){
			k = i;
			for (j = i + 1; j < n; j++){
				if (x[j] > x[k]){
					k = j;
					if (k != i){
						t = x[i];
						x[i] = x[k];
						x[k] = t;
					}
				}
			}
		}
	}
}

int main(){
	void sort(int x[], int n);                  //sort函数声明
	int i, *p, a[10];
	p = a;                                      //指针变量p指向a[0]
	printf("please enter 10 integer numbers:");
	for (i = 0; i < 10; i++){
		scanf("%d", p++);                       //输入10个整数
	}
	p = a;                                      //指针变量p重新指向a[0]
	sort(p,10);                                 //调用sort函数
	for (p = a, i = 0; i < 10; i++){
		printf("%d ",*p);                       //输出排序后的10个数组元素
		p++;
	}
	printf("\n");
	system("pause");
	return 0;
}
运行结果:
please enter 10 integer numbers : 12 34 5 689 - 43 56 - 21 0 24 65
56 65 689 24 34 12 - 21 0 5 - 43

//3.有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩.
//解题思路:
//(1)用指向数组的指针作函数参数;
//(2)用函数average求总平均分,用函数search找出并输出第i个学生的成绩.
void average(float* p,int n){             //定义求平均成绩的函数
	float* p_end;
	float sum = 0, aver;
	//n的值为12时,p_end的值是p+11,指向最后一个元素
	p_end = p + n - 1;        
	for (; p <= p_end;p++){
		sum += (* p);
	}
	aver = sum / n;
	printf("average=%5.2f\n",aver);
}

void search(float (*p)[4],int n){ //p是指向具有4个元素的一维数组的指针
	int i;
	printf("The score of No.%d are:\n", n);
	for (i = 0; i < 4; i++){
		printf("%5.2f ",*( *(p+n) +i) );
	}
	printf("\n");
}

int main(){
	void average(float* p, int n);
	void search(float(*p)[4],int n);
	float score[3][4] = { {65, 67, 70, 60},
	                      {80, 87, 90, 81},
	                      {90, 99, 100, 98} };
	average(* score,12);                  //求12个分数的平均分
	search(score,2);                      //求序号为2的学生成绩
	system("pause");
	return 0;
}
运行结果:
average = 82.25
The score of No.2 are :
90.00 99.00 100.00 98.00

//4.在3的基础上,查找一门以上课程不及格的学生,输出他们的全部课程的成绩.
void search(float (*p)[4],int n){
	int i, j, flag; {
		for (j = 0; j < n; j++){
			flag = 0;
			for (i = 0; i < 4; i++){
				if (*(*(p + j) + i) < 60){
					flag = 1;
				}
			}
			if (flag == 1){
				printf("No.%d fails,his scores are:\n", j + 1);
				for (i = 0; i < 4; i++){
					printf("%5.1f", *(*(p + j) + i));
				}
				printf("\n");
			}
		}
	}
}

int main(){
	void search(float(*p)[4],int n);
	float score[3][4] = { { 65, 67, 70, 60 },
	                      { 80, 87, 90, 81 },
	                      { 90, 99, 100, 98 } };
	search(score,3);
	system("pause");
	return 0;
}

2019/5/6

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#pragma once

//1.定义一个字符数组,在其中存放字符串"I Love China",输出该字符串和第
//8个字符.

int main(){
	char string[] = "I Love China";           //定义字符数组
	//用%s格式声明输出string,可以输出整个字符串
	printf("%s\n",string); 
	printf("%c\n",string[7]);                 //用%c输出一个字符数组元素
	system("pause");
	return 0;
}
运行结果:
I Love China
C


//2.通过字符指针变量输出一个字符串.

int main(){
	char* string = "I Love China!";      //定义字符指针变量string并初始化
	printf("%s\n",string);               //输出字符串
	system("pause");
	return 0;
}


//3.将字符串a赋值为字符串b,然后再输出字符串b.

//解法一:
int main(){
	char a[] = "I am an excellent man!", b[20];
	int i;
	for (i = 0; *(a + i) != '\0'; i++){
		*(b + i) = *(a + i);                //将a[i]的值赋给b[i]
	}
	*(b + i) = '\0';                        //在b数组的有效数字之后加'\0'
	printf("string a is:%s\n",a);           //输出a数组中全部有效字符
	printf("string b is:");
	for (i = 0; b[i] !='\0';i++){
		printf("%c",b[i]);                  //这个输出b数组中全部有效字符
	}
	printf("\n");
	system("pause");
	return 0;
}


//解法二
int main(){
	char a[] = "I am an excellent man!", b[20], *p1, *p2;
	p1 = a, p2 = b;            //p1,p2分别指向a数组和b数组中的第一个元素
	for (; *p1 != '\0'; p1++, p2++){     //p1,p2每次加1
		*p2 = *p1;             //将p1所指向的元素的值赋给p2所指向的元素
	}
	*p2 = '\0';                //在复制完全部有效字符后加'\0'
	printf("string a is:%s\n", a);       //输出a数组中的字符
	printf("string b is:%s\n", b);
	system("pause");
	return 0;
}
运行结果:
string a is : I am an excellent man!
string b is : I am an excellent man!

//4.用函数调用实现字符串的复制.
//解题思路:
//(1)定义一个函数copy_string用来实现字符串复制的功能
//(2)在主函数中调用此函数,函数的形参和实参可以分别用字符数组名或字符指针
//变量.

//解法一:(用字符数组名作为函数实参)

void copy_string(char from[], char to[]){ //形参为字符数组
	int i = 0;
	while (from[i]!='\0'){
		to[i] = from[i];
		i++;
	}
	to[i] = '\0';
}

int main(){
	void copy_string(char from[], char to[]);
	char a[] = "You are a beautiful girl!";
	char b[] = "I am a handsome boy!";
	printf("string a=%s\nstring b=%s\n",a,b);
	printf("\ncopy string a to string b:\n");
	copy_string(a, b);                      //用字符数组名作为函数实参
	printf("\nstring a=%s\nstring b=%s\n",a,b);
	system("pause");
	return 0;
}


//解法二:(用字符指针变量作实参)

void copy_string(char from[], char to[]){ //形参为字符数组
	int i = 0;
	while (from[i] != '\0'){
		to[i] = from[i];
		i++;
	}
	to[i] = '\0';
}

int main(){
	void copy_string(char from[], char to[]);
	char a[] = "You are a beautiful girl!";
	char b[] = "I am a handsome boy!";
	char* from = a, *to = b;      //from指向a数组首元素,to指向b数组首元素
	printf("string a=%s\nstring b=%s\n", a, b);
	printf("\ncopy string a to string b:\n");
	copy_string(from,to);         //实参为字符指针变量     
	printf("\nstring a=%s\nstring b=%s\n", a, b);
	system("pause");
	return 0;
}


//解法三:(用字符指针变量作形参和实参)
void copy_string(char* from, char* to){ 
	for (; *from != '\0';from++,to++){
		* to = * from;
	}
	* to = '\0';
}

int main(){
	void copy_string(char* from, char* to);
	char* a = "You are a beautiful girl!"; {  //a是char* 型指针变量
		char b[] = "I am a handsome boy!";    //b是字符数组
	}
	char* p = b;                      //使指针变量p指向b数组首元素
	printf("string a=%s\nstring b=%s\n", a, b);
	printf("\ncopy string a to string b:\n");
	copy_string(a,p);                //调用copy_string函数,实参为指针变量
	printf("\nstring a=%s\nstring b=%s\n", a, b);
	system("pause");
	return 0;
}

运行结果:
string a = You are a beautiful girl!
string b = I am a handsome boy!

copy string a to string b :

string a = You are a beautiful girl!
string b = You are a beautiful girl!

2019/5/7

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#pragma once

//1.结构体数组应用(有n个学生的信息(包括学号,姓名,成绩),要求按照成绩的
//高低顺序输出各学生的信息)
struct Student {                               //声明结构体类型
	int num;
	char name[20];
	float score;
}stu;

int main(){
	//定义结构体数组并且初始化
	struct Student stu[5] = { {10101,"Zhang",78},{10103,"Wang",98.5},
	{ 10106, "Li", 86 }, { 10108, "Ling",73.5 },{10110,"Sun",100} };
	struct Student temp;       //定义结构体变量temp,用作交换时的临时变量                
	const int n = 5;                          //定义常变量n
	int i, j, k;
	printf("The order is:\n");
	for (i = 0; i < n - 1;i++){
		k = i;
		for (j = i + 1; j < n;j++){
			if (stu[j].score>stu[k].score){   //进行成绩的比较
				k = j;
			}
		}
		temp = stu[k];                        //stu[i]和stu[i]元素互换
		stu[k] = stu[i];
		stu[i] = temp;
	}
	for (i = 0; i < n;i++){
		printf("%6d %8s %6.2f\n", stu[i].num, stu[i].name, stu[i].score);
	}
	printf("\n");
	system("pause");
	return 0;
}
运行结果:
The order is :
10110      Sun 100.00
10103     Wang  98.50
10106       Li  86.00
10101    Zhang  78.00
10108     Ling  73.50


//2.有3个学生的信息,放在结构体数组中,要求输出全部学生的信息.
//解题思路:用指向结构体变量的指针来处理
//(1)声明结构体类型struct Student,并定义结构体数组,同时使之初始化;
//(2)定义一个指向struct Student 类型数据的指针变量p;
//(3)使p指向结构体数组的首元素,输出它指向的元素中的有关信息;
//(4)使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息;
//(5)再使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息.
struct Student {                               //声明结构体类型
	int num;
	char name[20];
	char sex;
	int age;
};
struct Student stu[3] = { { 10101, "Li Lin", 'M', 18 },
{10102,"Zhang Fang",'M',19},{10104,"Wang Min",'F',20} };

int main(){
	struct Student* p;   //定义指向struct Student 结构体变量的指针变量
	printf("No.   Name                 Sex  age\n");
	for (p = stu; p < stu + 3;p++){
		printf("%5d %-20s %2c %4d\n", p->num, p->name, p->sex, p->age);
	}
	system("pause");
	return 0;
}
运行结果:
No.Name                 Sex  age
10101 Li Lin                M   18
10102 Zhang Fang            M   19
10104 Wang Min              F   20


//3.编写一个输出链表的函数print.

#define L sizeof(struct Student)
struct Student{
	long num;
	float score;
	struct Student* next;
};
int n;

struct Student* creat(){
	struct Student* head;
	struct Student* p1, *p2;
	n = 0;
	p1 = p2 = (struct Student*)malloc(L);
	scanf("%ld,%f", &p1->num, &p1->score);
	head = NULL;
	while (p1->num!=0){
		n += 1;
		if (n==1){
			head = p1;
		}
		else{
			p2->next = p1;
		}
		p2 = p1;
		p1 = (struct Student*)malloc(L);
		scanf("%ld,%f", &p1->num, &p1->score);
	}
	p2->next = NULL;
	return(head);
}

void print(struct Student* head){
	struct Student*p;
	printf("\nNow,These %d records are:\n",n);
	p = head;
	if (head!=NULL){
		do{
			printf("%ld %5.1f\n",p->num,p->score);
			p = p->next;
		} while (p != NULL);
	}
}

int main(){
	struct Student* head;
	head = creat();
	print(head);
	system("pause");
	return 0;
}
运行结果:
1001, 67.5
1003, 87
1005, 99
0, 0

Now, These 3 records are :
1001  67.5
1003  87.0
1005  99.0

//4.有若干个人员的数据,其中有学生和教师.学生的数据中包括:姓名,号码,性别,
//职业,班级.教师的数据包括:姓名,号码,性别,职业,职务.要求用同一个表格来处理

struct{
	int num;
	char name[10];
	char sex;
	char job;
	union{
		int class;
		char position[10];
	}category;
}person[2];

int main(){
	int i;
	for (i = 0; i < 2;i++){
		printf("please enter the data of person:\n");
		scanf("%d %s %c %c",&person[i].num,&person[i].name,
			&person[i].sex, &person[i].job);
		if (person[i].job=='s'){
			scanf("%d",&person[i].category.class);
		}
		else if (person[i].job=='t'){
			scanf("%s", person[i].category.position);
		}
		else{
			printf("Input error!");
		}
	}
	printf("\n");
	printf("No.   name   sex  job  class/position\n");
	for (i = 0; i < 2;i++){
		if (person[i].job == 's'){
			printf("%-6d%-10s%-4c%-4c%-10d\n", person[i].num,person[i].name,
				person[i].sex, person[i].job, person[i].category.class);
		}
		else{
			printf("%-6d%-10s%-4c%-4c%-10s\n", person[i].num, person[i].name,
				person[i].sex, person[i].job, person[i].category.class);
		}
	}
	system("pause");
	return 0;
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值