网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

24考研王道c语言oj自做-创新互联

LOW 课时2作业1

输出hellow wangdao

成都创新互联成都企业网站建设服务,提供成都网站制作、网站设计网站开发,网站定制,建网站,网站搭建,网站设计,成都响应式网站建设公司,网页设计师打造企业风格网站,提供周到的售前咨询和贴心的售后服务。欢迎咨询做网站需要多少钱:18982081108
#includeint main()
{
	printf("hello wangdao\n");
	return 0;
}
课时2作业2

计算a+b,输入包含a和b,空格隔开 输出a、b和

#includeint main()
{
  int a,b;
  scanf("%d%d",&a,&b);
  printf("%d\n",a+b);
  return 0;
}
课时2作业3

读取一个65-122间的整形数,以字符形式输出

#includeint main()
{
	int a;
	scanf("%d",&a);
	printf("%c",a);
	return 0;
}
课时3作业1

判断闰年,是则输出yes,否则输出no

#includeint main()
{
	int year;
	scanf("%d",&year);
	if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)//关系运算符优先级高于逻辑运算符
	{
		printf("yes\n");
	}
	else
	{
		printf("no\n");
	}
	return 0;
}
课时3作业2

读取一个整型数,字符,浮点数,分别到变量i,j,k中,然后将i,j,k直接相加并输出,小数点后保留两位小数,不用考虑输入的浮点数的小数部分超过了两位

#includeint main()
{
	int a;
	char j;
	float f;
	scanf("%d %c%f", &a, &j, &f);
	printf("%0.2f",a+j+f); // 字符以对应的编码值参与计算
	return 0;
}
课时4作业1

输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;

例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no

#includeint main()
{
	int a, ret, c=0;
	scanf("%d",&a);
	int b = a;  // 存储a原始数据
	while (a != 0)// a=0时结束循环
	{
		ret = a % 10;
		c = c * 10 + ret;
		a = a / 10;
	}
	if (c==b)
	{
		printf("yes");
	}
	else
	{
		printf("no");
	}
	return 0;
}
课时4作业2

利用while或者for循环计算n!的值。输入值为正整数,在1-10之间。

#include//while循环
int main()
{
	int n,result=1;
	scanf("%d",&n);
	while (n != 1)
	{
		result = result * n;
		n--;
	}
	printf("%d",result);
	return 0;
}
//for循环

int main()
{
	int n,result=1;
	scanf("%d",&n);
	for(;n>=1;n--)  // for的初始化可以不写,;不能少,必须是2个
	{
		result = result * n;
	}
	printf("%d",result);
	return 0;
}
课时4作业3

某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?

#includeint main()
{
	int ret = 0;
	int i, j, k, l;// ret记录换法,i记录10元,j记录5元,k记录2元,1记录1元
	// 十元最多10张,5元20张
	for (i = 1; i<= 10; i++)
	{
		for (j = 1; j<= 20; j++)
		{
			for (k = 1; k<= 40; k++)
			{
				if (i + j + k >40)
				{
					break;
				}
				
					for (l = 1; l<= 40; l++)
					{
						if (i + j + k + 1 >40)
						{
							break;
						}
						
						if (i + j + k + l == 40 && 10 * i + 5 * j + 2 * k + l == 100)
						{
							ret++;//使用多重for循环嵌套遍历出所有可能,再进行条件判断
						}
					}
				}
			}
		}
		printf("%d", ret);
		return 0;
	}
课时5作业1

输入N个数(N小于等于100),输出数字2的出现次数

#includeint main()
int main()
{
	int a[100];
	int i;
	int k = 0;
	scanf("%d", &i);
	for (int j = 0; j< i; j++)
	{
		scanf("%d",&a[j]);
		if (a[j] == 2)
		{
			k++;
		}
	}
	printf("%d\n",k);
	return 0;
}

这题只需判断2,不需判断包含的2

判断包含的2的个数加个循环即可,如下

#includeint main()
{
	int a[100];
	int i;
	int k = 0;
	scanf("%d", &i);
	for (int j = 0; j< i; j++)
	{
		scanf("%d",&a[j]);
		int m = a[j];
		while (m != 0)
		{
			int ret = m % 10;
			if (ret == 2)
			{
				k++;
			}
			m /= 10;
		}
		
	}
	printf("%d\n",k);
	return 0;
}
课时5作业2

