ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言期末复习资料

2021-01-02 11:00:04  阅读:329  来源: 互联网

标签:main int str2 str1 复习资料 C语言 char 期末 include


FIGHTING!
ALL BELIEVE,and,NEVER GIVE UP!

C语言的期末考试已经过去了,
20道选择题全对,
4道程序对了三道,
第一道就是让用指针和字符串编函数,但是这块自己压根都没看,老师之前也说不用指针都能做,为了计算机证寒假再补一补吧,下面是自己在考前整理的一些知识点,感觉梳理一下。自己心里会踏实不少,全都拿出来分享给大家吧,也没排版,大家凑合看吧

1.求质数

#include<stdio.h> 
#include<math.h>
int  main()
{
int m,n,i;
scanf("%d",&m);
n=sqrt(m);
for(i=2;i<=n;i++)
{
if(m%i==0)
break; 
}
if(i>n)
printf("素数");
else
printf("不是素数"); 
}

2.最大公约数 最小公倍数

#include<stdio.h> 
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int k;
k=m<n?m:n;
while(m%k!=0||n%k!=0)
k--;
printf("最大公约数%d\n",k);
int p;
p=m*n/k;
printf("最小公倍数%d\n",p);
}

3.斐波拉契数列

#include<stdio.h> 
int main()
{
 int a[20]={1,1};
 int i;
 for(i=2;i<20;i++)  
   a[i]=a[i-2]+a[i-1];
   for(i=0;i<20;i++)
  {
 printf("%10d",a[i]);
   if((i+1)%5==0)
   printf("\n"); 
  }

You can be the winner always!
JUST NEVER GIVE UP!
4.水仙花数

#include<stdio.h> 
int main()
{ int i,j,k,l;
for(i=100;i<1000;i++)
{j=i/100;
 k=i%10;
 l=i/10%10;
 if(i==j*j*j+k*k*k+l*l*l)
 printf("%5d",i);
 } 

}

5.同构数

#include <stdio.h>
int main()
{   int i;
	for(i=1; i<100; i++)
	{   if(i*i%10==i||i*i%100==i)
		{	printf("%-4d",i);
		}
	}
	return 0;
}

6.判断完数

int isPerfectNum(int n)//判断n是否为完数,如果是,则返回1,否则返回0
{
int i,s=0;
for(i=1;i<n;i++)//遍历小于n的整数
if(n%i==0)//可以整除,为真因子
s+=i;//累加每个真因子到s上 
if(s==n)//如果符合完数条件,返回1
return 1;
else //如果不是完数,返回0
Return 0;
}

PART B 数组
1.找最大值及其下标
#include <stdio.h>
int main()
{ int a[10]={0};
int i;
int k=0;
for(i=0;i<10;i++)
{scanf("%d",&a[i]);
if(a[i]>a[k])
a[k]=a[i];
k=i;
}
printf(“a[%d]=%d”,k,a[k]);

}
2.找指定数
if找就0k啦
3.排序
从小到大排
冒泡排序
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
If(a[j]>a[j+1])
{ t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
选择排序
for(k=0;k<n-1;k++)
{ index=k;
For(i=k+1;i<n;i++;)
If( a[i]<a[index])
Index=i;
t=a[index];
A[index]=a[k];
A[k]=t;
}


字符串的排序问题
#include<stdio.h>
#include<string.h>
#define N 80
int main()
{ char s[5][4]={“mat”,“app”,“cam”,“b”,“hyg”}; 5行5个数 最长4个空间
char t[4];
int i,j;
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(strcmp(s[i],s[j])>0)
{ strcpy(t,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],t);
}
for(i=0;i<5;i++)
puts(s[i]);
}

行列转置
输入一个 2 行 3 列的整数数组,将其进行转置(行和列元素交换)并输出

#include<stdio.h>
int main()
{
int a[2][3],b[3][2];
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
b[j][i]=a[i][j];
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%d",b[i][j]);
printf("\n");
}
}

二维数组 n行n列
主对角线 i==j ↘
主对角线以上 i<=j
副对角线 ↙ i+j=n-1;

增删改查

字符串
“”括起来

结束标志’\0’ 占用一个字节,但不计入长度

字符数组 s【i】i过大的话,之后都自动赋值‘\0’

Char ch[6]=”china”; char ch[ ]={“china”}; 6个元素 5个字符
字符数组的长度至少比字符串中字符数多1

函数
长度 strlen(str)

#include<stdio.h>
int main()
{ int i=0;
char str[10];
gets(str);
while(str[i]!=0)
{
i++;
}
Return i;
}

