数组应用2(凑标题字数专用括号)

1.二分查找法:设已有一个n(1<=n<=10)个元素的整型数组a,且按值从小到大有序排列。输入一个整数x,然后在数组中查找x,如果找到,输出相应的下标,否则输出“not found”。

#include<stdio.h>

int  main() {
	int x,n=10,i,low,high,mid;
	int a[10] = {1,2,3,4,5,6,7,8,9,10};
	
	printf("enter x:");
	scanf("%d", &x);

	low = 0;/*开始时查找区间为整个数组*/
	high = n - 1;
	
	while (low <=high) /*循环条件*/
	{
		mid = (low + high) / 2;/*中间位置*/
		if (x == a[mid]) {
			break;/*查找成功。终止循环*/
		}
		else if (x > a[mid])/*后半段,Low后移*/
		{
			low = mid + 1;
		}
		else if (x < a[mid]) /*前半段,high前移*/
		{
			high = mid - 1;
		}
	}

	if (low <= high) {
		printf("index is%d\n", mid);
	}
	else {
		printf("not found");
	}

	return 0;
}

2.方阵转置:输入一个正整数n(1<n<=6),根据下式生成一个n*n的方阵,该方阵转置(行列互换)后输出。

#include<stdio.h>
#define maxn 6
int main() {
	int n,i,j,temp;
	int a[maxn][maxn];

	/*给二维数组赋初值*/
	printf("enter n:");
	scanf("%d", &n);
	for (i = 0; i < n; i++)/*行下标是外循环的循环变量*/
	{
		for (j = 0; j < n; j++) /*列下标是内循环的循环变量*/
		{
			a[i][j] = i * n + j + 1;/*给数组元素赋值*/
		}
	}

	/*行列互换*/
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			if (i <= j)/*只遍历上三角矩阵*/
			{
				temp = a[i][j];/*交换a[i][j]和a[j][i]*/
				a[i][j] = a[j][i];
				a[j][i] = temp;

			}
		}
	}

	/*按矩阵的形式输出*/
	for (i = 0; i < n; i++)/*针对所有行的循环*/
	{
		for (j = 0; j < n; j++) /*输出第i行的所有元素*/
		{
			printf("%d", a[i][j]);
		}
		printf("\n");
	}

	return 0;
}

3.计算天数:定义函数day_of_year(year,month,day),计算并返回年year、月month 、日day对应的是该年的第几天

#include<stdio.h>

int day_of_year(int year, int month, int day) {
	int k, leap;
	int tab[2][13] = {
		{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}
	};/*数组初始化,将每月的天数赋给数组,增加第0月 ,使月数号与二维数组的列号相对应*/

	leap = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);/*判断是否是闰年,当year是闰年时,leap=1;当year是非闰年时,leap=0*/

	/*计算天数*/
	for (k = 1; k < month; k++) {
		day = day + tab[leap][k];
	}

	return day;
}

int main() {

	int year, month, day;

	printf("enter year, month, day:");
	scanf("%d%d%d", &year, &month, & day);

	printf("%d", day_of_year(year, month, day));

	return 0;
}

4.判断回文字符串:输入一个以回车符为结束标志的字符串(少于80个字符),判断该字符串是否为回文。回文就是字符串中心对称,如:“noon”,“radar”是回文,“reader”不是回文。

#include<stdio.h>
#define MAXLINE 80
int main() {
	int k,i;
	char line[MAXLINE];

	/*输入字符串*/
	printf("enter a string:");/*输入提示*/
	k = 0;
	while ((line[k] = getchar()) != '\n')/*输入结束符为'\n'*/
	{
		k++;
	}
	line[k] = '\0';

	/*判断字符串line是否为回文*/
	i = 0;        /*i是字符串首字符的下标*/
	k = k - 1;    /*k是字符串尾字符的下标*/

	/*i和k两个下标从字符串收尾两端同时向中间移动,逐对判断对应字符是否相等*/
	while (i < k) {
		if (line[i] != line[k]) /*若对应字符不相等,则提前结束循环*/
		{
			break;
		}
		i++;
		k--;
	}
	if (i >= k) /*判断while循环是否正常结束,若是则说明字符串是回文*/
	{
		printf("it's a palindrome\n");
	}
	else /*while循环非正常结束,说明对应字符不等*/
	{
		printf("it is not a palindrome\n");
	}

	return 0;
}

注:1.getchar()函数是C语言中用于读取单个字符的标准输入函数;

       2.通常在循环中使用getchar()来连续读取用户的输入,直到遇到EOF为止。例如,可以使用while循环来逐个读取并显示用户输入的字符;

  3.尽管getchar()读取的是字符,但它的返回值类型是int,而不是char。这是因为int型可以表示更多的值,包括特殊值EOF(End Of File),这用于指示输入结束或发生错误;

      4.尽管getchar()读取的是字符,但它的返回值类型是int,而不是char。这是因为int型可以表示更多的值,包括特殊值EOF(End Of File),这用于指示输入结束或发生错误。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值