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),这用于指示输入结束或发生错误。