2025年模拟题
题型1:数组元素排序
- 1.输入5个随机整数存入数组,将元素从小到大排序并输出,每行输出1个数字
#include <stdio.h>
int main(){
int a[5] = {0};
int i = 0, j = 0, temp = 0;
printf("请输入数组元素:\n");
for(i = 0;i < 5;i++){
scanf("%d", &a[i]);
}
for(i = 0; i < 4; i++){
for(j = i + 1; j < 5; j++){
if(a[i] > a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for(i = 0;i < 5;i++){
printf("%d\n", a[i]);
}
return 0;
}
#include <stdio.h>
int main(){
int a[5] = {0};
int i = 0, j = 0, temp = 0;
printf("请输入数组元素:\n");
for(i = 0; i < 5; i++){
scanf("%d", &a[i]);
}
for(i = 0; i < 4; i++){
for(j = 0; j < 5 - i - 1; j++){
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(i = 0;i < 5;i++){
printf("%d\n", a[i]);
}
return 0;
}
#include <stdio.h>
int main(){
int a[5] = {0};
int i = 0, j = 0, temp = 0, flag = 0;
printf("请输入数组元素:\n");
for(i = 0;i < 5;i++){
scanf("%d", &a[i]);
}
for(i = 0;i < 4;i++){
flag = 0;
for(j = 0;j < 5 - i - 1; j++){
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = 1;
}
}
if(!flag){
break;
}
}
for(i = 0;i < 5;i++){
printf("%d\n", a[i]);
}
return 0;
}
题型2:进制转换
#include <stdio.h> // 方法1
int main(){
int num = 0, a = 0;
int 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\n", sum);
return 0;
}
#include <stdio.h> // 方法2
#include <math.h>
int main(){
int num = 0, a = 0;
int t = 0, sum = 0;
printf("请输入一个合法的八进制数:\n");
scanf("%d", &num);
while(num){
a = num % 10;
sum = sum + a * pow(8, t);
num /= 10;
t++;
}
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] = {0}, t[MAX] = {0};
int num = 0, length = 0, 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 = 0;
int hundred = 0, ten = 0, unit = 0;
scanf("%d", &num);
hundred = num / 100; // 求百位数
ten = num / 10 % 10; // 求十位数
unit = num % 10; // 求个位数
printf("%d %d %d", hundred, ten, unit);
return 0;
}
- 2.输入一个整数,求出个位数和十位数,并输出十位和个位的乘积
#include <stdio.h>
int main(){
int num = 0;
int ten = 0, unit = 0, multi = 0;
scanf("%d", &num);
ten = num / 10 % 10;
unit = num % 10;
multi = ten * unit;
printf("%d %d %d", ten, unit, multi);
return 0;
}
题型2:多位数拆分+循环 题源:课本例2-18 例4-3
#include <stdio.h>
int main(){
int num = 0, unit = 0;
for(num = 8; num <= 100; num++){
unit = num % 10;
if (num % 4 == 0 && unit == 8){
printf("%d ",num);
}
}
return 0;
}
- 2.打印由0-9组成且每一位都不重复的三位数的个数
#include <stdio.h>
int main(){
int num = 0;
int unit = 0, ten = 0, hundred = 0;
int count = 0;
for(num = 100; num <= 999; num++){
unit = num % 10;
ten = num / 10 % 10;
hundred = num / 100;
if(unit != ten && unit != hundred && ten != hundred){
printf("%d ", num);
count ++;
}
}
printf("\ncount = %d\n", count);
return 0;
}
#include <stdio.h>
int main(){
int i = 0, j = 0, k = 0;
int 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\n", count);
return 0;
}
- 3.输出10-50中个位和十位的乘积大于个位和十位之和的数
#include <stdio.h>
int main(){
int num = 0, unit = 0, ten = 0;
for(num = 10; num <= 50; num++){
unit = num % 10;
ten = num / 10 % 10;
if(unit * ten > unit + ten){
printf("%d ", num);
}
}
return 0;
}
- 4.打印输出10-1000中各位数之和等于10的整数,如19、190
#include <stdio.h>
int main(){
int num = 0, b = 0;
int t = 0, sum = 0;
for(num = 10; num <= 1000; num++){
t = num;
sum = 0;
while(t){
b = t % 10;
sum = sum + b;
t = t / 10;
}
if(10 == sum){
printf("%d ", num);
}
}
return 0;
}
- 5.打印输出100-999中各位数之和等于10的整数的个数
#include <stdio.h>
int main() {
int num = 0, count = 0;;
int unit = 0, ten = 0, hundred = 0;
for(num = 100; num <= 999; num++){
unit = num % 10;
ten = num / 10 % 10;
hundred = num / 100;
if(unit + ten + hundred == 10){
count++;
}
}
printf("各位数之和等于10的有%d个", count);
return 0;
}
#include <stdio.h>
int main(){
int num = 0, hundred = 0;
for(num = 100; num <= 999; num++){
hundred = num / 100;
if(7 == hundred){
printf("%d ", num);
}
}
return 0;
}
- 7.打印1-100中能被3和7同时整除的数,并计算个数
#include <stdio.h>
int main(){
int i = 0, count = 0;
for(i = 1; i <= 100; i++) {
//if(i%3 == 0&&i%7 == 0) {
// printf("%-4d", i);
// count++;
//}
if(i % 21 == 0) {
printf("%-4d", i);
count++;
}
}
printf("共%d个", count);
return 0;
}
题型3:给定数值进行组合+循环
- 1.一个由x、y、z三个数字组成的数xyz和zyx相加得1555,求x、y、z
// 在满足条件的数中,x和z全不为0,因此x和y从1开始循环即可
#include <stdio.h>
int main(){
int x = 0, y = 0, z = 0;
int i = 0, j = 0;
for(x = 1; x <= 9; x++){
for(y = 0; y <= 9; y++){
for(z = 1;z <= 9; z++){
i = x * 100 + y * 10 + z;
j = z * 100 + y * 10 + x;
if(i + j == 1555){
printf("%d %d %d\n", x, y, z);
}
}
}
}
return 0;
}
- 2.打印10-99之间个位和十位相加不小于13的数
#include <stdio.h>
int main(){
int i = 0, unit = 0, ten = 0;
for(i = 10; i <= 99; i++) {
unit = i % 10;
ten = i / 10;
// ten = i / 10 % 10;
if(unit + ten >= 13) {
printf("%-4d", i);
}
}
return 0;
}
// 方法1:遍历1-99之间的所有数
#include <stdio.h>
int main(){
int i = 0;
for(i = 1; i <= 99; i++) {
if(i % 3 == 0 && i % 2 == 1) {
printf("%-4d", i);
}
}
return 0;
}
// 方法2:遍历1-99之间的所有奇数
#include <stdio.h>
int main(){
int i = 0;
for(i = 1; i <= 99; i+=2) {
if(i % 3 == 0) {
printf("%-4d", i);
}
}
return 0;
}
题型4:数组+奇偶数/最值
#include <stdio.h>
#define MAX 1000
void print_odd(char s[]){
int i = 0;
while(s[i] != '\0'){
if(i % 2){
putchar(s[i]);
}
i++;
}
}
int main(){
char s1[MAX] = {0}, s2[MAX] = {0};
printf("请输入s1和s2的值:");
gets(s1);
gets(s2);
print_odd(s1);
print_odd(s2);
return 0;
}
- 2.给定一个数组s存储字符串,从中获取ASCII码为奇数的字符并输出
#include <stdio.h>
#define MAX 1000
int main(){
char s[MAX] = {0};
int i = 0;
printf("请输入字符串的值:");
gets(s);
while(s[i] != '\0'){
if(s[i] % 2){
putchar(s[i]);
}
i++;
}
return 0;
}
#include <stdio.h>
#define LEN 10
int main(){
int i = 0, j = 0, index = 0;
int a[LEN] = {12, 63, 51, 7, 24, 10, 78, 67, 51, 90}, b[LEN] = {0};
for(i = 0; i < LEN; i++){
if(a[i] %2 == 0){
b[j] = a[i];
j++;
}
}
printf("数组b中的值为: ");
for(index = 0; index < j; index++){
printf("%d ", b[index]);
}
return 0;
}
- 4.现有一3行4列的二维数组,将数组的最大值和最小值交换位置后输出新的数组
#include <stdio.h>
#define ROW 3
#define COL 4
int main(int argc, const char * argv[]) {
// insert code here...
int a[ROW][COL] = {{4, 6, 12, 7}, {1, 5, 3, 9}, {11, 8, 0, -2}};
int max = 0, min = 0, i = 0, j = 0;
int max_i = 0, max_j = 0, min_i = 0, min_j = 0, temp = 0;
max = min = a[0][0];
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (a[i][j] > max) {
max = a[i][j];
max_i = i;
max_j = j;
}
if (a[i][j] < min){
min = a[i][j];
min_i = i;
min_j = j;
}
}
}
printf("原数组最大值为%d (%d, %d), 最小值为%d (%d, %d)\n", max, max_i, max_j, min, min_i, min_j);
temp = a[max_i][max_j];
a[max_i][max_j] = a[min_i][min_j];
a[min_i][min_j] = temp;
printf("交换后新数组的值为:\n");
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
printf("%4d", a[i][j]);
}
printf("\n");
}
return 0;
}
![]()
- 5.现有一4行5列的二维数组,请将每一列上的最大数和最小数互换,然后输出新数组
#include <stdio.h>
#define ROW 4
#define COL 5
void print_arr(int s[][5], int m) {
int i = 0, j = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < COL; j++) {
printf("%4d", s[i][j]);
}
printf("\n");
}
}
int main(int argc, const char * argv[]) {
// insert code here...
int a[ROW][COL] = {{4, 7, 2, 10, 11}, {6, 3, 25, 12, 8}, {3, 5, 9, 15, 0}, {14, 13, 17, 1, 27}};
int i = 0, j = 0, max = 0, min = 0;
int max_i = 0, max_j = 0, min_i = 0, min_j = 0, temp = 0;
printf("交换之前的数组为:\n");
print_arr(a, ROW);
for (j = 0; j < COL; j++) {
max = min = a[0][j];
max_i = min_i = 0;
max_j = min_j = j;
for (i = 1; i < ROW; i++) {
if (a[i][j] > max) {
max = a[i][j];
max_i = i;
max_j = j;
}
if (a[i][j] < min) {
min = a[i][j];
min_i = i;
min_j = j;
}
}
temp = a[max_i][max_j];
a[max_i][max_j] = a[min_i][min_j];
a[min_i][min_j] = temp;
}
printf("\n交换之后的数组为:\n");
print_arr(a, ROW);
return 0;
}
![]()
- 6.已知数组a[10]中各元素的值,计算其中正数的平均值
#include <stdio.h>
int main(){
int a[10] = {-6, 33, 5, 21, 43, -39, -1, 0, 21, -7};
int i = 0, count = 0;
float avg = 0;
for(i = 0; i < 10; i++) {
if(a[i] > 0) {
avg += a[i];
count++;
}
}
avg /= count;
printf("数组中正数的平均值为:%.4f\n", avg);
return 0;
}
题型5:简单的数学运算+循环
#include <stdio.h>
#include <math.h>
long func(int);
int main(){
long ret = 0;
int i = 0, n = 0;
printf("请输入整数n的值:");
scanf("%d", &n);
for(i = 1; i <= n; i++){
ret = func(i);
printf("%d的阶乘值为: %ld\n", i, ret); // long类型数据输入和输出都使用%ld格式符
}
return 0;
}
long func(int m){
long result = 1;
int i = 0;
for(i = 1; i <= m; i++){
result *= i;
}
return result;
}
- 2.输入1-9其中的某个整数n,计算n + nn + nnn + nnnn。如果输入的n不在1-9之间(含1-9),就提示"输入的数据范围不合法,请重新输入!",直到输入满足的n,计算出结果后退出程序。
#include <stdio.h>
int main(){
int num = 0, t = 0;
int sum = 0, i = 0;
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, num=3;
int price=18, money;
money = price*num;
while(money <= 1000){
num *= 2;// 6 12
money = price * num;//108 216
day++;//2 3
}
printf("day=%d", day);
return 0;
}
- 4.输入整数n,计算12 + 22 + 32 + ... + n2的结果
#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;
}
- 5.用户一直输入一个整数,计算它们的和,直到输入的数不大于0就结束
#include <stdio.h>
int main(){
int num = 0, sum=0;
printf("请输入一个整数:");
scanf("%d", &num);
while(num > 0){
sum += num;
printf("请继续输入一个整数, 直到不大于0停止:");
scanf("%d", &num);
}
printf("sum=%d\n", sum);
return 0;
}
- 6.小明的身高为1.5米,一张纸的厚度为1毫米,请问这张纸对折多少次后的厚度会超过小明的高度?
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
int h1 = 1500, h2 = 1, count = 0;
while (h2 <= h1) {
h2 *= 2; // 2 4
count++; // 1 2
}
printf("总共折了%d次\n", count);
return 0;
}
题型6:简单的数学运算+循环+数组
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main(){
int a[ROWS][COLS] = {0};
int i = 0, j = 0, max = 0;
for(i = 0; i < ROWS; i++){
for(j = 0; j < COLS; j++){
scanf("%d", &a[i][j]);
}
}
max = a[0][0];
for(i = 0; i < ROWS; i++){
for(j = 0; j < COLS; j++){
if(a[i][j] > max){
max = a[i][j];
}
}
}
printf("max=%d\n", max);
return 0;
}
#include <stdio.h>
int main(){
float a[10] = {0}, sum = 0, avg = 0;
int i = 0;
for(i = 0; i < 10; i++){
// scanf("%f", a+i);
scanf("%f", &a[i]);
sum += a[i];
}
avg = sum/10;
printf("avg=%.4f\n", avg);
return 0;
}
- 3.现有三行四列的二维数组,找到最小的数并输出行列号
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main(){
int a[ROWS][COLS] = {0}, i = 0, j = 0;
int min = 0, row = 0, col = 0;
for(i = 0; i < ROWS; i++){
for(j = 0; j < COLS; j++){
scanf("%d", &a[i][j]);
}
}
min = a[0][0];
for(i = 0; i < ROWS; i++){
for(j = 0; j < COLS; j++){
if(a[i][j] < min){
min = a[i][j];
row = i;
col = j;
}
}
}
printf("min=%d,row=%d,col=%d\n", min, row, col);
return 0;
}
- 4.输入三行四列二维数组的值,将每行的平均值放在一个一维数组中并输出
#include <stdio.h>
int main(){
int a[3][4] = {0}, i = 0, j = 0;
float avg[3] = {0};
for(i = 0; i < 3; i++){
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;
}
- 5.现有5名员工,每名员工的信息包含员工号、时薪和工作时间计算每位员工的总工资并输出
#include <stdio.h>
int main(){
int employee[5][3] = {{101, 80, 8}, {102, 60, 12}, {103, 62, 10}, {104, 45, 16}, {105, 120, 8}};
int i = 0, salary = 0;
for(i = 0; i < 5; i++){
salary = employee[i][1] * employee[i][2];
printf("工号为%d的员工总工资为%d\n", employee[i][0], salary);
}
return 0;
}
题型7:选择语句的简单应用
#include <stdio.h>
int main(){
int a = 0, b = 0, temp = 0;
scanf("%d %d", &a, &b);
if(a > b){
temp = a;
a = b;
b = temp;
}
printf("%d %d\n", a, b);
return 0;
}
- 2.输入三条边,判断能否构成三角形。如果是三角形,判断能否构成直角三角形
#include <stdio.h>
int main(){
int a = 0, b = 0, c = 0;
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 = 0, b = 0, c = 0, temp = 0;
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\n", a);
return 0;
}
#include <stdio.h>
int main(){
int a = 0, b = 0, c = 0, max = 0;
scanf("%d %d %d", &a, &b, &c);
max = (max = a < b? b : a) < c? c : max;
printf("最大的数是%d\n", max);
return 0;
}
题型8:选择结构应用题
- 1.小明参与图书促销活动,每本书价格40元。周一到周五打七折,周六打八折,周日打九折。输入当周第几天和图书数,输出价格
#include <stdio.h>
int main(){
int price = 40, day = 0, num = 0;
float money = 0;
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\n", money);
return 0;
}
- 2.输入1打印开,输入2打印关,输入其他数字打印默认
#include <stdio.h>
int main(){
char sw = getchar();
switch(sw){
case '1':
printf("开");
break;
case '2':
printf("关");
break;
default:
printf("默认");
break;
}
return 0;
}
- 3.输入近视度数,判断是不是近视。度数低于100是不近视,不低于100但低于300就是轻度近视,度数不低于300但低于500就是中度近视,度数高于500就是高度近视
#include <stdio.h>
int main(){
int num = 0;
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 = 0;
scanf("%d", &time);
switch(time){
case 9:
printf("打开窗帘");
break;
case 8:
printf("关闭窗帘");
break;
default:
printf("报错");
break;
}
return 0;
}
题型9:二维数组应用题+循环
- 1.有三家商店,以及每个商店四个月的销量,计算出月销量的平均值,并确定哪一家商店是销冠
#include <stdio.h>
int main(){
float a[3][4] = {0};
int i = 0, j = 0, max = 0;
float sum_store[3] = {0}, avg_month[4] = {0}, max_store = 0;
for(i = 0; i < 3; i++){
for(j = 0; j < 4; j++){
scanf("%f", &a[i][j]);
}
}
for(i = 0; i < 4; i++){
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] = {0}, max = 0;
int i = 0, j = 0;
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.现有三个运动员,每位运动员都有五个项目成绩,求每个项目的最高成绩
#include <stdio.h>
int main(){
float score[3][5] = {0}, max = 0;
int i = 0, j = 0;
for(i = 0; i < 3; i++){
for(j = 0; j < 5; j++){
scanf("%f", &score[i][j]);
}
}
for(i = 0; i < 5; i++){
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>
void process_arr(int s[][5], int m, char ch){
int i = 0, j = 0;
for(i = 0; i < m; i++){
for(j = 0; j < 5; j++){
if(ch == 'c'){
printf("%d ", s[i][j]);
}
else if(ch == 'd'){
if(s[i][j] == 0){
s[i][j] = 1;
}
else{
s[i][j] = 0;
}
}
}
printf("\n");
}
}
int main(){
int a[3][5] = {{0, 0, 1, 0, 0}, {0, 1, 1, 0, 0}, {1, 0, 0, 1, 1}}, i, j;
char ch = 0;
printf("请输入字符(c:查看状态 d:状态置反 q:退出程序):");
scanf("%c", &ch);
switch(ch){
case 'c':
printf("正在查看路灯状态...\n");
process_arr(a, 3, ch);
break;
case 'd':
printf("正在置反路灯状态...\n");
process_arr(a, 3, ch);
printf("置反后的路灯状态为:\n");
process_arr(a, 3, 'c');
break;
case 'q':
printf("正在退出程序...已退出...\n");
break;
default:
printf("输入的字符错误!\n");
break;
}
return 0;
}
- 5.在二维数组中输入两个人的身份证号,打印出生年月,并比较两人年龄的大小
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
// insert code here...
char id[2][19] = {0}, birth[2][9] = {0};
int i = 0, j = 0, k = 0;
printf("请输入2人的身份证号信息:\n");
gets(id[0]);
gets(id[1]);
for (i = 0; i < 2; i++) {
k = 0;
for (j = 6; j < 14; j++) {
birth[i][k] = id[i][j];
k++;
}
// birth[i][k] = '\0';
}
puts(birth[0]);
puts(birth[1]);
if (strcmp(birth[0], birth[1]) < 0) {
printf("第1个人的年龄更大\n");
}
else if (strcmp(birth[0], birth[1]) > 0) {
printf("第2个人的年龄更大\n");
}
else {
printf("两人的年龄一样大\n");
}
return 0;
}
题型10:字符数组中字符的前后移动+循环
- 1.现有9个已经按照升序排完的字母放在一维数组中,添加一个字母到数组中并依然有序,输出新数组
#include <stdio.h>
#include <string.h>
#define MAX 11
int main(){
char s[MAX] = {'a', 'c', 'f', 'g', 'k', 'p', 'q', 'r', 'x'}, c = 0;
int i = 0, 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>
#include <string.h>
#define MAX 100
int main(){
char s[MAX] = {0}, i = 0;
printf("请输入一串带*的字符串:\n");
gets(s);
int 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;
}
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
char s[MAX] = {0}, i = 0;
printf("输入一个字符串:\n");
gets(s);
int 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';
//puts(s);
for(i = 0; i < length + 4; i++){
printf("%c", s[i]);
}
return 0;
}
- 4.在数组中输入5个互不相同的正整数,找出其中的最大值删除后并输出新数组的值
#include <stdio.h>
#define LEN 5
int main(){
int a[5] = {0}, i = 0;
int max = 0, index = 0;
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 <= LEN - 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>
#include <string.h>
#define MAX 21
int main(){
char s[MAX] = {0}, i = 0, j = 0;
printf("请输入不超过20的字符串:\n");
gets(s);
j = strlen(s) - 1;
while(i < j){ // while(i <= j)
if(s[i] != s[j]){
printf("不是回文数组!\n");
return -1;
}
i++;
j--;
}
printf("是回文数组!");
return 0;
}
#include <stdio.h>
#define MAX 100
int main(){
char s[MAX] = {0}, t = 0;
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>
#define MAX 5
void input_arr(int x[], int n){
int i = 0;
for(i = 0; i < n; i++){
scanf("%d", x + i);
}
}
void print_arr(int x[], int n){
int i = 0;
for(i = 0; i < n; i++){
printf("%d ", x[i]);
}
}
int main(){
int a[MAX] = {0}, b[MAX] = {0}, c[MAX*2] = {0};
int i = 0, j = 0, sum = 0;
printf("请输入数组a的值:");
input_arr(a, MAX);
printf("请输入数组b的值:");
input_arr(b, MAX);
for(i = 0; i < MAX; i++){
sum = a[i] + b[i];
if(sum % 4 == 0){
c[j++] = a[i];
c[j++] = b[i];
}
else{
printf("%d ", sum * 4);
}
}
printf("\n------------\n");
print_arr(c, j);
return 0;
}
- 4.输入一串不高于80个字符的字符串,将其中的大小写字母互换,其余字母不变,然后输出
#include <stdio.h>
#include <ctype.h>
#define MAX 80
int main(){
char s[MAX];
int i = 0;
printf("请输入s的值:");
gets(s);
while(s[i] != '\0'){
if(isupper(s[i])){
s[i] += 32;
}
else if(islower(s[i])){
s[i] -= 32;
}
i++;
}
printf("新字符串的内容为:%s", s);
return 0;
}
- 5.输入一行字符,统计其中有多少个单词,单词之间用空格分开
#include <stdio.h>
int main(){
char s[50] = {0};
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\n", count);
return 0;
}
- 6.输入一串字符串,如果存在B或E,则将其改为a,否则原样输出
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main() {
char str[MAX] = {0};
int i = 0;
printf("请输入一串字符串: ");
gets(str);
for (i = 0; i < strlen(str); i++) {
if (str[i] == 'B' || str[i] == 'E') {
str[i] = 'a';
}
}
// 输出处理后的字符串
printf("处理后的字符串: %s\n", str);
return 0;
}
- 7.输入一串字符串,如果存在A或a,则将其改为e,否则原样输出
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main() {
char str[MAX] = {0};
int i = 0;
printf("请输入一串字符串: ");
gets(str);
for (i = 0; i < strlen(str); i++) {
if (str[i] == 'A' || str[i] == 'a') {
str[i] = 'e';
}
}
// 输出处理后的字符串
printf("处理后的字符串: %s\n", str);
return 0;
}
题型12:字符串拼接
- 1.将两个字符串a[30]和b[30]拼接成一个新的字符串c[70],并打印输出
#include <stdio.h>
#include <string.h>
#define LEN 30
int main(){
char a[LEN] = {0}, b[LEN] = {0}, c[70] = {0};
int i = 0, j = 0, k = 0;
printf("请输入a的值:");
gets(a);
printf("请输入b的值:");
gets(b);
while(a[i] != '\0'){
c[k++] = a[i++];
}
while(b[j] != '\0'){
c[k++] = b[j++];
}
printf("字符串拼接后的内容为:%s", c);
return 0;
}
题型13:字符串应用题+循环
- 1.假设小明的春考技能成绩查询密码为wljspass666,用户输入密码,若正确则输出密码;否则提示错误,当错误次数达到4次时输出密码锁定,此时程序退出
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]){
char pwd[100] = {0};
int i = 0, count = 4;
printf("输入密码:");
gets(pwd);
while(count > 0){
if(strcmp(pwd, "wljspass666")==0){
printf("登录成功!\n");
break;
}
else{
count--;
printf("密码错误,剩余%d次机会.\n", count);
if(count == 0){
printf("次数已用完,账户被锁定!\n");
break;
}
printf("输入密码:");
gets(pwd);
}
}
return 0;
}
考题补充
- 1.输入两个浮点数,以浮点数的形式格式化输出,宽度为10,小数点后保留2位
#include <stdio.h>
int main() {
float num1 = 0, num2 = 0;
printf("请输入两个浮点数:");
scanf("%f %f", &num1, &num2);
// 格式化输出:宽度10(总字符数),小数点后保留2位
// %10.2f 中:10 表示输出占10个字符位置,.2 表示保留2位小数,不足时左侧补空格
printf("\n第一个数:%10.2f\n", num1);
printf("第二个数:%10.2f\n", num2);
return 0;
}
- 2.某水费结算系统中输入1表示民用水,每吨3.5元;输入2表示商用水,每吨4.0元。输入水费标识(1或2)和用水量,输出水费
#include <stdio.h>
int main(){
int flag = 0, weight = 0;
float price = 0, money = 0;
printf("请输入水费标识(1或2)和用水量(吨):");
scanf("%d %d", &flag, &weight);
if(flag == 1){
price = 3.5;
}
else if(flag == 2){
price = 4.0;
}
else {
printf("输入异常,只能输入1或2!\n");
return -1;
}
money = price * weight;
printf("水费共计%.2f元\n", money);
return 0;
}
- 3.输入10个人的年龄,求平均年龄,并输出最接近且不大于平均值的年龄
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
int age[10] = {0}, below_avg_age[10] = {0};
int i = 0, j = 0, k = 0;
float avg_age = 0, min = 0;
for (i = 0; i < 10; i++) {
scanf("%d", age + i);
avg_age += age[i];
}
avg_age /= 10;
printf("平均年龄为%.4f\n", avg_age);
for (i = 0; i < 10; i++) {
if (avg_age >= age[i]) {
below_avg_age[j++] = age[i];
}
}
min = avg_age - below_avg_age[0];
k = 0;
for (i = 1; i < j; i++) {
if (avg_age - below_avg_age[i] < min) {
min = avg_age - below_avg_age[i];
k = i;
}
}
printf("最接近且不大于平均值的年龄是%d", below_avg_age[k]);
return 0;
}
- 4.使用函数func打印输出1000以内能被7整除的偶数,每行打印12个,输出格式为%7d
#include <stdio.h>
void func(int num) {
int i = 0;
for(i = 0; i <= num; i+=2){
if(i % 7 == 0){
printf("%7d", i);
count++;
if(count % 12 == 0){
printf("\n");
}
}
}
}
int main(){
int num = 1000;
func(num);
return 0;
}
- 5.输入一串字符串,将其中的数字字符加6。注意:字符'4'加6后的结果按字符'0'计算,字符'5'加6后的结果按字符'1'计算
#include <stdio.h>
#define MAX 1000
int main(int argc, const char * argv[]) {
// insert code here...
char s[MAX] = {0}, t = {0};
int i = 0;
printf("请输入一串字符:");
gets(s);
while (s[i] != '\0') {
t = s[i];
if (t >= '0' && t <= '3') {
s[i] += 6;
}
else if (t >= '4' && t <= '9') {
s[i] -= 4;
}
i++;
}
puts(s);
return 0;
}
- 6.输入n个数,传入func函数中,打印输出n个数中的最小值
#include <stdio.h> // 方法1:不用数组,静态变量存储上一次传进来的值
float func(float num){
static float m = 10e20;
if(num < m) {
m = num;
}
return m;
}
int main(){
int i, n;
float num, ret;
printf("请输入n的值:");
scanf("%d", &n);
for(i = 0; i < n; i++){
printf("请输入第%d个数:", i + 1);
scanf("%f", &num);
ret = func(num);
}
printf("最小值为:%f", ret);
return 0;
}
#include <stdio.h> // 方法2:可变长度数组VLA,在 C99 (1999年发布)及之后的标准里,支持可变长度数组,能够使用变量来指定数组的长度。1989年发布的C89/C90标准不支持VLA,以下代码可能会报错
int func(int arr[], int n){
int min = arr[0], i;
for(i = 1; i < n; i++){
if(arr[i] < min){
min = arr[i];
}
}
return min;
}
int main(){
int i, n, min;
printf("请输入n的值:");
scanf("%d", &n);
int arr[n];
for(i = 0; i < n; i++){
printf("请输入第%d个数:", i + 1);
scanf("%d", arr+i);
}
min = func(arr, n);
printf("最小值为%d", min);
return 0;
}
#include <stdio.h> // 方法3:在C89/C90标准下不可使用可变长度数组时,能够借助动态内存分配函数像malloc、calloc或者realloc)来创建数组
#include <stdlib.h>
int func(int arr[], int n){
int min = arr[0], i;
for(i = 1; i < n; i++){
if(arr[i] < min){
min = arr[i];
}
}
return min;
}
int main(int argc, const char * argv[]) {
// insert code here...
int i, n, min;
int *arr;
printf("请输入n的值:");
scanf("%d", &n);
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("内存分配失败!\n");
return -1;
}
for(i = 0; i < n; i++){
printf("请输入第%d个数:", i + 1);
scanf("%d", arr+i);
}
min = func(arr, n);
printf("最小值为%d\n", min);
return 0;
}
- 7.输入n,找出1-n之间的所有奇数,输出奇数的个数和奇数的平均值
#include <stdio.h>
int main(){
int n, i, count = 0;
float avg = 0;
printf("请输入n的值:");
scanf("%d", &n);
for(i = 1; i <= n; i+=2) {
count++;
avg += i;
}
avg /= count;
printf("共有奇数%d个,平均值为%.4f\n", count, avg);
return 0;
}
- 8.用函数调用一个公式,结果如果是正数则返回,是负数则返回0
#include <stdio.h>
int func(int a, int b, int c){
return a*a+b*b-c*c;
}
int main(){
int a, b, c, ret;
printf("请输入a b c的值:");
scanf("%d %d %d", &a, &b, &c);
ret = func(a, b, c);
printf("ret=%d", ret);
return 0;
}
#include <stdio.h>
int main(){
int n, i, cnt_pos = 0, cnt_neg = 0, cnt_zero = 0;
printf("请输入n的值:");
scanf("%d", &n);
int a[n]; // 部分编译器不支持该语句
printf("请输入%d个整数:", n);
for(i = 0; i < n; i++) {
scanf("%d", a+i);
if(a[i] > 0) {
cnt_pos++;
}
else if(a[i] < 0) {
cnt_neg++;
}
else {
cnt_zero++;
}
}
printf("数组中有%d个正数,%d个负数,%d个0", cnt_pos, cnt_neg, cnt_zero);
return 0;
}
- 10.数组a中有5位同学的成绩,输出最高成绩和最低成绩,要用指针
- 11.输入一个4位数,计算每一位平方的和。如输入1234,输出30
#include <stdio.h>
int main(){
int num, sum = 0, b;
printf("请输入一个4位数:");
scanf("%d", &num);
while(num){
b = num%10;
sum += b*b;
num /= 10;
}
printf("sum=%d", sum);
return 0;
}
- 12.将二进制数11001110置反,输出00110001
#include <stdio.h>
int main(){
int a[8] = {1, 1, 0, 0, 1, 1, 1, 0}, i;
for(i = 0; i < 8; i++){
if(a[i]){
a[i] = 0;
printf("%d", a[i]);
}
else {
a[i] = 1;
printf("%d", a[i]);
}
}
return 0;
}
- 13.在数组a中输入5个字符(不含'\0'),数组b中已有'a'、'b'两个字符,将数组a连接到数组b后方
#include <stdio.h>
#include <string.h>
int main(){
char a[6], b[8] = "ab";
int i, length_b = strlen(b);
printf("请输入5个字符(不含\'\\0\'):");
for(i = 0; i < 5; i++){
scanf("%c", a+i);
b[length_b++] = a[i];
}
b[length_b] = '\0';
printf("连接后的新字符串为:");
puts(b);
return 0;
}
- 14.用户输入6个学生的成绩,计算平均成绩和高于平均成绩的学生的平均成绩
#include <stdio.h>
int main(){
int score[6], i, count = 0;
float avg1 = 0, avg2 = 0;
printf("请输入6名学生的成绩:\n");
for(i = 0; i < 6; i++) {
scanf("%d", score+i);
avg1 += score[i];
}
avg1 /= 6;
for(i = 0; i < 6; i++) {
if(score[i] > avg1) {
avg2 += score[i];
count++;
}
}
avg2 /= count;
printf("平均成绩为%.2f,高于平均成绩的共%d人,其平均成绩为%.2f", avg1, count, avg2);
return 0;
}
- 15.某商场举行促销活动,满600元减200元,不满600元但高于200元,打八折,不高于200元打九折。输入消费金额,输出应付金额
#include <stdio.h>
int main(){
float money, pay;
printf("请输入消费金额:");
scanf("%f", &money);
if(money < 0){
printf("输入异常, end...");
return -1;
}
else if(money <= 200){
pay = money * 0.9;
}
else if(money < 600){
pay = money * 0.8;
}
else {
pay = money - 200;
}
printf("消费%.2f元,支付%.2f元.", money, pay);
return 0;
}
- 16.现有5位同学的综合得分(2位数),将得分乘以3加上5后输出
- 17.现有元素只为0或1的5行5列二维数组a,第5行和第5列元素未初始化。若每行1的个数为偶数个,则该行第5个数初始化为1,反之为0。若每列1的个数是偶数,则该列第5个数初始化为1,反之为0。
// 示例
0 0 1 1
1 1 1 0
1 0 0 1
0 1 0 0
#include <stdio.h>
#define ROW 5
#define COL 5
void print_arr(int s[][COL], int m, int n){
int i, j;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
printf("%4d", s[i][j]);
}
printf("\n");
}
}
int main(int argc, const char * argv[]) {
// insert code here...
int a[ROW][COL] = {{0, 0, 1, 0}, {1, 0, 1, 1}, {0, 1, 1, 0}, {0, 1, 1, 1}};
int i, j, sum;
printf("数组前4行4列元素的值为:\n");
print_arr(a, 4, 4);
for (i = 0; i < ROW - 1; i++) {
sum = 0;
for (j = 0; j < COL - 1; j++) {
sum += a[i][j];
}
if (!(sum%2)) {
a[i][j] = 1;
}
}
for (j = 0; j < COL; j++) {
sum = 0;
for (i = 0; i < ROW - 1; i++) {
sum += a[i][j];
}
if (!(sum%2)) {
a[i][j] = 1;
}
}
printf("填充完毕后数组元素的值为:\n");
print_arr(a, 5, 5);
return 0;
}
- 18.求和:1-1/3+1/5-1/7+...,一直到1/99
- 19.现有3*3矩阵,计算第4列各行元素的值,要求每行4个元素相加的和为20
#include <stdio.h>
void print_arr(int s[][4], int m, int n){
int i, j;
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
printf("%4d", s[i][j]);
}
printf("\n");
}
}
int main(){
int a[3][4] = {{1, 8, 17}, {12, 4, -5}, {6, 7, 1}}, i, j, sum;
printf("3*3数组元素为:\n");
print_arr(a, 3, 3);
for(i = 0; i < 3; i++){
sum = 0;
for(j = 0; j < 3; j++){
sum += a[i][j];
}
a[i][3] = 20 - sum;
}
printf("填充后3*4数组元素为:\n");
print_arr(a, 3, 4);
return 0;
}
- 20.求和:1+1/2+1/3+...,一直到1/99
- 21.定义一个数组并赋值,输出数组前n个数的和与后n个数的和
#include <stdio.h>
#define N 10
void print_arr(int s[], int n, int m){
int i;
for(i = n; i <= m; i++){
printf("%4d", s[i]);
}
}
int main(){
int a[N] = {9, 4, 6, 7, 1, 3, 8, 5, 2, 0}, n, i, j;
printf("请输入n的值(n<=%d):", N);
scanf("%d", &n);
if(n > N){
printf("下标越界,end...\n");
return -1;
}
printf("前%d个数为:", n);
print_arr(a, 0, n-1);
printf("\n后%d个数为:", n);
print_arr(a, N-n, N-1);
return 0;
}
- 22.模拟点餐程序:定义数组food和price,定义整型变量c、n和op,其中c为食物编号,n为食物数量,op为功能选项(0:点餐 1:查看 2:结账 其他值:错误)。现要求用户输入c、n和op值,打印输出相应的结果。
food[3][40] = {"汉堡", "薯条", "可乐"} price[3] = {20, 10, 5}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ITEM 3 // 食物种类
#define LEN 1000 // 每种食物占据的最长字节数
#define MAX 1000 // 购物车可加食物数量上限
int car_length = 0; // 购物车数组的长度,全局变量
void print_food(char food[][LEN]) {
int i;
for (i = 0; i < ITEM; i++) {
printf("%s ", food[i]);
}
}
void add_food(char food[][LEN], char car[][LEN], int c, int n) { // c:食物编号 n:食物数量
int i;
for (i = car_length; i < car_length + n; i++) {
strcpy(car[i] ,food[c]);
}
car_length = i; // 更新长度,后续可能会继续在购物车中增加物品,所以当前的长度需要保存
}
void print_car(char car[][LEN]){
int i = 0;
while (car[i][0] != '\0') { // 购物车数组中某行的字符串中0列为'\0',代表此处为空的,未存储食物
printf("%s ", car[i]);
i++;
}
if (i == 0) {
printf("购物车为空!");
}
printf("\n");
}
int cal_pay(char car[][LEN], int price[]) {
int pay = 0, i;
for (i = 0; car[i][0] != '\0'; i++) { // 遍历购物车结束条件也是某行0列字符为'\0'
if (strcmp(car[i], "汉堡") == 0) {
pay += price[0];
}
else if (strcmp(car[i], "薯条") == 0) {
pay += price[1];
}
else {
pay += price[2];
}
strcpy(car[i], "\0"); // i位置处的食物算入总价后,就将i位置处的内容置为"\0",支付的过程即伴随着清空购物车.此处清空购物车只是数组中每行为"\0",但购物车长度不是0
}
car_length = 0; // 所以此处也要将购物车的长度置零,在下方case 2处置零也可以
return pay;
}
int main(int argc, const char * argv[]) {
// insert code here...
char food[ITEM][LEN] = {"汉堡", "薯条", "可乐"};
int c, n, op, money, price[ITEM] = {20, 10, 5}; // c:食物编号 n:食物数量 op:功能选项
char car[MAX][LEN] = {'\0'}; // 购物车,直接初始化为'\0',利于后续处理中找到car数组的边界
while (1) {
printf("开始操作(0:点餐 1:查看购物车 2:结账 3:退出):");
scanf("%d", &op);
switch (op) {
case 0:
printf("有以下食物:\n");
print_food(food);
printf("\n开始点餐...请输入食物编号(0 1 2)和食物数量\n");
scanf("%d %d", &c, &n);
add_food(food, car, c, n);
break;
case 1:
printf("正在查看购物车...\n");
print_car(car);
break;
case 2:
printf("正在结账...\n");
money = cal_pay(car, price);
printf("共支付%d元\n", money);
// car_length = 0;
break;
case 3:
printf("正在退出...\n");
exit(-1);
default:
printf("功能选项输入错误,请重新输入!\n");
}
}
return 0;
}
- 23.输入一个整数,判断100以内能被这个数整除的数
-
2023年考题回忆版
- 1.输入整数直径,求圆的面积,如果输入的是负数,就打印提示“异常”
#include <stdio.h>
#define PI 3.14159
int main(){
int d;
float r, s;
printf("请输入圆的直径:");
scanf("%d", &d);
if(d < 0){
printf("直径值异常!\n");
return -1;
}
r = d / 2;
s = PI * r * r;
printf("面积为%.2f", s);
return 0;
}
- 2.输入一个1800-2800之间的整数作为年份,判断该年份是否为闰年
#include <stdio.h>
int main(){
int year;
printf("请输入一个年份(1800-2800):");
scanf("%d", &year);
if(year >= 1800&&year <= 2800){
if(year % 4 == 0&&year % 100 != 0||year % 400 == 0){
printf("%d是闰年!", year);
}
else{
printf("%d不是闰年!", year);
}
}
else{
printf("输入的年份非法!");
}
return 0;
}
- 3.输入一个长度不超过80的字符串,将其中的大写字母转换成小写字母,其他字符不变,输出转换后的字符串
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
char s[MAX];
int i = 0;
printf("请输入字符串:");
gets(s);
if(strlen(s) <= 80){
while(s[i] != '\0'){
if(s[i] >= 'A'&&s[i] <= 'Z'){
s[i] += 32;
}
i++;
}
puts(s);
}
else{
printf("字符串长度不合法!");
}
return 0;
}
2022年考题回忆版
#include <stdio.h>
#define ROW 10
#define COL 10
int main(){
int i = 0, j = 0, s[ROW][COL] = {0};
for(i = 0; i < ROW; i++){
s[i][0] = 1; // 每一行下标为0的元素置为1
s[i][i] = 1; // 对角线元素置为1
}
for(i = 2; i < ROW; i++){
for(j = 1; j < i; j++){
s[i][j] = s[i-1][j] + s[i-1][j-1]; // 每一行下标为1至倒数第2个元素的值为正上方与左斜上方元素的和
}
}
for(i = 0; i < ROW; i++){
for(j = 0; j <= i; j++){
printf("%4d", s[i][j]);
}
printf("\n");
}
return 0;
}
- 2.输入购买商品总价,若总价小于1000则八折出售;若总价高于1000则将超出的部分六折出售,输出优惠金额和实付金额
#include <stdio.h>
int main(){
float total, discount, pay;
printf("请输入商品总价:");
scanf("%f", &total);
if(total < 0){
printf("输入数据异常!");
return -1;
}
else if(total < 1000){
discount = total * (1 - 0.8);
pay = total * 0.8;
}
else{
discount = (total - 1000) * (1 - 0.6);
pay = 1000 + (total - 1000) * 0.6;
}
printf("总价%.2f,优惠金额%.2f,实付金额%.2f", total, discount, pay);
return 0;
}
- 3.输入本月用电度数:若在50度以下(含50度)每度1.3元,若高于50度,超出的部分按每度2.3元收,请输出电费
#include <stdio.h>
int main(){
float total, pay;
printf("请输入本月用电度数:");
scanf("%f", &total);
if(total < 0){
printf("数值异常!");
return -1;
}
else if(total <= 50){
pay = total * 1.3;
}
else{
pay = 50 * 1.3 + (total - 50) * 2.3;
}
printf("用了%.2f度电, 电费%.2f元", total, pay);
return 0;
}
- 4.输入两个字符串s1和s2,将s2链接到s1后方,不能使用字符串连接函数
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main(){
char s1[MAX], s2[100];
int len, i = 0;
printf("请输入s1的值:");
gets(s1);
len = strlen(s1); // 定位到s1字符串'\0'的位置
printf("请输入s2的值:");
gets(s2);
while(s2[i] != '\0'){ // 从头遍历字符串s2
s1[len++] = s2[i++]; // 依次将字符串s2的字符连接到s1后方
}
s1[len] = '\0'; // 为字符串s1添加结束标志
printf("s2连接到s1后方的新字符串为:%s", s1);
return 0;
}
#include <stdio.h>
int main(){
int i, sum = 0;
for(i = 1; i <= 100; i++){
sum += i;
}
printf("sum=%d", sum);
return 0;
}
- 6.(变式)计算1-2+3-4+5-...+99-100的值
// 方法1:将加减号看成乘以1或乘以-1
#include <stdio.h>
int main() {
int i = 1, sum = 0;
int t = 1;
while(i <= 100 {
sum = sum + i * t;
i ++;
t = -t;
}
printf("%d", sum);
return 0;
}
// 方法2:利用奇偶数,观察原式发现奇数前方的符号为“+”,偶数前方的符号为“-”。
#include <stdio.h>
int main(){
int i = 1, sum = 0;
while(i <= 100){
if(i % 2 != 0){
sum = sum + i;
}
else {
sum = sum - i;
}
i++;
}
printf("sum=%d", sum);
return 0;
}