本次练习包括一维数组(含字符型数组)的相关知识,建议学习一维数组后做下面练习,如果可以独立完成下面习题的80%,证明你已经比较熟练的掌握相关语法,可以向函数及指针部分进军了,如果没能顺利完成,请参看相关程序,参考程序系本人所写,难免有纰漏之处,有任何疑问敬请留言。
题目目录如下:登录验证用户邮箱格式验证判断平年/闰年自定义金字塔计算器冒泡法排序1、登录验证要求:模拟用户登录过程,验证用户名、密码和校验码,如果全部正确提示用户登录成功,否则,提示用户相关输入错误。目的:掌握登录校验的规则和原理。2、用户邮箱格式验证要求:用户输入邮箱,验证邮箱格式是否正确(验证用户输入的邮箱地址中是否含有字符'@')。目的:掌握邮箱验证控件的原理和方法。3、判断平年/闰年要求:用户输入年份之后,判断输入的是平年还是闰年。目的:掌握if判断的方法。4、自定义金字塔要求:打印以下图形。图形一***************图形二****************5、计算器要求:可以完成加、减、乘、除和取余的计算。目的:灵活掌握switch分支。6、冒泡法排序要求:输入六个学生成绩,然后排序。目的:掌握排序的基本方法,熟悉数组。参考程序:1、登录验证#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){ char username[20]; char password[20]; char checkCode[5]; printf("请输入用户名:"); scanf("%s", username); printf("请输入密码:"); scanf("%s", password); printf("请输入验证码:(1234)"); scanf("%s", checkCode); if(!strcmp(checkCode, "1234")) { if(!strcmp(username,"yuanchunxu")&&!strcmp(password, "123456")) { printf("成功登录!\n"); } else { printf("用户名密码错误!\n"); } } else { printf("验证码错误!\n"); } system("pause"); return 0;}2、用户邮箱格式验证方法一:#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){ char email[20]; int flag = 0; int i = 0; printf("请输入邮箱地址:"); //scanf和gets之间的主要区别在于scanf把空格、制表符、回车等都当作默认的结束符,而gets之把回车当作默认的结束符。 scanf("%s", email); //gets(email); //逐一判断,比较,看有没有'@'符号 for(i = 0; i < strlen(email); i++) { if('@' == email[i]) { flag = 1; break; //system("pause"); //return 0; } } if(0 == flag) { printf("非法\n"); } else { printf("合法\n"); } system("pause"); return 0;}方法二:#include <stdio.h>#include <stdlib.h>int main(void){ char email[20]; int flag = 0; //标志位的方法,在很多程序中可用 int i = 0; printf("请输入邮箱地址:"); //scanf("%s", email); gets(email); while(email[i]!='\0') { if('@' == email[i]) { //发现合法,设置标志位 flag = 1; break; } i++; } //检验标志位,并根据标志位的不同,做出不同的处理 if(0 == flag) { printf("非法\n"); } else { printf("合法\n"); } system("pause"); return 0;}3、判断平年/闰年#include <stdio.h>#include <stdlib.h>int main(void){ int year = 0; printf("请输入一个年份:"); scanf("%d", &year); if(0 == year % 4) { if(0 == year % 100 ) { if(0 == year % 400) { printf("%d是闰年\n", year); } else { printf("%d是平年\n", year); } } else { printf("%d是闰年\n", year); } } else { printf("%d是平年\n", year); } system("pause"); return 0;}4、自定义金字塔图案一:#include <stdio.h>#include <stdlib.h>int main(void){ int i = 1; int j = 1; //循环次数决定行数 for(i = 0; i < 5; i++) { //循环次数决定列数 for(j=0; j <= i; j++) { printf("*"); } printf("\n"); } system("pause"); return 0;}图案二:#include <stdio.h>#include <stdlib.h>int main(void){ int i = 0; int k = 0; //循环次数决定行数 for(i = 0; i < 4; i++) { //循环次数决定列数 for(k = 0; k <= 7 - 2 * i; k++) { printf("*"); } printf("\n"); } system("pause"); return 0;}5、计算器#include <stdio.h>#include <stdlib.h>int main(void){ int num1 = 0; int num2 = 0; int result = 0; char opr; int flag=0; printf("input operator:"); scanf("%c",&opr); //用户只有正确的输入程序才能够退出while循环,这种方法可以迫使用户按规定的法则输入 do { printf("请输入两个数值:"); flag = scanf("%d,%d", &num1,&num2); fflush(stdin); //清空输入缓存 //rewind(stdin); //这是清空输入缓存的另一种有效的方法,原理不同,但效果一样 }while(0 == flag); switch(opr) { case '+':result=num1 + num2; break; case '-':result=num1 - num2; break; case '*':result=num1 * num2; break; case '/': if(0 == num2) { printf("除数不能为零\n"); system("pause"); return 0; } else { result=num1 / num2; } break; case '%': if(0 == num2) { printf("除数不能为零\n"); system("pause"); return 0; } else { result=num1 % num2; } break; default:printf("input wrong!"); } printf("%d%c%d=%d\n",num1,opr,num2,result); system("pause"); return 0;}6、冒泡法排序#include <stdio.h>#include <stdlib.h>#define COUNT 6int main(void){ int score[COUNT] = {0}; int i = 0; int k = 0; int flag = 0; for(i = 0 ; i < COUNT ; i++) { //用户输入不合法就必须重新输入 do { printf("当前输入第%d成绩", i); flag=scanf("%d", &score[i]); fflush(stdin); }while(0 == flag); } //遍历数组排序前的所有元素 for(i = 0 ; i < COUNT ; i++) { printf("score[%d] = %d\n", i, score[i]); } //kernal //第一重循环是总共冒泡的次数 //第二重循环是每次冒泡需要比较的次数 for(i = 0 ; i < COUNT - 1 ; i++) { for(k = 0 ; k < COUNT - 1 - i ; k++) { if(score[k] < score[k + 1]) { //swap 典型的交换程序 int temp = 0; temp = score[k]; score[k] = score[k+1]; score[k+1] = temp; } } } printf("\n------------------------------------\n"); //排序结束后,遍历数组中所有元素,有利于程序的对比 for(i = 0 ; i < COUNT ; i++) { printf("score[%d] = %d\n", i, score[i]); } system("pause"); return 0;}