day03
一、作业:
1.菱形:
#include
#include
int main()
{
int i, j;
int line = 3;//菱形的行数
for (i = -line; i <= line; i++)//行 {
for (j = -line; j <= line; j++) {//列 printf((abs(i) + abs(j) <= line) ? "*":" ");
}
printf(" \n"); }
return 0; }
#include #include
int main(){
int line; // 菱形总行数 int column; // 菱形总列数 int i; // 当前行
int j; // 当前列
printf("请输入菱形的行数(奇数):"); scanf("%d", &line); if(line%2==0){ // 判断是否是奇数
printf("必须输入奇数!\n");
exit(1); }
column = line; // 总行数和总列数相同
for(i=1; i<=line; i++){ // 遍历所有行 if(i<(line+1)/2+1){ // 上半部分(包括中间一行)
for(j=1; j<=column; j++){ // 遍历上半部分的所有列
if( (column+1)/2-(i-1)<=j && j<=(column+1)/2+(i-1) ){
printf("*"); }else{
printf(" "); }
}
}else{ // 下半部分
for(j=1; j<=column; j++){ // 遍历下半部分的所有列
if( (column+1)/2-(line-i)<=j && j<=(column+1)/2+(line-i) ){
} }
printf("\n"); }
return 0; }
printf("*"); }else{
printf(" "); }
二、数组
1、一维数组 int num[10];
在内存中分配了10个int类型的内存空间。总共10 * 4 = 40个字节,我们为他起了一个名字,叫num;
数组可以代表内存里的一组连续的同类型的存储区,这些存储区叫做数组的元素。里面包含的数据的个数叫做数组的长度,num[10],里面就定义了10个 长度的整型数组。
注意:
1)数组中每个元素的数据类型都必须相同,针对于num[10],每个元素都必须是int类型; 2)数组的长度在定义的时候,最好是整型或者常量表达式;编译器容易通过; 3)在我们访问数组的时候,下标的取值范围要注意不能超出数组的总长度,否则会发生数组的越界。
让用户输入 10 个数字并放入数组中:
#include
int nums[10]; int i;
//从控制台读取用户输入 for(i=0; i<10; i++){
scanf("%d", &nums[i]); //注意取地址符 &,不要遗忘哦 }
//依次输出数组元素 for(i=0; i<10; i++){
printf("%d ", nums[i]); }
return 0; }
2.一维数组的初始化 1)可以只给数组的部分元素赋值;
2)只能给元素逐个赋值,不能给数组整体赋值。
3)如给全部元素赋值,那么在定义数组时可以不给出数组长度。 int a[3] = {1, 260, 5};
身份证的核验:
第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5 相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相 乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相 乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4 相乘;将身份证号码的第17位数字与2相乘。
第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。 第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,
余数为9,余数为10共11种可能性。
第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身 份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后 一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应 的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。
int a[8] = {250, 369, 1, 6};
表示只给数组的部分元素a[0] - a[3]赋值,a[4]没有赋值,自动初始化为0;
- 对于其他数据类型:
- long,short,int ---->0 - char -----> '\0'
- float,double ----->0.0
double score[5] = {0.0};
int a[6] = {1,1,1,1,1,1};//正确 int a[6] = 1;//错误
a[1] = 260; a[0] = 1; a[2] = 5;
#include
void test2() {
int card[17] = {0}, sum = 0;
int data[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,5, 8, 4, 2}; char code[] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int i = 0;
for (i = 0; i < 17; i++) {
printf("请依次输入身份证前17位数字:");
scanf_s("%d", &card[i]); }
for (i = 0; i < 17; i++) {
sum += card[i] * data[i]; }
printf("见证奇迹的时刻,第18位是:%c\n", code[sum%11]); }
3.二维数组 二维数组可以看成是一个坐标系,有x轴和y轴,我们要想确定一个点,就必须知道它的x轴和y轴。
在C语言中,二维数组是按照行来排的。比如我们存放了a[0]行,那么下一个就是a[1]行,最后再存放a[2]行,每行中的元素它是依次存放得。 二维数组a的初始化有以下两种:
按照行来进行分段赋值,也可以按照行连续赋值
比如:int a[3][2] = {{1,2},{3,4},{5,6}}; 按照行进行连续赋值:
比如:int a[3][2] = {1,2,3,4,5,6}; 例子
一个小组有3个人,每个人有3门成绩,求该小组的各科平均成绩和总的平均成绩。
--- |
c语言 |
Java大数据 |
Python人工智能 |
李彦宏 |
85 |
95 |
90 |
马化腾 |
79 |
96 |
92 |
马云 |
88 |
99 |
97 |
#include
void arr_t() {
int i, j;//表示二维数组的下标
int sum = 0;//表示当前科目的总成绩
int average;//总平均分
int v[3];//各科的平均分
//用来存放所有的数据,9个数据
int a[3][3] = {{85, 95, 90},{79, 96, 92},{88, 99, 97}};
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
sum += a[j][i];//计算当前科目的总成绩 }
v[i] = sum/3;//计算当前科目的平均分
sum = 0; }
average = (v[0] + v[1] + v[2])/3;
printf("c语言:%d\n Java大数据:%d\n Python人工智能:%d\n", v[0], v[1],v[2]); printf("total average:%d\n", average);
}
数组的补充:冒泡排序 在实际开发中,冒泡排序很重要。我们以从小到大来做例子。 思路:
我们从数组的头部开始进行比较,不断比较相邻两个元素的大小,比较大的元素会依次往后移动,并且进行交换,直到数组的最后一位数据。经过第一 轮的比较,我们会找到最大的元素,并把它放到数组的最后一个位置上。
第一轮比较完毕后,继续进行第二轮的比较。继续从数组的头部开始比较,让较大的数据进行往后移动,直到数组中出现倒数第二个元素为止。经过第 二轮比较后,就可以找到次大的数据。
依次类推,进行n-1次的比较后,就可以将所有的元素都排列好。
可以与实际中的水冒泡进行理解。冒泡排序。 冒泡排序:
3241
第一轮:排序过程
3 2 4 1 ----开始
2 3 4 1 ----比较2和3,交换
2 3 4 1 ----比较3和4,不交换 2 3 1 4 ----比较4和1,交换 第二轮:
2 3 1 4 ----第一轮的结果
2 3 1 4 ----比较2和3,不交换 2 1 3 4 ----比较3和1,交换 第三轮:
2 1 3 4 ----排序
1 2 3 4 ----比较2和1,交换 完毕。
#include
//冒泡排序
void bubble_sort(){
//优化冒泡排序
int num[10] = {4, 5, 2, 10, 7, 1, 8, 3, 6, 9}; int i, j, temp, isSorted; //冒泡排序,最多比较n-1次
for (i = 0; i < 10 - 1; i++)
{
isSorted = 1;//假设剩下其他元素不用进行比较了,已经排好序了。 //每一轮比较前n-1-i个。也就是说, //我们已经排序好的最后i个已经不用再进行比较了
for(j=0;j <10-1-i;j++)
{
if (num[j] > num[j + 1]) {
temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
isSorted = 0;//需要再次排序。剩下的元素没有排好序
} }
if (isSorted) {
break;//如果是没有发生交换,说明剩下的元素已经排序完毕 }
}
//输出排序后的数组
for (i = 0; i < 10; i++) {
printf("%d ", num[i]); }
printf("\n");
/*
int num[10] = {4, 5, 2, 10, 7, 1, 8, 3, 6, 9}; int i, j, temp;
//冒泡排序,最多比较n-1次
for (i = 0; i < 10 - 1; i++)
{
//每一轮比较前n-1-i个。也就是说, //我们已经排序好的最后i个已经不用再进行比较了 for(j=0;j <10-1-i;j++)
{
if (num[j] > num[j + 1]) {
temp = num[j]; num[j] = num[j + 1]; num[j + 1] = temp;
} }
}
//输出排序后的数组
for (i = 0; i < 10; i++) {
printf("%d ", num[i]); }
printf("\n");
*/ }
练习:
冒泡排序 ---- Bubble Sort 数组a[10] = {4, 5, 2, 10, 7, 1, 8, 3, 6, 9};
int a, b, temp;
temp = a; a = b; b = temp;
练习: 1.彩票的练习: 要求:随机产生7个不同的数字,你从控制台中输入你要投注的7个号码,进行依次比较,做对比。最后输出你输入的号码与随机生成 的号码,一样的数字个数。
2.有8个评委给选手打分,分数为1-100.选手的得分:去掉一个最高分,去掉一个最低分,最后剩下求平均值。 3.冒泡排序,自己写出优化前和优化后的数组。查看进行排序的次数。
4.设计一个游戏,总共有21个苹果,两个人依次取。每次没人最多取1-4个苹果,不能多取,也不能不取,谁取到最后一个苹果谁输了。写一个人机对战的程 序,要求人先去取,计算机后去取,但是计算机要胜。
5.魔术师先将排好序的13张黑桃牌排好好叠在一起,并使牌面向下。
魔术师最上面的牌是1,把它翻过来后正好是黑桃A,他讲黑桃A放在桌子上,然后按照顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这迭牌 的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张牌放在这迭牌的下面,再翻第三张牌牌,正好是黑桃3,这 样依次进行,将13张牌全部翻出来,准确无误。请问原始排序是什么???程序写出来。
int temp = 0;
temp = rand()% 36 + 1; 1-36
1)加入头文件 #include
2)srand(time(0));