………………………………………………………………………………………

比较函数
Strcmp(str1,str2) 返回正值则str1大

#include<stdio.h>
#include<string.h>
#define N 80
int main()
{ char s1[N],s2[N];
int num=0;
int i;
gets(s1);
gets(s2);
for(i=0;s1[i]!=’\0’||s2[i]!=’\0’;i++)
{ num=num+s1[i]-s2[i];
}
printf("%d",num);
}

*****…………………………………………………………………………………
字符串复制 strcpy (str1;str2)相当于把2给1;
#include<stdio.h>
#define N 80
int main()
{ char str1[N],str2[N];
gets(str1);
int i=0;
for(i=0;str1[i];i++)
str2[i]=str1[i];
str2[i]=’\0’;
puts(str2);
}
……………………………………
字符串连接函数
Strcat
#include<stdio.h>
#include<string.h>
#define N 80
int main()
{ char str1[N],str2[N];
gets(str1);
gets(str2);
int m,n;
m=strlen(str1);
n=strlen(str2);
int i=1;
for(i=1;i<=n;i++)
str1[m-1+i]=str2[i-1];
str1[m+n]=’\0’;
puts(str1);
}

Scanf gets

赋值

  • 逐个输入字符
    Scanf(“%c%c%c”,&a[0],&a[1],&a[2]);
    For(i=0;i<3;i++)
    Printf(“%c”,a[i]);

For(i=0;i<3;i++)
Ch[i]=getchar();

For(i=0;i<3;i++)
Ch[i]=putchar();

*字符串的输入输出
Gets(str1);读段落
Puts(str1);puts(“abc”); 换行 一次输一个

Scanf(“%s%s”,str2,str3); 读单词
Printf(“%s%s”,str2,str3); 不换行 可同时输出

逆序
一个数
Sum=0;
While(n!=0)
{
sum=sum*10+n/10;
N=n/10;
}

回文

1.执行下面代码段,选择出 i的正确结果_______。
int i;
char ﹡s=“a\045+045\tb”;
for ( i=0;*(s++);i++) ;
c语言中“\”代表转义字符“’”代表“’”表示一个字符
“\045”表示转义“045”,以0开头的数字是八进制,即“\045”表示十进制的37,以字符串格式输出则是“%”,也代表一个字符。所以“*s”则是由8个字符组成,即是“a%+045’b”。
可知for(j=0;*s++;j++)语句循环8次,“*s”由8个字符组成,到第9位的时候则为假了,语句终止。
2.
int i, j , p=&i ;则下面语句中与i =j;等价的语句是_______。
A、p=&j
3、char s[ ]= “china”;
char p;
p=s;
则下列叙述正确的是_______。
A、s和p完全相同
B、数组s中的内容和指针变量p中的内容相等
C、s数组长度和p所指向的字符串长度相等
D、﹡p与s[0]相等 √
4、对a数组元素的正确引用是_______。
int a[5], p=a;
A、
(++a)
B、a+2
C、
(p+5) 越界
D、
(a+2) √

p->m 或(*p).m

4.若使指针p1指向dt中的m域, p1=&dt.m
5.已有定义int k=2, *ptr1,*ptr2;且ptr1和ptr2均已指向同一个变量k,下面不正确执行的赋值语句是_______。
A、k=*ptr1+*ptr2 ;
B、ptr2=k; √
C、ptr1=ptr2;
D、k=ptr1(*ptr2);

6.若有说明:
int *p,m=5,n;
以下正确的程序段是_______。
A、p=&n; scanf("%d",&p);
B、p=&n; scanf("%d",*p);
C、scanf("%d",&n); p=n;
D、p=&n; *p=m; √
7.若有以下定义,则对a数组元素地址的正确引用是_______。
int a[5], *p=a;
A、p+5 地址引用 &a[i] &p[i] 元素 a[i] p[i]
 a+i p+i *(a+i) *(p+i)
B、﹡a+1
C、&a+1
D、&a[0] √
8.char *s;s=“Olympic”; 指针和字符串

9.结构体变量三种定义
struct student
{
int num;
char name[10];
char sex;
};

struct student stu1,stu2;
2,struct student
{
int num;
char name[10];
char sex;
} stu1, stu2;

3,struct
{
int num;
char name[10];
char sex;
} stu1,stu2;

标签:main,int,str2,str1,复习资料,C语言,char,期末,include
来源: https://blog.csdn.net/weixin_51470340/article/details/112093961

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有