数组编程题

一.对一维数组与二维数组的理解

编写程序,实现以下功能:

如有定义:

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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿井侯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值