一.对一维数组与二维数组的理解
编写程序,实现以下功能:
如有定义:
char str1[6][10] = {"hello ","world ","how ","are ","you ","!"};
char str2[50]="\0";
将二维数组str1各行数据按照顺序依次放在一维数组str2中,使其合并成为一个字符串并输出。
(解析:可以运用字符串处理函数实现,注意各个字符串之后有一个空格)
输出:hello world how are you !
方法一:使用string函数库中的strcat()函数
#include<stdio.h>
#include<string.h>
int main()
{
char str1[6][10] = { "hello ", "world ", "how ", "are ", "you ", "!" };
char str2[50] = "\0";
for (int i = 0; i < 6; i++)
{
strcat(str2, str1[i]);
}
puts(str2);
return 0;
}
方法2:仿照九九乘法表的思路
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
char str1[6][10] = { "hello ","world ","how ","are ","you ","! " };
char str2[50] = { "\0" };
int k=0;
for (int i = 0; i < 6; i++) {//二维数组行数为6
for (int j = 0; j < 10; j++) {//双重循环下来,访问所有的str1(二维数组)
if (str1[i][j] != '\0') {//把是'\0'的去掉
str2[k] = str1[i][j];
k++;
}
else {
break;
}
}
}
puts(str2);
}
要注意的点:1.数组变量记得初始化,刚开始在方法二中,把str1的值赋给一个个的str2时,数组序号k的值没有赋为0值,vs报错,这也让我愈加意识到数组初始化的重要性。
2.”int puts(const char*)是无法将参数 char[6][10](二维数组)转化为“const char"的。
二.循环语句、条件语句与数组的妙用
从键盘输入若干个整数,其值在1至4范围内,用-1作为输入结束的标志。统计每个整数的个数。
如:
输入:1 1 2 3 3 3
输出:
1出现2次
2出现1次
3出现3次
4出现0次
#include<stdio.h>
int main()
{
int num;
int cnt[5] = { 0 };//
do
{
scanf("%d", &num);
if (num >= 1 && num <= 4)
{
cnt[num]++;//cnt[num] //表示下标为num的数组元素 cnt[num]++:下标为num的数组元素自身+1
}
} while (num!=-1);//根据题意,-1截止
for (int i = 1; i <= 4; i++)
{
printf("%d出现%d次\n", i, cnt[i]);//这样就对应起来了
}
return 0;
三、 彩票系统
(1).编程实现生成1~36范围内任意的7个数字
(2).保证7个数字是不重复的。
(3).输入一组号码与程序生成的随机号码对比,相同中奖,不同则反之
输入7位猜奖号码
输出7位中奖号码
输出中奖结果
随机数有关工具箱(函数库)
#include<stdlb.h>
#include<time.h>
随机数有关函数
srand((unsigned int)time(NULL) ) //播下随机种子
rand() //获取随机数
可以使用数组中的元素保存不同的随机值。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
//用户猜奖号码
int user[7] = { 0 };
//随机中奖号码
int Radom[7] = { 0 };
//用户输入猜奖号码
for (int i = 0; i < 7; i++)
{
scanf("%d", &user[i]);
}
//播下随机的种子
srand((unsigned int)time(NULL));
//随机生成7个中奖号码
for (int i = 0; i < 7; i++)
{
Radom[i] = rand() % 36 + 1; //1~36
for (int j = 0; j <= i - 1; j++)//重复检测
{
if (Radom[j] == Radom[i])//有重复的中奖号码
{
i--;
break;
}
}
}
//输出中奖号码
for (int i = 0; i < 7; i++)
{
printf("%d\t", Radom[i]);
}
//判断是否中奖 所有的号码数字和顺序都一样
int cnt = 0;//统计中奖号码的相同个数
for (int i = 0; i < 7; i++)
{
if (user[i] == Radom[i])
{
cnt++;//相同的号码个数+1
}
}
if (cnt == 7)
{
printf("\n中奖了\n");
}
else
{
printf("\n没有中奖\n");
printf("猜中了%d个号码\n", cnt);
}
return 0;
}