2025年春考技能测试网络技术+软件与应用技术真题

3.8网络第1场 8:40-9:40

  • 1.输入一串字符串,保留前面和中间的"#",删除后面所有连续的"#"。如输入"Hello#C####",输出"Hello#C"
#include <stdio.h>
#include <string.h>
int main(){
	char s[100];
	int i, length, new_length;
	printf("请输入字符串,要求以#结束\n");
	gets(s);
	length = strlen(s);
	for(i = length - 1; i>=0; i--){
		if(s[i] == '#'){
			s[i] = '\0';
			new_length --;
		}
		else {
			break;
		}
	}
	printf("删除后方#后的字符串为:\n");
	puts(s);
	return 0;
}
  • 2.输入桌子的平米和椅子的数量,如果是1平米,价格是1200;如果是2平米,价格是2200。如果椅子数量不高于4个,每把价格100元,否则超过4个的部分每把价格80元。输入桌子的平米数(1或2)以及椅子的数量,计算总价格
#include <stdio.h>
int main(){
	int num1, num2, money1, money2, total;
	printf("请输入桌子的平方数(1或2):\n");
	scanf("%d", &num1);
	printf("请输入椅子的数量:\n");
	scanf("%d", &num2);
	switch(num1){
		case 1:
			money1 = 1200; break;
		case 2:
			money1 = 2200; break;
	}
	if(num2>0 && num2 <= 4){
		money2 = 100 * num2;
	}	
	else if(num2 > 4){
		money2 = 100 * 4 + (num2 - 4) * 80;
	}
	total = money1 + money2;
	printf("桌子花费%d元,椅子花费%d元,共计%d元.", money1, money2, total);
	return 0;
}

3.8网络第2场 10:50-11:50

  • 1.现有2个数组a和b,请将a数组中有但b数组中没有的字符存入数组c并输出c
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
	char a[MAX], b[MAX], c[MAX];
	int length_a, length_b, i, j, k = 0;
	printf("请输入字符串a的值:");
	gets(a);
	printf("请输入字符串b的值:");
	gets(b);
	length_a = strlen(a);
	length_b = strlen(b);
	for(i = 0; i < length_a; i++){
		for(j = 0; j < length_b; j++){
			if(a[i] == b[j]){
				break;
			}
		}
		if(j == length_b){
			c[k++] = a[i];
		}
	}
	c[k] = '\0';
	printf("数组a中有但数组b中没有的字符为:%s", c);
	return 0;
}
// 上述代码有一个小bug,即当a为"nihaoa",b为"woshi"的时候,c为"naa",严格来讲c应该为"na"
// 解决方法有很多,比如在遍历数组a时先进行一次去重操作
  • 2.有一本书共160页,第一天读了10页,以后每天都比前一天多读5页,请问几天可以读完,最后一天读了多少页?
#include <stdio.h>
int main(){
	int day = 1, page_every_day = 10, page_total = 10;
	int last_day_pages;
	while(page_total <= 160){
		page_every_day += 5;
		page_total += page_every_day;
		day++;
	}
	last_day_pages = 160 - (page_total - page_every_day);
	printf("一共读了%d天 最后一天读了%d页", day, last_day_pages);
	return 0;
}

3.8网络第3场 14:00-15:00

  • 1.用户输入密码进行判断,总共有5次机会。如果正确则提示密码正确,否则提示密码错误,并提醒剩余的可用次数
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
	int count = 5;
	char pwd[MAX] = "hello@845";
	char user_pwd[MAX];
	while(count >= 1){
		printf("请输入用户密码:");
		gets(user_pwd);
		if(strcmp(pwd, user_pwd) == 0){
			printf("登录成功,正在退出...");
			break;
		}
		count --;
		printf("登录失败!剩余%d次机会\n", count);
		if(count == 0){
			printf("次数已用完");
		}
		
	}
	return 0;
}
  • 2.某出租车公司规定6:00-23:00打车,3km之内是8元,超过3km的话每公里多收3元。23:00-次日6:00打车,3km之内是10元,超过3km的话每公里多收3.5元。输入时间段和公里数,求车费共多少元
#include <stdio.h>
int main(){
	int time;
	float distance, money;
	while(1){
		printf("请输入时间和行驶公里数:");
		scanf("%d %f", &time, &distance);
		if(time < 0 || distance < 0){
			printf("输入有误!, 请重新输入!\n");
			continue;
		}	
		if(time >= 6 && time < 23){
			if(distance <= 3){
				money = 8 * distance;
			}
			else {
				money = 3 * 8 + (distance - 3) * (8 + 3);
			}
		}
		else {
			if(distance <= 3){
				money = 10 * distance;
			}
			else {
				money = 3 * 10 + (distance - 3) * (10 + 3.5);
			}
		}
		printf("%d点行驶了%.3f公里,支付%.3f元", time, distance, money);
		break;
	}
	return 0;
}

