第八周
来源:互联网 发布:耐玩的网络游戏知乎 编辑:程序博客网 时间:2024/05/22 14:15
数组最好用宏定义
一维数组在内存中占用字节的长度=数组长度 * sizeof(基类型)
高效的数组初始化方法:
#include<string.h>memset(a, 0, sizeof(a));
高效的数组赋值:
#include<string.h>memcpy(b, a, sizeof(a));
memcpy(b, a, sizeof(a));
使用这条语句时,如果数组a和b的长度不一样,
a比b长,溢出元素数据会丢失。
b比a长,不够的部分仍会显示原数据
简单参数传递给函数call by value
数组传递给函数call by reference
#include <stdio.h>void Input(int x[], int n);int Total(int x[], int n);int FindMaxValue(int x[], int n);int FindMinValue(int x[], int n);int main(){ int maxValue, minValue, Score[10], sum; Input(Score, 10); maxValue = FindMaxValue(Score, 10); minValue = FindMinValue(Score, 10); sum = Total(Score, 10); printf("%d\n",(sum - maxValue - minValue) / 8); return 0;}void Input(int x[], int n){ int i; for(i = 0; i < n; i++) { scanf("%d", &x[i]); }}int FindMaxValue(int x[], int n){ int i, maxValue = x[0]; for(i = 1; i < n; i++) { if(maxValue < x[i]) { maxValue = x[i]; } } return maxValue;}int FindMinValue(int x[], int n){ int i, minValue = x[0]; for(i = 1; i < n; i++) { if(minValue > x[i]) { minValue = x[i]; } } return minValue;}int Total(int x[], int n){ int i, sum = 0; for(i= 0; i < n; i++) { sum += x[i]; } return sum;}
线性查找,二分法查找
#include<stdio.h>int LinSearch(int num[], int x, int n);//线性查找int Binsearch(int num[], int x, int n);//二分查找(分治思想),要求查找表有序int main(){ return 0;}int LinSearch(int num[], int x, int n){ int i = 0; for(i = 0; i < n; i++) { if(x == num[i]) { return i; } } return -1;}int Binsearch(int num[], int x, int n){ int low = 0, high = n - 1, mid; while (low < high) { //mid = (low + high) / 2; mid = low + (high - low) / 2;//防止数值溢出 if (x < num[mid]) { high = mid - 1; } else if (x > mum[mid]) { low = mid + 1; } else { return mid; } } return -1;}
交换排序
#include <stdio.h>void ChangeSort(int x[], int n);int main(){ int x[4] = {4, 2, 5, 6}; ChangeSort(x, 4); return 0;}void ChangeSort(int x[], int n){ int i, j, temp; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n - 1; j++) { if (x[i] > x[j]) { temp = x[i]; x[i] = x[j]; x[j] = temp; } } }}
选择法排序
#include <stdio.h>void SelectionSort(int x[], int n);int main(){ int x[] = {61, 83, 88, 87, 84}; SelectionSort(x, 5); return 0;}void SelectionSort(int x[], int n){ int i, j, k, temp; for (i = 0; i < n - 1; i++) { k = i; for (j = i + 1; j < n - 1; j++) { if (x[k] > x[j]) { k = j; } } if (k != i) { temp = x[i]; x[i] = x[k]; x[k] = temp; } }}
冒泡法排序
#include <stdio.h>void BubbleSort(int x[], int n);int main(){ int x[] = {61, 83, 88, 87, 84}; BubbleSort(x, 5); return 0;}void BubbleSort(int x[], int n){ int i, j, temp; for (i = 0; i < n - 1; i++) { for (j = 1; j < n - i; j++) { if (x[j] < x[j - 1]) { temp = x[j]; x[j] = x[j - 1]; x[j - 1] = temp; } } }}
筛法求素数
//筛法求素数#include<stdio.h>#include <math.h>#define N 100void ShiftPrime(int a[], int n);void PrintPrime(int a[], int n);int main(){ int a[N + 1]; ShiftPrime(a, N); PrintPrime(a, N); return 0;}void ShiftPrime(int a[], int n){ int i, j; for (i = 2; i <= n; i++) { a[i] = i; } for (i = 2; i <= sqrt(n); i++) { for (j = i + 1; j <= n; j++) { if (a[i] != 0 && a[j] != 0 && a[j] % a[i] == 0) { a[j] = 0; } } }}void PrintPrime(int a[], int n){ int i; for (i = 2; i <= n; i++) { if (a[i] != 0) { printf("%d\t", a[i]); } } printf("\n");}
鲁智深吃馒头(约瑟夫环)
据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头,智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说,从我开始报数(围成一圈),第5个人可以吃到馒头(并退下),按照这个公平的方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在哪个位置?
#include<stdio.h>#define N 100int main(){ int a[100 + 1]; int b = 0;//the number of steamed bread int num = 1;//现在报的数 int i; for (i = 1; i <= N; i++) { a[i] = i; } while (b < 99) { for (i = 1; i <=N; i++) { if(a[i] != 0)//如果这个人没有吃馒头 { if (num % 5 == 0)//报的数为5 { b++;//馒头数加一 a[i] =0;//此人吃馒头 printf("%d号吃第%d个馒头\n",i,b); } num++; } } } for( i=1; i<N; i++ ) { if(a[i]!=0) { printf("\n\n鲁智深是第%d个人\n",i); } } return 0;}
文曲星猜数
XAXB
A前表示数和位置皆对
B前表示数对,位置不对
#include<stdio.h>#include <stdlib.h>#include <time.h>void MakeDigit(int a[]);int InputGuess(int b[]);int IsRightPosition(int magic[], int guess[]);int IsRightDigit(int magic[], int guess[]);int main(){ int a[10], b[4]; int lever; int count; int rightPosition, rightDigit; MakeDigit(a); printf("How many times do you want to guess\n"); scanf("%d", &lever); count = 0; do { printf("NO. %d of %d times \n", count, lever); printf("Input your guess:\n"); if (InputGuess(b) == 0)continue; count++; rightPosition = IsRightPosition(a, b); rightDigit = IsRightDigit(a, b) - rightPosition; printf("%dA%dB\n", rightPosition, rightDigit); }while (rightPosition != 4 && count < lever); if(rightPosition == 4) { printf("Congratulation your guess the right number at NO.%d\n", count); } else { printf("Sorry you haven't guess the right number, see you next time"); } printf("Correct answer is : %d %d %d %d",a[0], a[1], a[2], a[3]); return 0;}//void MakeDigit(int a[])//{// srand(time(NULL));// a[0] = rand() % 10;// do// {// a[1] = rand() % 10;// } while (a[0] == a[1]);// do// {// a[2] = rand() % 10;// } while (a[2] ==a[0] || a[2] == a[1]);// do// {// a[3] = rand() % 10;// } while (a[3] ==a[0] || a[3] == a[1] || a[3] == a[2]);//}void MakeDigit(int a[]){ int i, j ,temp; //srand(time(NULL)); for (i = 0; i < 10; i++) { a[i] = i; } for (i = 0; i < 10; i++) { j = rand() % 10; temp = a[j]; a[j] = a[i]; a[i] =temp; }}int InputGuess(int b[]){ int i,ret; for (i = 0; i < 4; i++) { ret = scanf("%1d", &b[i]); if (ret != 1) { printf("Input data type error \n"); fflush(stdin); return 0; } } if (b[0] == b[1] || b[0] == b[2] || b[0] == b[3] || b[1] == b[2] || b[1] == b[3] || b[2] == b[3]) { printf("The number must be different from each other, please input again\n"); return 0; } else return 1;}int IsRightPosition(int magic[], int guess[]){ int rightPosition = 0; int j; for (j = 0; j < 4; j++) { if (guess[j] == magic[j]) { rightPosition++; } } return rightPosition;}int IsRightDigit(int magic[], int guess[]){ int rightDigit; int j, k; for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { if (magic[j] == guess[k]) { rightDigit++; } } } return rightDigit;}
大数存储
0 1
- 第八周
- 第八周
- 第八周
- 第八周
- 第八周
- 第八周
- 第八周
- 第八周
- 第八周
- 第八周总结
- 第八周--星期三
- HSGF实习第八周
- 第八周--作业要求
- 第八周20110418------20110424
- 第八周实验指导
- 第八周实验报告
- 第八周实验报告
- 第八周实验报告
- Android 刷机模式学习笔记
- <hadoop>分布式缓存
- 控制台游戏 五子棋
- 【Android】Retrofit网络请求Service,@Path、@Query、@QueryMap...
- AnimatedVectorDrawable的一些碎碎念
- 第八周
- Devexpress Dxribbon风格窗体设计
- NSTime
- 博客园自定义之博客园公告栏添加时钟——利用canvas画出一个时钟
- 调用麦克风列阵进行录音
- Algorithm 第四版课后习题1.4.15(1)
- 系统各种跳转
- Javascript基础(2)
- 卷积神经网络详解