1.密码破译
要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母。
例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。
请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
测试输入:China
测试输出:Glmre
#include <stdio.h>
int main(){
char s[11];
gets(s); //输入字符串
for (int i = 0; s[i] != '\0'; i++){
if (s[i] >= 'A' && s[i] <= 'Z'){ //判断是否为大写字母
s[i] = (s[i] + 4 - 'A') % 26 + 'A'; //大写字母后移
}
if (s[i] >= 'a' && s[i] <= 'z'){ //判断是否为小写字母
s[i] = (s[i] + 4 - 'a') % 26 + 'a'; //小写字母后移
}
}
puts(s); //输出字符串
return 0;
}
2.最大公约数与最小公倍数
输入两个正整数m和n,求其最大公约数和最小公倍数。
测试输入:12,8
测试输出:4,24
#include <stdio.h>
int main(){
int n, m, r, p;
scanf("%d,%d", &n, &m);
if(n < m){ //确保 n 比 m 大
int temp = n;
n = m;
m = temp;
}
p = n * m;
while(m != 0){
r = n%m;
n = m;
m = r;
}
printf("最大公约数为: %d\n", n);
printf("最小公倍数为: %d\n", p/n);
return 0;
}
3.字符统计
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
测试输入:aklsjflj123 sadf918u324 asdf91u32oasdf/.';123
测试输出:字母数:23,数字数:16,空格数:2,其他数:4
方法一:利用 getchar()
输入字符。
#include <stdio.h>
int main(){
int letter = 0, number = 0, space = 0, other = 0;
char ch;
while((ch = getchar()) != '\n'){ //读入字符
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
letter ++;
else if (ch == ' ')
space ++;
else if (ch >= '0' && ch <= '9')
number ++;
else
other ++;
}
printf("字母数:%d,数字数:%d,空格数:%d,其他数:%d", letter, number, space, other);
return 0;
}
方法二:利用 gets()
输入字符串。
#include <stdio.h>
#include <string.h>
char str[200];
int main(){
int letter = 0, number = 0, space = 0, other, n;
gets(str);
n = strlen (str);
for(int i = 0; i < n; i++){
if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
letter ++;
else if (str[i] == ' ')
space ++;
else if (str[i] >= '0' && str[i] <= '9')
number ++;
else
other++;
}
printf("字母数:%d,数字数:%d,空格数:%d,其他数:%d", letter, number, space, other);
return 0;
}
4.求和1
求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如: a为2,n=5时,Sn=2+22+222+2222+22222,a,n由键盘输入。
测试输入:2 5
测试输出:24690
#include <stdio.h>
int main(){
int a, n, sn = 0, temp = 0;
scanf("%d %d", &a, &n);
for(int i = 0; i < n; i++){
temp += a;
sn += temp;
a *= 10;
}
printf("%d\n", sn);
return 0;
}
5.求和2
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
#include <stdio.h>
int main(){
int n;
long long Sn = 0, temp = 1;
scanf("%d", &n);
for (int i = 1; i <= n; i++){
temp = temp * i;
Sn = Sn + temp;
}
printf("%lld", Sn);
return 0;
}
6.求和3
求以下三数的和, 1a之和,1b的平方和,1~c的倒数和。a,b,c 由键盘输入,保留2位小数。
测试输入:100 50 10
测试输出:47977.93
#include <stdio.h>
int main(){
int a, b, c;
double sum1 = 0, sum2 = 0 , sum3 = 0;
scanf("%d %d %d", &a, &b, &c);
for (int i = 1; i <= a; i++)
sum1 += i;
for (int i = 1; i <= b; i++)
sum2 += i * i;
for (double i = 1; i <= c; i++)//i作分母,使用double类型
sum3 += 1/i;
printf("%.2lf", sum1 + sum2 + sum3);
return 0;
}
7.水仙花数
打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=13+53+3^3。
测试输入:无
测试输出:无
#include<stdio.h>
int main(){
int a,b,c;
for(int i=100; i<1000; i++){
a = i / 100; //百位
b = i / 10 % 10; //十位
c = i % 10; //个位
if(a*a*a + b*b*b + c*c*c == i)
printf("%d ",i);
}
return 0;
}
8.完数
一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子。
测试输入:1000
测试输出:6 its factors are 1 2 3
28 its factors are 1 2 4 7 14
496 its factors are 1 2 4 8 16 31 62 124 248
#include <stdio.h>
int main(){
int N, sum = 0;
scanf( "%d", &N );
for ( int i = 2; i <= N; i++ ){
for ( int j = 1; j <=i/2; j++ ){
if ( i % j == 0 )
sum = sum + j;
}
if ( sum == i ){
printf( "%d its factors are ", i );
for ( int k = 1; k <=i/2; k++ ){
if ( i % k == 0 )
printf( "%d ", k );
}
printf( "\n" );
}
sum = 0;
}
return 0;
}
9.求和4
有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
测试输入:10
测试输出:16.48
#include<stdio.h>
int main(){
int n;
double sum = 0, a = 2.0, b = 1.0, t;//a为分子,b为分母
scanf("%d", &n);
for(int i = 0; i < n; i++){
sum += a / b;
t = a;
a = a + b;
b = t;
}
printf("%0.2lf", sum);
return 0;
}
10.自由下落的距离计算
一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数。M, N由键盘输入。
测试输入:1000
测试输出:5
#include<stdio.h>
int main(){
double M, N;
scanf("%lf %lf", &M, &N);
double sum = M, h = M/2;
for(int i = 1; i < N; i++){
sum += 2*h;
h = h/2;
}
printf("%lf %lf", h, sum);
return 0;
}
11.猴子吃桃
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
测试输入:10
测试输出:1534
# include <stdio.h>
int main()
{
int sum = 1, n;
scanf("%d", &n);
while(n > 1){ //注意循环 n-1 次, 不是n次
sum = (sum + 1) * 2;
n--;
}
printf("%d", sum);
return 0;
}
12.迭代法求平方根
用迭代法求 平方根。
公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数。
#include <stdio.h>
#include <math.h>
int main(){
double a, x0, x1;
scanf("%lf", &a);
x0 = a/2;
x1 = (x0 + a/x0)/2;
while(fabs(x1-x0) > 1e-5){
x0 = x1;
x1 = (x0 + a/x0)/2;
}
printf("%0.3lf", x1);
return 0;
}
13.筛选N以内的素数
筛选法求N以内的素数。
测试输入:10
测试输出:
2
3
5
7
#include <stdio.h>
#include <math.h>
int main(){
int N, isPrime = 1;
scanf("%d", &N);
for(int i = 2; i <= N; i++){//因为 1 不是素数,i 从 2 开始
isPrime = 1;
for(int j = 2; j <= sqrt(i); j++){
if(i % j == 0){
isPrime = 0;
}
}
if(isPrime == 1)
printf("%d\n", i);
}
return 0;
}
14.选择排序
输入10个数,用选择法对10个整数从小到大排序。
测试输入:4 85 3 234 45 345 345 122 30 12
测试输出:3 4 12 30 45 85 122 234 345 345
#include <stdio.h>
void Select_Sort(int a[], int len) {
int min, temp;
for (int i = 0 ; i < len - 1 ; i++){
min = i; // 记录最小值,第一个元素默认最小
for (int j = i + 1; j < len; j++){ // 访问未排序的元素
if (a[j] < a[min]){ // 找到目前最小值
min = j; // 记录最小值
}
}
if(min != i){
temp = a[min]; // 交换两个变量
a[min] = a[i];
a[i] = temp;
}
}
}
int main(){
int a[10];
for(int i = 0; i < 10; i++)
scanf("%d", &a[i]);
Select_Sort(a, 10);
for(int i = 0; i < 10; i++)
printf("%d ", a[i]);
return 0;
}
15.冒泡排序
输入10个数,用选择法对10个整数从小到大排序。
测试输入:4 85 3 234 45 345 345 122 30 12
测试输出:3 4 12 30 45 85 122 234 345 345
#include <stdio.h>
void Bubble_Sort(int a[], int len){
int temp;
for (int i = 0; i < len - 1; i++){
for (int j = 0; j < len - 1 - i; j++){
if (a[j] > a[j + 1]){
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
int main(){
int a[10];
for(int i = 0; i < 10; i++)
scanf("%d", &a[i]);
Bubble_Sort(a, 10);
for(int i = 0; i < 10; i++)
printf("%d ", a[i]);
return 0;
}
16.直接插入排序
输入10个数,用选择法对10个整数从小到大排序。
测试输入:4 85 3 234 45 345 345 122 30 12
测试输出:3 4 12 30 45 85 122 234 345 345
#include <stdio.h>
void Insert_Sort(int a[], int len){
int temp, j;//将 j 定义在for循环外,后面要用到 j
for (int i = 1; i < len; i++){
temp = a[i];
for (j = i; j > 0 && a[j-1] > temp; j--){
a[j] = a[j-1];
}
a[j] = temp;
}
}
int main(){
int a[10];
for(int i = 0; i < 10; i++)
scanf("%d", &a[i]);
Insert_Sort(a, 10);
for(int i = 0; i < 10; i++)
printf("%d ", a[i]);
return 0;
}
17.二分查找(折半查找)
查找 target 在有序数组中的下标。数组长度n,有序数组中的n个元素,target 均由键盘输入。
测试输入1:
4
1 2 3 4
4
测试输出1:4在数组中的下标为3
测试输入2:
4
1 2 3 4
0
测试输出2:数组中不存在0
#include <stdio.h>
int a[100];
int search(int a[], int n, int target){ //a是数组,n是数组a的大小,target是需要查找的值
int left = 0, right = n - 1;
while (left <= right){ //当left <= right时,区间 [left, right]有效
int mid = (right + left) / 2;
if (a[mid] > target){
right = mid - 1; //target在左区间 [left, mid - 1]
}
else if (a[mid] < target){
left = mid + 1; //target在右区间 [mid + 1, right]
}
else{ //既不在左边,也不在右边,那就是找到答案了
return mid; //返回的是 target在数组中的位置
}
}
//循环结束都没有找到目标值,说明数组中没有 target
return -1;
}
int main(){
int n, target, pos;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &target);
pos = search(a, n, target);
if(pos == -1)
printf("数组中不存在%d\n", target);
else
printf("%d在数组中的下标为%d\n", target, pos);
return 0;
}
18.矩阵对角线求和
输入一个3×3矩阵,求主对角线元素之和与副对角线元素之和。
测试输入:
1 2 3
1 1 1
3 2 1测试输出:
主对角线之和为 3
副对角线之和为 7
#include<stdio.h>
int main(){
int a[3][3];
int sum1 = 0, sum2 = 0;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
scanf("%d", &a[i][j]);
}
}
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
if(i == j) //主对角线
sum1 += a[i][j];
if(i + j == 2) //副对角线
sum2 += a[i][j];
}
}
printf("主对角线之和为 %d\n副对角线之和为 %d\n", sum1, sum2);
return 0;
}
19.数组插入
已有一个已正序排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。
测试输入:
1 7 8 17 23 24 59 62 101
50测试输出:
1 7 8 17 23 24 50 59 62 101
#include<stdio.h>
int main(){
int a[10], num;
for(int i = 0; i < 9; i++)
scanf("%d", &a[i]);
scanf("%d", &num);
int j;
for (j = 9; j > 0 && a[j-1] > num; j--){ //直接插入排序的思想
a[j] = a[j-1]; //元素后移
}
a[j] = num;
for(int i = 0; i < 10; i++)
printf("%d ", a[i]);
return 0;
}
20.数字逆序输出
输入n个数字,然后逆序输出。
测试输入:
10
1 2 3 4 5 6 7 8 9 0
测试输出:
0 9 8 7 6 5 4 3 2 1
#include<stdio.h>
int a[100];
int main(){
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
for(int i = n-1; i >= 0; i--)
printf("%d ", a[i]);
return 0;
}
标签:10,main,语言,int,编程,++,测试,include
From: https://www.cnblogs.com/bwtyt/p/18080065