3.8网络第4场 16:10-17:10

  • 1.现有10名同学的成绩,求最高分是多少,并计算最高分出现了多少次
#include <stdio.h>
int main(){
	int score[10] = {89, 90, 78, 95, 91, 95, 95, 88, 65, 80};
	int max = score[0], count = 0, i;
	for(i = 1; i < 10; i++){
		if(score[i] > max){
			max = score[i];
		}
	} 
	for(i = 0; i < 10; i++){
		if(score[i] == max){
			count ++;
		}
	}
	printf("最高分为%d, 出现了%d次", max, count);
	return 0;
}
  • 2.输入正整数n,统计1-n的数中一共出现了多少次8
#include <stdio.h>
int main(){
	int n, count = 0, i, data, a;
	printf("请输入n的值:");
	scanf("%d", &n);
	for(i = 1; i <= n; i++){
		data = i;
		while(data){
			a = data%10;
			if(a == 8){
				count++;
			}
			data /= 10;
		}
	}
	printf("一共出现了%d次8", count);
	return 0;
}


#include <stdio.h>
int cal_eight(int);
int main(){
	int n, count, a;
	printf("请输入n的值:");
	scanf("%d", &n);
	count = cal_eight(n);
	printf("一共出现了%d次8", count);
	return 0;
}

int cal_eight(int num){
	int i, data, a, count = 0;
	for(i = 1; i <= num; i++){
		data = i;
		while(data){
			a = data % 10;
			if(a == 8){
				count++;
			}
			data /= 10;
		}
	}
	return count;
}

3.8软件第1场 8:00-9:00

  • 1.求运费
  • 2.输入字符串,统计大写字母、小写字母和数字的个数
#include <stdio.h>
#define MAX 100
int main(){
	char s[MAX], t;
	int i = 0, num_upper = 0, num_lower = 0, num_digit = 0;
	printf("请输入字符串:");
	gets(s);
	while(s[i] != '\0'){
		t = s[i];
		if(t >= 'A'&& t <= 'Z'){
			num_upper++;
		}
		else if(t >= 'a'&&t <= 'z'){
			num_lower++;
		}
		else if(t >= '0'&&t <= '9'){
			num_digit++;
		}
		i++;
	}
	printf("大写字母%d个, 小写字母%d个, 数字字符%d个", num_upper, num_lower, num_digit);
	return 0;
}

3.8软件第2场 11:00-12:00

  • 1.调用函数求平均年龄
#include <stdio.h>
float cal_avg_age(int s[], int n){
	int i;
	float avg = 0;
	for(i = 0; i < n; i++){
		avg += s[i];
	}
	avg /= n;
	return avg;
}
int main(){
	int age[6] = {25, 50, 31, 37, 19, 20}, n = 6;
	float avg_age;
	avg_age =  cal_avg_age(age, n);
	printf("平均年龄为%.2f", avg_age);
	return 0;
}
  • 2.判断输入的密码是否正确
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
	char user_pwd[MAX], pwd[MAX] = "hello@904";
	printf("请输入用户密码:");
	gets(user_pwd);
	if(strcmp(user_pwd, pwd) == 0){
		printf("密码正确, 登录成功!");
	}
	else{
		printf("密码错误, 登录失败!");
	}
	return 0;
}

3.8软件第3场 13:00-14:00

  • 1.定义一个3行3列的数组,求每行的最大值
#include <stdio.h>
#define ROW 3
#define COL 3
int main(){
	int a[ROW][COL] = {4, 12, 5, 6, 7, 0, 9, 2, 13}, max[ROW] = {0};
	int i, j;
	for(i = 0; i < ROW; i++){
		max[i] = a[i][0];
		for(j = 1; j < COL; j++){
			if(a[i][j] > max[i]){
				max[i] = a[i][j];
			}
		}
		printf("第%d行的最大值为%d\n", i + 1, max[i]);
	}
	return 0;
}
  • 2.输入数字n,输出n行"*",第1行输出1个,第2行输出2个,以此类推,用func函数实现
