输入最多10个大小写字符,以回车符结束输入,输出其中的大写字母。
比如:输入 abcDeF
则输出 DF
#include
#include
int main()
{
char temp[10] = {'\0'};
char str[10] = "";
gets(str);
int i;
int index = 0;
for(i = 0; i < 10; i++)
{
if(str[i] > 'A' && str[i] < 'Z')
{
temp[index++]=str[i];
}
if(str[i] == '\0')
{
break;
}
}
printf("%s",temp);
return 0;
}
对于一个已排好序的字符数组,要求输入一个字符,按照字符顺序插入数组中。
已知数组为char ch[20]="bcfmr",
输入:a
输出:abcfmr
输入:n
输出:bcfmnr
输入:z
输出:bcfmrz
#include
int main()
{
char ch[20]="bcfmr";
char c;
scanf("%c",&c);
// 从最后一位开始找应该存在的位置
int i;
int index = -1;
char d = c;
// ?? 这里的字符顺序是指忽略大小写吗?不是很理解题目意思,但是写上对小写肯定不影响
if(c >= 'A' && c <= 'Z')
{
d = 'a' + (c - 'A');
}
for(i = 4; i >= 0; i--)
{
char temp = ch[i];
if( temp < d)
{
index = i + 1;
break;
}
}
for(i = 5; i > index; i--)
{
ch[i] = ch[i - 1];
}
ch[index] = c;
printf("%s",ch);
return 0;
}
写两个函数,分别求两个正整数的最大公约数与最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。如输入15和18,输出3和90 。
【输入输出样例】
输入:
15 18
输出:
3 90
#include
int getGreat(int n1, int n2)
{
// 先找到小的那个数,最大公约数肯定比它小
int min = n1 > n2 ? n2 : n1;
while(1)
{
if(n1 % min == 0 && n2 % min ==0)
{
break; // 找到了
}
min--;
}
return min;
}
int getMin(int n1, int n2)
{
// 先找到大那个数,如何从它开始+1
int max = n1 > n2 ? n1 : n2;
while(1)
{
if(max % n1 == 0 && max % n2 == 0)
{
break;
}
max++;
}
return max;
}
int main()
{
int n1,n2;
scanf("%d%d",&n1,&n2);
int m = getGreat(n1,n2);
int k = getMin(n1,n2);
printf("%d %d",m,k);
return 0;
}
编写函数,用“冒泡法”对输入的n个整数按从小到大的顺序排列。编写主函数,输入n和n个数组元素,调用函数排序,在主函数中输出。注意,输入、输出可以通过单独的函数实现,在排序函数中不能输出数组元素。
输入:输入n,换行后输入n个整数。(n不超过20)
输出:从小到大的排列,数字之间有空格,末尾无空格。
【输入输出样例】
输入:
5
5 4 3 2 1
输出:
1 2 3 4 5
#include
#include
int* BubbleSort(int* num,int len)
{
int i, j;
for(i = len - 1; i >= 0; i--)
{
for(j = 0; j < i ;j++)
{
if(num[j] > num[j + 1])
{
int temp = num[j];
num[j] = num[j + 1];
num[j+1] = temp;
}
}
}
}
void print1(int* num,int n)
{
int i;
for(i = 0; i < n; i++)
{
if(i == 0)
{
printf("%d",num[0]);
}
else
{
printf(" %d",num[i]);
}
}
return;
}
int main()
{
int n;
scanf("%d",&n);
int num[20] = {0};
int i;
for(i = 0; i < n; i++)
{
scanf("%d",&num[i]);
}
BubbleSort(num,n);
print1(num,n);
return 0;
}
用牛顿迭代法求根。方程为ax³+bx²+cx+d=0,系数a,b,c,d的值依次为1,2,3,4。求x在x0附近的一个实根。数据类型用float。
输入:输入x0和迭代次数n。
输出:输出一个实数(用%f输出)
【输入输出样例】
输入:
1 10
输出:
-1.650629
#include
#include
float getX(float n,float x)
{
float f;
int i;
for(i = 0; i < n; i++)
{
f = (pow(x,3) + 2 * pow(x,2) + 3 * x + 4) / (3 * pow(x,2) + 2 * 2 * x + 3);
x -= f;
}
return x;
}
int main()
{
// 这一题要知道牛顿迭代法的数学公式才能做
float x0,n;
scanf("%f%f",&x0,&n);
float res = getX(n,x0);
printf("%f",res);
return 0;
}
题目内容:
分别编写函数输入数组元素(输入-9999表示结束)、从小到大排序数组元素、用二分法在有序数组中查找(返回下标)。
编写主函数,调用函数进行输入、排序和查找。数组元素不超过100个,均为整数。
输入格式:
两行,第1行为输入的数组元素,以-9999结束;第2行输入5个待查找的元素。数据用空格隔开。
输出格式:
5行,每行是查找到的元素的下标,找不到时结果为-1。
输入样例:
2 1 3 4 5 -9999
2 3 4 -10 10
输出样例:
1
2
3
-1
-1
#include
int num[100];
// 在接收输入的同时进行计数,看一共输入了多少个
int input(int* num)
{
int i;
int count = 0;
for(i = 0; i < 100; i++)
{
int t;
scanf("%d",&t);
if(t == -9999)
{
break;
}
num[i] = t;
count++;
}
return count;
}
int* BubbleSort(int* num,int len)
{
int i, j;
for(i = len - 1; i >= 0; i--)
{
for(j = 0; j < i ;j++)
{
if(num[j] > num[j + 1])
{
int temp = num[j];
num[j] = num[j + 1];
num[j+1] = temp;
}
}
}
}
int find(int len,int x)
{
int l = 0;
int r = len - 1;
int index = -1;
while(l <= r)
{
int mid = (l + r) / 2;
int t = num[mid];
if(t == x)
{
index = mid;
break;
}
if(t < x)
{
l = mid + 1;
}else
{
r = mid - 1;
}
}
return index;
}
int main()
{
int len = input(num);
BubbleSort(num,len);
int i;
for(i = 0; i < 5; i++)
{
int t;
scanf("%d",&t);
int index = find(len,t);
printf("%d\n",index);
}
return 0;
}
题目内容:
编写函数,将一个矩阵原地逆时针旋转90度,如原矩阵为
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
旋转后为:
4 8 12 16
3 7 11 15
2 6 10 14
1 5 9 13
所谓原地旋转就是不能使用另外一个一维或二维数组做中间存储,但可以使用变量。
矩阵的输入、输出也用函数实现。
编写主函数,先输入矩阵的行数和列数,然后调用函数按行输入矩阵的元素(设均为整数),
调用函数转,调用函数显示。矩阵的行数、列数均不超过10。
输入格式:
第1行,两个整数。表示矩阵的行数n和列数m。
以后n行,每行m个整数,用空格隔开。
输出格式:
m行,每行n个数,行中数据用一个空格隔开,末尾无空格。
输入样例:
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出样例:
4 8 12 16
3 7 11 15
2 6 10 14
1 5 9 13
#include
// 设置为全局变量就不用传参啦
int arr[10][10];
void input(int m,int n)
{
int i, j;
for(i = 0; i < m;i++)
{
for(j = 0; j < n; j++)
{
scanf("%d", &arr[i][j]);
}
}
}
void change(int n,int m)
{
for (int i = 0; i < n / 2; i++) {
for (int j = i; j < m - i - 1; j++) {
// 一次变四个元素
int temp = arr[i][j];
arr[i][j] = arr[j][m - i - 1];
arr[j][m - i - 1] = arr[n - i - 1][m - j - 1];
arr[n - i - 1][m - j - 1] = arr[m - j - 1][i];
arr[m - j - 1][i] = temp;
}
}
}
void print(int n,int m)
{
int i,j;
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
if(j == 0)
{
printf("%d",arr[i][j]);
}
else
{
printf(" %d",arr[i][j]);
}
}
printf("\n");
}
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
input(n,m);
change(n,m);
print(n,m);
return 0;
}
编写函数将整数k变换为一个字母串,规则如下:设0对应A,1对应B,......,25对应Z。从左向右考察k的各位数字,若连续两位对应上面一种变换,则直接换掉两位数字,否则一位数字换成对应的字母。变换结果存入res反馈给调用者。函数原型为:
void DigiTran( int k, char res[] );
在主函数输入一些非负整数,最后输入-1代表结束,利用上面函数对每个数字变换后输出。
示例输入:(数字间空一格)
12 3925 0 -1
示例输出:(每个字符串后面空一格)
M DJZ A
#include
#include
void DigiTran( int k, char res[] )
{
int n;
if(k != 0)
n = (int)log10(k) + 1;
else
n = 1;
// 直接将这个整数分解开
int arr[10];
int i;
int temp = k;
for(i = n - 1; i >= 0; i--)
{
arr[i] = temp % 10;
temp = temp / 10;
}
int k1 = 0;
for(i = 0; i < n; i++)
{
int t = arr[i];
if(i < n - 1)
{
t = arr[i] * 10 + arr[i + 1];
if(t > 25)
{
t = arr[i];
}
else
{
i++;
}
}
//printf("%d",t);
res[k1++] = 'A' + t;
}
}
int main()
{
int k;
scanf("%d",&k);
while(1)
{
char res[20] = {'\0'};
if(k == -1)
{
break;
}
DigiTran(k,res);
printf("%s ",res);
scanf("%d",&k);
}
return 0;
}