大一c语言期末复习题

2023-12-30 22:35:52

第11题:

答案:

#include<stdio.h>
#include<string.h>
int main()
{
	char a[100];
	char b[100];
	int n = 0, i = 0, j = 0;
	fgets(a, sizeof(a), stdin);    //输入一串字符存给a
	size_t len1 = strlen(a);       //一开始该字符串的长度
	if (len1 > 0 && a[len1 - 1] == '\n')     
	{
		a[len1 - 1] = '\0';    //将回车符删掉
	}
	printf("请输入下标正整数n\n");
	scanf("%d", &n);
	size_t len2 = strlen(a);     //删掉回车符后字符串的长度
	if (n >= 0 && n < len2)     //如果n<字符串的长度
	{
		for (i = 0; i < len2; i++)    //将a数组复制给b
		{
			if (i != n)     //如果没轮到n
			{
				b[j++] = a[i];
			}
		}
		b[j] = '\0';    //最后用\0结束掉b
	}
	printf("数组a:%s\n", a);
	printf("数组b:%s\n", b);
	printf("%d\n", n);
}

知识点:

一:fgets函数:当遇见一行数据并存给数组时就用fgets函数,因为一般用while((***)!=**)来处理多组输入时,再想将这些数据一个一个存给数组,还需要一个循环(例如for),这时就会发现,不论是while里面嵌套for,还是for里面嵌套while都不能实现上述的要求。

fgets函数格式:fgets(a,b,stdin),stdin代表输入缓冲区,b代表取stdin(即输入缓冲区)的个数,a代表从stdin里面取b个元素存进的地方a。

举例:

如图可知,想将键盘输入的xbadbcjdd(共10个元素)存进数组a,但实际只存了9个,第10个元素变成了‘\0’,是因为字符串必须要有\0结尾,所以会预留一个字节的长度给\0,所以实际存的元素个数为10-1(即b-1)

注:回车键\n也会被当作普通字符存进数组a中

二:sizeof运算符生成的值的数据类型是size_t,但其实在<stddef.h>头文件中,编译器已经通过typedef声明将size_t的数据类型定义为无符号整型,所以size_t其实就是无符号整型的一个别名

第12题:

答案:

#include<stdio.h>
int main()
{
	int n = 0, m = 0, i = 0, j = 0, tt[100][100] = { 0 }, pp[100] = { 0 };
	printf("请输入m和n的值\n");
	scanf("%d%d", &m, &n);    //输入m和n的值
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			scanf("%d", &tt[i][j]);    //将值赋值给二维数组
		}
	}
	for (j = 0; j < n; j++)      
	{
		int min = tt[0][j];    //假设每一列的第一位数为最小值(即行的下标为0)
		for (i = 1; i < m; i++)     //从第一位一直往下比较
		{
			if (tt[i][j] < min)    //如果下面的数比假设的最小值小
			{
				min = tt[i][j];    //这个数成为新的最小值
			}
		}
		pp[j] = min;       //将这一列的最小值存到一维数组
		printf("%d ", pp[j]);    //打印一维数组里的数
	}
	return 0;
}

第13题:

答案:

#include<stdio.h>
#include<string.h>
int main()
{
	char c, a[100] = { 0 };
	int len1 = 0, len2 = 0, i = 0, j = 0;
	fgets(a, sizeof(a), stdin);    //输入一行字符
	len1 = strlen(a);      //包括\n的字符串长度
	if (a[len1 - 1] == '\n')    
	{
		a[len1 - 1] = '\0';    //将字符串里面的换行符\n删去
	}
	len2 = strlen(a);   //删去\n后的字符串长度
	printf("请输入字符c:\n");
	scanf("%c", &c);    //输入字符c
	for (i = 0,j=0; i < len2; i++)
	{
		if (a[i] != c)    //如果不是字符c
		{
			a[j++] = a[i];    //则再赋给a
		}
	}
	a[j] = '\0';    //最后用\0结束a
	printf("%s\n", a);    //打印删去字符c的数组a
	return 0;
}

跟第11题挺像的,就不多说了(第11题是删1个字符,本题是删所以相同的字符)

第14题:

答案:

#include<stdio.h>
int main()
{
	int m = 0, i = 0, j = 0, max = 0;
	int arr[2][100] = { 0 };
	printf("请输入m的值:\n");
	scanf("%d", &m);    //输入m的值
	for (i = 0; i < 2; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d", &arr[i][j]);    //将数据存进二维数组
		}
	}
	max = arr[0][0];    //假设二维数组的第一个数为最大值
	for (i = 0; i < 2; i++)
	{
		for (j = 0; j < m; j++)
		{
			if (arr[i][j] > max)    //如果后面有某个数大于假设的最大值
			{
				max = arr[i][j];    //这个数为新的最大值
			}
		}
	}
	printf("最大值是:%d\n", max);   //打印最大值
	return 0;
}

第15题:

答案:

#include<stdio.h>
#include<string.h>
int main()
{
	int len1 = 0, len2 = 0, i = 0, j = 0;
	char a[100] = { 0 };
	fgets(a, sizeof(a), stdin);    //输入一行数据存给数组a
	len1 = strlen(a);           //包括\n的字符串长度
	if (a[len1 - 1] == '\n')
	{
		a[len1 - 1] = '\0';     //将字符串里面的换行符\n删去
	}
	len2 = strlen(a);        //删去\n后的字符串长度
	for (i = 0,j=0; i < len2; i++)    
	{
		if (a[i] != '*'||i==len2-1)    //当不是*或者是最后一位时(因为题目是除去尾部的*不删,就相当于最后一位无论是字母还*都不删)
		{
			a[j++] = a[i];
		}
	}
	a[j] = '\0';     //最后用\0结束a
	printf("%s\n", a);    //打印数组a
	return 0;
}

跟前面两题大同小异,也不多说了

文章来源:https://blog.csdn.net/2301_80369371/article/details/135286171
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。