绝对零基础的C语言科班作业(期末模拟考试十道题)+(正式考试六道题)(后加的)

编程题(共10题; 共100.0分)(给猛男妙妙屋更一篇模拟考试)

模拟1(输出m到n的素数)

从键盘输入两个整数[m,n], 输出m和n之间的所有素数。

输入样例:3,20

输出样例:3 5 7 11 13 17 19 (输出数据之间用空格间隔)

代码:


#include<stdio.h>
#include<math.h>
int isPrime(int r)
{
    if (r < 2)
    {
        return 0;
    }
    for (int i = 2;i <= sqrt(r);i++)
    {
        if (r % i == 0)
        {
            return 0;
        }
    }
    return 1;
}
int main()
{
    int m = 0, n = 0;
    scanf("%d%d", &m, &n);
    for (int i = m;i <= n;i++)
    {
        if (isPrime(i))
        {
            printf("%d ", i);
        }
    }
    return 0;
}

模拟2(在数组找数字并排序)

从键盘输入10个整数存入数组中,从键盘输入一个整数,

判断从键盘输入的整数是否在数组中,如果找到了,输出该数所在的位置,

否者提示“not found”。同时按由小到大次序对这批数据进行排序,并输出。

输入要求:第一行输入10个整数,数据间使用空格间隔

第二行 输入一个待查找的整数

输出要求: 第一行输出是否找待查找的数据的信息

第二行输出排序后的数据,要求数据间用空格间隔

代码:


#include<stdio.h>
void bubble_sort(int arr[], int sz)//sz是传入数组大小,此题是10,也可以不加
{
    for (int i = 0;i < sz - 1;i++)
    {
        int flag = 1;//优化(外面标记一下)(可以不写)
        for (int j = 0;j < sz - 1 - i;j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
                flag = 0;//如果内循环没有一次是要交换的,说明全部的数都排好了,此时flag为1,等下会break
            }
        }
        if (flag)
        {
            break;
        }
    }
}
int main()
{
    int arr[10] = { 0 };
    for (int i = 0;i < 10;i++)
    {
        scanf("%d", &arr[i]);
    }
    int n = 0;
    scanf("%d", &n);
    int flag = 0;
    for (int i = 0;i < 10;i++)
    {
        if (arr[i] == n)
        {
            printf("%d ", i);
            flag++;
        }
    }
    if (flag == 0)
    {
        printf("not found");
    }
    printf("\n");
    int sz = sizeof(arr) / sizeof(arr[0]);//这题sz可以直接等于10
    bubble_sort(arr, sz);//sz可以直接变成传入10
    for (int i = 0;i < 10;i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

模拟3(查找字符)

从键盘输入一个字符,在给定的字符串中寻找该输入字符,

若找到打印输出该字符,没有找到给出提示信息“not found”。

给定的字符串:“the people's republic of china”

输入样例:p

输出样例:p

输入样例:t

输出样例:not found

代码:


#include<stdio.h>
#include<string.h>
int main()
{
    char arr[50] = "the people's republic of china";
    char c = '0';
    scanf("%c", &c);
    for (int i = 0;i < strlen(arr);i++)
    {
        if (arr[i] == c)
        {
            printf("%c", c);
            return 0;
        }
    }
    printf("not found");
    return 0;
}

模拟4(计算工资)

设某公司的业务员工资的计算方法为:工资=基本工资+提成。

其中,提成的计算方法为:当销售额在10000元以下时,只发基本工资1000元;

当销售额在10000元以上才可以拿提成。提成的比率为:

当销售额在20000元以下时,超出10000元的部分可按5% 提成;

当销售额在20000元以上50000元以下时,超出20000元的部分可按6% 提成;

当销售额在50000元以上100000元以下时,超出50000元的部分可按7% 提成;

当销售额在100000元以上时,超出100000元的部分可按8% 提成。

输入一个业务员的销售额,计算其应发的工资额。

输入提示信息:"Please input sale: \n"

输入格式:"%d"

输出格式:"%.3f\n"示例:

Please input sale : 23456

1707.360

代码:


#include <stdio.h>
int main() 
{
    float sale = 0, wage = 0;
    printf("Please input sale: \n");
    scanf("%f", &sale);
    if (sale <= 10000)
        wage = 1000;

    if (sale > 10000 && sale <= 20000)
        wage = 1000 + (sale - 10000) * 0.05;

    if (sale > 20000 && sale <= 50000)
        wage = 1000 + 10000 * 0.05 + (sale - 20000) * 0.06;

    if (sale > 50000 && sale <= 100000)
        wage = 1000 + 10000 * 0.05 + 30000 * 0.06 + (sale - 50000) * 0.07;

    if (sale > 100000)
        wage = 1000 + 10000 * 0.05 + 30000 * 0.06 + 50000 * 0.07 + (sale - 100000) * 0.08;

    printf("%.3f\n", wage);
    return 0;
}

模拟5(逆序整数)

编写程序,输入一个整数,将它逆序输出。要求定义并调用函数reverse(number),

它的功能是返回number的逆序数。例如reverse(12345)的返回值是54321.

代码:


#include <stdio.h>
int reverse(int x)
{
    int m = 0;
    int sum = 0;
    while (x != 0)
    {
        m = x % 10;
        x = x / 10;
        sum = (sum * 10) + m;
    }
    return sum;
}
//数组逆序
void reverse2(int* p, int left, int right)
{
    while (left < right)
    {
        int tmp = p[left];
        p[left] = p[right];
        p[right] = tmp;
        left++;
        right--;
    }
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", reverse(n));
    return 0;
}

模拟6(统计优秀率)

某班进行了大学计算机基础考试,

现要求的定义函数count帮助任课老师统计优秀率(90分以上为优秀)。

要求学生成绩使用数组来存储。

输入样例:78 90 87 65 45 78 23 94 67 77

输出样例:2

代码:


#include <stdio.h>
int count(int arr[], int sz)
{
    int count = 0;
    for (int i = 0;i < sz;i++)
    {
        if (arr[i] >= 90)
        {
            count++;
        }
    }
    return count;
}
int main()
{
    int arr[10] = { 0 };
    for (int i = 0;i < 10;i++)
    {
        scanf("%d", &arr[i]);
    }
    printf("%d", count(arr, 10));
    return 0;
}

模拟7(回文数)

”20211202“是一个特殊的日子,是完全对称日。

所谓完全对称日即正读和反读得到的字符串是相同的,

实质就是一个回文词。英文中有很多的回文词,回文词的拼法十分有趣,无论是从前往后拼读,

还是从后往前拼读,他们的拼法和词义都不变。例如:dad(爸爸),mum(妈妈),noon(中午),

eve(前夕),eye(眼睛),pop(流行),deed(行为),level(水平)等。

现在请你编程输入一个字符串,判断它是否是回文。

提示:

(1)设置两个指针pStart和pEnd,让pStart指向字符串首部,让pEnd指向字符串尾部。

或者设置两个循环变量i和j,i指向首字符,j指向结束符。

(2)利用循环从字符串两边对指针所指字符进行比较,当对应的两字符相等且两指针未超越对方时,

使指针pStart向前移动一个字符位置(加1),使指针pEnd向后移动一个字符位置(减1),

一旦发现两字符不等或两指针已互相超越(不可能是回文),则立即停止循环。

(3)根据退出循环时两指针的位置,判断字符串是否为回文。

输入样例:ABCCBA

输出样例:YES!

输入样例:student

输出样例:NO!

法一代码:


#include<stdio.h>
#include<string.h>
int main()
{
    char str[100] = { 0 };
    gets(str);
    char* pStart = str, * pEed = &str[strlen(str) - 1];
    while (pStart < pEed)
    {
        if (*pStart != *pEed)
        {
            break;
        }
        pStart++;
        pEed--;
    }
    if (pStart >= pEed)
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }
    return 0;
}

法二代码:


#include<stdio.h>
#include<string.h>
int main()
{
    char arr[100] = { 0 }, arr_tmp[100] = { 0 };//把arr反过来拷贝
    gets(arr);
    int len = strlen(arr);
    int end = len - 1;
    for (int i = 0;i < len;i++)
    {
        arr_tmp[i] = arr[end--];
    }
    if (strcmp(arr, arr_tmp) == 0)
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }
    return 0;
}

