24考研王道c语言oj自做-创新互联
输出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://pwwzsj.com/article/iooid.html