#include <stdio.h>
#include <stdlib.h>
void print_char(int m){
	int i, j;
	for(i = 1; i <= m; i++){
		for(j = 1; j <= i; j++){
			printf("*");
		}
		printf("\n");
	}
}
int main(){
	int i, j, n;
	printf("请输入正整数n的值:");
	scanf("%d", &n);
	if(n <= 0){
		printf("数值异常!\n");
		exit(-1);
	}
	print_char(n);
	return 0;
}

3.8软件第4场 15:00-16:00

  • 1.某商场打折促销,购物满300元不足500元享3%折扣,满500元享5%折扣。输入消费金额,计算打折后应付款
#include <stdio.h>
int main(){
	float amount, money, discount;
	printf("请输入消费金额:");
	scanf("%f", &amount);
	if(amount > 0&&amount < 300){
		discount = 0;
	}
	else if(amount >= 300&&amount < 500){
		discount = 0.03;
	}
	else{
		discount = 0.05;
	}
	money = amount * (1 - discount);
	printf("消费金额为%.2f,付款%.2f", amount, money);
	return 0;
}
  • 2.判断字符串中的字母个数,将所有字母都转换成大写字母并输出
#include <stdio.h>
#define MAX 100
int main(){
	char s[MAX], t;
	int i = 0, count = 0, upper, lower;
	printf("请输入字符串的值:");
	gets(s);
	while(s[i] != '\0'){
		t = s[i];
		upper = t >= 'A'&&t <= 'Z';
		lower = t >= 'a'&&t <= 'z';
		if(upper||lower){
			count++;
			if(lower){
				s[i] -= 32;
			}
		}
		i++;
	}
	printf("字母个数为%d, 字符串内容为%s", count, s);
	return 0;
}
  • 3.在长度为8的一维数组中打印奇数元素的最大值,如果没有奇数就打印"未找到奇数元素"
#include <stdio.h>
#define LEN 8
int main(){
	int arr[LEN] = {8, 6, 4, 52, 6, 59, 44, 17};
	int t, i = 0, count = 0, j,  max;
	for(i = 0; i < LEN; i++){
		if(arr[i] % 2){
			count++;
			max = arr[i];
			break;
		}
	}
	if(count == 0){
		printf("未找到奇数元素");
	}
	else{
		for(j = i + 1; j < LEN; j++){
			t = arr[j];
			if(t % 2&&t > max){
				max = t;
			}
		}
		printf("奇数元素的最大值为%d", max);
	}
	return 0;
}
  • 4.自定义函数进行猜数。如果输入的数过大就打印"猜大了",输入的数过小就打印"猜小了",否则显示"猜对了"
#include <stdio.h>
void guess(int m, int n){
	if(m > n){
		printf("猜大了!");
	}
	else if(m < n){
		printf("猜小了");
	}
	else{
		printf("猜对了");
	}
}
int main(){
	int sys_num = 7, guess_num;
	printf("请输入您猜的数:");
	scanf("%d", &guess_num);
	guess(guess_num, sys_num);
	return 0;
}

3.8软件第5场 17:00-18:00

  • 1.判断a是否为奇数,是的话输出a的个位数
#include <stdio.h>
int main(){
	int a, b;
	printf("请输入a的值:");
	scanf("%d", &a);
	if(a%2){
		b = a % 10;
		printf("%d是奇数, 个位数为%d", a, b);
	}
	else{
		printf("%d不是奇数", a);
	}
	return 0;
}
  • 2.输入字符c,判断c是大写字母、小写字母、数字字符还是其他字符
#include <stdio.h>
int main(){
	char c;
	printf("请输入字符的值:");
	scanf("%c", &c);
	if(c >= 'A'&&c <= 'Z'){
		printf("%c是大写字母", c);
	}
	else if(c >= 'a'&&c <= 'z'){
		printf("%c是小写字母", c);
	}
	else if(c >= '0'&&c <= '9'){
		printf("%c是数字字符", c);
	}
	else{
		printf("%c是其他字符", c);
	}
	return 0;
}
  • 3.现有分段函数,当x<=0时,y=x+6;当0<x<10时,y=3x+6;当x>=10时,y=3x-6。输入x的值求对应y的值
#include <stdio.h>
int main(){
	float x, y;
	printf("请输入x的值:");
	scanf("%f", &x);
	if(x <= 0){
		y = x + 6;
	}
	else if(x < 10){
		y = 3 * x + 6;
	}
	else{
		y = 3 * x - 6;
	}
	printf("当x=%.2f时, y=%.2f", x, y);
	return 0;
}
  • 4.三名裁判分别对三位运动员打分,统计每个运动员的平均分