模拟8(组合数)

从3个红球,5个白球,6个黑球中任意取出8个作为一组。在每组中可以没有黑球,

但必须要有红球和白球。编程实现复合要求的组合数。

代码:


#include <stdio.h>            
int main()
{
    int sum = 0;
    for (int red = 1; red <= 3; red++)
    {
        for (int white = 1; white <= 5; white++)
        {
            for (int black = 0; black <= 6; black++)//可以没有黑球,从0开始
            {
                if (red + white + black == 8)
                {
                    printf("red:%d white:%d black:%d\n", red, white, black);
                    sum++;
                }
            }
        }
    }
    printf("sum = %d", sum);
    return 0;
}

模拟9(合法密码)

编程实现判断用户在某购物网站注册时输入的密码是否合法,要求密码长度不能超过20,

且密码是混合字符,必须包含英文大写字母,英文小写字母和数字字符三种字符。

如果用户输入的注册密码复合要求,输出“yes ”否者输出 "no"

代码:


#include <stdio.h>
#include <string.h>
int main()
{
    char arr[100];
    gets(arr);
    int lower = 0, upper = 0, digit = 0;
    int len = strlen(arr);
    if (len <= 20)
    {
        for (int i = 0;i < len;i++)
        {
            if (arr[i] >= 'a' && arr[i] <= 'z')
            {
                lower++;
            }
            if (arr[i] >= 'A' && arr[i] <= 'Z')
            {
                upper++;
            }
            if (arr[i] >= '0' && arr[i] <= '9')
            {
                digit++;
            }
        }
    }
    //如果不能是混合字符就加上k+upper+digit==i
    if (lower != 0 && upper != 0 && digit != 0)
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }
    return 0;
}

模拟10(结构体求平均分)

应用结构体类型,编程输入4名学生的姓名和高等数学、

大学英语、模拟电路三门课程的成绩,输出平均分最高的学生的姓名。

输入样例:

zhangsan 80 90 100

lisi 95 85 98

wangwu 95 85 95

zhaoliu 100 80 88

输出样例:

lisi

代码:


#include<stdio.h>
struct student
{
    char name[20];
    float score[3];
    float aver;
};
int main()
{
    struct student s[4];
    for (int i = 0;i < 4;i++)
    {
        scanf("%s%f%f%f", &s[i].name, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
        s[i].aver = (s[i].score[0] + s[i].score[1] + s[i].score[2]) / 3;
    }
    float max = -1;
    int i = 0, tmp = 0;
    for (i = 0;i < 4;i++)
    {
        if (s[i].aver > max)
        {
            max = s[i].aver;
            tmp = i;
        }
    }
    printf("%s", s[tmp].name);
    return 0;
}

期末考试题(共6题,总分100分)(考试时长:120分钟)

正式考试1(简单编程题)15分

1.某百货公司采用购物打折扣的方法来促销商品, 该公司根据输入的购物金额,

计算并输出顾客实际付款金额, 顾客一次性购物的折扣率是:

(1)少于500元不打折;

(2)500元及以上且少于1000元者, 按九五折优惠;

(3)1000元及以上且少于2000元者, 按九折优惠;

(4)2000元及以上且少于3000元者, 按八五折优惠;

(5)3000元及以上者, 按八折优惠。

编程输入购物金额和实付金额, 输出折扣率及实际应付款金额和找零金额。

输入格式 :

一行中有两个实数以空格隔开,第一个数是消费总金额,第二个数是实付金额。

输出格式:

输出共三行,第一行输出折扣信息,第二行输出打折后金额,第三行输出找零金额。

输入样例 :

5013 4050

输出样例 :

80 %

4010.40

39.60

代码:


#include <stdio.h>
#include <string.h>

int main()
{
    float money = 0, sum = 0;//money是购物金额,sum是实付金额
    scanf("%f%f", &money, &sum);
    float s = 0, putm = 0, ret = 0;//s是折扣率,putm是打折后金额,ret是找零
    if (money < 500)
    {
        s = 1.00;
    }
    if (money >= 500 && money < 1000)
    {
        s = 0.95;
    }
    if (money >= 1000 && money < 2000)
    {
        s = 0.90;
    }
    if (money >= 2000 && money < 3000)
    {
        s = 0.85;
    }
    if (money >= 3000)
    {
        s = 0.80;
    }
    putm = money * s;
    ret = sum - putm;
    printf("%.0f", s * 100);
    putchar('%');
    printf("\n");
    printf("%.2f\n", putm);
    printf("%.2f", ret);
    return 0;
}

正式考试2(简单编程题)15分

一个大于1的自然数p,除了1和本身p以外,不能被其他自然数整除,

称p为素数(又称质数,prime number)。已知素数有无限多个,但是到目前为止,

人们未找到一个公式可求出所有质数。2016年1月,发现世界上迄今为止最大的质数,

长达2233万位,如果用普通字号将它打印出来长度将超过65公里。

编程实现,输入一个大于1的正整数N,输出其是否为素数,如果是输出YES,否则输出NO。

输入样例 :

15

输出样例 :

NO

输入样例 :

53

输出样例 :

YES

代码:


#include <stdio.h>
#include <math.h>

int is_prime(int n) 
{
    if (n < 2) 
    {
        return 0;
    }
    for (int i = 2; i <= sqrt(n); i++) 
    {
        if (n % i == 0)
        {
            return 0;
        }
    }
    return 1;
}

int main() 
{
    int n = 0;
    scanf("%d", &n);
    if (is_prime(n)) 
    {
        printf("YES");
    }
    else 
    {
        printf("NO");
    }
    return 0;
}

正式考试3(结构应用题)10分

应用结构体类型,编程输入n个学生的姓名和高级语言、数据结构、

算法分析三门课程的成绩,输出总分第一名的学生姓名。

输入样例 :

Madaha 80 90 100

Jibuzhu 95 85 98

Burenzhen 95 85 90

Xueba 100 80 98

输出样例 :

Jibuzhu 278

代码:


#include <stdio.h>
#define N 4

struct student 
{
    char name[20];
    float score[3];
    float sum;
};

int main()
{
    struct student s[N];
    for (int i = 0; i < N; i++) 
    {
        scanf("%s%f%f%f", &s[i].name, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
        s[i].sum = s[i].score[0] + s[i].score[1] + s[i].score[2];
    }
    int tmp = 0;
    float max = -1;
    for (int i = 0; i < N; i++)
    {
        if (s[i].sum > max)
        {
            max = s[i].sum;
            tmp = i;
        }
    }
    printf("%s %.0f", s[tmp].name, s[tmp].sum);
    return 0;
}

正式考试4(函数编程题)20分

学生成绩系统中常常需要统计各分数段的学生占比,

请编写一个名为CountRate函数计算优秀学生的比例,其中成绩的分值从0至100,

优秀成绩是指90分以上(含90分),函数有两个形式参数:一个用于接收学生成绩的数组,

另一个用于接收数组的长度,并在main函数调用。

输入样例:80.7 90 68.5 90.8 100 98.6 75.8 60 100 69 92(成绩)

11 (数组长度)

输出样例:54.55 %

代码:


#include <stdio.h>

float CountRate(float arr[], int sz)
{
    float count = 0;
    for (int i = 0; i < sz; i++) 
    {
        if (arr[i] >= 90) 
        {
            count++;
        }
    }
    float ret = (count / sz) * 100;
    return ret;
}

int main()
{
    float arr[11] = { 0 };
    for (int i = 0; i < 11; i++)
    {
        scanf("%f", &arr[i]);
    }
    int sz = sizeof(arr) / sizeof(arr[0]);//这题sz可以直接等于11
    printf("%.2f", CountRate(arr, sz));
    putchar('%');
    return 0;
}

正式考试5(数组编程题)20分

Median(中位数) is an important concept in statistics(统计学).It refers to the average value of the middle two numbers in a series of numbers arranged from small to large.Of course, if the number of data is odd(奇数), the middle number is the median.In order to evaluate(评估) students' course learning, assume that there are 10 students whose grades are 80.7, 90, 68.5, 90.8, 100, 98.6, 75.8, 60, 100, 69. Please define an array to hold(保存) these scores. And sort them in ascending order(升序排序), and then calculate the median of the array.

Output format: % .2f

代码:


#include <stdio.h>
#include<stdlib.h>

//int cmp(const void* p1, const void* p2)
//{
//    return *(float*)p1 > *(float*)p2 ? 1 : 0;
//}

void bubble_sort(float arr[], int sz)
{
    for (int i = 0;i < sz - 1;i++)
    {
        int flag = 1;
        for (int j = 0;j < sz - 1 - i;j++)
        {
            if (arr[j] > arr[j + 1])
            {
                float tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
                flag = 0;
            }
        }
        if (flag)
        {
            break;
        }
    }
}

int main() 
{
    float arr[10] = { 0 };
    for (int i = 0; i < 10; i++) 
    {
        scanf("%f", &arr[i]);
    }
    int sz = sizeof(arr) / sizeof(arr[0]);//这题sz可以直接等于10
    bubble_sort(arr, sz);
    //for (int i = 0; i < 10; i++)//考试时可以把这段注释放开看看排序对不对
    //{
    //    printf("%.2f ", arr[i]);
    //}
    //printf("\n");
    printf("%.2f", (arr[4] + arr[5]) / 2.0);

    return 0;

    //qsort(arr,sz,sizeof(float),cmp);
    //for (int i = 0; i < 10; i++)
    //{
    //    printf("%.2f ",arr[i]);
    //}
    //printf("\n");
    //if (sz % 2 == 0)
    //{
    //    printf("%.2f", (arr[4] + arr[5]) / 2.0);
    //}
    //else
    //{
    //    printf("%.2f", arr[sz / 2]);
    //}
}

正式考试6(指针编程题)20分

Pointer is an important means to improve the running efficiency of programs(程序运行效率), especially for the operation of arrays with large amounts of data.During system registration(系统注册), the system generally requires to input mixed characters(混合字符) to improve the security of the system(系统安全性).Assume that the valid password must contain digits, uppercase letters, and lowercase letters.Define a variable that can save the password(the password length does not exceed 20)(密码长度不超过20), and use the pointer to determine whether the password is valid.

input sample:Song123wjk123

output sample:valid

input sample:songwjk123123

output sample:invalid

代码:


#include <stdio.h>
#include <string.h>
int main()
{
    char array[100] = { 0 };
    gets(array);
    int sz = strlen(array);
    int digits = 0, uppercase = 0, lowercase = 0;
    char* arr = array;//指针像数组一样用,arr[1] = *(arr+1)
    if (sz <= 20)
    {
        for (int i = 0;i < sz;i++)
        {
            if (arr[i] >= 'a' && arr[i] <= 'z')
            {
                lowercase++;
            }
            if (arr[i] >= 'A' && arr[i] <= 'Z')
            {
                uppercase++;
            }
            if (arr[i] >= '0' && arr[i] <= '9')
            {
                digits++;
            }
        }
    }
    if (digits != 0 && uppercase != 0 && lowercase != 0 /*&& digits+uppercase+lowercase==sz*/)
    {
        printf("valid\n");
    }
    else
    {
        printf("invalid\n");
    }
    return 0;
}
  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GR鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值