读取一个字符串,字符串可能含有空格,将字符串逆转,原来的字符串与逆转后字符串相同,输出0,原字符串小于逆转后字符串输出-1,大于逆转后字符串输出1。例如输入 hello,逆转后的字符串为 olleh,因为hello 小于 olleh,所以输出-1

#include#includeint main()
{
	char c[20];
	char d[20];
	gets_s(c);
	int len = strlen(c);
	for (int i = 0; i0)
	{
		printf("1");
	}
	else if (strcmp(c, d) == 0)
	{
		printf("0");
	}
	else
	{
		printf("-1");
	}
	return 0;
}
课时6作业1

输入一个整型数,存入变量i,通过子函数change把主函数的变量i除2,然后打印i,例如如果输入的为10,打印出5,如果输入的为7,打印出3

不改变原数据

#define _CRT_SECURE_NO_WARNINGS
#includevoid change(int i)
{
	int j = 0;
	j = i / 2;
	printf("%d\n",j);
}
int main()
{
	int i = 0;
	scanf("%d",&i);
	change(i);
	return 0;
}

改变原数据 

#define _CRT_SECURE_NO_WARNINGS
#includevoid change(int* i)
{
	*p = *p/2
}
int main()
{
	int i = 0;
	scanf("%d",&i);
	change(&i).
    printf("%d\n",i);
	return 0;
}
课时6作业2
#define _CRT_SECURE_NO_WARNINGS
#include#includeint main()
{
    int i;//申请多大的空间
    scanf("%d", &i);
    char* p = (char*)malloc(i);
    char c;
    scanf("%c", &c);//为了去除缓冲区里边的\n
    fgets(p,i,stdin);//如果不通过上面的scanf去消除\n,gets不会卡住
    puts(p);
    free(p);
    p = NULL;
    return 0;
}
课时7

假如有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n个台阶有几种走法?为便于读者理解题意,这里举例说明如下:假如有3个台阶,那么总计就有3种走法:第一种为每次上1个台阶,上3次;第二种为先上2个台阶,再上1个台阶;第三种为先上1个台阶,再上2个台阶。输入为n,输出为走到第n个台阶有几种走法

#define _CRT_SECURE_NO_WARNINGS
#includeint stairway(int n)
{
	int a = 1;
	int b = 2;
	int c = 0;
	if (n< 1)
	{
		return 0;
	}
	if (n == 1)
	{
		return 1;
	}
	if (n == 2)
	{
		return 2;
	}
	while (n >2)
	{
		c = a + b;
		a = b;
		b = c;  //  这样可以不必重复计算
		n--;
	}
	return c;

}
int main()
{
	int n,ret;
	scanf("%d",&n);
	ret = stairway(n);
	printf("%d\n", ret);
	return 0;
}
递归写法
#define _CRT_SECURE_NO_WARNINGS
#includeint stairway(int n)
{
	if (1 == n)
	{
		return 1;
	}
	if (2 == n)
	{
		return 2;
	}
	return stairway(n - 1) + stairway(n - 2);
}
int main()
{
	int n, ret;
	scanf("%d", &n);
	ret = stairway(n);
	printf("%d\n", ret);
	return 0;
}

但这样写会进行大量重复计算

课时8作业1

输入一个学生的学号,姓名,性别,用结构体存储,通过scanf读取后,然后再通过printf打印输出

#define _CRT_SECURE_NO_WARNINGS
#includestruct student
{
	int num;
	char name[20];
	char sex;
};
int main()
{
    struct student s;
    scanf("%d%s %c",&s.num, &s.name, &s.sex);// %c会读取\n,前面加空格消掉
    printf("%d %s %c\n", s.num, s.name, s.sex);
    return 0;
}
课时8作业2

使用C++的引用,注意提交时把代码选为C++;在主函数定义字符指针 char *p,然后在子函数内malloc申请空间(大小为100个字节),通过fgets读取字符串,然后在主函数中进行输出;要求子函数使用C++的引用,注意在C++中从标准输入读取字符串,需要使用fgets(p,100,stdin)