#include <stdio.h>
#define ROW 3
#define COL 3
int main(){
	float score[ROW][COL], avg_score[ROW];
	int i, j;
	printf("请输入3名运动员的得分情况(3*3):\n");
	for(i = 0; i < ROW; i++){
		for(j = 0; j < COL; j++){
			scanf("%f", &score[i][j]);
		}
	}
	for(i = 0; i < ROW; i++){
		avg_score[i] = 0;
		for(j = 0; j < COL; j++){
			avg_score[i] += score[i][j];
		}
		avg_score[i] /= COL;
		printf("第%d名运动员的平均分为%.2f\n", i + 1, avg_score[i]);
	}
	return 0;
}

3.9网络第1场 8:40-9:40

  • 2.输入字符串,分别计算元音字母的个数,不区分大小写,用switch结构实现
#include <stdio.h>
#define MAX 100
int main(){
	char s[MAX];
	int i = 0, count_a = 0, count_e = 0, count_i = 0, count_o = 0, count_u = 0;
	printf("请输入一个字符串:");
	gets(s);
	while(s[i] != '\0'){
		switch(s[i]){
			case 'A':
			case 'a':
				count_a++;
				break;
			case 'E':
			case 'e':
				count_e++;
				break;
			case 'I':
			case 'i':
				count_i++;
				break;
			case 'O':
			case 'o':
				count_o++;
				break;
			case 'U':
			case 'u':
				count_u++;
				break;
		}
		i++;
	}
	printf("a e i o u的个数为:%d %d %d %d %d", count_a, count_e, count_i, count_o, count_u);
	return 0;
}

3.9网络第2场 10:50-11:50

  • 1.输入一串字符,删除其中重复的字符,保证每个字符只输出1次
// "hellokjcm"  只需要将第2个"l"后方的"okjcm"依次往前移动即可
// "heckjclmnp"  只需要将第2个"c"后方的"lmnp"依次往前移动即可
// "heckjcclmnp" 需要将第2个"c"后方的"clmnp"依次往前移动后,还要再将最后1个c后方的"clmnp"依次往前移动 
// "hellokjclmoee"  第1个"l"后方的所有字符往前移动无法满足需求,因为后面还有一个"l",它后方的"moee"也需要依次往前移动
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
	char s[MAX];
	int i, j, k, length;
	printf("请输入字符串的内容:");
	gets(s);
	length = strlen(s);
	for(i = 0; i < length - 1; i++){
		for(j = i + 1; s[j] != '\0'; j++){
			k = j;
            // 只要k指向的字符和i指向的字符一致,那就将k后方的所有字符依次往前移动一个单位
			if(s[k] == s[i]){
				while(s[k] != '\0'){
					s[k] = s[k + 1];
					k++;
				}
				length--;
			}
            // 如果重复字符后方所有字符往前移动后,j指向的字符依然和i相同(即有连续两个相同的字符),如果直接执行for循环中的"j++",那这个重复字符就无法被删除。所以先执行"j--"后执行for循环中的"j++",保证了j的位置没变,继续删除重复字符
			if(s[j] == s[i]){
				j--;
			}	
		}
	}
	printf("删除之后的字符串为:");
	puts(s);
	return 0;
}

#include <stdio.h>
#define MAX 1000

int main(int argc, const char * argv[]) {
    // insert code here...
    char ch1[MAX], ch2[MAX], c;  // ch1存储输入的字符串  ch2存储删除重复字符后的字符串  c为ch1中字符的值
    int i, j = 0, index, cnt[256] = {0};
    printf("请输入字符串ch1:");
    gets(ch1);
    for (i = 0; ch1[i] != '\0'; i++) {
        c = ch1[i];
        index = (int)c;  // 将c的ASCII码值作为下标
        if (cnt[index] == 0) {
            cnt[index]++;
            ch2[j++] = c;
        }
    }
    ch2[j] = '\0';
    printf("去除重复字符串后的值为:");
    puts(ch2);
    return 0;
}

  • 2.收水费的规则如下:第1个月的用水量不超过10立方米的话,每立方米收费5元,超过的部分每立方米收费6元。如果第1个月用水量高于15立方米,则第2个月每立方米收费6元,否则按第1个月的收费方式计算。输入每个月的用水数量,输出水费
