2025年模拟题
题型1:数组元素排序
1.输入5个随机整数存入数组,将元素从小到大排序并输出,每行输出1个数字
int main(){
int a[5 ], i, j, temp;
printf("请输入数组元素:\n" );
for(i = 0
scanf("%d", &a[i]);
}
for(i = 0
for(j = i + 1
if(a[i] > a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for(i = 0
printf("%d\n" , a[i]);
}
return 0 ;
}
int main(){
int a[5 ], i, j, temp;
printf("请输入数组元素:\n" );
for(i = 0
scanf("%d", &a[i]);
}
for(i = 0
for(j = 0
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
printf("%d %d %d %d %d\n" , a[0 ], a[1 ], a[2 ], a[3 ], a[4 ]);
}
return 0 ;
}
int main(){
int a[5 ], i, j, temp, flag;
printf("请输入数组元素:\n" );
for(i = 0
scanf("%d", &a[i]);
}
for(i = 0
flag = 0 ;
for(j = 0
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = 1 ;
}
}
if(!flag){
return 0 ;
}
printf("%d %d %d %d %d\n" , a[0 ], a[1 ], a[2 ], a[3 ], a[4 ]);
}
return 0 ;
}
题型2:进制转换
#include <stdio.h>
int main () {
int num, a, t = 1 , sum = 0 ;
printf ("请输入一个合法的八进制数:\n" );
scanf ("%d" , &num);
while (num){
a = num%10 ;
sum = sum + a * t;
num /= 10 ;
t *= 8 ;
}
printf ("sum=%d" , sum);
return 0 ;
}
题型3:处理字符串
3.输入一个字符串,长度不超过100个字符,再输入一个整数n,从字符串右边截取n个字符组成新的字符串并输出。例如输入 ABCDEF 3,则输出DEF
#include <stdio.h>
#define MAX 100
int main () {
char s[MAX], t[MAX], num, length, i = 0 , j = 0 ;
printf ("请输入一个字符串:" );
gets (s);
printf ("请输入一个整数:" );
scanf ("%d" , &num);
while (s[i] != '\0' ){
i ++;
}
length = i;
i = length - num;
while (s[i] != '\0' ){
t[j] = s[i];
i++;
j++;
}
t[j] = '\0' ;
puts (t);
return 0 ;
}
2024年考题回忆版
题型1:简单的多位数拆分 题源:课本例2-20
1.输入一个三位数的整数,输出百位数、十位数和个位数
#include <stdio.h>
int main () {
int num, bai, shi, ge;
scanf ("%d" , &num);
bai = num / 100 ;
shi = num / 10 % 10 ;
ge = num % 10 ;
printf ("%d %d %d" , bai, shi, ge);
return 0 ;
}
2.输入一个整数,求出个位数和十位数,并输出十位和个位的乘积
int main(){
int num, shi, ge, multi;
scanf("%d" , &num);
shi = num/10 %10;
ge = num%10;
multi = shi * ge;
printf ("%d %d %d" , shi, ge, multi);
return 0 ;
}
题型2:多位数拆分+循环 题源:课本例2-18 例4-3
#include <stdio.h>
int main(){
int num , ge;
for (num =8 ;num <=100 ;num ++){
ge = num %10 ;
if (num %4 ==0 &&ge==8 ){
printf("%d " ,num );
}
}
return 0 ;
}
2.打印由0-9组成且每一位都不重复的三位数的个数
#include <stdio.h>
int main () {
int num, ge, shi, bai, count=0 ;
for (num=100 ;num<=999 ;num++){
ge = num%10 ;
shi = num/10 %10 ;
bai = num/100 ;
if (ge!=shi&&ge!=bai&&shi!=bai){
printf ("%d " , num);
count ++;
}
}
printf ("\ncount=%d" , count);
return 0 ;
}
#include <stdio.h>
int main () {
int i, j, k, count=0 ;
for (i=1 ;i<=9 ;i++){
for (j=0 ;j<=9 ;j++){
for (k=0 ;k<=9 ;k++){
if (i!=j&&i!=k&&j!=k){
printf ("%d " , i*100 +j*10 +k);
count++;
}
}
}
}
printf ("\ncount=%d" , count);
return 0 ;
}
3.输出10-50中个位和十位的乘积大于个位和十位之和的数
#include <stdio.h>
int main(){
int num , ge, shi;
for (num =10 ;num <=50 ;num ++){
ge = num %10 ;
shi = num /10 %10 ;
if (ge*shi>ge+shi){
printf("%d " , num );
}
}
return 0 ;
}
4.打印输出10-1000中各位数之和等于10的整数,如19、190、1234
int main(){
int num, b, t, sum ;
for (num=10 ;num<=1000 ;num++){
t = num;
sum = 0 ;
while (t){
b = t % 10 ;
sum = sum + b;
t = t / 10 ;
}
if (sum == 10 ){
printf("%d " , num);
}
}
return 0 ;
}
5.打印输出100-999中各位数之和等于10的整数的个数
#include <stdio.h>
int num , ge, shi, bai;
int count = 0 ;
for (num =100 ;num <=999 ;num ++){
ge = num %10 ;
shi = num /10 %10 ;
bai = num /100 ;
if (ge+shi+bai==10 ){
count++;
}
}
printf("各位数之和等于10的有%d个" , count);
return 0 ;
}
#include <stdio.h>
int main(){
int num , bai;
for (num =100 ;num <=999 ;num ++){
bai = num /100 ;
if (bai==7 ){
printf("%d " , num );
}
}
return 0 ;
}
题型3:给定数值进行组合+循环
1.一个由x、y、z三个数字组成的数xyz和zyx相加得1555,求x、y、z
#include <stdio.h>
int main () {
int x, y, z;
for (x=0 ;x<=9 ;x++){
for (y=0 ;y<=9 ;y++){
for (z=0 ;z<=9 ;z++){
if ((x*100 +y*10 +z)+(z*100 +y*10 +x)==1555 ){
printf ("%d %d %d\n" , x, y, z);
}
}
}
}
return 0 ;
}
题型4:数组+奇偶数
#include <stdio.h>
int main () {
return 0 ;
}
2.给定一个数组s存储字符串,从中获取ASCII码为奇数的字符并输出
#include <stdio.h>
int main () {
return 0 ;
}
#include <stdio.h>
int main () {
return 0 ;
}
题型5:简单的数学运算+循环
#include <stdio.h>
int main () {
return 0 ;
}
2.输入1-9其中的某个整数n,计算n + nn + nnn + nnnn。如果输入的n不在1-9之间(含1-9),就提示"输入的数据范围不合法,请重新输入!",直到输入满足的n,计算出结果后退出程序。
#include <stdio.h>
int main () {
int num, t, sum = 0 , i;
printf ("请输入num的值(1-9):\n" );
scanf ("%d" , &num);
while (1 ){
if (num<1 ||num>9 ){
printf ("输入的数据范围不合法,请重新输入!\n" );
scanf ("%d" , &num);
continue ;
}
t = num;
for (i=1 ;i<=4 ;i++){
sum = sum + t;
t = t * 10 + num;
}
printf ("sum=%d" , sum);
break ;
}
return 0 ;
}
3.小明参加了卖书活动,每本书18元,第一天卖3本,以后每一天卖书的数量都是前一天的2倍,哪一天卖书的收入会超过1000元
#include <stdio.h>
int main () {
int day=1 , price=18 , num=3 , money;
money = price*num;
while (money <= 1000 ){
num *= 2 ;
money = price * num;
day++;
}
printf ("day=%d" , day);
return 0 ;
}
4.输入整数n计算1^2 + 2^2 + 3^2 + ... + n^2,结果保留3位小数
#include <stdio.h>
int main () {
int i, n, sum = 0.0 ;
printf ("请输入n的值:\n" );
scanf ("%d" , &n);
for (i=1 ;i<=n;i++){
sum = sum + i * i;
}
printf ("sum=%d" , sum);
return 0 ;
return 0 ;
}
5.用户一直输入一个整数,计算它们的和,直到输入的数不大于0就结束
#include <stdio.h>
int main () {
int num, sum=0 ;
scanf ("%d" , &num);
while (1 ){
if (num <= 0 ){
printf ("请输入正数\n" );
scanf ("%d" , &num);
}
while (num>0 ){
sum += num;
scanf ("%d" , &num);
}
}
printf ("sum=%d" , sum);
return 0 ;
}
题型6:简单的数学运算+循环+数组
#include <stdio.h>
int main () {
int a[3 ][4 ], i, j, max = 0 ;
for (i = 0 ;i<3 ;i++){
for (j=0 ;j<4 ;j++){
scanf ("%d" , &a[i][j]);
if (a[i][j] > max){
max = a[i][j];
}
}
}
printf ("max=%d" , max);
return 0 ;
}
#include <stdio.h>
int main () {
int a[3 ][4 ], i, j, max;
for (i = 0 ;i<3 ;i++){
for (j=0 ;j<4 ;j++){
scanf ("%d" , &a[i][j]);
}
}
max = a[0 ][0 ];
for (i = 0 ;i<3 ;i++){
for (j=0 ;j<4 ;j++){
if (a[i][j] > max){
max = a[i][j];
}
}
}
printf ("max=%d" , max);
return 0 ;
}
#include <stdio.h>
int main () {
float a[10 ] = {0 }, sum=0 , avg;
int i;
for (i=1 ;i<10 ;i++){
scanf ("%f" , &a[i]);
sum += a[i];
}
avg = sum/10 ;
printf ("avg=%f" , avg);
return 0 ;
}
3.现有三行四列的二维数组,找到最小的数并输出行列号
int main(){
int a[3 ][4 ], i, j, min, row, col;
for(i = 0
for(j=0;j<4;j++){
scanf("%d", &a[i][j]);
}
}
min = a[0 ][0 ];
for(i = 0
for(j=0;j<4;j++){
if(a[i][j] < min){
min = a[i][j];
row = i;
col = j;
}
}
}
printf("min=%d,row=%d,col=%d" , min, row, col);
return 0 ;
}
4.输入三行四列二维数组的值,将每行的平均值放在一个一维数组中并输出
#include <stdio.h>
int main () {
int a[3 ][4 ], i, j;
float avg[3 ];
for (i = 0 ;i<3 ;i++){
avg[i] = 0 ;
for (j=0 ;j<4 ;j++){
scanf ("%d" , &a[i][j]);
avg[i] += a[i][j];
}
avg[i] /= 4 ;
printf ("第%d行的平均值为%f" , i+1 , avg[i]);
}
return 0 ;
}
题型7:选择语句的简单应用
#include <stdio.h>
int main () {
int a, b, temp;
scanf ("%d %d" , &a, &b);
if (a>b){
temp = a;
a = b;
b = temp;
}
printf ("%d %d" , a, b);
return 0 ;
}
2.输入三条边,判断能否构成三角形。如果是三角形,判断能否构成直角三角形
#include <stdio.h>
int main () {
int a, b, c;
printf ("请输入三条边的值:\n" );
scanf ("%d %d %d" , &a, &b, &c);
if (a+b>c&&a+c>b&&b+c>a){
printf ("能构成三角形\n" );
if (a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b){
printf ("是直角三角形\n" );
}
}
else {
printf ("不是三角形\n" );
}
return 0 ;
}
#include <stdio.h>
int main () {
int a, b, c, temp;
scanf ("%d %d %d" , &a, &b, &c);
if (a < b){
temp = a;
a = b;
b = temp;
}
if (a < c){
temp = a;
a = c;
c = temp;
}
printf ("最大的数是%d" , a);
return 0 ;
}
#include <stdio.h>
int main () {
int a, b, c, max;
scanf ("%d %d %d" , &a, &b, &c);
max = (max = a<b?b:a)<c?c:max;
printf ("最大的数是%d" , max);
return 0 ;
}
题型8:选择结构应用题
1.小明参与图书促销活动,每本书价格40元。周一到周五打七折,周六打八折,周日打九折。输入当周第几天和图书数,输出价格
#include <stdio.h>
int main () {
int price = 40 , day, num;
float money;
scanf ("%d %d" , &day, &num);
switch (day){
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
money = price * 0.7 * num;
break ;
case 6 :
money = price * 0.8 * num;
break ;
case 7 :
money = price * 0.9 * num;
break ;
}
printf ("money=%f" , money);
return 0 ;
}
2.输入1打印开,输入2打印关,输入其他数字打印默认
#include <stdio.h>
int main () {
char sw;
sw = getchar ();
switch (sw){
case '1' :
printf ("开" );
break ;
case '2' :
printf ("关" );
break ;
default :
printf ("默认" );
}
return 0 ;
}
3.输入近视度数,判断是不是近视。度数低于100是不近视,不低于100但低于300就是轻度近视,度数不低于300但低于500就是中度近视,度数高于500就是高度近视
#include <stdio.h>
int main () {
int num;
printf ("请输入近视度数:\n" );
scanf ("%d" , &num);
if (num<100 ){
printf ("不近视\n" );
}
else if (num<300 ){
printf ("轻度近视\n" );
}
else if (num<500 ){
printf ("中度近视\n" );
}
else {
printf ("重度近视\n" );
}
return 0 ;
}
4.输入时间等于9是打开窗帘,等于8是关闭窗帘,其他输出报错
#include <stdio.h>
int main () {
int time;
scanf ("%d" , &time);
switch (time){
case 9 :
printf ("打开窗帘" );
break ;
case 8 :
printf ("关闭窗帘" );
break ;
default :
printf ("报错" );
}
return 0 ;
}
题型9:二维数组应用题+循环
1.有三家商店,以及每个商店四个月的销量,计算出月销量的平均值,并确定哪一家商店是销冠
#include <stdio.h>
int main () {
float a[3 ][4 ];
int i, j, max;
float sum_store[3 ] = {0 }, avg_month[4 ], max_store;
for (i=0 ;i<3 ;i++){
for (j=0 ;j<4 ;j++){
scanf ("%f" , &a[i][j]);
}
}
for (i=0 ;i<4 ;i++){
avg_month[i] = 0 ;
for (j=0 ;j<3 ;j++){
avg_month[i] += a[j][i];
}
avg_month[i] /= 3 ;
printf ("%d月的平均销量为%f\n" , i+1 , avg_month[i]);
}
max_store = sum_store[0 ];
for (i=0 ;i<3 ;i++){
for (j=0 ;j<4 ;j++){
sum_store[i] += a[i][j];
}
if (sum_store[i] > max_store){
max_store = sum_store[i];
max = i;
}
}
printf ("销量冠军是%d号公司,销售额为%f\n" , max+1 , max_store);
return 0 ;
}
2.定义二维数组,其中包含三名同学五门课的成绩,输出每门课的最大成绩
#include <stdio.h>
int main () {
float a[3 ][5 ], max;
int i, j;
for (i=0 ;i<3 ;i++){
for (j=0 ;j<5 ;j++){
scanf ("%f" , &a[i][j]);
}
}
for (i=0 ;i<5 ;i++){
max = a[0 ][i];
for (j=1 ;j<3 ;j++){
if (a[j][i] > max){
max = a[j][i];
}
}
printf ("第%d门课的最大成绩为%f\n" , i+1 , max);
}
return 0 ;
}
3.现有三个运动员,每位运动员都有五个项目成绩,求每个项目的最高成绩
int main(){
float score[3][5], max;
int i, j;
for(i=0
for(j=0;j<5;j++){
scanf("%f", &score[i][j]);
}
}
for(i=0
max = score[0][i];
for(j=1;j<3;j++){
if(score[j][i] > max){
max = score[j][i];
}
}
printf("第%d门课的最大成绩为%f\n" , i+1 , max);
}
return 0 ;
}
4.现有三条街,每条街上都有五个路灯,用0表示关灯,1表示关灯。实现输入字符c查看路灯状态,输入字符d将路灯状态置反,输入字符q退出程序
#include <stdio.h>
int main () {
return 0 ;
}
题型10:字符数组中字符的前后移动+循环
1.现有9个已经按照升序排完的字母放在一维数组中,添加一个字母到数组中并依然有序,输出新数组
#include <stdio.h>
int main () {
char s[MAX] = {'a' , 'c' , 'f' , 'g' , 'k' , 'p' , 'q' , 'r' , 'x' }, c;
int i, length;
length = strlen (s);
i = length - 1 ;
printf ("请输入一个新的字符:\n" );
c = getchar ();
while (i>=0 &&s[i] > c){
s[i+1 ] = s[i];
i--;
}
s[i+1 ] = c;
length ++;
puts (s);
return 0 ;
}
2.输入一串含*
的字符串,将最后一个*
后方的所有字符往前移动一个字符单位
#include <stdio.h>
int main () {
char s[MAX], length, i;
printf ("请输入一串带*的字符串:\n" );
gets (s);
length = strlen (s);
if (s[length-1 ] == '*' ){
printf ("无需移动" );
return 0 ;
}
i = length - 1 ;
while (i>=0 && s[i] != '*' ){
i--;
}
while (i <= length - 1 ){
s[i] = s[i+1 ];
i++;
}
puts (s);
return 0 ;
}
int main(){
char s[MAX], i, length ;
printf ("输入一个字符串:\n" );
gets(s);
length = strlen(s);
i = length - 1 ;
s[length ] = ' ' ;
while (i >= 0 ){
if (s[i] >= 'A' && s[i] <= 'Z' ){
s[i+4 ] = s[i];
s[i] = ' ' ;
}
i--;
}
s[length + 4 ] = '\0' ;
//pu ts(s);
for (i=0 ;i<length +4 ;i++){
printf ("%c" , s[i]);
}
return 0 ;
}
4.在数组中输入5个互不相同的正整数,找出其中的最大值删除后并输出新数组的值
int main(){
int a[5 ], i, max, index , length =5 ;
printf ("输入数组的值:\n" );
for (i=0 ;i<5 ;i++){
scanf("%d" , &a[i]);
}
max = a[0 ];
index = 0 ;
for (i=1 ;i<5 ;i++){
if (a[i] > max){
max = a[i];
index = i;
}
}
while (index <= length -2 ){
a[index ] = a[index +1 ];
index ++;
}
for (i=0 ;i<length -1 ;i++){
printf ("%d " , a[i]);
}
return 0 ;
}
题型11:字符串特征判断+循环
1.输入一串字符,长度不超过20,判断是否是回文数组
#include <stdio.h>
int main () {
char s[MAX], i = 0 , j;
printf ("请输入不超过20的字符串:\n" );
gets (s);
j = strlen (s) - 1 ;
while (i < j){
if (s[i] != s[j]){
printf ("不是回文数组!\n" );
return -1 ;
}
i++;
j--;
}
printf ("是回文数组!" );
return 0 ;
}
#include <stdio.h>
int main () {
char s[MAX], t;
int i = 0 , alpha_flag = 0 , num_flag = 0 , other_flag = 0 ;
printf ("请输入一串字符串:\n" );
gets (s);
while (s[i] != '\0' ){
t = s[i];
if (alpha_flag == 0 &&((t>='A' &&t<='Z' )||(t>='a' &&t<='z' ))){
alpha_flag = 1 ;
}
else if (num_flag == 0 &&(t>='0' &&t<='9' )){
num_flag = 1 ;
}
else if (other_flag == 0 &&(t<48 ||(t>57 &&t<65 )||(t>90 &&t<97 )||t>122 )){
other_flag = 1 ;
}
i++;
}
if (alpha_flag==1 &&num_flag==0 &&other_flag==0 ){
printf ("是字母字符串" );
}
else if (alpha_flag==0 &&num_flag==1 &&other_flag==0 ){
printf ("是数字符串" );
}
else if (alpha_flag==0 &&num_flag==0 &&other_flag==1 ){
printf ("是其他字符串" );
}
else {
printf ("是混合符串" );
}
return 0 ;
}
3.输入数组a[5]、b[5]的值,如果a[i]与b[i]的和能被4整除就存到数组c中,否则将和乘以4后输出
#include <stdio.h>
int main () {
return 0 ;
}
4.输入一串不高于80个字符的字符串,将其中的大小写字母互换,其余字母不变,然后输出
#include <stdio.h>
int main () {
return 0 ;
}
5.输入一行字符,统计其中有多少个单词,单词之间用空格分开
#include <stdio.h>
int main () {
char s[50 ];
int i = 0 , word=0 , count=0 ;
printf ("请输入一行字符串:\n" );
gets (s);
while (s[i] != '\0' ){
if (s[i] != ' ' && word == 0 ){
word = 1 ;
count ++;
}
if (s[i] == ' ' ){
word = 0 ;
}
i++;
}
printf ("count=%d" , count);
return 0 ;
}
题型12:字符串拼接
1.将两个字符串a[30]和b[30]拼接成一个新的字符串c[70],并打印输出
#include <stdio.h>
int main () {
return 0 ;
}
题型13:字符串应用题+循环
1.假设小明的春考技能成绩查询密码为wljspass666,用户输入密码,若正确则输出密码;否则提示错误,当错误次数达到4次时输出密码锁定,此时程序退出
#include <stdio.h>
int main () {
char pwd[100 ];
int i = 0 , count = 3 ;
printf ("请输入您的密码:\n" );
gets (pwd);
if (strcmp (pwd, "wljspass666" )==0 ){
printf ("登录成功!\n" );
return 0 ;
}
while (count > 0 ){
printf ("密码错误,剩余%d次机会.\n" , count);
printf ("请输入您的密码:\n" );
gets (pwd);
if (strcmp (pwd, "wljspass666" )==0 ){
printf ("登录成功!\n" );
return 0 ;
}
else {
count--;
if (count == 0 ){
printf ("次数已用完,账户被锁定!\n" );
}
}
}
return 0 ;
}
2023年考题回忆版
1.输入整数直径,求圆的面积,如果输入的是负数,就打印提示“异常”
#include <stdio.h>
int main () {
return 0 ;
}
2.输入一个1800-2800之间的整数作为年份,判断该年份是否为闰年
#include <stdio.h>
int main () {
return 0 ;
}
3.输入一个长度不超过80的字符串,将其中的大写字母转换成小写字母,其他字符不变,输出转换后的字符串
#include <stdio.h>
int main () {
return 0 ;
}
2022年考题回忆版
#include <stdio.h>
int main () {
return 0 ;
}
2.输入购买商品总价,若总价小于1000则八折出售;若总价高于1000则将超出的部分六折出售,输出优惠金额和实付金额
#include <stdio.h>
int main () {
return 0 ;
}
3.输入本月用电度数:若在50度以下(含50度)每度1.3元,若高于50度,超出的部分按每度2.3元收,请输出电费
#include <stdio.h>
int main () {
return 0 ;
}
4.输入两个字符串s1和s2,将s2链接到s1后方,不能使用字符串连接函数
#include <stdio.h>
int main () {
return 0 ;
}
#include <stdio.h>
int main () {
return 0 ;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」