#define _CRT_SECURE_NO_WARNINGS
#includevoid modify_pointer(char*&p)
{
	p = (char*)malloc(100);
    fgets(p,100,stdin);
}
int main()
{
	char* p = NULL;
	modify_pointer(p);
	puts(p);
    free(p);  //申请的空间不使用后一定要free
    p = NULL;
	return 0;
}
课时10

初始化顺序表(顺序表中元素为整型),里边的元素是1,2,3,然后通过scanf读取一个元素(假如插入的是6),插入到第2个位置,打印输出顺序表,每个元素占3个空格,格式为1  6  2  3,然后scanf读取一个整型数,是删除的位置(假如输入为1),然后输出顺序表  6  2  3,假如输入的位置不合法,输出false字符串。提醒,Language一定要选为C++。

#define _CRT_SECURE_NO_WARNINGS
#include#includetypedef struct
{
	int data[50];
	int len;
}SeqList;
bool ListInsert(SeqList &L,int pos,int i)//函数会对表进行更改需要引用,pos为插入位置,i为插入元素
{
	if (pos<1 || pos>L.len+1)
	{
		return false;
	}
	for (int j = L.len; j >= pos; j--)
	{
		L.data[j] = L.data[j - 1];
	}
	L.data[pos - 1] = i;
	L.len++;
	return true;
}
bool ListDelet(SeqList &L, int pos,int &del)//del为删除元素值
{
	if (pos<1 || pos>L.len)
	{
		return false;
	}
	del = L.data[pos - 1];
	for (int j = pos - 1; j< L.len; j++)
	{
		L.data[j] = L.data[j + 1];
	}
	L.len--;
	return true;
}//  主要起练习作用,因此没有因题目减少功能
void print(SeqList L)
{
	for (int i = 0; i< L.len; i++)
	{
		printf("%-3d",L.data[i]);
	}
	printf("\n");
}

int main()
{
	SeqList L;
	int i,del;// i用于存储键盘输入,del用于读取删除值
	bool ret1, ret2;//用于接收函数返回值
	L.data[0] = 1;
	L.data[1] = 2;
	L.data[2] = 3;
	L.len = 3;
	scanf("%d",&i);
	ret1=ListInsert(L,2,i);
	if (ret1)
	{
		print(L);
	}
	else
	{
		printf("false");// 插入失败
	}
	scanf("%d",&i);
	ret2=ListDelet(L,i,del);
	if (ret2)
	{
		print(L);
	}
	else
	{
		printf("false");//删除失败
	}
	return 0;
}
课时11

输入3 4 5 6 7 9999一串整数,9999代表结束,通过头插法新建链表,并输出,通过尾插法新建链表并输出。

Input

3 4 5 6 7 9999,第二行也是3 4 5 6 7 9999,数据需要输入两次

Output

如果输入是3 4 5 6 7 9999,那么输出是7 6 5 4 3,数之间空格隔开,尾插法的输出是3 4 5 6 7

#define _CRT_SECURE_NO_WARNINGS
#include#includetypedef int ElemType;// 方便修改数据类型
typedef struct LNode
{
	ElemType data;
	struct LNode* next;
}LNode,*LinkList;
void List_head_insert(LinkList &L)//头插法
{
	L = (LinkList)malloc(sizeof(LNode));
	L->next = NULL;//建立头结点
	LinkList s = NULL;// 存放新结点 指针一定要初始化
	ElemType x;//存放输入数据
	scanf("%d", &x);
	while (x != 9999)// 输入9999时结束
	{
		s = (LinkList)malloc(sizeof(LNode));//  为新结点申请空间
		s->data = x;
		s->next = L->next;
		L->next = s;
		scanf("%d", &x);
	}
}
void List_tail_insert(LinkList& L)// 尾插法
{
	L = (LinkList)malloc(sizeof(LNode));
	L->next = NULL;//建立头结点
	LinkList r = L;//r用于指向最后一个结点,初始指向头结点
	LinkList s = NULL;// s用于存放新结点  指针一定要初始化
	ElemType x;// 存放输入数据
	scanf("%d", &x);
	while (x != 9999)
	{
		s = (LinkList)malloc(sizeof(LNode));
		s->data = x;
		r->next=s;//新结点链接在原尾结点
		r = s;//s为新的尾结点
		scanf("%d", &x);
	}
	r->next = NULL;// 建立完毕后,尾结点next置空
}
void Print_list(LinkList L)
{
	L = L->next;// 头结点不用于存放数据
	while (L != NULL)//L为空时打印完毕
	{
		printf("%d", L->data);
		L = L->next;//指向下一个结点
		if (L != NULL)
		{
			printf(" ");// 为满足oj格式 打一个空格
		}
	}
	printf("\n");
}
int main()
{
	LinkList L;
	List_head_insert(L);
	Print_list(L);
	List_tail_insert(L);
	Print_list(L);
	return 0;
}
MID 课时12