#include <stdio.h>
int main(){
	float water[3] = {0, 16, 20}, money_1 = 0, money_2 = 0, money;
	if(water[1] <= 10){
		money_1 += water[1] * 5;
	}
	else{ // water[1] > 10
		money_1 += 10 * 5 + (water[1] - 10) * 6;
		if(water[1] <= 15){ // 10<water[1]<=15
			if(water[2] <= 10){
				money_2 += water[2] * 5; 
			}
			else{
				money_2 += 10 * 5 +(water[2] - 10) * 6;
			}
		}
		else{ // water[1] > 15
			money_2 += water[2] * 6;
		}
	}
	money = money_1 + money_2;
	printf("水费为%.2f元", money); 
	return 0;
} 

3.9网络第3场 14:00-15:00

  • 1.输入一个三位数num,如果能找到多组连续的整数,这些整数相加的和为num,请输出项数最多的一组连续整数。如输入102,3+4+5+6+7+8+9+10+11+12+13+14=102,24+25+26+27=102, 33+34+35=102。第一种情况项数更多,所以输出3 4 5 6 7 8 9 10 11 12 13 14
#include <stdio.h>
int main(){
	int num, i, j, k, sum, mid;
	int flag = 0;
	printf("请输入一个整数:");
	scanf("%d", &num);
	mid = num / 2;
	for(i = 1; i <= mid; i ++){
		sum = i;
		for(j = i + 1; j <= mid + 1; j++){
			sum += j;
			if(sum == num){
				flag = 1;
				for(k = i; k <= j; k++){
					printf("%d ", k);
				}
//				printf("\n");
				break;
			}	
		}
		if(flag){
			return 0;
		}
	}
	printf("无法分解");
	return 0;
}
  • 2.当温度高于38摄氏度时为高温天气。请输入多天的气温,直到输入0摄氏度为止,输出高温占比以及最高温度
#include <stdio.h>
int main(){
	float temperature, rate;
    // count表示高温的个数,total表示温度总的个数
	int count = 0, total = 0;
	printf("请输入温度,直到输入0摄氏度为主:");
	scanf("%f", &temperature);
	while(temperature != 0){
		if(temperature > 38){
			count++;
		}
		scanf("%f", &temperature);
		total++;
	}
	total++;  // 将最后输入的0摄氏度加上
	rate = (count*1.0/total)*100;
	printf("总共输入了%d个温度,其中高温占了%d个,占比为%.2f%%", total, count, rate);
	return 0;
}

3.9网络第4场 16:10-17:10

  • 1.输入一串数字字符,若含其他字符则提示输入错误并退出程序,否则输出数字字符的个数
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
int main(){
	char ch[MAX];
	int i = 0, count = 0;
	printf("请输入一串数字字符:\n");
	gets(ch);
	while(ch[i] != '\0'){
		if(ch[i] < '0'||ch[i] > '9'){
			printf("输入错误,强制退出...");
			exit(-1);
		}
		else{
			count++;
		}
		i++;
	}
	printf("数字字符共%d个", count);
	return 0;
}
  • 2.输入每天运动的步数(输入-1结束),输出运动的天数和平均步数。若每天不低于8000步表示达标,请计算达标率是多少
#include <stdio.h>
int main(){
	int num_step, day = 0, day_dst = 0;
	float rate = 0, avg_step = 0;
	printf("请输入当天运动的步数(输入-1结束):");	
	scanf("%d", &num_step);
	while(num_step != -1){
		if(num_step < 0){
			printf("数据非法,请重新输入运动步数:");
			scanf("%d", &num_step);
			continue;
		}
		else{
			avg_step += num_step;
			day++;
			if(num_step >= 8000){
				day_dst++;
			}
		}
		printf("继续输入运动的步数:");
		scanf("%d", &num_step);
	}
	// 如果刚开始直接输入-1,day=0不能作为除数
	if(day==0){
		avg_step = 0;
		rate = 0;
	}
	else{
		avg_step /= day;
		rate = day_dst * 1.0 / day * 100; 
	}
	printf("day=%d, avg_step=%.2f, rate=%.2f%%", day, avg_step, rate);
	printf("\n结束程序!");
	return 0;
}

3.10网络第1场 8:40-9:40

  • 1.输入字符串,输出其中的数字字符。例如输入25*6*6#,输出"2566"
#include <stdio.h>
#define MAX 100
int main(){
	char ch[MAX];
	int i = 0;
	printf("请输入一串字符:");
	gets(ch);
	while(ch[i] != '\0'){
		if(ch[i] >= '0'&&ch[i] <= '9'){
			putchar(ch[i]);
		}
		i++;
	}
	return 0;
}
  • 2.输入若干整数,输出其中奇数各位数的和,偶数各位数的乘积,直到输入0结束
