大一初学C时遇到比较难的题目

  1. 键盘输入字符串,遇‘#’结束,分别统计字母、数字和其它字符个数。
#include <stdio.h>
#include<string.h>
int main()
{
	char str[100];
	char c;
	scanf("%s", str);
	int letter = 0, space = 0, figure = 0, character = 0, i;
	for (i = 0; (c = str[i]) != '#'; i++)
	{
		if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
		{
			letter = letter + 1;
		}
		else if (c == ' ')
		{
			space = space + 1;
		}
		else if (c >= '0' && c <= '9')
		{
			figure = figure + 1;
		}
		else
		{
			character = character + 1;
		}

	}
	printf("字母数:%d,空格数:%d,数字数:%d,其它字符:%d", letter, space, figure, character);
	return 0;
}
  1. 编写程序,要求从键盘输入成绩,输出对应的等级(100分为A,90-99为B,80-89为C,70-79为D,60-69为E,小于60为F)。
#include<stdio.h>
int main()
{
	double a,b;
	scanf("%lf",&a);
	switch (int(a / 10))
	{
		case 10: printf("A"); break;
		case 9: printf("B"); break;
		case 8: printf("C"); break;
		case 7: printf("D"); break;
		case 6: printf("E"); break;
		default:
			printf("F");
	}
	return 0;
}
  1. 设计一个简单的计算机程序,用户输入运算数和四则运算符(+、-、*、/),输出计算结果。
#include<stdio.h>
int main()
{
	double a,b;
	char ch;
	scanf("%lf %lf/n",&a,&b);
	getchar();
	ch = getchar();
	switch (ch)
	{
		case '+': printf("%5.2lf",a + b); break;
		case '-': printf("%5.2lf",a - b); break;
		case '*': printf("%5.2lf",a * b); break;
		case '/': printf("%5.2lf",a / b); break;
	}
	return 0;
}
  1. 用冒泡排序法对10个整数排序。10个整数用scanf函数输入。
