仅供参考,不建议直接Ctrl-CV
字符数组
第1关 字符逆序
#include<stdio.h>
#include<string.h>
int main()
{
char a[10000];
gets(a);
for(int i = strlen(a) - 1;i >= 0;i--)
printf("%c", a[i]);
return 0;
}
第2关 字符统计
#include<stdio.h>
int main()
{
int n,i,j,num;
char s[10][50]; //二维数组接收字符串
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",&s[i]);
}
for(i=0;i<n;i++) //第一层循环每一行字符串
{
num=0;
for(j=0;s[i][j]!='\0';j++) //判断每行字符串的数字个数
if(s[i][j]>='0'&&s[i][j]<='9')
num++;
printf("%d\n",num);
}
return 0;
}
第3关 字符插入
#include<stdio.h>
#include<string.h>
int main(void)
{
int m,n,j,i;
int max,min;
char a[100],b[100];
gets(a);
gets(b);
m=strlen(a);
n=strlen(b);
for( i=0,min=0;i<m;i++) {
//循环判断数组a中的最小值
if(a[min]>a[i]){
min=i;}
}
for(i=0,max=0;i<n;i++) {
//循环判断数组b中的最小值
if(b[max]<b[i]){
max=i;}
}
for(j=m+1;j>min;j--) {
a[j]=a[j-1];
}
a[j+1]=b[max];
puts(a);
return 0;
}
第4关 字符串处理
#include<stdio.h>
#include<string.h>
int main(void)
{
char s1[150],s2[150],s3[150];
int location,i,j=0,k=0;
gets(s1);
gets(s2);
scanf("%d",&location);
int len1=strlen(s1);
int len2=strlen(s2);
for(i=location;i<len1;i++)
{
s3[k++]=s1[i];
}
for(i=location;i<len2+location+1;i++)
{
s1[i]=s2[j++];
}
strcat(s1,s3);
s1[len1+len2]='\0';
printf("%s",s1);
return 0;
}
第5关 字符串统计
#include <stdio.h>
#include <string.h>
int main()
{
char text[100];
int sum = 0, max = 0, part = 0;
int i = 0;
int MaxLoca = 0;
while (1)
{
gets(text);
sum = 0; part = 0; max = 0; MaxLoca = 0;
if (strcmp("stop", text) == 0)
{
break;
}
else
{
for (i = 0; i <= strlen(text); i++)
{
if (text[i] != ' ' && text[i] != '\0')
{
sum++;
part++;
}
else
{
if (max < part)
{
max = part;
MaxLoca = i;
}
part = 0;
}
}
printf("%d ", sum);
for (i = MaxLoca - max; i < MaxLoca; i++)
{
printf("%c", text[i]);
}
printf("\n");
}
}
return 0;
}
第6关 字符串排序
#include <stdio.h>
#include <string.h>
int main() {
char str1[1000], str2[1000], str3[1000],temp[1000];
gets(str1);
gets(str2);
gets(str3);
if(strcmp(str1,str2)>0)
{
strcpy(temp,str2);
strcpy(str2,str1);
strcpy(str1,temp);
}
if(strcmp(str1,str3)>0)
{
strcpy(temp,str3);
strcpy(str3,str1);
strcpy(str1,temp);
}
if(strcmp(str2,str3)>0)
{
strcpy(temp,str3);
strcpy(str3,str2);
strcpy(str2,temp);
}
puts(str1);
puts(str2);
puts(str3);
return 0;
}
函数
第1关 求和
#include <stdio.h>
#include <string.h>
int summ(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
int main() {
int n;
scanf("%d", &n);
printf("%d", summ(n));
return 0;
}
第2关 回文数计算
#include <stdio.h>
int huiwen(int n) {
int i = 0;
int temp = n;
while(temp) {
i = i * 10 + temp % 10;
temp /=10;
}
if(i == n) return 1;
else return 0;
}
int main() {
for(int i = 200; i >=200&&i<=3000; i++) {
if(huiwen(i)) {
printf("%d\n", i);
}
}
return 0;
}
第3关 编写函数求表达式的值
#include <stdio.h>
double sum(int n) {
double sum=1,temp=1;
for (int i =1; i <= n; i++)
{
temp = temp * i / (2*i+1);
sum += temp;
}
printf("%.10f",sum);
}
int main() {
int n;
scanf("%d",&n);
sum(n);
return 0;
}
第4关 阶乘数列
#include <stdio.h>
long long int factorial(long long int i)
{
if(i <= 1)
{
return 1;
}
return i * factorial(i - 1);
}
int main() {
long long int sum,n;
scanf("%lld",&n);
for(int i = 1; i <= n; i++) {
sum+=factorial(i);
}
printf("%lld",sum);
}
第5关 亲密数
#include <stdio.h>
int sum(int n) {
int i,sum=0;
for(i=1;i<=n/2;i++){
if((n%i)==0) {
sum=sum+i;
}
}
return sum;
}
int main() {
int x,y;
for (int n = 0; n <= 3000; n++) {
y = sum(n);
x = sum(y);
if (n == x && n < y){
printf("(%d,%d)", n, y);
}
}
return 0;
}
第6关 公约公倍数
#include <stdio.h>
long long int max(long long int a, long long int b) {
long long int temp;
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
return a;
}
long long int min(long long int a, long long int b) {
return a/max(a,b)*b;
}
int main() {
long long int num1,num2;
scanf("%lld%lld", &num1, &num2);
if(num1<0||num2<0) {
printf("Input Error");
}
else {
printf("%lld %lld",max(num1,num2),min(num1,num2));
}
return 0;
}
指针
第1关 用指针法输入12个整数,然后按每行4个数输出
#include <stdio.h>
int main() {
int arr[12];
int *p=arr;
for(int i=0;i<12;i++) {
scanf("%d",p++);
}
for(int i=0;i<3;i++) {
printf("%d %d %d %d\n",arr[4*i],arr[(4*i)+1],arr[(4*i)+2],arr[(4*i)+3]);
}
}
第2关 指针变量作为函数参数实现两变量交换值
#include <stdio.h>
void exchange(int *a,int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a,b;
scanf("%d %d",&a,&b);
exchange(&a,&b);
printf("%d %d",a,b);
return 0;
}
第3关 报数
#include <stdio.h>
int main()
{
int num[50],n,*p,j,loop,i,m,k;
scanf("%d",&n);
p=num;
for (j=0;j<n;j++)
{
*(p+j)=j+1;
}
i=0;
m=0;
k=0;
while(m<n-1)
{
if (*(p+i)!=0)
{
k++;
}
if (k==3)
{ k=0;
*(p+i)=0;
m++;
}
i++;
if (i==n)
{
i=0;
}
}
for (loop=0;loop<n;loop++)
{
if (num[loop]!=0)
{
printf("%d",num[loop]);
}
}
}
第4关 strcmp函数
#include<stdio.h>
int strcmp(char *p1,char *p2)
{
int num=0;
for(;*p1!='\0'||*p2!='\0';p1++,p2++)
if(*p1!=*p2)
{
num=*p1-*p2;
break;
}
return num;
}
int main(void)
{
char a[110],b[110];
scanf("%s%s",a,b);
if(strcmp(a,b)>0)
printf("%s", a);
else
printf("%s", b);
return 0;
}
指针进阶
第1关 输出若干个学生成绩中的最高分.要求用指针函数实现
#include<stdio.h>
/*********Begin*********/
int max(int* p, int n)
{
int i, t;
for (i = n - 1; i >= 0; i--)
{
if (p[i] < p[i + 1])
{
t = p[i];
p[i] = p[i + 1];
p[i + 1] = t;
}
}
return p[0];
}
/*********End**********/
int main(void)
{
int n, s[110];
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &s[i]);
int ans;
/*********Begin*********/
ans = max(s, n);
/*********End**********/
printf("%d", ans);
return 0;
}
第2关 采用指针变量表示地址的方法输入输出数组中的个元素
#include <stdio.h>
int main() {
int n,*p;
int arr[n];
scanf("%d", &n);
for (p=arr; p < arr+n; p++) {
scanf("%d", p);
}
for (p=arr; p < arr+n; p++) {
printf("%d ",*p);
}
return 0;
}
第3关 用指针实现数组循环移动
#include<stdio.h>
int *solve(int *s,int n,int m){
/*********Begin*********/
int i=0,j,p;
static int a[100];
for(j=0;j<n;j++)
{
p=i+n-m;
while(p>n-1) p-=n;
i++;
a[j]=*(s+p);
}
return a;
/*********End**********/
}
int main(void)
{
int n,m,s[110];
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%d",&s[i]);
int *ans;
/*********Begin*********/
ans=solve(s,n,m);
/*********End**********/
for(int i=0;i<n;i++){
if(i==0) printf("%d",*ans++ );
else printf(" %d",*ans++ );
}
return 0;
}
结构体
第1关 结构体变量的初始化和引用
#include<stdio.h>
struct student {
char name[20];
long long int id;
int score;
};
int main() {
struct student student1,student2;
scanf("%lld %s %d",&student1.id,&student1.name,&student1.score);
scanf("%lld %s %d",&student2.id,&student2.name,&student2.score);
if(student1.score>student2.score) {
printf("%lld %s %d",student1.id,student1.name,student1.score);
}
else {
printf("%lld %s %d",student2.id,student2.name,student2.score);
}
}
第2关 结构体排序
#include<stdio.h>
struct student {
char name[20];
long long int id;
int score;
};
int main() {
int num;
struct student temp;
scanf("%d",&num);
struct student student[num];
for (int i = 0; i < num; i++) {
scanf("%lld %s %d",&student[i].id,&student[i].name,&student[i].score);
}
for (int i = 0; i < num - 1; i++) {
for (int j = i + 1; j < num; j++) {
if (student[j].score > student[i].score) {
temp = student[j];
student[j] = student[i];
student[i] = temp;
}
}
}
for (int i = 0; i < num; i++) {
printf("%lld %s %d\n",student[i].id,student[i].name,student[i].score);
}
return 0;
}
第3关 结构体存储数据
#include<stdio.h>
#include <string.h>
/*********Begin*********/
struct person {
char name[20];
int score;
}person[3]={"Li",0,"Zhang",0,"Sun",0};
/*********End**********/
int main()
{
/*********Begin*********/
int num;
scanf("%d",&num);
for(int i=0;i<num+1;i++)
{
char str[20];
gets(str);
for(int j=0;j<3;j++)
{
if(strcmp(str,person[j].name)==0)
person[j].score++;
}
}
printf("%s:%d\n",person[0].name,person[0].score);
printf("%s:%d\n",person[1].name,person[1].score);
printf("%s:%d\n",person[2].name,person[2].score);
/*********End**********/
return 0;
}
第4关 结构体存储学生信息
#include<stdio.h>
#include<string.h>
int Count;
struct student {
char sno[20], name[20];
int math, english, chinese, sum;
};
void print(struct student stu) {
printf("%s %s %d %d %d %d\n", stu.sno, stu.name, stu.math, stu.english, stu.chinese, stu.sum);
}
void query_stu(struct student s[], char* name) {
/*********Begin*********/
for (int i = 0; i < Count; i++) {
if (strcmp(s[i].name, name) == 0) {
print(s[i]);
}
}
/*********End**********/
}
void delete_stu(struct student s[], char* sno) {
/*********Begin*********/
for (int i = 0; i < Count; i++) {
if (strcmp(s[i].sno, sno) == 0) {
for (int j = i + 1; j < Count; j++) {
s[j - 1] = s[j];
}
break;
}
}
/*********End**********/
}
void update_stu(struct student s[], char* sno, int math, int english, int chinese) {
/*********Begin*********/
for (int i = 0; i < Count; i++) {
if (strcmp(s[i].sno, sno) == 0) {
s[i].math = math;
s[i].english = english;
s[i].chinese = chinese;
s[i].sum = math + english + chinese;
break;
}
}
/*********End**********/
}
int main(void)
{
int n, q;
struct student students[50];
scanf("%d%d", &n, &q);
Count = n;
for (int i = 0; i < n; i++) {
/*********Begin*********/
scanf("%s%s%d%d%d", &students[i].sno,&students[i].name,&students[i].math,&students[i].english,&students[i].chinese);
students[i].sum =students[i].math +students[i].english +students[i].chinese;
/*********End**********/
}
while (q--) {
int op;
scanf("%d", &op);
char sno[20], name[20];
if (op == 1) {
scanf("%s", name);
query_stu(students, name);
}
else if (op == 2) {
int a, b, c;
scanf("%s%d%d%d", sno, &a, &b, &c);
update_stu(students, sno, a, b, c);
for (int i = 0; i < Count; i++)
print(students[i]);
}
else {
scanf("%s", sno);
delete_stu(students, sno);
for (int i = 0; i < Count - 1; i++)
print(students[i]);
}
}
return 0;
}
文件
第1关 HelloWorld
#include<stdio.h>
void solve(){
/********** Begin *********/
FILE *f = fopen("in.txt","w");
fprintf(f,"HelloWorld");
fclose(f);
/********** End **********/
}
第2关 文件读取和写入
#include<stdio.h>
void solve(){
/********** Begin *********/
FILE *f = fopen("a.txt", "r");
int a,b,c;
fscanf(f, "%d %d %d", &a, &b, &c);
fclose(f);
FILE *f1 = fopen("b.txt", "w");
fprintf(f1, "%d %d %d", a, b, c);
fclose(f1);
/********** End **********/
}
第3关 统计文本字母数量
#include<stdio.h>
void solve(){
/********** Begin *********/
int n=0;
char str;
FILE *f = fopen("a.txt", "r");
while(feof(f)==0) {
fscanf(f, "%c", &str);
if((str>='A'&&str<='Z')||(str>='a'&&str<='z'))
{
n++;
}
}
fclose(f);
printf("%d\n", n-1);
/********** End **********/
}
第4关 读取文件中指定学生信息
#include<stdio.h>
#include <string.h>
void solve(char s[]){
/********** Begin *********/
FILE *fq = fopen("a.txt", "r");
int n;
char lines[20], a[100];
for (n = 0; n < 9; n++) {
fgets(lines, 12, fq);
fgets(a, 100, fq);
if (strcmp(s, lines) == 0) {
printf("%s%s", lines, a);
fclose(fq);
break;
}
if (n == 8) {
printf("Not Found!");
}
}
/********** End **********/
}