nt main(){
	int num, sum, multy, b, t;
	printf("请输入若干整数(输入0结束):");
	scanf("%d", &num);
	while(num != 0){
		t = num;
		sum = 0, multy = 1;
		while(t){
			b = t % 10;
			if(b % 2){
				sum += b;
			}
			else{
				multy *= b;
			}
			t /= 10;
		}
		printf("%d各奇数位的和为%d, 各偶数位的积为%d\n请继续输入整数:", num, sum, multy);
		scanf("%d", &num);
	}
	printf("end...\n");
	return 0;
}

3.10网络第2场 10:50-11:50

  • 1.输入一个3行4列的数组,求平均值
#include <stdio.h>
#define ROW 3
#define COL 4
int main(){
	int a[ROW][COL], i, j, sum = 0;
	float avg;
	printf("请输入3行4列数组的值:\n");
	for(i = 0; i < ROW; i++){
		for(j = 0; j < COL; j++){
			scanf("%d", &a[i][j]);
			sum += a[i][j];
		}
	}
	avg = sum * 1.0 / (ROW * COL);
	printf("avg=%.2f", avg);
	return 0;
}
  • 2.输入5个正整数,判断是否是回文数并输出
#include <stdio.h>
#define MAX 100
int main(){
        // i用作输入5个数的循环变量, j用作数组a的下标, 数组a用作存储num每一位的数, t用于暂存num的值
	int num, i, j, k, t, a[MAX] = {0};
	printf("请输入5个正整数:");
	for(i = 0; i < 5; i++){
		scanf("%d", &num);
		j = 0;
		t = num;
		while(t){
			a[j] = t % 10;
			j++;
			t /= 10;
		}
		for(k = 0; k < j / 2; k++){  // k用作对称比较数据的下标
			if(a[k] != a[j - k - 1]){
				break;
			}
		}
		if(k == j / 2){  // for循环正常退出时执行
			printf("%d是回文数\n", num);
		}
	}	
	return 0;
}

3.10网络第3场 14:00-15:00

  • 1.输入字符串,删除其中的空格字符并输出新的字符串。如"AB C",输出"ABC"
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
	char s[MAX];
	int i = 0, j, length;
	printf("请输入字符串:");
	gets(s);
	length = strlen(s);
	while(s[i] != '\0'){  // i指向索引为length-1的位置'\0'时循环退出
		if(s[i] == ' '){
			for(j = i + 1; j < length; j++){  // 该循环用于将空格字符后的所有字符往前移动, 但索引为length的'\0'没有往前移动
				s[j - 1] = s[j];
			}
			length--;
			if(s[i] == ' '){  // 如果有2个或2个以上连续的空格存在, 此时即使第1个空格之后的所有字符往前移动了,但i指向的位置依然是空格,所以在执行i自增之前先做一次自减的操作, 以保证后续空格也被消除
				i--;
			}
		}
		i++;
	}
	s[length] = '\0'; // 将length位置处的字符赋值为'\0'
	puts(s);
	return 0;
}

#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
	char s[MAX];
	int i = 0, j, length;
	printf("请输入字符串:");
	gets(s);
	length = strlen(s);
	while(s[i] != '\0'){  // i指向索引为length-1的位置'\0'时循环退出
		if(s[i] == ' '){
			for(j = i + 1; j <= length; j++){  // 该循环用于将空格字符后的所有字符往前移动, 含索引为length的'\0'
				s[j - 1] = s[j];
			}
			length--;
			if(s[i] == ' '){  // 如果有2个或2个以上连续的空格存在, 此时即使第1个空格之后的所有字符往前移动了,但i指向的位置依然是空格,所以在执行i自增之前先做一次自减的操作, 以保证后续空格也被消除
				i--;
			}
		}
		i++;
	}
	puts(s);
	return 0;
}
  • 2.输入7个带小数位的成绩,去掉最大值和最小值,求出剩余5个数的平均值
#include <stdio.h>
int main(){
	float score[7], sum = 0, avg;
	int i, max = 0, min = 0;
	printf("请输入7个带小数位的成绩:");
	for(i = 0; i < 7; i++){
		scanf("%f", &score[i]);
	}
	max = min = 0;
	for(i = 1; i < 7; i++){
		if(score[i] > score[max]){
			max = i;
		}
		if(score[i] < score[min]){
			min = i;
		}
	}
	for(i = 0; i < 7; i++){
		if(max != i&&min != i){
			sum += score[i];
		}
	}
	avg = sum / 5;
	printf("avg=%.2f", avg);	
	return 0;
}

