C언어 배열문제풀이 2

문제7번

이 문제는 구현이랑 가깝다고 생각한다.

字符与单词

编制程序,实现如下功能:
(1) 用户通过键盘输入一文档(假设最大长度不超过1000个字符),直到按句号“.”键时,文档输入结束。在文档输入时,需要做如下操作:字母的转换:在用户敲键盘的时候,输入的字符,如果它是大写字母,则回显相应的小写字母;如果它是小写字母,则回显相应的大写字母;其他字符,原样回显输出。
 如输入:(输入时回显)a 19-YEAR-OLD SAYS HE’S READY TO MAKE A DIFFERENCE. (用户实际键盘输入为:A 19-year-old says he’s ready to make a difference.)
(2) 用户输入文档结束后,分别统计出其中的英文字母、空格、数字和其他字符的个数,并在屏幕上输出。
 如上述文档输入结束后,屏幕输出如下信息:
英文字母个数:37
空格个数为:8
数字个数为:2
其他字符个数:4
(3) 用户输入两个单词word1 word2,程序自动将输入原始文档中的所有相应单词word1替换为word2后,将新文档输出。 (按照规则单词仅由一个或若干个空格间隔,其他符号不算为单词间隔符,如9-year-old 以及 he’s 都被认为是一个词)

要求输入文档为:In 2018, the price of Red Fuji apple is 4 yuan per catty; This variety of apples is big and round, and children like to eat apples in winter.
要求输入单词为:apples oranges
替换后的文档为:In 2018, the price of Red Fuji apple is 4 yuan per catty;This variety of oranges is big and round, and children like to eat oranges in winter.

#include<stdio.h>


int main()
{
	char str[1000], word1[15], word2[15], str2[1000] = { 0 }, str3[1000] = { 0 };
	int len, len2,len3, k, english = 0, space = 0, num = 0, other = 0;
	printf("input str:");
	gets(str);
	printf("input word1:");
	gets(word1);
	printf("input word2:");
	gets(word2);

	len = strlen(str);
	len2 = strlen(word1);
	len3 = strlen(word2);
    // 첫번째 기능 구현
	for (int i = 0; i < len; i++) {
		k = (int)str[i];
		if (65 <= k && k <= 90) {
			str3[i]= str[i] + 32;
			english++;
		}
		else if (97 <= k && k <= 122) {
			str3[i]= str[i] - 32;
			english++;
		}
		else if (str[i]==' '){
			str3[i] = str[i];
			space++;
		}
		else if (48 <= k && k <= 57) {
			str3[i] = str[i];
			num++;
		}
		else {
			str3[i] = str[i];
			other++;
		}
	}
    // 두번째 기능 
	int j = 0;
	for (int i = 0; i < len; i++) {
		int k = 0;
			while (word1[k] == str[i + k]) {
				k++;

			}
			if (k == len2 && str[i+k]==' ') {
				for (int t = 0; t < len3; t++) {
					str2[j] = word2[t];
					j++;
				}
				i += len2-1;

			}
			else {
				str2[j] = str[i];
				j++;
			}

		
	}
    //결과 출력
	printf("%s\n", str3);
	printf("english:%d\n", english);
	printf("space:%d\n", space);
	printf("number:%d\n", num);
	printf("other:%d\n", other);
	printf("%s\n", str2);
	return 0;
}

문제8번

环形铁路路径

有一条环形铁路,共有n个车站(车站的顺序如图)。现有检查组去检查服务质量,从第i个车站开始,每隔m个车站检查一个,直到所有的车站都检查完毕。编写一个程序输出检查顺序。

#include<stdio.h>


int main()
{
	int n, m, i;
	int arr[100] = { 0 }, arr2[100] = { 0 };
	int flag = 1;
	printf("input n,m,i:");
	scanf_s("%d %d %d",&n,&m,&i);
	arr[i] = 1;
	arr2[0] = i;
	int j = 1;
	while (flag) {
		// 정거장 n을 넘었을때 넘어간 정거장으로 다시설정
		if (i + m > n)i = m + i - n;
		else i = i + m;
		//정거장을 안 검사했으면 체크해주고 순서도 arr2에다가 삽입해주기
		if (arr[i] == 0) {
			arr[i] = 1;
			arr2[j] = i;
			j++;
		}
		// 각각 정거장 다 검사했는지 확인하기
		for (int k = 1; k <= n; k++) {
			if (arr[k] != 1)break;
			if (k == n) flag = 0;
		}
	}
	for (int i = 0; i < n; i++) printf("%d ", arr2[i]);


	return 0;
}

문제9번

矩阵的初始化

已知,在C语言中,函数 srand() 与 rand()配合使用,可以生成一系列的随机数。
例如,运行下面的程序,可以生成10个0 到 99 之间的随机数。
(랜덤숫자 뽑아내는 예제 코드)

对于一个m*n阶的整数型矩阵进行初始化。要求:

用户键盘输入矩阵的阶,m与n (m,n在0~15之间 如输入m=12,n=8);
请使用上面样例提供的随机数生成函数,用0~m*n之间的随机数分别初始化该矩阵元素;
在屏幕上输出该矩阵。

#include <stdlib.h> 
#include <stdio.h> 
#include <time.h>
int main(void)
{
	int m, n;
	int a[15][15]={ 0 };
	printf("input m,n:");
	scanf_s("%d %d",&m,&n);
	srand(time(NULL));
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			a[i][j] = rand() %( m * n);
		}
	}
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

좋은 웹페이지 즐겨찾기