入3 4 5 6 7 9999一串整数,9999代表结束,通过尾插法新建链表,查找第二个位置的值并输出,在2个位置插入99,输出为  3 99  4  5  6  7,删除第4个位置的值,打印输出为  3 99  4  6  7。

输出函数如下:

void PrintList(LinkList L)

{

L = L->next;

while (L != NULL)

{

printf("%3d", L->data);//打印当前结点数据

L = L->next;//指向下一个结点

}

printf("\n");

}

针对双向链表,有时间的同学自己练习即可,这道题同样也可以用双向链表来实现一遍

#define _CRT_SECURE_NO_WARNINGS
#include#includetypedef int ElemType;
typedef struct LNode
{
	ElemType data;
	struct LNode* next;
}LNode,*LinkList;

void List_tail_insert(LinkList& L)
{
	ElemType x;// 存放输入数据
	L = (LinkList)malloc(sizeof(LNode));// 为头结点申请空间
	L->next = NULL;
	LinkList p=NULL;// 用于存放新结点 一定记得初始化
	LinkList r = L;// 用于指向最后一个结点,初始指向头结点
	scanf("%d", &x);
	while (x != 9999)// 输入9999时代表结束
	{
		p = (LinkList)malloc(sizeof(LNode));// 为新结点申请空间
		p->data = x;
		r->next = p;// 与前一个结点建立链接
		r = p;// p为新的尾结点
		scanf("%d", &x);
	}
	p->next = NULL;// 结束输入后,p为尾结点,next置NULL
}

LinkList Get_elem(LinkList L, int pos)// 按址查找,返回对应结点指针
{
	int i = 0;// 从头结点开始遍历
	if (pos< 0)
	{
		return NULL; //  输入不合法
	}
	while (i< pos && L)// 当L为空或者找到对应结点时结束遍历
	{
		L = L->next;
		i++;
	}
	return L;
}
bool List_insert(LinkList L, int pos, ElemType value)
{
	LinkList p = Get_elem(L, pos - 1);// 找到要插入位置的前一个结点
	// Get_elem已判断输入位置的合法性,不需要再判断 pos为0时返回为NULL
	// 避免头结点被更改 List_delete同理
	if (NULL == p)
	{
		return false;// 要插入的位置没有前一个结点,插入失败
	}
	LinkList q = (LinkList)malloc(sizeof(LNode));// 为新结点开辟空间
	q->data = value;
	q->next = p->next;
	p->next = q;
	return true;
}
bool List_delete(LinkList L, int pos)// 没有要求获取删除结点的值
{
	LinkList p = Get_elem(L, pos-1);// 获取要删除结点的前一个结点
	if (NULL == p || NULL == p->next)
	{
		return false;// 前一个结点或者要删除结点为空时无法操作
	}
	LinkList q = Get_elem(L, pos);// 获取要删除结点的位置
	p->next = q->next;
	free(q);
	return true;
}
void PrintList(LinkList L)
{
	L = L->next;//头结点不存放数据
	while (L != NULL)
	{
		printf("%3d", L->data);//打印当前结点数据
		L = L->next;
	}
	printf("\n");
}
int main()
{
	LinkList L;
	List_tail_insert(L);
	List_insert(L, 2, 99);
	PrintList(L);
	List_delete(L, 4);
	PrintList(L);
	return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章名称:24考研王道c语言oj自做-创新互联
文章路径:http://bjjierui.cn/article/iooid.html

其他资讯