3.11网络第1场 8:40-9:40

  • 1.加权平均数相关点
  • 2.输入一个整数n,输入一组除数,输出可以整除的数,除数输入0结束
#include <stdio.h>
#define MAX 100
int main(){
	int n, div, a[MAX],  i = 0, j;
	printf("请输入n的值:");
	scanf("%d", &n);
	printf("接下来输入一组除数,直到0停止:");
	scanf("%d", &div);
	while(div != 0){
		if(n % div == 0){
			a[i++] = div;
		}
		scanf("%d", &div);
	}
	if(i == 0){
		printf("不存在可整除的除数!");
		return -1;
	}
	printf("能被整除的除数有:");
	for(j = 0; j < i; j++){
		printf("%d ", a[j]);
	}
	return 0;
} 

3.11网络第2场 10:50-11:50

  • 1.买票问题:成人票800元,儿童票300元。现有团购优惠(儿童不计入团购人数)三人以下不享受优惠;三人到十五人(含3、15),成人享受每人80元优惠;十五人以上,若包含儿童,免除一名儿童收费,若没有儿童,每位成人再享受二十元优惠。输入总人数和儿童数,输出支付价格。
#include <stdio.h>
int main(){
	int adult, child, total, money; 
	printf("请分别输入成人和儿童的数量:");
	scanf("%d %d", &adult, &child);
	while(1){
		if(adult < 0||child < 0){
			printf("输入数据异常!请重新输入...\n");
			scanf("%d %d", &adult, &child);
			continue;
		}
		total = adult + child;
		if(total >= 0&&total < 3){
			money = adult * 800 + child * 300;
		}
		else if(total >= 3&&total <= 15){
			money = adult * 720 + child * 300;
		}
		else if(total > 15){
			if(child >= 1){
				money = adult * 800 + (child - 1) * 300;
			}
			else{
				money = adult * 780;
			}
		}
		break;
	}
	printf("money=%d", money);
	return 0;
}
  • 2.输入A和B两个数组,取出A中有但B中没有的,放到C数组里,输出C
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
	char a[MAX], b[MAX], c[MAX];
	int length_a, length_b, i, j, k = 0;
	printf("请输入字符串a的值:");
	gets(a);
	printf("请输入字符串b的值:");
	gets(b);
	length_a = strlen(a);
	length_b = strlen(b);
	for(i = 0; i < length_a; i++){
		for(j = 0; j < length_b; j++){
			if(a[i] == b[j]){
				break;
			}
		}
		if(j == length_b){
			c[k++] = a[i];
		}
	}
	c[k] = '\0';
	printf("数组a中有但数组b中没有的字符为:%s", c);
	return 0;
}

3.11网络第3场 14:00-15:00

  • 1.输入一个长度大于3的字符串,在第3个字符后边加一个"#",然后输出
#include <stdio.h>
#include <string.h> 
#define MAX 1000
int main(){
	char s[MAX];
	int i, length;
	printf("请输入长度大于3的字符串:");
	gets(s);
	while(1){
		length = strlen(s);
		if(length <= 3){
			printf("长度不合法, 请重新输入!\n");
			gets(s);
			continue;
		}
		for(i = length; i >= 3; i--){
			s[i + 1] = s[i];
		}
		s[i + 1] = '#';
		break;
	}
	puts(s);
	return 0;
}
  • 2.输入一个整数n,输出个位、十位和百位加和等于n的三位数。例如输入2,输出101、110、200,共3个
#include <stdio.h>
int main(){
	int n, i;
	printf("请输入整数n的值:");
	scanf("%d", &n);
	for(i = 100; i <= 999; i++){
		if(i%10 + i/10%10 + i/100 == n){
			printf("%d ", i);
		}
	}
	return 0;
}

3.11网络第4场 16:10-17:10

  • 1.现有小明6门课的成绩,求他的平均成绩。若不低于60分为及格,计算小明及格和不及格的门数
#include <stdio.h>
#define LEN 6
int main(){
	int i, a[LEN], count = 0;
	float avg = 0;
	printf("请输入6门课成绩:");
	for(i = 0; i < LEN; i++){
		scanf("%d", a + i);
		avg += a[i];
		if(a[i] >= 60){
			count++;
		}
	}
	avg /= 6;
	printf("平均分:%.2f, 及格:%d门, 不及格:%d门", avg, count, 6-count);
	return 0;
}
  • 2.输入第一个正整数,然后输入一个运算符(只能加减乘除任意一个),再输入一个正整数,求出它们的运算结果
