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


    1. 键盘输入字符串,遇‘#’结束,分别统计字母、数字和其它字符个数。
    #include 
    #include
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    1. 编写程序,要求从键盘输入成绩,输出对应的等级(100分为A,90-99为B,80-89为C,70-79为D,60-69为E,小于60为F)。
    #include
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. 设计一个简单的计算机程序,用户输入运算数和四则运算符(+、-、*、/),输出计算结果。
    #include
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. 用冒泡排序法对10个整数排序。10个整数用scanf函数输入。
    #include 
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    1. 编写一个程序,包括主函数和如下子函数。(1) 输入10个无序的整数;(2) 用起泡方法从大到小排序;(3) 要求输入一个整数,用折半查找法找出该数,若存在,在主函数中输出其所处的位置,否则,插入适当位置。
    #include 
    #include
    #include
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    1. 用冒泡排序法对10个整数排序。10个整数用scanf函数输入。
    #include 
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    1. 打开一个已经存放了一篇英文的文本文件“d:\text\page.txt”,把其中的包含数字字符按在文章中出现的先后顺序在屏幕上输。例如:文件包含文字“iqwe23oise384kas9wi8jd6lsk4”,输出“2 3 3 8 4 9 8 6 1 4 ”。
    #include
    #include
    #include
    #include
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    1. 编程序求100以内的素数,分别将它输出到显示器和x.txt文件中,要求每行5个数。
    #include
    #include
    #include
    #include
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    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
    #include
    #include
    #include
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    1. 用指针的方式实现,3×3矩阵转置。
    #include
    #include
    #include
    #include
    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");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    content生成自定义图标的方式是什么?
    大模型时代的机器人研究
    MySQL的数据库操作、数据类型、表操作
    【线性代数】线性代数的几何意义
    【漏洞复现】泛微e-Weaver SQL注入
    openGauss学习笔记-119 openGauss 数据库管理-设置数据库审计-设置文件权限安全策略
    字符函数和字符串函数
    【0147】当参数shared_memory_type分别为sysv和mmap时,差异为何如此大?
    360度 EC11 旋转编码器模块 数字脉冲电位器
    IPWorks SFTP Delphi版—组件消耗的资源
  • 原文地址:https://blog.csdn.net/Fishermen_sail/article/details/127130927