#include <stdio.h>
int main()
{
	int a[10], b, c, i;
	for (i = 0; i <= 9; i++)
	{
		scanf("%d", &a[i]);
	}
	for (i = 0; i <= 8; i++)
	{
		for (b = 0; b <= 8 - i; b++)
		{
			if (a[b] < a[b + 1])
			{
				c = a[b];
				a[b] = a[b + 1];
				a[b + 1] = c;				
			}
		}
	}
	for (i = 0; i <= 9; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}
  1. 编写一个程序,包括主函数和如下子函数。(1) 输入10个无序的整数;(2) 用起泡方法从大到小排序;(3) 要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。
#include <stdio.h>
#include<string.h>
#include<math.h>
void entrance(int w[]);
void ranking(int p[]);
void search(int c, int b[]);
int main()
{
	int a[10];
	entrance(a);
	ranking(a);
	search(9, a);
	return 0;
}
void entrance(int w[])
{
	int i;
	for (i = 0; i <= 9; i++)
	{
		scanf("%d", &w[i]);
	}
}
void ranking(int p[])
{
	int i1, i2, t;
	for (i1 = 0; i1 <= 8; i1++)
	{
		for (i2 = 0; i2 <= 9 - i1; i2++)
		{
			if (p[i2] < p[i2 + 1])
			{
				t = p[i2];
				p[i2] = p[i2 + 1];
				p[i2 + 1] = t;
			}
		}
	}
	for (i1 = 0; i1 <= 9; i1++)
	{
		printf("%d  ", p[i1]);
	}
	printf("\n");
}
void search(int c, int b[])
{
	int low, high, mid, m[11], q, l;
	low = 9;
	high = 0;
	while (low >= high)
	{
		mid = (low + high) / 2;
		if (c == b[mid])
		{
			printf("第%d个", mid);
			return;
		}
		else if (b[mid] > c)
		{
			high = mid + 1;
		}
		else
		{
			low = mid - 1;
		}
	}
	l = low;
	for(low; low <= 9; low++)
	{
		m[low + 2] = b[low + 1];
	}
	for (q = 0; q <= l; q++)
	{
		m[q] = b[q];
	}
	m[l + 1] = c;
	for (q = 0; q <= 10; q++)
	{
		printf("%d  ", m[q]);
	}
}
  1. 用冒泡排序法对10个整数排序。10个整数用scanf函数输入。
#include <stdio.h>
int main()
{
	int a[10], b, c, i;
	for (i = 0; i <= 9; i++)
	{
		scanf("%d", &a[i]);
	}
	for (i = 0; i <= 8; i++)
	{
		for (b = 0; b <= 8 - i; b++)
		{
			if (a[b] < a[b + 1])
			{
				c = a[b];
				a[b] = a[b + 1];
				a[b + 1] = c;				
			}
		}
	}
	for (i = 0; i <= 9; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}
  1. 打开一个已经存放了一篇英文的文本文件“d:\text\page.txt”,把其中的包含数字字符按在文章中出现的先后顺序在屏幕上输。例如:文件包含文字“iqwe23oise384kas9wi8jd6lsk4”,输出“2 3 3 8 4 9 8 6 1 4 ”。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	int i, k;
	char ch[100];
	FILE* fp;
	fp = fopen("C:\\C\\a.txt","r");
	if (fp != NULL)
	{
		fscanf(fp, "%s", &ch);
	}
	for (i = 0; i <= strlen(ch); i++)
	{
		if (ch[i] >= '0' && ch[i] <= '9')
		{
			printf("%c   ", ch[i]);
		}
	}
	fclose(fp);
	return 0;
}
  1. 编程序求100以内的素数,分别将它输出到显示器和x.txt文件中,要求每行5个数。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int judge(int n)
{
	int i;
	int t = 1;
	for (i = 2; i < n; i++)
	{
		if (n % i == 0)
		{
			t = 0;
			break;
		}
	}
	return t;
}
int main()
{
	int i, t = 1;
	FILE* fp;
	fp = fopen("a.txt", "w");
	if (fp != NULL)
	{
		for (i = 2; i < 100; i++)
		{
			if (t == 6)
			{
				printf("\n");
				fprintf(fp, "\n");
				t = 1;
			}
			if (judge(i) == 1)
			{
				printf("%d ", i);
				fprintf(fp, "%d ", i);
				t++;
			}
		}
		fclose(fp);
	}
	else
	{
		exit(0);
	}
	return 0;
}
  1. 有20个选手参加“超女”比赛,每个选手都有7名评委对其打分。任意一个选手的得分是这样计算的:在7名评委的打分中,去掉一个最高分,去掉一个最低分,剩下5名评委打分的平均值为该选手最后得分。根据该场景,设计函数:
    int xuanshoudefen(float (*p)[7],float defen[],int n)该函数第一个参数接收7名评委对选手的打分,第二个参数存放选手的平均分,第三个参数接收共有几个选手。
    主函数main()输入7名评委对2个选手的打分,调用 xuanshoudefen(float (*p)[7],float defen[],int n)函数,输出每位选手的成绩。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
void xuanshoudefen(float(* p)[7], float defen[], int n);
int main()
{
	int i, k;
	float a[2][7];
	float(*p)[7];
	p = a;
	float defen[2];
	for (i = 0; i <= 1; i++)
	{
		for (k = 0; k <= 6; k++)
		{
			scanf("%f", &a[i][k]);
		}
		printf("\n");
	}
	xuanshoudefen(p, defen, 2);
	for (i = 0; i <= 1; i++)
	{
		printf("%5.2f\n", defen[i]);
	}
	return 0;
}
void xuanshoudefen(float(* p)[7], float defen[], int n)
{
	int i, k, sum, max, min;
	float avg; 
	for (k = 0; k <= n - 1; k++)
	{
		sum = 0;
		for (i = 0; i <= 6; i++)
		{
			sum = sum + *(*(p + k) + i);
		}
		max = *(*(p + k) + 0);
		min = *(*(p + k) + 0);
		for (i = 0; i <= 5; i++)
		{
			
			if (*(*(p + k) + i + 1) > max)
				max = *(*(p + k) + i + 1);
			if (*(*(p + k) + i + 1) < min)
				min = *(*(p + k) + i + 1);
		}
		avg = (sum - min - max) * 1.0 / 5;
		defen[k] = avg;
	}
}
  1. 用指针的方式实现,3×3矩阵转置。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int main() 
{
	int a[3][3];
	int* pa[3];
	int i, j;
	for (i = 0; i <= 2; i++)
	{
		pa[i] = a[i];
	}
	for (i = 0; i <= 2; i++)
	{
		for (j = 0; j <= 2; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	for (j = 0; j <= 2; j++)
	{
		for (i = 0; i <= 2; i++)
		{
			printf("%d", *(pa[i] + j));
		}
		printf("\n");
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值