#include <stdio.h>
int main(){
	int a, b;
	char opr;
	float ret;
	while(1){
		printf("依次输入正整数 运算符 正整数:");
		scanf("%d %c %d", &a, &opr, &b);
		if(a <= 0||b<= 0||(opr != '+'&&opr != '-'&&opr != '*'&&opr != '/')){
			printf("输入数据非法,请重新输入...\n");
			continue;
		}
		if(opr == '+'){
			ret = a + b;
		}
		else if(opr == '-'){
			ret = a - b;
		}
		else if(opr == '*'){
			ret = a * b;
		}
		else if(opr == '/'){
			ret = a /  b;
		}
		break;
	}
	printf("%d%c%d=%.2f", a, opr, b, ret);
	return 0;
}

3.12网络第1场 8:40-9:40

  • 1.输入一个正整数m,找到能整除m且十位数是5的所有三位数并放到一个数组中
#include <stdio.h>
#define MAX 900
int main(){
	int m, i, j, k = 0, a[MAX] = {0};
	printf("请输入m的值:");
	scanf("%d", &m);
	for(i = 100; i <= 999; i++){
		j = i / 10 % 10;
		if(i % m == 0&&j == 5){
			a[k++] = i;
		}
	}
	for(i = 0; i < k; i++){
		printf("%d ", a[i]);
	}
	return 0;
}
  • 2.一个商场中有12个柜子,3行4列排列。柜子的状态为0表示空,1表示使用,-1表示故障。请输出柜子的使用率和故障率
#include <stdio.h>
#define ROW 3
#define COL 4
int main(){
	int i, j, s[ROW][COL] = {1, 0, 0, 1, 1, 1, -1, -1, 0, 0, -1, 1};
	int count_use = 0, count_error = 0;
	float pct_use, pct_error;
	for(i = 0; i < ROW; i++){
		for(j = 0; j < COL; j++){
			if(s[i][j] == 1){
				count_use++;
			}
			if(s[i][j] == -1){
				count_error++;
			}
		}
	}
	pct_use = count_use*1.0/(ROW*COL)*100;
	pct_error = count_error*1.0/(ROW*COL)*100;
	printf("柜子的使用率为%.2f%%, 故障率为%.2f%%", pct_use, pct_error);
	return 0;
}

3.12网络第2场 10:50-11:50

  • 1.验证密码:给定一个密码,用户输入字符串与密码进行比较,完全一样则输出密码正确,否则打印密码错误。
#include <stdio.h>
#include <string.h>
#define MAX 100
int main(){
	char pwd[MAX] = "correct@!Pwd", user_pwd[MAX];
	int i = 0, len_userpwd;
	printf("请输入用户密码:");
	gets(user_pwd);
	len_userpwd = strlen(user_pwd);
	while(user_pwd[i] != '\0'){
		if(user_pwd[i] == pwd[i]){
			i++;
		}
		else{
			break;
		}
	}
	if(i < len_userpwd){
		printf("密码错误!");
	}
	else{
		printf("密码正确");
	}
	return 0;
}

3.12网络第3场 14:00-15:00

  • 1.输入一组正整数,直到输入0停止。统计输入数据的个数,并将这组数逆序输出
#include <stdio.h>
#define MAX 1000
int main(){
	int num, a[MAX], count = 0, i = 0;
	printf("请输入若干正整数:");
	scanf("%d", &num);
	while(num != 0){
		if(num > 0){
			a[i++] = num;
			count++;
		}
		else{
			printf("请输入正整数!\n");
		}
		scanf("%d", &num);
	}
	printf("共输入了%d个数\n", count);
	for(i = count - 1; i >= 0; i--){
		printf("%d ", a[i]);
	}
	return 0;
} 
  • 2.输入一串长度大于1的字符串,长度是奇数就把中间的字符改成*,长度为偶数就在中间插入一个*
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main(){
	char s[MAX];
	int i, length;
	printf("请输入字符串(长度大于1):");
	gets(s);
	while(strlen(s) <= 1){
		printf("长度不合格, 请重新输入!\n");
		gets(s);
	}
	length = strlen(s);
	if(length%2==0){
		for(i = length; i >= length/2; i--){
			s[i+1] = s[i];
		}
		s[i+1] = '*';
		length++;
	}
	else{
		s[length/2] = '*';
	}
	printf("修改后的字符串值为:");
	puts(s);
	return 0;
}
// hellworld length = 9 mid = 4
// helloworldee length = 12 mid = 6
posted @ 2025-03-09 09:26  pycoder_666  阅读(455)  评论(0)    收藏  举报