1.结构体
结构体可以封装多种基本数据类型。
结构体的声明和举例如下:
#include <stdio.h>
struct stu {
char name[20];//结构体的声明
char sex[5];
int age;
};
int main() {
struct stu s = { "zhangsan","男",29 };
printf("%s\n", s.name);//输出形式
printf("%s\n", s.sex);
printf("%d\n", s.age);
return 0;
}
2.if语句
if语句的三种基本形式:
a.
if(表达式){
语句
}
当if表达式中为真时,进入if语句当中并执行。
注意:当表达为if(a)时,等价于if(a!=0)
b.
if(表达式){
语句
}
else{
语句
}
当if中表达式为真时,进入if语句当中并执行。如果if语句为假,则进入else当中并执行。
注意:(1)else后不用加上(表达式)
(2)else总与相邻的if对应
c.
if(表达式){
语句
}
else if(表达式){
语句
}
else if(表达式){
语句
}
.
.
.
else{
语句
}
用于多分支的控制和表达。
3.switch语句
int main() {
switch (整型表达式) {
case 常量:语句
}
return 0;
}
例如:
#include <stdio.h>
int main()
{
int day = 0;
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;//break的作用是实现分支,如果没有break在day=1时,进入case1输出完星期一后会继续跳入case2,case3等等中进行输出
}
return 0;
}
4.strcmp字符串的比较
语法:
strcmp(”字符串1“,”字符串2“)
当s1<s2时,返回为负数;
当s1=s2时,返回值= 0;
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止
在文章9.中有所运用到
5.公务员面试
#include <stdio.h>
int main() {
int a = 0;
int max = 0;
int min = 100;
int sum = 0;
int count = 0;
while (scanf("%d", &a) != EOF) {
if (a > max) {
max = a;
}
if (a < min) {
min = a;
}
sum = sum + a;
count++;
if (count == 7) {
printf("%.2f\n", (sum - max - min) / 5.0);
count = 0;
max = 0;
min = 100;
sum = 0;
}
}
return 0;
}
思路:首先是多组输入,老朋友了。通过两个if分别对输入的数进行一一比较得出最大值和最小值。在以题目中的七个数值为一组。(自己没想出来这种方法,觉得很厉害,记录下来学习)
6.有序序列插入一个数
#include <stdio.h>
int main() {
int a=0;
int ch[52];
int i=0;
int j=0;
int min=0;
scanf("%d",&a);
for(i=0;i<a;i++)
{
scanf("%d",&ch[i]);
}
scanf("%d",&ch[a]);//一开始写i+1来着,但后面发现经过上面的for之后i==a
for(i=0;i<a+1;i++)
{
for(j=i+1;j<a+1;j++)
{
if(ch[i]>ch[j])
{
min=ch[j];
ch[j]=ch[i];
ch[i]=min;
}
}
}
for(i=0;i<a+1;i++)
{
printf("%d ",ch[i]);
}
return 0;
}
思路:先通过for循环来输入先前的排序,再把需要插队的数值读取后放到数组的最后,再经行从小到大的排序。
7.筛选法求素数
#include <stdio.h>
int main() {
int a=0;
int i=0;
while(scanf("%d",&a)!=EOF)
{
int count=0;
for(i=1;i<a+1;i++)
{
int j=0;
for(j=2;j<a+1;j++)
{
if(i%j==0)
{
break;
}
}
if(i==j)
{
printf("%d ",i);
count++;
}
}
printf("\n");
printf("%d",a-count-1);
}
return 0;
}
思路:多组输入,for循环得出所需要的i个数值,再判断是否为素数,是则输出且计数+1。
8.图像相似度
#include <stdio.h>
int main() {
int i=0;
int j=0;
scanf("%d %d",&i,&j);
int a=0;
a=i*j;
int ch[10000];
int sh[10000];
int count=0;
float h=0;
for(i=0;i<a;i++)
{
scanf("%d",&ch[i]);
}
for(j=0;j<a;j++)
{
scanf("%d",&sh[j]);
}
for(i=0;i<a;i++)
{
if(sh[i]==ch[i])
{
count++;
}
}
h=((float)count/a)*100;
printf("%0.2f",h);
return 0;
}
思路:通过行和列相乘算出一幅画要输入多少个数值,再用数组一一读取。分开两个数组分别对两幅画读取,再一一比较,如果数值相同就计数+1,最后用相同的数值/一幅画的数值个数*100得出百分比。
9.登录验证
#include <stdio.h>
int main() {
char ch[10];
char sh[10];
while(scanf("%s %s",ch,sh)!=EOF)//注意字符串数组读取不用&
{
if(strcmp(ch,"admin")==0&&strcmp(sh,"admin")==0)
{
printf("Login Success!");
}
else
{
printf("Login Fail!");
}
}
return 0;
}
思路:用数组读取字符串,再用strcmp函数比较。