王道C语⾔督学OJ代码
王道OJ练习题(更新学习中)
初级
1.输⼊“hello wangduo”
#include<stdio.h>
int main(){
printf("hello wangdao");
}
2.计算a+b
#include<stdio.h>
int main(){
int a;
int b;
scanf("%d %d",&a,&b);
printf("%d",a+b);
return0;
}
3.读取⼀个65到122之间的整型数,然后以字符形式输出它,⽐如读取了97,输出字符a
#include<stdio.h>
int main(){
int num;
scanf("%d",&num);
printf("%c",num);
}
4.判断闰年
#include<stdio.h>
int main(){
int year;
scanf("%d",&year);
if((year%4==0)&&((year%100)!=0)|| year%400==0){
printf("yes");
}else{
printf("no");
return0;
}
5.读取⼀个整型数,字符,浮点数,分别到变量i,j,k中,然后将i,j,k直接相加并输出,⼩数点后保留两位⼩数,不⽤考虑输⼊的浮点数的⼩数部分超过了两位
#include<stdio.h>
int main(){
int i;
char j;
float k;
scanf("%d %c %f",&i,&j,&k);
int num =(int) j;
printf("%.2f",i+num+k);
}
6.输⼊⼀个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不⽤考虑这个整型数过⼤,int类型存不下,不⽤考虑负值;例如12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no
int a;//原来的数字
int b =0;//使之相反的数字
int temp;
while(scanf("%d",&a)!=EOF)//C语⾔中已经定义了EOF=-1
{
while(a){
temp = a%10;
b = b*10+temp;
a = a/10;
}
if(a == b){
printf("yes\n");
}else{
printf("no\n");
}
}
}
7.求N的阶乘
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int sum =1;
for(int i=1;i<=n;i++){
sum = i*sum;
}
printf("%d",sum);
}
8.某⼈想将⼿中的⼀张⾯值100元的⼈民币换成10元、5元、2元和1元⾯值的票⼦。要求换正好40张,且每种票⼦⾄少⼀张。问:有⼏种换法?
#include<stdio.h>
int main()
{
//穷举法循环各种⾦钱的数量
int m10,m5,m2,m1;//每⼀张纸币⾄少⼀张
int sum =0;
for(m10 =1;m10 <=40;m10++){
for(m5 =1;m5 <=40;m5++){
for(m2 =1;m2 <=40;m2++){
for(m1 =1;m1 <=40;m1++){
if((m10*10+ m5*5+ m2*2+ m1*1)==100&&(m10 + m5 + m2 + m1==40)){
sum+=1;
c语言listinsert函数
}
}
}
}
}
printf("%d\n",sum);
}
9.输⼊N个数(N⼩于等于100),输出数字2的出现次数;
{
int n;
scanf("%d",&n);
int a[n];
int sum=0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]==2){
sum++;
}
}
printf("%d",sum);
}
10.读取⼀个字符串,字符串可能含有空格,将字符串逆转,原来的字符串与逆转后字符串相同,输出
0,原字符串⼩于逆转后字符串输出-1,⼤于逆转后字符串输出1。例如输⼊ hello,逆转后的字符串为 olleh,因为hello ⼩于 olleh,所以输出-1
#include<stdio.h>
#include<string.h>
int main()
{
char str1[10001],str2[10001];
gets(str1);
int len =strlen(str1);
for(int i=0;i<len;i++){
str2[len-1-i]= str1[i];
}
int result =strcmp(str1,str2);
if(result <0){
printf("%d\n",-1);
}else if(result >0){
printf("%d\n",1);
}else{
printf("%d\n",0);
}
}
11.输⼊⼀个整型数,存⼊变量i,通过⼦函数change把主函数的变量i除2,然后打印i,例如如果输⼊的为10,打印出5,如果输⼊的为7,打印出3
#include<stdio.h>
extern int change(int i);
int main(){
int n;
scanf("%d",&n);
printf("%d",change(n));
}
int change(int i){
return i/2;
}
11.输⼊⼀个整型数,然后申请对应⼤⼩空间内存,然后读取⼀个字符串,字符串的输⼊长度⼩于最初输⼊的整型数⼤⼩,最后输出输⼊的字符串即可(⽆需考虑输⼊的字符串过长,超过了内存⼤⼩);
#include<stdio.h>
#include<malloc.h>
int main(){
int n;
scanf("%d",&n);
char* p;
p =(char*)malloc(n);
char c;
scanf("%c",&c);
gets(p);
puts(p);
return0;
}
12.输⼊⼀个整型数,然后申请对应⼤⼩空间内存,然后读取⼀个字符串,字符串的输⼊长度⼩于最初输⼊的整型数⼤⼩,最后输出输⼊的字符串即可(⽆需考虑输⼊的字符串过长,超过了内存⼤⼩)
#include<stdio.h>
#include<malloc.h>
int main(){
int n;
scanf("%d",&n);
char* p;
p =(char*)malloc(n);
char c;
scanf("%c",&c);
gets(p);
puts(p);
return0;
}
13.假如有n个台阶,⼀次只能上1个台阶或2个台阶,请问⾛到第n个台阶有⼏种⾛法?为便于读者理解题意,这⾥举例说明如下:假如有3个台阶,那么总计就有3种⾛法:第⼀种为每次上1个台阶,上3次;第⼆种为先上2个台阶,再上1个台阶;第三种为先上1个台阶,再上2个台阶。输⼊为n,输出为⾛到第n个台阶有⼏种⾛法。⽅法:递归思想
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int step(int n){
if(1== n ||2== n){
return n;//结束条件
}
return step(n -1)+step(n -2);//结束公式
}
int main(){
int n;
scanf("%d",&n);
printf("%d\n",step(n));
return0;
}
中级
1.输⼊⼀个学⽣的学号,姓名,性别,⽤结构体存储,通过scanf读取后,然后再通过printf打印输出
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct Student
{
int stuNo;
char name[20];
char sex;
};
int main(){
struct Student stu;
scanf("%d %s %c",&stu.stuNo,&stu.name,&stu.sex);
printf("%d %s %c", stu.stuNo, stu.name, stu.sex);
}
2.使⽤C++的引⽤,注意提交时把代码选为C++;在主函数定义字符指针 char *p,然后在⼦函数内malloc申请空间,通过fgets读取字符串,然后在主函数中进⾏输出;要求⼦函数使⽤C++的引⽤,注意在C++中从标准输⼊读取字符串,需要使⽤fgets(p,100,stdin)
#include<stdio.h>
#include<malloc.h>
void put(char*& p){
p =(char*)malloc(100);
fgets(p,100,stdin);
}
int main(){
char* p;
put(p);
puts(p);
return0;
}
3.初始化顺序表(顺序表中元素为整型),⾥边的元素是1,2,3,然后通过scanf读取⼀个元素(假如插⼊的是6),插⼊到第2个位置,打印输出顺序表,每个元素占3个空格,格式为1 6 2 3,然后scanf读取⼀个整型数,是删除的位置(假如输⼊为1),然后输出顺序表 6 2 3,假如输⼊的位置不合法,输出false字符串。提醒,Language⼀定要选为C++。
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}SeqList;
bool ListAdd(SeqList& l,int i, ElemType e){
if(i<1|| i>l.length){
return false;
}
if(l.length > MaxSize){
return false;
}
for(int j = l.length; j >= i; j--){
l.data[j]= l.data[j-1];
}
l.data[i -1]= e;
l.length++;
return true;
}
bool ListDel(SeqList& l,int i){
if(i<1|| i>l.length){
return false;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。