> 文章列表 > 绝对零基础的C语言科班作业(期末模拟考试)(十道编程题)

绝对零基础的C语言科班作业(期末模拟考试)(十道编程题)

绝对零基础的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]);bubble_sort(arr, sz);//可以直接传入10for (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==iif (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] = { 0 };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;
}

西交大教育在线