期末C语言基本算法
题型一
输入两个学生a和b的成绩,输出其中高的成绩
# include <studio.h>
void main()
{
float a,b,max;
printf("please enter a and b:");
scanf("%f,%f",&a,&b);
if(a>=b) max = a;
else max = b;
printf("max=%6.2f\n",max);
}
题型二
输入3个成绩a,b,c要求按由高到低的顺序输出
- if a < b 将a和b对换
- if b < c 将a和c对换
- if b < c 将b和c对换
# include <studio.h>
void main()
{
float a,b,c,t;
scanf("please enter a,b,c:");
if(a<b) {t=a;a=b;b=t;}
if(a<c) {t=a;a=c;c=t;}
if(b<c) {t=b;b=c;c=t;}
printf("%6.2f,%6.2f,%6.2f\n",a,b,c);
}
题型三
输入3个整数,输出最大值和最小值
# include <studio.h>
void main()
{
int a,b,c,max,min;
printf("input three numbers:");
sacnf("%d%d%d",&a,&b,&c);
if(a>b) {max = a;min = a;}
else {max=b;min=a;}
if(max<c) max = c;
if(min>c) min = c;
printf("max=%d\n min=%d",max,min);
}
题型四
编写代码实现闰年判断
# include <stdio.h>
void main()
{
int year;
printf("请输入年份:");
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
printf("%d年是闰年\n", year);
}
else
{
printf("%d年不是闰年\n", year);
}
}
题型五
# include <stdio.h>
void main()
{
int i,j,k,n;
scanf("%d",&n);
for(int i = 1; i <= n; i++)
{
for(int j = 1; j < i-1; j++) printf(" ");
for(int k = 1; k <= n; k++) printf("*");
printf("\n");
}
}
题型六
求1+2+3+……+100的和
# include <stdio.h>
void main()
{
int i,sum = 0;
for(int i = 1; i <= 100; i++)
{
sum = sum + i;
}
printf("sum = %d\n",sum);
}
题型七
输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数
#include<stdio.h>
void main()
{
// 输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数
int kongge = 0,zimu = 0,shuzi = 0,qita = 0;
char ch;
printf("Input:\n");
while ((ch = getchar()) != '\n')
{
if (ch == ' ')
{
kongge++;
}else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
{
zimu++;
}else if (ch >= '0' && ch <= '9')
{
shuzi++;
} else {
qita++;
}
}
printf("英文字母:%d\n",zimu);
printf("空格:%d\n",kongge);
printf("数字:%d\n",shuzi);
printf("其他字符:%d",qita);
}
题型八
打印输出九九乘法表
# include <stdio.h>
void main
{
int i,j;
for(int i = 1; i <= 9; i++)
{
for(int j = 1; j <= i; j++)
{
printf("%d * %d = %d",i,j,i*j);
}
printf("\n");
}
}
题型九
输出100以内能被3整除且个位数为6的所有整数
# include <stdio.h>
void main
{
int i,j;
for(int i = 0;i < 10; i++)
{
j = i * 10 + 6;
if(j%3 == 0) printf("%d",j);
}
}
题型十
判断一个数是否是素数
# include <stdio.h>
void main(){
// 判断一个数是否是素数
int n;
printf("Inpute:\n");
scanf("%d",&n);
int i;
for (i = 2; i < n; i++)
{
if (n % i == 0)
{
break;
}
}
if (n == i)
{
printf("%d是素数",n);
} else {
printf("%d不是素数",n);
}
}
求100到200之间的全部素数
# include <stdio.h>
void main(){
// 求100到200之间的全部素数
int i,j,sum = 0;
for (i = 100; i <= 200; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (i == j)
{
sum = sum + i;
}
}
printf("%d",sum);
}
题型十一
输出10!的阶乘的值
# include <stdio.h>
void main(){
int result = 1;
for(int i = 1; i <= 10; i++){
result = result * i;
}
printf("%d",result);
}
求1!+2!+3!+……+10! 阶乘的值
#include<stdio.h>
void main()
{
// 求1!+2!+3!+……+10! 阶乘的值
int sum = 0;
for (int i = 1; i <= 10; i++)
{
int mult = 1;
for (int j = 1; j <= i; j++)
{
mult = mult * j;
}
sum = sum + mult;
}
printf("%d",sum);
}
题型十二
输出1~1000的奇数之和
# include <stdio.h>
void main(){
int sum = 0;
for(int i = 1; i <= 1000; i++){
if (i % 2 != 0)
{
sum = sum + i;
}
}
printf("%d",sum);
}
输出1~1000的偶数之和
# include <stdio.h>
void main(){
int sum = 0;
for(int i = 1; i <= 1000; i++){
if (i % 2 == 0)
{
sum = sum + i;
}
}
printf("%d",sum);
}
题型十三
统计1~1000之间的水仙花数
水仙花数:一个N位数,各个数位上的数的n次方之和恰好等于原数(153=1^3 + 53+33)
# include <stdio.h>
void main(){
// 统计100~999之间的水仙花数
// 水仙花数:一个N位数,各个数位上的数的n次方之和恰好等于原数(153=1^3 + 5^3+3^3)
int q,w,e;
for(int i = 100; i <= 999; i++){
q = i % 10; //个
w = i / 10 % 10; //十
e = i / 10 / 10; //百
if(i == q*q*q + w*w*w + e*e*e){
printf("%d,",i);
}
}
}
题型十四
正整数分解质因数
输入:90 打印:90=2×3×3×5
#include <stdio.h>
void main()
{
/*
正整数分解质因数
输入:90 打印:90=2×3×3×5
*/
int n;
printf("请输入正整数:");
scanf("%d", &n);
printf("%d = ", n);
int i;
for (i = 2; i <= n; i++)
{
while (n % i == 0)
{
printf("%d*", i);
n = n / i;
}
}
}
#include <stdio.h>
// 函数声名
int fun();
int main()
{
/*
正整数分解质因数
输入:90 打印:90=2×3×3×5
*/
int n;
printf("请输入整数:");
scanf("%d", &n);
fun(n);
}
int fun(int n)
{
printf("%d = ",n);
for (int i = 2 ; i <= n; i++)
{
while (n % i == 0)
{
printf("%d ",i);
n = n / i;
}
}
}
题型十五
求4 * 4 矩阵的 主次对角线之和
# include <stdio.h>
void main(){
// 求4 * 4 矩阵的 主次对角线之和
int str[4][4];
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("请输入-第%d行-第%d列元素值:",i,j);
scanf("%d",&str[i][j]);
}
}
int sum_1 = 0,sum_2 = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (i == j) // 主对角线 和
{
sum_1 = sum_1 + str[i][j];
}
if (i + j == 3) // 对角线 和
{
sum_2 = sum_2 + str[i][j];
}
}
}
printf("主对角线和为:%d\n次对角线和为:%d",sum_1,sum_2);
}
题型十六
杨辉三角
#include<stdio.h>
void main()
{
/*
1
1 1
1 2 1
1 3 3 1
*/
int arr[10][10];
for (int i = 0; i < 10; i++)
{
arr[i][0] = 1;
arr[i][i] = 1;
}
for (int j = 2; j < 10; j++)
{
for (int k = 1; k < j; k++)
{
arr[j][k] = arr[j-1][k-1] + arr[j-1][k];
}
}
for (int n = 0; n < 10; n++)
{
for (int m = 0; m <= n; m++)
{
printf("%5d",arr[n][m]);
}
printf("\n");
}
}
#include<stdio.h>
void main()
{
/*
1
1 1
1 2 1
1 3 3 1
*/
int arr[10][10];
for (int i = 0; i < 10; i++)
{
arr[i][0] = 1;
arr[i][i] = 1;
}
for (int j = 2; j < 10; j++)
{
for (int k = 1; k < j; k++)
{
arr[j][k] = arr[j-1][k-1] + arr[j-1][k];
}
}
for (int n = 0; n < 10; n++)
{
for (int h = 0; h < 10-n; h++)
{
printf(" ");
}
for (int m = 0; m <= n; m++)
{
printf("%5d",arr[n][m]);
}
printf("\n");
}
}
题型十七
键盘输入十个整数,用冒泡排序后按从小到大输出
# include <stdio.h>
void main(){
int arr[20];
printf("请输入10个随机数:");
for(int i = 0;i < 10; i++){
scanf("%d",&arr[i]); //10 9 8 7 6 5 4 3 2 1
}
for(int j = 0;j < 10-1; j++){
for(int k = 0; k <= 10-1-j; k++){
if(arr[k] > arr[k+1]){
int temp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = temp;
}
}
}
for(int f = 0; f < 10; f++){
printf("%d,",arr[f]);
}
}
键盘输入十个整数,用选择排序后按从小到大输出
# include <stdio.h>
void main(){
// 键盘输入十个整数,用选择排序后按从小到大输出
int arr[20];
for(int i = 0;i < 10; i++){
printf("请输入%d个随机数:",i+1);
scanf("%d",&arr[i]);
}
for(int j = 0;j < 10-1; j++){
for(int k = j+1; k < 10; k++){
if(arr[j] > arr[k]){
int temp = arr[j];
arr[j] = arr[k];
arr[k] = temp;
}
}
}
for(int f = 0; f < 10; f++){
printf("%d,",arr[f]);
}
}
题型十八
输入一串字母字母:大小写互相转换
#include<stdio.h>
#include<string.h>
void main()
{
char str[100];
printf("Input a string:");
scanf("%s",str);
for(int i=0;i<strlen(str);i++)
{
if(str[i]>='a' && str[i]<='z')
{
str[i]=str[i]-32;//小写转换成大写
}
else if(str[i]>='A' && str[i]<='Z')
{
str[i]=str[i]+32;//大写转换成小写
}
}
printf("新字符串是:%s\n",str);
}
题型十九
最小公倍数
#include<stdio.h>
void main()
{
int a,b;
printf("Input:\n");
scanf("%d,%d",&a,&b);
int max = a > b ? a : b;
for (int i = 1; i < a*b; i++)
{
if (i % a == 0 && i % b == 0)
{
printf("最小公倍数:%d",i);
break;
}
}
}
最大公约数(公因数)
#include<stdio.h>
void main()
{
int a,b;
printf("输入两个整数:");
scanf("%d %d",&a,&b);
int n = a > b ? a : b;
int max = 0;
for (int i = 1; i <= n; i++)
{
if (a % i == 0 && b % i == 0)
{
if (i > max) //最大公约数
{
max = i;
}
// printf("%d,",i); 所有公约数
}
}
printf("最大公约数:%d",max);
}
输入两个正整数m和n,求其最大公约数和最小公倍数
#include<stdio.h>
void main()
{
// 输入两个正整数m和n,求其最大公约数和最小公倍数
//声名函数
int max_gys(int a,int b,int max);
int min_gbs(int a,int b,int min);
int m,n;
printf("Input:\n");
scanf("%d,%d",&m,&n);
int max = m > n ? m : n;
int min = m < n ? m : n;
int gys = max_gys(m,n,max);
int gbs = min_gbs(m,n,min);
printf("最大公约数:%d\n最小公倍数:%d",gys,gbs);
}
int max_gys(int a,int b,int max) //最大公约数
{
int gmax = 0;
for (int i = 1; i <= max; i++)
{
if (a % i == 0 && b % i ==0)
{
if (i > gmax)
{
gmax = i;
}
}
}
return gmax;
}
int min_gbs(int a,int b,int min) //最小公倍数
{
int gmin = 0;
for (int i = min; i <= a*b; i++)
{
if (i % a == 0 && i % b ==0)
{
gmin = i;
break;
}
}
return gmin;
}
题型二十
建立二维数组,循环赋值并打印
# include <stdio.h>
void main(){
int arr[3][3];
printf("请输入3x3二维数组的元素:\n");
// 循环赋值
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("请输入arr[%d][%d]的值:", i, j);
scanf("%d", &arr[i][j]);
}
}
// 打印数组元素
printf("二维数组元素如下:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
题型二十一
求1-100的完全数
#include<stdio.h>
void main()
{
for (int i = 1; i < 100; i++)
{
int sum = 0;
for (int j = 1; j < i; j++)
{
if (i % j == 0)
{
sum = sum + j;
}
}
if (i == sum)
{
printf("%d,",i);
}
}
}
题型二十二
输入三个整数x,y,z 请把这三个数从小到大输出
#include<stdio.h>
void main()
{
// 输入三个整数x,y,z 请把这三个数从小到大输出
int a,b,c;
printf("Input:\n");
scanf("%d,%d,%d",&a,&b,&c);
if (a > b)
{
int temp = a;
a = b;
b = temp;
}
if (a > c)
{
int temp = a;
a = c;
c = temp;
}
if (b > c)
{
int temp = b;
b = c;
c = temp;
}
printf("%d,%d,%d",a,b,c);
}
题型二十三
输入某年某月某日,判断这一天是这一年的第几天
#include<stdio.h>
void main()
{
// 输入某年某月某日,判断这一天是这一年的第几天
int year,month,day;
printf("请输入年.月.日:\n");
scanf("%d.%d.%d",&year,&month,&day);
int sum = 0;
switch(month){
case 1: sum = 0; break;
case 2: sum = 31; break; //假设都为平年,二月28天
case 3: sum = 59; break;
case 4: sum = 90; break;
case 5: sum = 120; break;
case 6: sum = 151; break;
case 7: sum = 181; break;
case 8: sum = 212; break;
case 9: sum = 242; break;
case 10: sum = 273; break;
case 11: sum = 304; break;
case 12: sum = 334; break;
default: printf("Error!");
}
sum = sum + day;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
if (month > 1)
{
sum = sum + 1;
printf("%d",sum);
}else {
printf("%d",sum);
}
} else {
printf("%d",sum);
}
}
题型二十四
求1 - 1/2 + 1/3 - 1/4 + …… +1/99
#include<stdio.h>
void main()
{
// 求1 - 1/2 + 1/3 - 1/4 + …… +1/99
double sum = 0.0;
int tag = 1;
for (int i = 1; i < 100; i++)
{
if (i % 2 == 0)
{
tag = -tag;
}
sum = sum + tag/i;
}
printf("%lf",sum);
}
题型二十五
求 ax²+bx+c=0 的根,分别考虑
- 有两个不等的实根
- 有两个相等的实根
#include<stdio.h>
#include<math.h>
void main()
{
// 求 ax²+bx+c=0 的根,分别考虑
// 有两个不等的实根
// 有两个相等的实根
double a,b,c;
printf("Input:\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
double data = b*b - 4*a*c;
if (a == 0)
{
printf("该方程不是二次函数");
} else {
if (data == 0)
{
double result = -b / (2.0*a);
printf("有两个相等的实根:x=%lf",result);
} else{
if (data > 0)
{
double p = -b / (2.0*a);
double n = sqrt(data);
double result_1 = p + n;
double result_2 = p - n;
printf("有两个不等的实根:x1=%lf,x2=%lf",result_1,result_2);
}
if (data < 0)
{
printf("无实根");
}
}
}
}
题型二十六
输出100以内的个位数为6,且能被3整除的所有数
#include <stdio.h>
void main() {
for (int i = 1; i < 10; i++)
{
int temp = 10 * i + 6;
if (temp % 3 == 0)
{
printf("%d,",temp);
}
}
}
题型二十七
求Sn = a + aa + aaa + …… + aa……a之值,其中a是一个数字,n表示a的位数,n由键盘输入
例如:2+22+222+2222+22222(此时n是5)
#include<stdio.h>
void main()
{
int n,a;
printf("Input:\n");
scanf("%d,%d",&a,&n);
int sum = 0;
int temp = 0;
for (int i = 1; i <= n; i++)
{
temp = temp*10 + a;
sum = sum + temp;
}
printf("%d",sum);
}
题型二十八
从键盘输入一个字符串a,并在a串中最大元素后插入字符串b(“ab”)
#include <stdio.h>
#include <string.h>
void main(){
//从键盘输入一个字符串a,并在a串中最大元素后插入字符串b("ab")
char a[100];
printf("Input:\n");
gets(a);
int index = 0;
for (int i = 0; i < strlen(a); i++) //字符串最大值元素下标
{
if (a[i] > a[index])
{
index = i;
}
}
/*
方法一:
// 将数组a 最大值下标index 依次后移
int len = strlen(a);
for (int i = len + 2; i > index + 1; i--) {
a[i] = a[i - 2];
}
//插入
a[index+1] = 'a';
a[index+2] = 'b';
printf("新字符串为:%s",a);
*/
// 将数组a 最大值下标index 后的数据放入新数组
char p[100];
int k = 0;
for (int j = index+1; j < strlen(a); j++,k++)
{
p[k] = a[j];
}
p[k] = '\0'; //往p末尾插入\0
a[index+1] = '\0'; //往a末尾插入\0
//拼接字符
char b[] = "ab";
strcat(a,b);
strcat(a,p);
printf("新字符串为:%s",a);
}
题型二十九
将两个字符串连接起来,不使用strcat函数
#include<stdio.h>
void main()
{
// 将两个字符串连接起来,不使用strcat函数
int i = 0, j = 0;
char s1[80],s2[40];
printf("Inpute s1:");
scanf("%s",&s1);
printf("Inpute s2:");
scanf("%s",&s2);
while (s1[i] != '\0') // s1数组长度
{
i++;
}
while (s2[j] != '\0')
{
s1[i++] = s2[j++];
}
s1[i] = '\0';
printf("%s",s1);
}
题型三十
输入20个学生的信息,包括姓名,学号,成绩1,成绩2,成绩3,成绩4
要求输出所有学生中成绩1大于60,成绩2大于70的学生的成绩,按总分从大到小的顺序排列
#include <stdio.h>
struct student
{
char name[20];
int num;
float score1;
float score2;
float score3;
float score4;
float totalScore; // 总分
};
void main()
{
/*
输入20个学生的信息,包括姓名,学号,成绩1,成绩2,成绩3,成绩4
要求输出所有学生中成绩1大于60,成绩2大于70的学生的成绩,按总分从大到小的顺序排列
*/
//定义结构体数组
struct student stu[20];
// 输入学生信息
for (int i = 0; i < 20; i++)
{
printf("请输入第 %d 位学生的姓名:", i + 1);
scanf("%s", &stu[i].name);
printf("请输入第 %d 位学生的学号:", i + 1);
scanf("%d", &stu[i].num);
printf("请输入第 %d 位学生的成绩1:", i + 1);
scanf("%f", &stu[i].score1);
printf("请输入第 %d 位学生的成绩2:", i + 1);
scanf("%f", &stu[i].score2);
printf("请输入第 %d 位学生的成绩3:", i + 1);
scanf("%f", &stu[i].score3);
printf("请输入第 %d 位学生的成绩4:", i + 1);
scanf("%f", &stu[i].score4);
// 总分
stu[i].totalScore = stu[i].score1 + stu[i].score2 + stu[i].score3 + stu[i].score4;
}
// 按总分从大到小的顺序排列
struct student temp;
for (int i = 0; i < 20 - 1; i++)
{
for (int j = 0; j < 20 - 1 - i; j++)
{
if (stu[j].totalScore < stu[j + 1].totalScore)
{
temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
// 输出所有学生中成绩1大于60,成绩2大于70的学生的成绩
printf("\n学生中成绩1大于60,成绩2大于70的学生的成绩是:\n");
for (int i = 0; i < 20; i++)
{
if (stu[i].score1 > 60 && stu[i].score2 > 70)
{
printf("姓名: %s, 学号: %d, 成绩1: %.2f, 成绩2: %.2f, 成绩3: %.2f, 成绩4: %.2f, 总分: %.2f\n",
stu[i].name,
stu[i].num,
stu[i].score1,
stu[i].score2,
stu[i].score3,
stu[i].score4,
stu[i].totalScore);
}
}
}
题型三十一
输入字符串,去掉所有空格
#include <stdio.h>
#include <string.h>
void main() {
char str[100];
printf("Input:\n");
gets(str);
char new_str[100];
int j = 0;
for (int i = 0; str[i] != '\0'; i++)
{
if (str[i] != ' ')
{
new_str[j] = str[i];
j++;
}
}
new_str[j] = '\0';
printf("新字符串是:%s",new_str);
}
题型三十二
将二维数组行列元素互换,存到另一个二维数组
#include <stdio.h>
void main() {
int str_a[2][3] = {{1,2,3},{4,5,6}};
int str_b[3][2];
printf("Array A:\n");
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d\t",str_a[i][j]);
str_b[j][i] = str_a[i][j];
}
printf("\n");
}
printf("Array B:\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%d\t",str_b[i][j]);
}
printf("\n");
}
}
题型三十三
输入以0结束的正数,统计这些正整数中奇数的平均值和偶数的乘积
#include <stdio.h>
void main() {
// 输入以0结束的正数,统计这些正整数中奇数的平均值和偶数的乘积
int number;
printf("请输入一个正整数(输入0结束): ");
scanf("%d",&number);
float avg = 0.0;
int mult = 1;
int sum = 0;
int count = 0;
while (number != 0)
{
if (number % 2 != 0) // 奇数
{
sum = sum + number;
count++;
} else // 偶数
{
mult = mult * number;
}
printf("请输入一个正整数(输入0结束): ");
scanf("%d",&number);
}
if (count == 0)
{
printf("偶数的乘积:%d\n",mult);
printf("输入的数据中没有奇数");
} else if (mult == 1)
{
avg = (float)sum / (float)count;
printf("奇数的平均值:%lf\n",avg);
printf("输入的数据中没有偶数");
} else{
printf("奇数的平均值:%lf\n",(float)sum / (float)count);
printf("偶数的乘积:%d\n",mult);
}
}
题型三十四
输出斐波那契数列前20项,每5个一行
#include<stdio.h>
void main()
{
// 输出斐波那契数列前20项,每5个一行
int f1 = 1,f2 = 1;
for (int i = 1; i <= 20; i++)
{
printf("%15d%15d",f1,f2);
if (i % 2 == 0){printf("\n");}
f1 = f1 + f2;
f2 = f1 + f2;
}
}
#include <stdio.h>
// 函数声名
int fib(int n);
int main()
{
/*
求斐波那契数列前n项
*/
int n;
printf("请输入一个整数: ");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
printf("%d ", fib(i));
}
return 0;
}
int fib(int n)
{
if (n <= 2)
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
题型三十五
有一个已排序好的数组,要求输入一个数后,按原来排序的规律将它插入数组中
# include <stdio.h>
# include <string.h>
void main(){
// 将数组排序(从小到大),要求输入一个数后,按原来排序的规律将它插入数组中
int str[11] = {2,6,1,4,8,9,3,20,12,11};
// 排序
for (int i = 0; i < 10; i++)
{
for (int j = i+1; j < 10; j++)
{
if (str[i] > str[j])
{
int temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
// 排序后的数组
printf("Array:\n");
for (int i = 0; i < 10; i++)
{
printf("%d\t",str[i]);
}
// 插入数据
int number;
printf("\n请输入插入数据:");
scanf("%d",&number);
int index = 0;
if (number > str[9])
{
str[10] = number;
} else {
for (int i = 0; i < 10; i++)
{
if (str[i] > number)
{
index = i; // 找到插入位置索引
break;
}
}
// 将后面元素依次后移一位
for (int j = 10; j > index; j--) {
str[j] = str[j - 1];
}
str[index] = number;
}
// 排序后的数组
printf("\nNew Array:\n");
for (int i = 0; i < 11; i++)
{
printf("%d\t",str[i]);
}
}
题型三十六
输入整型数,实现逆序输出
- 输入:1234567
- 输出:7654321
# include <stdio.h>
# include <string.h>
void main(){
/*
输入整型数,实现逆序输出
输入:1234567
输出:7654321
*/
int number,flag,num;
printf("输入整形数:");
scanf("%d",&number);
int result = 0;
while (number != 0)
{
flag = number % 10; // 取个位
number = number / 10; // 去除个位
result = result * 10 + flag;
}
printf("倒转后的整形数:%d",result);
}
题型三十七
将字符串第m个字符开始的全部字符复制到另一个字符串中
要求在主函数输入字符串以及m值并输出结果,在被调用函数中完成复制
# include <stdio.h>
// 声名函数
void copy(char *str1,char *str2,int m);
void main(){
char str1[20],str2[20];
int m;
printf("请输入字符串:");
gets(str1);
printf("请输入启始位置:");
scanf("%d",&m);
copy(str1,str2,m);
printf("Array str2:");
printf("%s",str2);
}
// void copy(char str1[],int m)
void copy(char *str1,char *str2,int m)
{
int i = 0;
while (str1[m] != '\0')
{
str2[i] = str1[m];
i++;
m++;
}
str2[i] = '\0';
}
题型三十八
2/1 + 3/2 + 5/3 + 8/5+ 13/8 + 21/13……
# include <stdio.h>
void main(){
int n,sum = 0;
printf("请输入n值:");
scanf("%d",&n);
int f1 = 2,f2 = 1,temp;
for (int i = 1; i <= n; i++)
{
sum = sum + f1/f2; // sum = 0 + 2/1
temp = f1; // temp = 2,3
f1 = f1 + f2; // f1 = 2+1 = 3,5
f2 = temp; // f2 = 2,3
}
printf("%d",sum);
}
题型三十九
编写一个程序进行字符串的截取,即从键盘上输入一个字符串str1,将此字符串中从第m个字符开始的n个字符形成另一个字符串送到变量str2中
例如:str1=“Computer”,m=2,n=3,这样str2=“mpu”
# include <stdio.h>
void main(){
char str1[20],str2[20];
int m,n;
printf("请输入字符串:");
gets(str1);
printf("请输入截取字符串启始字符m 和 截取字符串长度n:");
scanf("%d,%d",&m,&n);
for (int i = m, j = 0; i < m+n; i++,j++)
{
str2[j] = str1[i];
}
printf("Array str2:");
printf("%s",str2);
}
# include <stdio.h>
# include <string.h>
void main(){
char str1[20],str2[20];
int m,n;
printf("请输入字符串:");
gets(str1);
printf("请输入截取字符串启始字符m 和 截取字符串长度n:");
scanf("%d,%d",&m,&n);
// 函数strncpy
strncpy(str2,str1+m,n);
printf("Array str2:");
printf("%s",str2);
}
题型四十
# include <stdio.h>
void main(){
for (int i = 1; i <= 4; i++) //控制行数
{
for (int j = 4-1; j >= i; j--) // 控制空格
{
printf(" ");
}
for (int k = 1; k <= 2*i-1; k++) // 控制星
{
printf("*");
}
printf("\n");
}
for (int i = 3; i >= 1; i--) //控制行数
{
for (int j = 3; j >= i; j--) // 控制空格
{
printf(" ");
}
for (int k = 1; k <= 2*i-1; k++) // 控制星
{
printf("*");
}
printf("\n");
}
}
题型四十一
编写一个程序输入10个数,将其中最大的数与第一个数对换,最小数与最后一个数对换,输出对换后的
10个数
# include <stdio.h>
void main(){
// 编写一个程序输入10个数,将其中最大的数与第一个数对换,最小数与最后一个数对换,输出对换后的10个数
int str[10];
for (int i = 0; i < 10; i++)
{
printf("请输入第%d个元素:",i);
scanf("%d",&str[i]);
}
// 输出
printf("Array_1:\n");
for (int i = 0; i < 10; i++)
{
printf("%d ",str[i]);
}
int max_index = 0,min_index = 0;
for (int i = 0; i < 10; i++)
{
if (str[i] > str[max_index]) // 最大值 下标
{
max_index = i;
}
if (str[i] < str[min_index]) // 最小值 下标
{
min_index = i;
}
}
// 输出 最大值下标 最小值下标
printf("\n最大值下标:%d",max_index);
printf("\n最小值下标:%d",min_index);
// 最大的数与第一个数对换
int temp1 = str[0];
str[0] = str[max_index];
str[max_index] = temp1;
// 最小数与最后一个数对换
int temp2 = str[9];
str[9] = str[min_index];
str[min_index] = temp2;
// 输出
printf("\nArray_2:\n");
for (int i = 0; i < 10; i++)
{
printf("%d ",str[i]);
}
}
题型四十二
# include <stdio.h>
void main(){
int n;
printf("请输入行数:");
scanf("%d",&n);
for (int i = 1; i <= n; i++) //控制行数
{
for (int j = n-1; j >= i; j--) // 控制空格
{
printf(" ");
}
for (int k = 1; k <= 2*i-1; k++) // 控制星
{
printf("*");
}
printf("\n");
}
}
题型四十三
输入两个正整数m和n,求其最大公约数和最小公倍数(辗转相除法)
#include <stdio.h>
void main() {
// 输入两个正整数m和n,求其最大公约数和最小公倍数。
// 最大公约数 * 最小公倍数 = m * n
int m, n;
printf("请输入两个正整数m和n:");
scanf("%d,%d", &m, &n);
int max = m > n ? m : n;
int min = m < n ? m : n;
while (min != 0) // 被除数不等于0
{
int temp = max % min;
max = min;
min = temp;
}
int gys = max; // 最大公约数
int gbs = m * n / gys; // 最小公倍数
printf("最大公约数:%d\n", gys);
printf("最 小公倍数:%d\n", gbs);
}
题型四十四
输入10个数,要求输出其中值最大的元素和该元素是第几个数
#include <stdio.h>
void main(){
int str[10];
for (int i = 0; i < 10; i++)
{
printf("请输入第%d个数:",i);
scanf("%d",&str[i]);
}
int index = 0, max = 0;
for (int j = 0; j < 10; j++)
{
if (str[j] > max)
{
max = str[j];
index = j;
}
}
printf("最大的元素是:%d,最大的元素是第%d个数",max,index+1);
}
题型四十五
写一个函数,使输入的字符串按反序存放,在主函数中输入和输出字符串
#include <stdio.h>
#include <string.h>
void main(){
// 写一个函数,使输入的字符串按反序存放,在主函数中输入和输出字符串
void inverse(char str[]);
char str[10];
printf("请输入字符串:");
scanf("%s",str);
inverse(str);
printf("%s",str);
}
void inverse(char str[])
{
for (int i = 0,j = strlen(str); i < (strlen(str) / 2); i++,j--)
{
char temp = str[i];
str[i] = str[j-1];
str[j-1] = temp;
}
}
题型四十六
写一个函数,将字符串中的元音字母复制到另一字符串,然后输出
#include <stdio.h>
#include <string.h>
void main(){
// 写一个函数,将字符串中的元音字母复制到另一字符串,然后输出
void copy(char str[],char c[]);
char str[80],c[80];
printf("Inpute:");
scanf("%s",&str);
copy(str,c);
printf("%s",c);
}
void copy(char str[],char c[])
{
int i,j;
for (i = 0,j = 0; str[i] != '\0'; i++)
{
if (
str[i] == 'a' || str[i] == 'A' ||
str[i] == 'e' || str[i] == 'E' ||
str[i] == 'i' || str[i] == 'I' ||
str[i] == 'o' || str[i] == 'O' ||
str[i] == 'u' || str[i] == 'U'
)
{
c[j] = str[i];
j++;
}
}
c[j] = '\0';
}
题型四十七
写一个函数,输入一个4位数,要求输出这4个数字字符,但每两个数字间空一个空格
输入:1900
输出:1 9 0 0
#include <stdio.h>
#include <string.h>
void main(){
void insert(char str[]);
char str[80];
printf("请输入数字字符:");
scanf("%s",&str);
insert(str);
}
void insert(char str[])
{
for (int i = strlen(str); i > 0; i--)
{
str[2 * i] = str[i];
str[2 * i-1] = ' ';
}
printf("%s",str);
}
题型四十八
输入10个非0数,对其进行去重操作后输出
#include <stdio.h>
/*
输入10个非0数,对其进行 去重 操作后输出
*/
int main()
{
int num = 10;
int arr[num];
// 输入数据
printf("请输入%d个非0数:\n", num);
for (int i = 0; i < num; i++)
{
printf("请输入第%d个数:", i + 1);
scanf("%d", &arr[i]);
if (arr[i] == 0)
{
printf("输入有误,第%d个数不能为0!\n", i);
return 1;
}
}
// 去重
int current = 0;
for (int i = 0; i < num; i++)
{
int flag = 0; //假设不是重复的
for (int j = 0; j < current; j++)
{
if (arr[j] == arr[i])
{
flag = 1; //假设错误
break;
}
}
if (!flag)
{
arr[current++] = arr[i];
}
}
// 打印输出去重后的数组
printf("去重后的数组为");
for (int i = 0; i < current; i++)
{
printf("%d ", arr[i]);
}
}
题型四十九
编程从键盘输入两个整数分别给变量a和b 要求不借助其他变量的条件下实现a b互换
#include <stdio.h>
void main(){
int a,b;
printf("请输两个整数a和b:");
scanf("%d,%d",&a,&b);
a = a + b;
b = a - b;
a = a - b;
printf("a = %d,b = %d",a,b);
}
题型五十
编写程序 输入三个整数a b c 然后交换它们中的数
a 原来的数给 b
b 原来的数给 c
c 原来的数给 a
#include <stdio.h>
void main()
{
int a, b, c;
printf("请输入三个整数a,b,c:");
scanf("%d,%d,%d",&a,&b,&c);
printf("OLD:a=%d,b=%d,c=%d",a,b,c);
int t = b;
b = a;
a = c;
c = t;
printf("\nNEW:a=%d,b=%d,c=%d",a,b,c);
}
题型五十一
定义5×5数组 赋值从2开始的偶数,分别求 左上,右上,右下,左下 元素的和
#include <stdio.h>
void main()
{
// 定义5×5数组,赋值从2开始的偶数,分别求 左上,右上,右下,左下 元素的和
int str[4][4];
int n = 1;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
// printf("请输入第%d行第%d列元素:",i,j);
// scanf("%d",&str[i][j]);
str[i][j] = n++;
}
}
// 输出
printf("Array str:\n");
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", str[i][j]);
}
printf("\n");
}
// 左上
int sum1 = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4-i; j++)
{
sum1 = sum1 + str[i][j];
}
}
printf("左上:%d\n", sum1);
// 右上
int sum2 = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (j >= i)
{
sum2 = sum2 + str[i][j];
}
}
}
printf("右上:%d\n", sum2);
// 右下
int sum3 = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (j + i >= 3)
{
sum3 = sum3 + str[i][j];
}
}
}
printf("右下:%d\n", sum3);
// 左下
int sum4 = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j <= i; j++)
{
sum4 = sum4 + str[i][j];
}
}
printf("左下:%d\n", sum4);
}
题型五十二
判断输入整数的正负性和奇偶性
#include <stdio.h>
void main()
{
// 判断输入整数的正负性和奇偶性
int num;
printf("请输入整数:");
scanf("%d", &num);
if (num == 0)
{
printf("%d是0 既不是奇数也不是偶数", num);
}
if (num < 0)
{
if (num % 2 == 0)
{
printf("%d是负数 且是偶数", num);
}
else
{
printf("%d是负数 且是奇数", num);
}
}
else
{
if (num % 2 == 0)
{
printf("%d是正数 且是偶数", num);
}
else
{
printf("%d是正数 且是奇数", num);
}
}
}
题型五十三
从键盘上任意输入一个整数,程序判断该数是否是回文数
回文数:一个数从右到左和从左到右是一样的 12321、4004
#include <stdio.h>
void main()
{
int number;
printf("请输入一个整数:");
scanf("%d", &number);
int result_old = number;
int result_new = 0;
int temp;
while (number != 0)
{
temp = number % 10;
number = number / 10;
result_new = result_new * 10 + temp;
}
if (result_old == result_new)
{
printf("%d 是回文数", result_old);
}
else
{
printf("%d 不是回文数", result_old);
}
}
题型五十四
从键盘任意输入一个整数x 编程计算x的每一位数字相加之和(忽略整数前面的正负号)
输入:1234 计算1+2+3+4=10 输出10
#include <stdio.h>
#include <math.h>
void main()
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
int x = abs(n);
int sum = 0;
int temp;
while (x != 0)
{
temp = x % 10;
x = x / 10;
sum = sum + temp;
}
printf("%d",sum);
}
题型五十五
1元5角人民币兑换5分、2分、1分的硬币(每一种都要有)共100枚
- 问一共有几种兑换方案
- 每种方案各换多少枚
#include <stdio.h>
void main()
{
int x, y, z;
int count = 0;
for (int x = 1; x <= 29; x++)
{
for (int y = 1; y <= 72; y++)
{
z = 100 - x - y;
if (5 * x + 2 * y + 1 * z == 150)
{
count++;
printf("%d %d %d\n", x, y, z);
}
}
}
printf("一共有%d种兑换方案",count);
}
输出用1元人民币换成 1分 2分 5分 的所有方案
#include <stdio.h>
void main()
{
// 输出用1元人民币换成 1分 2分 5分 的所有方案
int count = 0;
for (int five = 0; five <= 20; five++)
{
for (int two = 0; two < 50; two++)
{
int one = 100 - 5*five + two*2;
if (one>= 0)
{
count++;
printf("%d %d %d\n",one,two,five);
}
}
}
printf("一共有%d种兑换方案\n", count);
}
题型五十六
将一个正实数保留2位小数,并对第三位进行四舍五入处理
输入:2.52466
输出:2.52
#include <stdio.h>
void main()
{
float number;
printf("请输入正实数:");
scanf("%f", &number);
float result = (int)(number * 1000 + 0.5) / 1000.0;
printf("四舍五入后:%.3f",result);
}
题型五十七
输入十进制整数转换成 n 进制并输出
#include <stdio.h>
void main()
{
int num, n, str[20];
printf("请输入十进制整数:");
scanf("%d", &num);
printf("请输入转换的进制:");
scanf("%d", &n);
int temp = num;
int i = 0;
while (num != 0)
{
str[i] = num % n;
num = num / n;
i++;
}
printf("%d转换成%d进制是:", temp, n);
for (int j = i-1; j >= 0; j--)
{
printf("%d", str[j]);
}
}
题型五十八
创建两个升序数组,并输入数据,按照升序排列
合成成一个升序数组(两路合并法)
#include <stdio.h>
void main()
{
/*
创建两个升序数组,并输入数据,按照升序排列
成成一个升序数组(两路合并法)
*/
int a[3] = {1,7,9};
int b[5] = {4,6,8,9,10};
int c[10];
int i = 0,j=0,k = 0;
while (i < 3 && j < 5)
{
if (a[i] > b[j])
{
c[k] = b[j];
j++; // 指向下一个数
k++; // 统计个数
} else // a[i] <= b[j]
{
c[k] = a[i];
i++;
k++;
}
}
// 将剩余的数放入数组
while (i < 3)
{
c[k] = a[i];
i++;
k++;
}
while (j < 5)
{
c[k] = b[j];
j++;
k++;
}
// 输出
for (int i = 0; i < k; i++)
{
printf("%d ",c[i]);
}
}
题型五十九
编程实现从键盘输入20个整数,统计非负数的个数,并计算非负数之和
#include <stdio.h>
void main()
{
/*
编程实现从键盘输入20个整数,统计非负数的个数,并计算非负数之和
*/
int str[20];
for (int i = 0; i < 20; i++)
{
printf("请输入第%d个整数:", i+1);
scanf("%d", &str[i]);
}
int sum = 0, count = 0;
for (int i = 0; i < 20; i++)
{
if (str[i] < 0)
{
sum = sum + str[i];
count++;
}
}
printf("非负数个数:%d\n非负数之和:%d", count, sum);
}
题型六十
输入10个整数,将这10个整数升序排列输出,奇数在前,偶数在后
#include <stdio.h>
void main()
{
/*
输入10个整数,将这10个整数升序排列输出,奇数在前,偶数在后
*/
int str[10],n;
int odd = 0;
int even = 9;
for (int i = 0; i < 10; i++)
{
printf("请输入第%d个整数:", i + 1);
scanf("%d", &n);
// 偶数 放数组右边
if (n % 2 == 0)
{
str[even--] = n;
}
// 奇数 放数组左边
if (n % 2 == 1)
{
str[odd++] = n;
}
}
// 选择排序对 奇数 进行升序排列
for (int i = 0; i < odd-1; i++)
{
for (int j = i+1; j < odd; j++)
{
if (str[i] > str[j])
{
int temp = str[j];
str[j] = str[i];
str[i] = temp;
}
}
}
// 选择排序对 偶数 进行升序排列
for (int i = odd; i < 10-1; i++)
{
for (int j = i+1; j < 10; j++)
{
if (str[i] > str[j])
{
int temp = str[j];
str[j] = str[i];
str[i] = temp;
}
}
}
// 输出
for (int i = 0; i < 10; i++)
{
printf("%d ",str[i]);
}
}
题型六十一
编程实现字符串反向输出
输入:abc
输出:cba
#include <stdio.h>
#include <string.h>
void main()
{
char str[10];
printf("请输入字符串:");
gets(str);
int len = strlen(str);
printf("字符串反向输出:");
for (int i = len-1; i >= 0; i--)
{
printf("%c",str[i]);
}
}
题型六十二
编程实现将用户输入的字符串中所有字符 ‘c’ 删除,并输出结果
#include <stdio.h>
#include <string.h>
void main()
{
/*
编程实现将用户输入的字符串中所有字符 'c' 删除,并输出结果
*/
char str[10];
printf("请输入字符串:");
gets(str);
// 处理
for (int i = 0; i < strlen(str); i++)
{
if (str[i] == 'c')
{
for (int j = i; j < strlen(str); j++)
{
str[j] = str[j+1];
}
}
}
printf("输出结果:");
for (int i = 0; i < strlen(str); i++)
{
printf("%c",str[i]);
}
}
#include <stdio.h>
void main()
{
char str[10];
gets(str);
int i, j;
for (i = 0, j = 0; str[i] != '\0'; i++)
{
if (str[i] != 'c')
{
str[j++] = str[i];
}
}
str[j] = '\0';
puts(str);
}
题型六十三
编程实现 strcpy 函数原理
编程实现 strcat 函数原理
编程实现 strcmp 函数原理
编程实现 delete 字符删除
编程实现 strlen 函数原理
#include <stdio.h>
// 声名函数
void v_strcpy(char *a, char *b);
void v_strcat(char *dest, char *src);
int v_strcmp(char *dest, char *src);
void v_delete(char *src, char ch);
int v_strlen(char *s);
int main()
{
/*
编程实现 strcpy 函数原理
编程实现 strcat 函数原理
编程实现 strcmp 函数原理
编程实现 delete 字符删除
编程实现 strlen 函数原理
*/
// strcpy
char src_1[10] = "def";
char dest_1[10] = "abc";
v_strcpy(dest_1, src_1);
printf("v_strcpy:%s", dest_1);
printf("\n");
// strcat
char src_2[10] = "def";
char dest_2[10] = "abc";
v_strcat(dest_2, src_2);
printf("v_strcat:%s", dest_2);
printf("\n");
// strcmp
char src_3[10] = "aef";
char dest_3[10] = "aef";
int n = v_strcmp(dest_3, src_3);
if (n > 0)
{
printf("%s > %s", dest_3, src_3);
}
else if (n == 0)
{
printf("%s = %s", dest_3, src_3);
}
else
{
printf("%s < %s", dest_3, src_3);
}
printf("\n");
// delete
char src_4[10] = "abcdef";
char ch;
printf("原字符串为%s 请输入要删除的字符:", src_4);
scanf("%c", &ch);
v_delete(src_4, ch);
printf("v_delete:%s", src_4);
printf("\n");
// strlen
char src_5[10] = "abcdef";
printf("%s的长度为:%d", src_5, v_strlen(src_5));
return 0;
}
void v_strcpy(char *dest, char *src)
{
while (*src != '\0')
{
*dest++ = *src++;
}
}
void v_strcat(char *dest, char *src)
{
while (*dest != '\0')
{
*dest++;
}
while (*src != '\0')
{
*dest++ = *src++;
}
}
int v_strcmp(char *dest, char *src)
{
while (*dest == *src)
{
if (*dest == '\0')
{
return 0;
}
*dest++;
*src++;
}
return (*dest - *src);
}
void v_delete(char *s, char ch)
{
char *p = s;
while (*s)
{
if (*s != ch)
{
*p++ = *s;
}
*s++;
}
*p = '\0';
}
int v_strlen(char *s)
{
int n = 0;
while (*s != '\0')
{
*s++;
n++;
}
return n;
}
题型六十四
一维数组插入数据,并升序输出
原来数据:1 3 5 7
插入 4
输出:1 3 4 5 7
#include <stdio.h>
void main()
{
/*
一维数组插入数据,并升序输出
原来数据:1 3 5 7
插入 4
输出:1 3 4 5 7
*/
int length = 10;
int str[length], n;
for (int i = 0; i < 10; i++)
{
printf("请输入第%d个数据:", i + 1);
scanf("%d", &str[i]);
}
printf("请输入插入数据:");
scanf("%d", &n);
// 升序排列
for (int i = 0; i < 10 - 1; i++)
{
for (int j = 0; j < 10 - 1 - i; j++)
{
if (str[j] > str[j + 1])
{
int temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
}
// 插入数据
int index = 0;
for (int i = 0; i < 11; i++)
{
if (str[i] > n)
{
index = i; // 获取最大值索引
break;
}
}
// 数组依次后移
for (int j = 10; j > index; j--)
{
str[j] = str[j - 1];
}
// 插入
str[index] = n;
length = length + 1;
// 输出
for (int i = 0; i < length; i++)
{
printf("%d ", str[i]);
}
}
题型六十五
找出一个二维数组鞍点的位置:该位置上的元素在该行上最大,在该列上最小
如果有输出行列号,没有输出提示信息
#include <stdio.h>
void main()
{
/*
找出一个二维数组鞍点的位置:该位置上的元素在该行上最大,在该列上最小
如果有输出行列号,没有输出提示信息
*/
int str[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int flag = 0;
// 遍历每一行
for (int i = 0; i < 3; i++)
{
int max_row = str[i][0];
int col_index = 0;
// 找到每一行的最大值
for (int j = 0; j < 3; j++)
{
if (str[i][j] > max_row)
{
max_row = str[i][j];
col_index = j;
}
}
// 检查最大值是否也是其列中的最小值
int min_col = str[0][col_index];
for (int j = 0; j < 3; j++)
{
if (str[i][col_index] < min_col)
{
min_col = str[i][col_index];
}
}
if (max_row == min_col)
{
printf("鞍点位置在第 %d 行,第 %d 列,元素值为 %d\n", i + 1, col_index + 1, max_row);
// 标记已找到鞍点
flag = 1;
}
}
if (!flag)
{
printf("该二维数组没有鞍点\n");
}
}
题型六十六
数组后移
#include <stdio.h>
void main()
{
int str[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 数组后移一位
for (int i = 9; i > 0; i--)
{
str[i] = str[i - 1];
}
// 输出
for (int i = 0; i < 10; i++)
{
printf("%d ", str[i]);
}
}
题型六十七
编程求1000以内的完数,1不是完数
例如:6=1+2+3
#include <stdio.h>
void main()
{
/*
编程求1000以内的完数,1不是完数
如:6=1+2+3
*/
int sum;
for (int i = 2; i <= 1000; i++)
{
sum = 0;
for (int j = 1 ; j < i; j++)
{
if (i % j == 0)
{
sum = sum + j;
}
}
if (sum == i)
{
printf("%d = ",i);
for (int k = 1; k < i; k++)
{
if (i % k == 0)
{
printf("%d + ",k);
}
}
printf("\n");
}
}
}
题型六十八
数组倒序排列
#include <stdio.h>
// 函数声名
void fun();
int main()
{
/*
数组倒序排列
*/
int str[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
fun(str);
for (int i = 0; i < 10; i++)
{
printf("%d ", str[i]);
}
return 0;
}
void fun(int *str)
{
int i, j;
for (i = 0, j = 9; i < j; i++, j--)
{
int temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
#include <stdio.h>
// 函数声名
void fun(int *str, int n);
int main()
{
/*
数组倒序排列
*/
int str[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
fun(str, 10);
for (int i = 0; i < 10; i++)
{
printf("%d ", str[i]);
}
return 0;
}
void fun(int *str, int n)
{
for (int i = 0; i < n / 2; i++)
{
int temp = str[i];
str[i] = str[n - 1 - i];
str[n - 1 - i] = temp;
}
}
题型六十九
求数列中n个数{1,12,123……123456789}的累和,1<=n<=9
例如n=3,就是求1,12,123的累和
#include <stdio.h>
int main()
{
/*
求数列中n个数{1,12,123……123456789}的累和,1<=n<=9
例如n=3,就是求1,12,123的累和
*/
int n;
printf("请输入n:");
scanf("%d", &n);
int num = 0,sum = 0;
for (int i = 1; i <= n; i++)
{
num = num*10 + i;
sum = sum + num;
}
printf("%d",sum);
}
题型七十
把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息
#include <stdio.h>
struct student
{
int num;
char name[10];
char sex[5];
char address[100];
};
int main()
{
/*
把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息
*/
struct student stu1 = {1234, "wei", "F", "hubeiwuhan"};
printf("学号:%d\n姓名:%s\n性别:%s\n住址:%s", stu1.num, stu1.name, stu1.sex, stu1.address);
return 0;
}
题型七十一
输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩
#include <stdio.h>
struct student
{
int num;
char name[10];
float score;
};
int main()
{
/*
输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩
*/
struct student stu[2];
for (int i = 0; i < 2; i++)
{
printf("请输入第%d位学生的学号:", i + 1);
scanf("%d", &stu[i].num);
printf("请输入第%d位学生的姓名:", i + 1);
scanf("%s", stu[i].name);
printf("请输入第%d位学生的成绩:", i + 1);
scanf("%f", &stu[i].score);
}
if (stu[0].score > stu[1].score)
{
printf("学号:%d\n", stu[0].num);
printf("姓名:%s\n", stu[0].name);
printf("成绩:%f\n", stu[0].score);
}
else if (stu[0].score < stu[1].score)
{
printf("学号:%d\n", stu[1].num);
printf("姓名:%s\n", stu[1].name);
printf("成绩:%f\n", stu[1].score);
}
else
{
printf("学号:%d\n", stu[0].num);
printf("姓名:%s\n", stu[0].name);
printf("成绩:%f\n", stu[0].score);
printf("学号:%d\n", stu[1].num);
printf("姓名:%s\n", stu[1].name);
printf("成绩:%f\n", stu[1].score);
}
return 0;
}
题型七十二
有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果
#include <stdio.h>
#include <string.h>
struct person
{
char name[10];
int count;
} leader[3] = {"wei", 0, "wang", 0, "zhang", 0};
int main()
{
/*
有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果
*/
char leader_name[10];
for (int i = 1; i <= 10; i++)
{
printf("请输入投票人的姓名:");
scanf("%s", &leader_name);
for (int j = 0; j < 3; j++)
{
if (strcmp(leader_name, leader[j].name) == 0)
{
leader[j].count++;
}
}
}
// 输出
for (int i = 0; i < 3; i++)
{
printf("%s\t", leader[i].name);
printf("%d\n", leader[i].count);
}
return 0;
}
题型七十三
有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息
#include <stdio.h>
struct student
{
int num;
char name[10];
float score;
};
int main()
{
/*
有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息
*/
struct student stu[5];
for (int i = 0; i < 5; i++)
{
printf("请输入第%d位学生的学号:", i + 1);
scanf("%d", &stu[i].num);
printf("请输入第%d位学生的姓名:", i + 1);
scanf("%s", stu[i].name);
printf("请输入第%d位学生的成绩:", i + 1);
scanf("%f", &stu[i].score);
}
// 定义临时结构体
struct student temp;
for (int i = 0; i < 5 - 1; i++)
{
for (int j = i + 1; j < 5; j++)
{
if (stu[i].score < stu[j].score)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
// 输出
for (int i = 0; i < 5; i++)
{
printf("%d\t", stu[i].num);
printf("%s\t", stu[i].name);
printf("%.2f\n", stu[i].score);
}
return 0;
}
题型七十四
输入3个整数a,b,c,要求按由大到小的顺序将它们输出,用函数实现
#include <stdio.h>
// 函数声明
void fun(int *a, int *b, int *c);
void swap(int *x, int *y);
int main()
{
/*
输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现
*/
int a, b, c;
printf("请输入a,b,c:");
scanf("%d,%d,%d", &a, &b, &c);
fun(&a, &b, &c);
printf("%d,%d,%d", a, b, c);
return 0;
}
void fun(int *a, int *b, int *c)
{
if (*a < *b)
{
swap(a, b);
}
if (*a < *c)
{
swap(a, c);
}
if (*b < *c)
{
swap(b, c);
}
}
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
题型七十五
输入两个整数,要求输出其中值较大者,要求用函数来找到大数
#include <stdio.h>
// 函数声明
int fun(int a,int b);
int main()
{
/*
输入两个整数,要求输出其中值较大者。要求用函数来找到大数
*/
int a,b;
printf("请输入整数a,b:");
scanf("%d,%d",&a,&b);
int max = fun(a,b);
printf("Max:%d",max);
return 0;
}
int fun(int a,int b)
{
int max = a > b ? a : b;
return max;
}
题型七十六
输入4个整数,找出其中最大的数,用函数的嵌套调用来处理
#include <stdio.h>
// 函数声名
int max(int a, int b, int c, int d);
int swap(int x, int y);
int main()
{
/*
输入4个整数,找出其中最大的数,用函数的嵌套调用来处理
*/
int a, b, c, d;
printf("请输入a,b,c,d:");
scanf("%d,%d,%d,%d", &a, &b, &c, &d);
printf("%d", max(a, b, c, d));
return 0;
}
int max(int a, int b, int c, int d)
{
int temp;
temp = swap(a, b);
temp = swap(temp, c);
temp = swap(temp, d);
}
int swap(int x, int y)
{
return x > y ? x : y;
}
题型六十七
有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁
问第4个学生岁数,他说比第3个学生大2岁
问第3个学生,又说比第2个学生大2岁
问第2个学生,说比第1个学生大2岁
最后问第1个学生,他说是10岁。请问第5个学生多大
#include <stdio.h>
//函数声名
int function(int n);
int main()
{
printf("第5个学生的年龄是:%d",function(5));
return 0;
}
int function(int n)
{
if (n == 1)
{
return 10;
}
return function(n-1) + 2;
}
题型六十八
输入10个数,要求输出其中值最大的元素和该数是第几个数
#include <stdio.h>
int main()
{
/*
输入10个数,要求输出其中值最大的元素和该数是第几个数
*/
int str[10];
for (int i = 0; i < 10; i++)
{
printf("请输入第%d个数:", i + 1);
scanf("%d", &str[i]);
}
int max = 0,index = 0;
for (int i = 0; i < 10; i++)
{
if (str[i] > max)
{
max = str[i];
index = i;
}
}
printf("值最大的元素是:%d,是第%d个数",max,index+1);
return 0;
}
题型六十九
有一个一维数组score,内放10个学生成绩,求平均成绩,用函数实现
#include <stdio.h>
// 函数声名
float function(float *score);
int main()
{
/*
有一个一维数组score,内放10个学生成绩,求平均成绩,用函数实现
*/
float score[10];
for (int i = 0; i < 10; i++)
{
printf("请输入第%d位学生的成绩:", i + 1);
scanf("%f", &score[i]);
}
float avg = function(score);
printf("平均成绩:%f", avg);
return 0;
}
// float function(float score[10])
float function(float *score)
{
float sum = 0.0;
for (int i = 0; i < 10; i++)
{
sum = sum + score[i];
}
return sum / 10;
}
题型七十
对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出
#include <stdio.h>
// 函数声明
void sort(int str[10]);
int main()
{
/*
对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出
*/
int str[10];
for (int i = 0; i < 10; i++)
{
printf("请输入第%d个元素:", i + 1);
scanf("%d", &str[i]);
}
sort(str);
printf("Array:\n");
for (int i = 0; i < 10; i++)
{
printf("%d ",str[i]);
}
return 0;
}
void sort(int str[10])
{
for (int i = 0; i < 10-1; i++)
{
for (int j = 0; j < 10-1-i; j++)
{
if (str[j] < str[j+1])
{
int temp = str[j];
str[j] = str[j+1];
str[j+1]= temp;
}
}
}
}
题型七十一
有10个地区的面积,要求对它们按由小到大的顺序排列,冒泡排序实现
#include <stdio.h>
int main()
{
/*
有10个地区的面积,要求对它们按由小到大的顺序排列。冒泡排序实现
*/
float str[10];
for (int i = 0; i < 10; i++)
{
printf("请输入第%d个地区的面积:", i + 1);
scanf("%f", &str[i]);
}
// 冒泡排序
for (int i = 0; i < 10-1; i++)
{
for (int j = 0; j < 10-1-i; j++)
{
if (str[j] > str[j+1])
{
int temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
}
// 选择排序
// for (int i = 0; i < 10; i++)
// {
// for (int j = i+1; j < 10; j++)
// {
// if (str[i] > str[j])
// {
// int temp = str[i];
// str[i] = str[j];
// str[j] = temp;
// }
// }
// }
// 输出
for (int i = 0; i < 10; i++)
{
printf("%.2f ",str[i]);
}
return 0;
}
题型七十二
将一个二维数组行和列的元素互换,存到另一个二维数组中
#include <stdio.h>
int main()
{
/*
将一个二维数组行和列的元素互换,存到另一个二维数组中
*/
int a[2][3], b[3][2];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("请输入第 %d 行 %d 列元素:", i + 1, j + 1);
scanf("%d", &a[i][j]);
}
}
// 行 列 互换
printf("Array a:\n");
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ",a[i][j]);
b[j][i] = a[i][j];
}
printf("\n");
}
// 输出
printf("Array b:\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
return 0;
}
题型七十三
有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号
#include <stdio.h>
int main()
{
/*
有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号
*/
int str[3][4];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("请输入第%d行%d列:", i + 1, j + 1);
scanf("%d", &str[i][j]);
}
}
int max = str[0][0], row = 0, colum = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
if (str[i][j] > max)
{
max = str[i][j];
row = i;
colum = j;
}
}
}
printf("值最大元素在 %d 行 %d 列:%d", row + 1, colum + 1, max);
return 0;
}
题型七十四
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
#include <stdio.h>
int main()
{
/*
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
*/
char string[100];
printf("请输入单词,每个单词用空格隔开:");
gets(string);
int c, num;
for (int i = 0; (c = string[i]) != '\0'; i++)
{
if (c == ' ')
{
num++;
}
}
printf("一共有%d个单词", num + 1);
return 0;
}
题型七十五
求1+2+3+…+100
#include <stdio.h>
int main()
{
/*
求1+2+3+…+100
*/
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum = sum + i;
}
printf("%d", sum);
return 0;
}
题型七十六
在全系1000名学生中举行慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数以及平均每人捐款的数目
#include <stdio.h>
int main()
{
/*
在全系1000名学生中举行慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数以及平均每人捐款的数目
*/
int i;
float sum = 0, end = 100000, amount, average = 0.0;
for (i = 1; i <= 1000; i++)
{
printf("请输入第%d个同学捐款金额:", i);
scanf("%f", &amount);
sum = sum + amount;
if (sum >= end)
{
break;
}
}
average = sum / i;
printf("捐款人数:%d\n平均每人捐款的数目:%.2f", i, average);
return 0;
}
题型七十七
判断101-200之间有多少个素数,并输出所有素数
#include <stdio.h>
int main()
{
/*
判断101-200之间有多少个素数,并输出所有素数
*/
int i, j, count = 0;
for (i = 101; i <= 200; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (i == j)
{
count++;
printf("%d ", i);
}
}
printf("\n一共有:%d 个素数",count);
return 0;
}
题型七十八
输入两个正整数m和n,求其最大公约数和最小公倍数
#include <stdio.h>
int main()
{
/*
输入两个正整数m和n,求其最大公约数和最小公倍数
*/
int m, n;
printf("请输入m和n:");
scanf("%d,%d", &m, &n);
int max = m > n ? m : n;
int min = m < n ? m : n;
while (min != 0)
{
int temp = max % min;
max = min;
min = temp;
}
int gys = max;
int gbs = m * n / gys;
printf("最大公约数:%d\n最小公倍数:%d", gys, gbs);
return 0;
}
#include <stdio.h>
// 函数声明
int max_gys(int max, int min);
int min_gbs(int max, int min);
int main()
{
/*
输入两个正整数m和n,求其最大公约数和最小公倍数
*/
int m, n;
printf("请输入m和n:");
scanf("%d,%d", &m, &n);
int max = m > n ? m : n;
int min = m < n ? m : n;
int gys = max_gys(max, min);
int gbs = min_gbs(max, min);
printf("最大公约数:%d\n最小公倍数:%d", gys, gbs);
return 0;
}
int max_gys(int max, int min)
{
int gmax = 0;
for (int i = 1; i <= min; i++)
{
if (max % i == 0 && min % i == 0)
{
if (i > gmax)
{
gmax = i;
}
}
}
return gmax;
}
int min_gbs(int max, int min)
{
int gmin = 0;
for (int i = min; i <= min * max; i++)
{
if (i % max == 0 && i % min == 0)
{
gmin = i;
break;
}
}
return gmin;
}
题型七十九
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
#include <stdio.h>
#include <string.h>
int main()
{
/*
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
*/
int letters = 0, space = 0, digit = 0, other = 0;
char c;
printf("请输入一行字符:");
while ((c = getchar()) != '\n')
{
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
{
letters++;
}
else if (c == ' ')
{
space++;
}
else if (c >= '0' && c <= '9')
{
digit++;
}
else
{
other++;
}
}
printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符:%d\n", letters, space, digit, other);
return 0;
}
题型八十
*
***
******
********
******
***
*
#include <stdio.h>
int main()
{
for (int i = 1; i <= 4; i++)
{
for (int j = 4; j > i; j--) // 空格
{
printf(" ");
}
for (int j = 1; j <= i * 2 - 1; j++) // *
{
printf("*");
}
printf("\n");
}
for (int i = 1; i < 4; i++)
{
for (int j = 1; j <= i; j++) // 空格
{
printf(" ");
}
for (int j = 1; j <= 7 - 2 * i; j++) // *
{
printf("*");
}
printf("\n");
}
return 0;
}
题型八十一
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和
#include <stdio.h>
int main()
{
/*
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
*/
float sum = 0.0;
float fz = 2;
float fm = 1;
for (int i = 0; i < 20; i++)
{
sum = sum + fz / fm;
printf("%.2f / %.2f \n", fz, fm);
int temp = fz;
fz = fz + fm;
fm = temp;
}
printf("%9.6f", sum);
return 0;
}
题型八十二
求1!+2!+3!+…+20!的和
#include <stdio.h>
int main()
{
/*
求1!+2!+3!+...+20!的和
*/
float sum = 0.0;
for (int i = 1; i <= 20; i++)
{
float temp = 1.0;
for (int j = 1; j <= i; j++)
{
temp = temp * j;
}
sum = sum + temp;
}
printf("%.2f", sum);
return 0;
}
题型八十三
#include <stdio.h>
#include <math.h>
int main()
{
int sign = 1;
double sum = 0.0;
double fm = 1.0;
double fs = 1.0;
double pi = 0.0;
while (fabs(fs) >= 1e-6)
{
sum = sum + fs;
fm = fm + 2;
sign = -sign;
fs = sign / fm;
}
pi = 4 * sum;
printf("pi的值为 %f\n", pi);
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
double result = 1.0;
double fz = 2.0;
double pi;
for (int i = 1; i <= 10000; i++)
{
result *= ((fz * fz) / ((fz - 1) * (fz + 1)));
fz = fz + 2;
}
pi = 2 * result;
printf("pi的值为:%.6f\n", pi);
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
double pi;
double fm = 1.0;
double sum = 0.0;
while (1 / (fm * fm) >= 1e-6)
{
sum += 1 / (fm * fm);
fm++;
}
pi = 6 * sum;
printf("pi的值为:%.6f\n", sqrt(pi));
return 0;
}
题型八十四
#include <stdio.h>
#include <math.h>
int main()
{
double pi;
double result = 1.0;
for (int i = 2; i <= 100; i += 2)
{
result *= (double)(i * i) / ((i - 1) * (i + 1));
}
printf("result = %lf", 2 * result);
return 0;
}